// Generated from dt-sql-parser/src/grammar/postgresql/PostgreSqlParser.g4 by ANTLR 4.13.1

// @ts-nocheck

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

import { PostgreSqlParserListener } from "./PostgreSqlParserListener.js";
import { PostgreSqlParserVisitor } from "./PostgreSqlParserVisitor.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 PostgreSqlParser extends SQLParserBase {
    public static readonly Dollar = 1;
    public static readonly OPEN_PAREN = 2;
    public static readonly CLOSE_PAREN = 3;
    public static readonly OPEN_BRACKET = 4;
    public static readonly CLOSE_BRACKET = 5;
    public static readonly COMMA = 6;
    public static readonly SEMI = 7;
    public static readonly COLON = 8;
    public static readonly STAR = 9;
    public static readonly EQUAL = 10;
    public static readonly DOT = 11;
    public static readonly PLUS = 12;
    public static readonly MINUS = 13;
    public static readonly SLASH = 14;
    public static readonly CARET = 15;
    public static readonly LT = 16;
    public static readonly GT = 17;
    public static readonly LESS_LESS = 18;
    public static readonly GREATER_GREATER = 19;
    public static readonly COLON_EQUALS = 20;
    public static readonly LESS_EQUALS = 21;
    public static readonly EQUALS_GREATER = 22;
    public static readonly GREATER_EQUALS = 23;
    public static readonly DOT_DOT = 24;
    public static readonly NOT_EQUALS = 25;
    public static readonly TYPECAST = 26;
    public static readonly PERCENT = 27;
    public static readonly PARAM = 28;
    public static readonly Operator = 29;
    public static readonly KW_ALL = 30;
    public static readonly KW_ANALYSE = 31;
    public static readonly KW_ANALYZE = 32;
    public static readonly KW_AND = 33;
    public static readonly KW_ANY = 34;
    public static readonly KW_ARRAY = 35;
    public static readonly KW_AS = 36;
    public static readonly KW_ASC = 37;
    public static readonly KW_ASYMMETRIC = 38;
    public static readonly KW_BOTH = 39;
    public static readonly KW_CASE = 40;
    public static readonly KW_CAST = 41;
    public static readonly KW_CHECK = 42;
    public static readonly KW_COLLATE = 43;
    public static readonly KW_COLUMN = 44;
    public static readonly KW_CONSTRAINT = 45;
    public static readonly KW_CREATE = 46;
    public static readonly KW_CURRENT_CATALOG = 47;
    public static readonly KW_CURRENT_DATE = 48;
    public static readonly KW_CURRENT_ROLE = 49;
    public static readonly KW_CURRENT_TIME = 50;
    public static readonly KW_CURRENT_TIMESTAMP = 51;
    public static readonly KW_CURRENT_USER = 52;
    public static readonly KW_DEFAULT = 53;
    public static readonly KW_DEFERRABLE = 54;
    public static readonly KW_DESC = 55;
    public static readonly KW_DISTINCT = 56;
    public static readonly KW_DO = 57;
    public static readonly KW_ELSE = 58;
    public static readonly KW_EXCEPT = 59;
    public static readonly KW_FALSE = 60;
    public static readonly KW_FETCH = 61;
    public static readonly KW_FOR = 62;
    public static readonly KW_FOREIGN = 63;
    public static readonly KW_FROM = 64;
    public static readonly KW_GRANT = 65;
    public static readonly KW_GROUP = 66;
    public static readonly KW_HAVING = 67;
    public static readonly KW_IN = 68;
    public static readonly KW_INITIALLY = 69;
    public static readonly KW_INTERSECT = 70;
    public static readonly KW_INTO = 71;
    public static readonly KW_LATERAL = 72;
    public static readonly KW_LEADING = 73;
    public static readonly KW_LIMIT = 74;
    public static readonly KW_LOCALTIME = 75;
    public static readonly KW_LOCALTIMESTAMP = 76;
    public static readonly KW_NOT = 77;
    public static readonly KW_NULL = 78;
    public static readonly KW_OFFSET = 79;
    public static readonly KW_ON = 80;
    public static readonly KW_ONLY = 81;
    public static readonly KW_OR = 82;
    public static readonly KW_ORDER = 83;
    public static readonly KW_PLACING = 84;
    public static readonly KW_PRIMARY = 85;
    public static readonly KW_REFERENCES = 86;
    public static readonly KW_RETURNING = 87;
    public static readonly KW_SELECT = 88;
    public static readonly KW_SESSION_USER = 89;
    public static readonly KW_SOME = 90;
    public static readonly KW_SYMMETRIC = 91;
    public static readonly KW_TABLE = 92;
    public static readonly KW_THEN = 93;
    public static readonly KW_TO = 94;
    public static readonly KW_TRAILING = 95;
    public static readonly KW_TRUE = 96;
    public static readonly KW_UNION = 97;
    public static readonly KW_UNIQUE = 98;
    public static readonly KW_USER = 99;
    public static readonly KW_USING = 100;
    public static readonly KW_VARIADIC = 101;
    public static readonly KW_WHEN = 102;
    public static readonly KW_WHERE = 103;
    public static readonly KW_WINDOW = 104;
    public static readonly KW_WITH = 105;
    public static readonly KW_AUTHORIZATION = 106;
    public static readonly KW_BINARY = 107;
    public static readonly KW_COLLATION = 108;
    public static readonly KW_CONCURRENTLY = 109;
    public static readonly KW_CROSS = 110;
    public static readonly KW_CURRENT_SCHEMA = 111;
    public static readonly KW_FREEZE = 112;
    public static readonly KW_FULL = 113;
    public static readonly KW_ILIKE = 114;
    public static readonly KW_INNER = 115;
    public static readonly KW_IS = 116;
    public static readonly KW_ISNULL = 117;
    public static readonly KW_JOIN = 118;
    public static readonly KW_LEFT = 119;
    public static readonly KW_LIKE = 120;
    public static readonly KW_NATURAL = 121;
    public static readonly KW_NOTNULL = 122;
    public static readonly KW_OUTER = 123;
    public static readonly KW_OVER = 124;
    public static readonly KW_OVERLAPS = 125;
    public static readonly KW_RIGHT = 126;
    public static readonly KW_SIMILAR = 127;
    public static readonly KW_VERBOSE = 128;
    public static readonly KW_ABORT = 129;
    public static readonly KW_ABSOLUTE = 130;
    public static readonly KW_ACCESS = 131;
    public static readonly KW_ACTION = 132;
    public static readonly KW_ADD = 133;
    public static readonly KW_ADMIN = 134;
    public static readonly KW_AFTER = 135;
    public static readonly KW_AGGREGATE = 136;
    public static readonly KW_ALSO = 137;
    public static readonly KW_ALTER = 138;
    public static readonly KW_ALWAYS = 139;
    public static readonly KW_ASSERTION = 140;
    public static readonly KW_ASSIGNMENT = 141;
    public static readonly KW_AT = 142;
    public static readonly KW_ATTRIBUTE = 143;
    public static readonly KW_BACKWARD = 144;
    public static readonly KW_BEFORE = 145;
    public static readonly KW_BEGIN = 146;
    public static readonly KW_BY = 147;
    public static readonly KW_CACHE = 148;
    public static readonly KW_CALLED = 149;
    public static readonly KW_CASCADE = 150;
    public static readonly KW_CASCADED = 151;
    public static readonly KW_CATALOG = 152;
    public static readonly KW_CHAIN = 153;
    public static readonly KW_CHARACTERISTICS = 154;
    public static readonly KW_CHECKPOINT = 155;
    public static readonly KW_CLASS = 156;
    public static readonly KW_CLOSE = 157;
    public static readonly KW_CLUSTER = 158;
    public static readonly KW_COMMENT = 159;
    public static readonly KW_COMMENTS = 160;
    public static readonly KW_COMMIT = 161;
    public static readonly KW_COMMITTED = 162;
    public static readonly KW_CONFIGURATION = 163;
    public static readonly KW_CONNECTION = 164;
    public static readonly KW_CONSTRAINTS = 165;
    public static readonly KW_CONTENT = 166;
    public static readonly KW_CONTINUE = 167;
    public static readonly KW_CONVERSION = 168;
    public static readonly KW_COPY = 169;
    public static readonly KW_COST = 170;
    public static readonly KW_CSV = 171;
    public static readonly KW_CURSOR = 172;
    public static readonly KW_CYCLE = 173;
    public static readonly KW_DATA = 174;
    public static readonly KW_DATABASE = 175;
    public static readonly KW_DAY = 176;
    public static readonly KW_DEALLOCATE = 177;
    public static readonly KW_DECLARE = 178;
    public static readonly KW_DEFAULTS = 179;
    public static readonly KW_DEFERRED = 180;
    public static readonly KW_DEFINER = 181;
    public static readonly KW_DELETE = 182;
    public static readonly KW_DELIMITER = 183;
    public static readonly KW_DELIMITERS = 184;
    public static readonly KW_DICTIONARY = 185;
    public static readonly KW_DISABLE = 186;
    public static readonly KW_DISCARD = 187;
    public static readonly KW_DOCUMENT = 188;
    public static readonly KW_DOMAIN = 189;
    public static readonly KW_DOUBLE = 190;
    public static readonly KW_DROP = 191;
    public static readonly KW_EACH = 192;
    public static readonly KW_ENABLE = 193;
    public static readonly KW_ENCODING = 194;
    public static readonly KW_ENCRYPTED = 195;
    public static readonly KW_ENUM = 196;
    public static readonly KW_ESCAPE = 197;
    public static readonly KW_EVENT = 198;
    public static readonly KW_EXCLUDE = 199;
    public static readonly KW_EXCLUDING = 200;
    public static readonly KW_EXCLUSIVE = 201;
    public static readonly KW_EXECUTE = 202;
    public static readonly KW_EXPLAIN = 203;
    public static readonly KW_EXTENSION = 204;
    public static readonly KW_EXTERNAL = 205;
    public static readonly KW_FAMILY = 206;
    public static readonly KW_FIRST = 207;
    public static readonly KW_FOLLOWING = 208;
    public static readonly KW_FORCE = 209;
    public static readonly KW_FORWARD = 210;
    public static readonly KW_FUNCTION = 211;
    public static readonly KW_FUNCTIONS = 212;
    public static readonly KW_GLOBAL = 213;
    public static readonly KW_GRANTED = 214;
    public static readonly KW_HANDLER = 215;
    public static readonly KW_HEADER = 216;
    public static readonly KW_HOLD = 217;
    public static readonly KW_HOUR = 218;
    public static readonly KW_IDENTITY = 219;
    public static readonly KW_IF = 220;
    public static readonly KW_IMMEDIATE = 221;
    public static readonly KW_IMMUTABLE = 222;
    public static readonly KW_IMPLICIT = 223;
    public static readonly KW_INCLUDING = 224;
    public static readonly KW_INCREMENT = 225;
    public static readonly KW_INDEX = 226;
    public static readonly KW_INDEXES = 227;
    public static readonly KW_INHERIT = 228;
    public static readonly KW_NOINHERIT = 229;
    public static readonly KW_SUPERUSER = 230;
    public static readonly KW_NOSUPERUSER = 231;
    public static readonly KW_CREATEDB = 232;
    public static readonly KW_NOCREATEDB = 233;
    public static readonly KW_CREATEROLE = 234;
    public static readonly KW_NOCREATEROLE = 235;
    public static readonly KW_CREATEUSER = 236;
    public static readonly KW_NOCREATEUSER = 237;
    public static readonly KW_INHERITS = 238;
    public static readonly KW_INLINE = 239;
    public static readonly KW_INSENSITIVE = 240;
    public static readonly KW_INSERT = 241;
    public static readonly KW_INSTEAD = 242;
    public static readonly KW_INVOKER = 243;
    public static readonly KW_ISOLATION = 244;
    public static readonly KW_KEY = 245;
    public static readonly KW_LABEL = 246;
    public static readonly KW_LANGUAGE = 247;
    public static readonly KW_LARGE = 248;
    public static readonly KW_LAST = 249;
    public static readonly KW_LEAKPROOF = 250;
    public static readonly KW_LEVEL = 251;
    public static readonly KW_LISTEN = 252;
    public static readonly KW_LOAD = 253;
    public static readonly KW_LOCAL = 254;
    public static readonly KW_LOCATION = 255;
    public static readonly KW_LOCK = 256;
    public static readonly KW_MAPPING = 257;
    public static readonly KW_MATCH = 258;
    public static readonly KW_MATERIALIZED = 259;
    public static readonly KW_MAXVALUE = 260;
    public static readonly KW_MINUTE = 261;
    public static readonly KW_MINVALUE = 262;
    public static readonly KW_MODE = 263;
    public static readonly KW_MONTH = 264;
    public static readonly KW_MOVE = 265;
    public static readonly KW_NAME = 266;
    public static readonly KW_NAMES = 267;
    public static readonly KW_NEXT = 268;
    public static readonly KW_NO = 269;
    public static readonly KW_NOTHING = 270;
    public static readonly KW_NOTIFY = 271;
    public static readonly KW_NOWAIT = 272;
    public static readonly KW_NULLS = 273;
    public static readonly KW_OBJECT = 274;
    public static readonly KW_OF = 275;
    public static readonly KW_OFF = 276;
    public static readonly KW_OIDS = 277;
    public static readonly KW_OPERATOR = 278;
    public static readonly KW_OPTION = 279;
    public static readonly KW_OPTIONS = 280;
    public static readonly KW_OWNED = 281;
    public static readonly KW_OWNER = 282;
    public static readonly KW_PARSER = 283;
    public static readonly KW_PARTIAL = 284;
    public static readonly KW_PARTITION = 285;
    public static readonly KW_PASSING = 286;
    public static readonly KW_PASSWORD = 287;
    public static readonly KW_PLANS = 288;
    public static readonly KW_PRECEDING = 289;
    public static readonly KW_PREPARE = 290;
    public static readonly KW_PREPARED = 291;
    public static readonly KW_PRESERVE = 292;
    public static readonly KW_PRIOR = 293;
    public static readonly KW_PRIVILEGES = 294;
    public static readonly KW_PROCEDURAL = 295;
    public static readonly KW_PROCEDURE = 296;
    public static readonly KW_PROGRAM = 297;
    public static readonly KW_QUOTE = 298;
    public static readonly KW_RANGE = 299;
    public static readonly KW_READ = 300;
    public static readonly KW_REASSIGN = 301;
    public static readonly KW_RECHECK = 302;
    public static readonly KW_RECURSIVE = 303;
    public static readonly KW_REF = 304;
    public static readonly KW_REFRESH = 305;
    public static readonly KW_REINDEX = 306;
    public static readonly KW_RELATIVE = 307;
    public static readonly KW_RELEASE = 308;
    public static readonly KW_RENAME = 309;
    public static readonly KW_REPEATABLE = 310;
    public static readonly KW_REPLACE = 311;
    public static readonly KW_REPLICA = 312;
    public static readonly KW_RESET = 313;
    public static readonly KW_RESTART = 314;
    public static readonly KW_RESTRICT = 315;
    public static readonly KW_RETURNS = 316;
    public static readonly KW_REVOKE = 317;
    public static readonly KW_ROLE = 318;
    public static readonly KW_ROLLBACK = 319;
    public static readonly KW_ROWS = 320;
    public static readonly KW_RULE = 321;
    public static readonly KW_SAVEPOINT = 322;
    public static readonly KW_SCHEMA = 323;
    public static readonly KW_SCROLL = 324;
    public static readonly KW_SEARCH = 325;
    public static readonly KW_SECOND = 326;
    public static readonly KW_SECURITY = 327;
    public static readonly KW_SEQUENCE = 328;
    public static readonly KW_SEQUENCES = 329;
    public static readonly KW_SERIALIZABLE = 330;
    public static readonly KW_SERVER = 331;
    public static readonly KW_SESSION = 332;
    public static readonly KW_SET = 333;
    public static readonly KW_SHARE = 334;
    public static readonly KW_SHOW = 335;
    public static readonly KW_SIMPLE = 336;
    public static readonly KW_SNAPSHOT = 337;
    public static readonly KW_STABLE = 338;
    public static readonly KW_STANDALONE = 339;
    public static readonly KW_START = 340;
    public static readonly KW_STATEMENT = 341;
    public static readonly KW_STATISTICS = 342;
    public static readonly KW_STDIN = 343;
    public static readonly KW_STDOUT = 344;
    public static readonly KW_STORAGE = 345;
    public static readonly KW_STRICT = 346;
    public static readonly KW_STRIP = 347;
    public static readonly KW_SYSID = 348;
    public static readonly KW_SYSTEM = 349;
    public static readonly KW_TABLES = 350;
    public static readonly KW_TABLESPACE = 351;
    public static readonly KW_TEMP = 352;
    public static readonly KW_TEMPLATE = 353;
    public static readonly KW_TEMPORARY = 354;
    public static readonly KW_TEXT = 355;
    public static readonly KW_TRANSACTION = 356;
    public static readonly KW_TRIGGER = 357;
    public static readonly KW_TRUNCATE = 358;
    public static readonly KW_TRUSTED = 359;
    public static readonly KW_TYPE = 360;
    public static readonly KW_TYPES = 361;
    public static readonly KW_UNBOUNDED = 362;
    public static readonly KW_UNCOMMITTED = 363;
    public static readonly KW_UNENCRYPTED = 364;
    public static readonly KW_UNKNOWN = 365;
    public static readonly KW_UNLISTEN = 366;
    public static readonly KW_UNLOGGED = 367;
    public static readonly KW_UNTIL = 368;
    public static readonly KW_UPDATE = 369;
    public static readonly KW_VACUUM = 370;
    public static readonly KW_VALID = 371;
    public static readonly KW_VALIDATE = 372;
    public static readonly KW_VALIDATOR = 373;
    public static readonly KW_VARYING = 374;
    public static readonly KW_VERSION = 375;
    public static readonly KW_VIEW = 376;
    public static readonly KW_VOLATILE = 377;
    public static readonly KW_WHITESPACE = 378;
    public static readonly KW_WITHOUT = 379;
    public static readonly KW_WORK = 380;
    public static readonly KW_WRAPPER = 381;
    public static readonly KW_WRITE = 382;
    public static readonly KW_XML = 383;
    public static readonly KW_YEAR = 384;
    public static readonly KW_YES = 385;
    public static readonly KW_ZONE = 386;
    public static readonly KW_BETWEEN = 387;
    public static readonly KW_BIGINT = 388;
    public static readonly KW_BIT = 389;
    public static readonly KW_BOOLEAN = 390;
    public static readonly KW_CHAR = 391;
    public static readonly KW_CHARACTER = 392;
    public static readonly KW_COALESCE = 393;
    public static readonly KW_DEC = 394;
    public static readonly KW_DECIMAL = 395;
    public static readonly KW_EXISTS = 396;
    public static readonly KW_EXTRACT = 397;
    public static readonly KW_FLOAT = 398;
    public static readonly KW_GREATEST = 399;
    public static readonly KW_INOUT = 400;
    public static readonly KW_INT = 401;
    public static readonly KW_INTEGER = 402;
    public static readonly KW_INTERVAL = 403;
    public static readonly KW_LEAST = 404;
    public static readonly KW_NATIONAL = 405;
    public static readonly KW_NCHAR = 406;
    public static readonly KW_NONE = 407;
    public static readonly KW_NULLIF = 408;
    public static readonly KW_NUMERIC = 409;
    public static readonly KW_OVERLAY = 410;
    public static readonly KW_POSITION = 411;
    public static readonly KW_PRECISION = 412;
    public static readonly KW_REAL = 413;
    public static readonly KW_ROW = 414;
    public static readonly KW_SETOF = 415;
    public static readonly KW_SMALLINT = 416;
    public static readonly KW_SUBSTRING = 417;
    public static readonly KW_TIME = 418;
    public static readonly KW_TIMESTAMP = 419;
    public static readonly KW_TREAT = 420;
    public static readonly KW_TRIM = 421;
    public static readonly KW_VALUES = 422;
    public static readonly KW_VARCHAR = 423;
    public static readonly KW_XMLATTRIBUTES = 424;
    public static readonly KW_XMLCONCAT = 425;
    public static readonly KW_XMLELEMENT = 426;
    public static readonly KW_XMLEXISTS = 427;
    public static readonly KW_XMLFOREST = 428;
    public static readonly KW_XMLPARSE = 429;
    public static readonly KW_XMLPI = 430;
    public static readonly KW_XMLROOT = 431;
    public static readonly KW_XMLSERIALIZE = 432;
    public static readonly KW_CALL = 433;
    public static readonly KW_CURRENT = 434;
    public static readonly KW_ATTACH = 435;
    public static readonly KW_DETACH = 436;
    public static readonly KW_EXPRESSION = 437;
    public static readonly KW_GENERATED = 438;
    public static readonly KW_LOGGED = 439;
    public static readonly KW_STORED = 440;
    public static readonly KW_INCLUDE = 441;
    public static readonly KW_ROUTINE = 442;
    public static readonly KW_TRANSFORM = 443;
    public static readonly KW_IMPORT = 444;
    public static readonly KW_POLICY = 445;
    public static readonly KW_METHOD = 446;
    public static readonly KW_REFERENCING = 447;
    public static readonly KW_NEW = 448;
    public static readonly KW_OLD = 449;
    public static readonly KW_VALUE = 450;
    public static readonly KW_SUBSCRIPTION = 451;
    public static readonly KW_PUBLICATION = 452;
    public static readonly KW_OUT = 453;
    public static readonly KW_END = 454;
    public static readonly KW_ROUTINES = 455;
    public static readonly KW_SCHEMAS = 456;
    public static readonly KW_PROCEDURES = 457;
    public static readonly KW_INPUT = 458;
    public static readonly KW_SUPPORT = 459;
    public static readonly KW_PARALLEL = 460;
    public static readonly KW_SQL = 461;
    public static readonly KW_DEPENDS = 462;
    public static readonly KW_OVERRIDING = 463;
    public static readonly KW_CONFLICT = 464;
    public static readonly KW_SKIP = 465;
    public static readonly KW_LOCKED = 466;
    public static readonly KW_TIES = 467;
    public static readonly KW_ROLLUP = 468;
    public static readonly KW_CUBE = 469;
    public static readonly KW_GROUPING = 470;
    public static readonly KW_SETS = 471;
    public static readonly KW_TABLESAMPLE = 472;
    public static readonly KW_ORDINALITY = 473;
    public static readonly KW_XMLTABLE = 474;
    public static readonly KW_COLUMNS = 475;
    public static readonly KW_XMLNAMESPACES = 476;
    public static readonly KW_ROWTYPE = 477;
    public static readonly KW_NORMALIZED = 478;
    public static readonly KW_WITHIN = 479;
    public static readonly KW_FILTER = 480;
    public static readonly KW_GROUPS = 481;
    public static readonly KW_OTHERS = 482;
    public static readonly KW_NFC = 483;
    public static readonly KW_NFD = 484;
    public static readonly KW_NFKC = 485;
    public static readonly KW_NFKD = 486;
    public static readonly KW_UESCAPE = 487;
    public static readonly KW_VIEWS = 488;
    public static readonly KW_NORMALIZE = 489;
    public static readonly KW_DUMP = 490;
    public static readonly KW_PRINT_STRICT_PARAMS = 491;
    public static readonly KW_VARIABLE_CONFLICT = 492;
    public static readonly KW_ERROR = 493;
    public static readonly KW_USE_VARIABLE = 494;
    public static readonly KW_USE_COLUMN = 495;
    public static readonly KW_ALIAS = 496;
    public static readonly KW_CONSTANT = 497;
    public static readonly KW_PERFORM = 498;
    public static readonly KW_GET = 499;
    public static readonly KW_DIAGNOSTICS = 500;
    public static readonly KW_STACKED = 501;
    public static readonly KW_ELSIF = 502;
    public static readonly KW_WHILE = 503;
    public static readonly KW_REVERSE = 504;
    public static readonly KW_FOREACH = 505;
    public static readonly KW_SLICE = 506;
    public static readonly KW_EXIT = 507;
    public static readonly KW_RETURN = 508;
    public static readonly KW_QUERY = 509;
    public static readonly KW_RAISE = 510;
    public static readonly KW_SQLSTATE = 511;
    public static readonly KW_DEBUG = 512;
    public static readonly KW_LOG = 513;
    public static readonly KW_INFO = 514;
    public static readonly KW_NOTICE = 515;
    public static readonly KW_WARNING = 516;
    public static readonly KW_EXCEPTION = 517;
    public static readonly KW_ASSERT = 518;
    public static readonly KW_LOOP = 519;
    public static readonly KW_OPEN = 520;
    public static readonly KW_PEFERENCES = 521;
    public static readonly KW_USAGE = 522;
    public static readonly KW_CONNECT = 523;
    public static readonly KW_PUBLIC = 524;
    public static readonly KW_MERGE = 525;
    public static readonly KW_MATCHED = 526;
    public static readonly KW_BREADTH = 527;
    public static readonly KW_DEPTH = 528;
    public static readonly KW_UNSAFE = 529;
    public static readonly KW_RESTRICTED = 530;
    public static readonly KW_SAFE = 531;
    public static readonly KW_FINALIZE = 532;
    public static readonly KW_MODULUS = 533;
    public static readonly KW_REMAINDER = 534;
    public static readonly KW_LOGIN = 535;
    public static readonly KW_NOLOGIN = 536;
    public static readonly KW_REPLICATION = 537;
    public static readonly KW_NOREPLICATION = 538;
    public static readonly KW_BYPASSRLS = 539;
    public static readonly KW_NOBYPASSRLS = 540;
    public static readonly KW_PERMISSIVE = 541;
    public static readonly KW_RESTRICTIVE = 542;
    public static readonly KW_COMPRESSION = 543;
    public static readonly KW_PLAIN = 544;
    public static readonly KW_EXTENDED = 545;
    public static readonly KW_MAIN = 546;
    public static readonly KW_SKIP_LOCKED = 547;
    public static readonly KW_BUFFER_USAGE_LIMIT = 548;
    public static readonly Identifier = 549;
    public static readonly QuotedIdentifier = 550;
    public static readonly UnterminatedQuotedIdentifier = 551;
    public static readonly InvalidQuotedIdentifier = 552;
    public static readonly InvalidUnterminatedQuotedIdentifier = 553;
    public static readonly UnicodeQuotedIdentifier = 554;
    public static readonly UnterminatedUnicodeQuotedIdentifier = 555;
    public static readonly InvalidUnicodeQuotedIdentifier = 556;
    public static readonly InvalidUnterminatedUnicodeQuotedIdentifier = 557;
    public static readonly StringConstant = 558;
    public static readonly UnterminatedStringConstant = 559;
    public static readonly UnicodeEscapeStringConstant = 560;
    public static readonly UnterminatedUnicodeEscapeStringConstant = 561;
    public static readonly BeginDollarStringConstant = 562;
    public static readonly BinaryStringConstant = 563;
    public static readonly UnterminatedBinaryStringConstant = 564;
    public static readonly InvalidBinaryStringConstant = 565;
    public static readonly InvalidUnterminatedBinaryStringConstant = 566;
    public static readonly HexadecimalStringConstant = 567;
    public static readonly UnterminatedHexadecimalStringConstant = 568;
    public static readonly InvalidHexadecimalStringConstant = 569;
    public static readonly InvalidUnterminatedHexadecimalStringConstant = 570;
    public static readonly Integral = 571;
    public static readonly NumericFail = 572;
    public static readonly Numeric = 573;
    public static readonly PLSQLVARIABLENAME = 574;
    public static readonly PLSQLIDENTIFIER = 575;
    public static readonly Whitespace = 576;
    public static readonly Newline = 577;
    public static readonly LineComment = 578;
    public static readonly BlockComment = 579;
    public static readonly UnterminatedBlockComment = 580;
    public static readonly MetaCommand = 581;
    public static readonly EndMetaCommand = 582;
    public static readonly ErrorCharacter = 583;
    public static readonly EscapeStringConstant = 584;
    public static readonly UnterminatedEscapeStringConstant = 585;
    public static readonly InvalidEscapeStringConstant = 586;
    public static readonly InvalidUnterminatedEscapeStringConstant = 587;
    public static readonly DollarText = 588;
    public static readonly EndDollarStringConstant = 589;
    public static readonly AfterEscapeStringConstantWithNewlineMode_Continued = 590;
    public static readonly RULE_program = 0;
    public static readonly RULE_plsqlroot = 1;
    public static readonly RULE_singleStmt = 2;
    public static readonly RULE_stmt = 3;
    public static readonly RULE_plsqlconsolecommand = 4;
    public static readonly RULE_callstmt = 5;
    public static readonly RULE_createrolestmt = 6;
    public static readonly RULE_opt_with = 7;
    public static readonly RULE_optrolelist = 8;
    public static readonly RULE_alteroptrolelist = 9;
    public static readonly RULE_alteroptroleelem = 10;
    public static readonly RULE_createoptroleelem = 11;
    public static readonly RULE_createuserstmt = 12;
    public static readonly RULE_alterrolestmt = 13;
    public static readonly RULE_opt_in_database = 14;
    public static readonly RULE_alterrolesetstmt = 15;
    public static readonly RULE_alterroutinestmt = 16;
    public static readonly RULE_alter_routine_cluase = 17;
    public static readonly RULE_routine_action_list = 18;
    public static readonly RULE_routine_action = 19;
    public static readonly RULE_creategroupstmt = 20;
    public static readonly RULE_altergroupstmt = 21;
    public static readonly RULE_add_drop = 22;
    public static readonly RULE_createschemastmt = 23;
    public static readonly RULE_schema_name_create = 24;
    public static readonly RULE_optschemaeltlist = 25;
    public static readonly RULE_schema_stmt = 26;
    public static readonly RULE_variablesetstmt = 27;
    public static readonly RULE_set_rest = 28;
    public static readonly RULE_generic_set = 29;
    public static readonly RULE_set_rest_more = 30;
    public static readonly RULE_var_name = 31;
    public static readonly RULE_var_list = 32;
    public static readonly RULE_var_value = 33;
    public static readonly RULE_iso_level = 34;
    public static readonly RULE_opt_boolean_or_string_column = 35;
    public static readonly RULE_opt_boolean_or_string = 36;
    public static readonly RULE_zone_value = 37;
    public static readonly RULE_opt_encoding = 38;
    public static readonly RULE_nonreservedword_or_sconst_column = 39;
    public static readonly RULE_nonreservedword_or_sconst = 40;
    public static readonly RULE_variableresetstmt = 41;
    public static readonly RULE_reset_rest = 42;
    public static readonly RULE_generic_reset = 43;
    public static readonly RULE_setresetclause = 44;
    public static readonly RULE_functionsetresetclause = 45;
    public static readonly RULE_variableshowstmt = 46;
    public static readonly RULE_constraintssetstmt = 47;
    public static readonly RULE_constraints_set_list = 48;
    public static readonly RULE_constraints_set_mode = 49;
    public static readonly RULE_checkpointstmt = 50;
    public static readonly RULE_discardstmt = 51;
    public static readonly RULE_altertablestmt = 52;
    public static readonly RULE_alter_table_cmds = 53;
    public static readonly RULE_partition_bound_spec = 54;
    public static readonly RULE_partition_bound_cluase = 55;
    public static readonly RULE_partition_bound_choose = 56;
    public static readonly RULE_partition_with_cluase = 57;
    public static readonly RULE_partition_cmd = 58;
    public static readonly RULE_index_partition_cmd = 59;
    public static readonly RULE_alter_table_cmd = 60;
    public static readonly RULE_alter_column_default = 61;
    public static readonly RULE_opt_drop_behavior = 62;
    public static readonly RULE_opt_collate_clause = 63;
    public static readonly RULE_alter_using = 64;
    public static readonly RULE_replica_identity = 65;
    public static readonly RULE_reloptions = 66;
    public static readonly RULE_opt_reloptions = 67;
    public static readonly RULE_reloption_list = 68;
    public static readonly RULE_reloption_elem = 69;
    public static readonly RULE_alter_identity_column_option_list = 70;
    public static readonly RULE_alter_identity_column_option = 71;
    public static readonly RULE_partitionboundspec = 72;
    public static readonly RULE_hash_partbound_elem = 73;
    public static readonly RULE_hash_partbound = 74;
    public static readonly RULE_altercompositetypestmt = 75;
    public static readonly RULE_alter_type_cmds = 76;
    public static readonly RULE_alter_type_cmd = 77;
    public static readonly RULE_closeportalstmt = 78;
    public static readonly RULE_copystmt = 79;
    public static readonly RULE_copy_from = 80;
    public static readonly RULE_opt_program = 81;
    public static readonly RULE_copy_file_name = 82;
    public static readonly RULE_copy_options = 83;
    public static readonly RULE_copy_opt_list = 84;
    public static readonly RULE_copy_opt_item = 85;
    public static readonly RULE_opt_binary = 86;
    public static readonly RULE_copy_delimiter = 87;
    public static readonly RULE_opt_using = 88;
    public static readonly RULE_copy_generic_opt_list = 89;
    public static readonly RULE_copy_generic_opt_elem = 90;
    public static readonly RULE_copy_generic_opt_arg = 91;
    public static readonly RULE_copy_generic_opt_arg_list = 92;
    public static readonly RULE_copy_generic_opt_arg_list_item = 93;
    public static readonly RULE_createstmt = 94;
    public static readonly RULE_opttemp = 95;
    public static readonly RULE_table_column_list = 96;
    public static readonly RULE_opttableelementlist = 97;
    public static readonly RULE_opttypedtableelementlist = 98;
    public static readonly RULE_tableelementlist = 99;
    public static readonly RULE_typedtableelementlist = 100;
    public static readonly RULE_tableelement = 101;
    public static readonly RULE_typedtableelement = 102;
    public static readonly RULE_column_def = 103;
    public static readonly RULE_compressionCluase = 104;
    public static readonly RULE_storageCluase = 105;
    public static readonly RULE_columnOptions = 106;
    public static readonly RULE_colquallist = 107;
    public static readonly RULE_colconstraint = 108;
    public static readonly RULE_colconstraintelem = 109;
    public static readonly RULE_nulls_distinct = 110;
    public static readonly RULE_generated_when = 111;
    public static readonly RULE_deferrable_trigger = 112;
    public static readonly RULE_initially_trigger = 113;
    public static readonly RULE_tablelikeclause = 114;
    public static readonly RULE_tablelikeoptionlist = 115;
    public static readonly RULE_tablelikeoption = 116;
    public static readonly RULE_tableconstraint = 117;
    public static readonly RULE_constraintelem = 118;
    public static readonly RULE_opt_no_inherit = 119;
    public static readonly RULE_opt_column_list = 120;
    public static readonly RULE_opt_column_list_create = 121;
    public static readonly RULE_column_list = 122;
    public static readonly RULE_column_list_create = 123;
    public static readonly RULE_opt_c_include = 124;
    public static readonly RULE_key_match = 125;
    public static readonly RULE_exclusionconstraintlist = 126;
    public static readonly RULE_exclusionconstraintelem = 127;
    public static readonly RULE_exclusionwhereclause = 128;
    public static readonly RULE_key_actions = 129;
    public static readonly RULE_key_update = 130;
    public static readonly RULE_key_delete = 131;
    public static readonly RULE_key_action = 132;
    public static readonly RULE_optinherit = 133;
    public static readonly RULE_optpartitionspec = 134;
    public static readonly RULE_partitionspec = 135;
    public static readonly RULE_part_params = 136;
    public static readonly RULE_part_elem = 137;
    public static readonly RULE_table_access_method_clause = 138;
    public static readonly RULE_optwith = 139;
    public static readonly RULE_oncommitoption = 140;
    public static readonly RULE_opttablespace = 141;
    public static readonly RULE_index_paramenters_create = 142;
    public static readonly RULE_optconstablespace = 143;
    public static readonly RULE_existingindex = 144;
    public static readonly RULE_createstatsstmt = 145;
    public static readonly RULE_alterstatsstmt = 146;
    public static readonly RULE_createasstmt = 147;
    public static readonly RULE_create_as_target = 148;
    public static readonly RULE_opt_with_data = 149;
    public static readonly RULE_creatematviewstmt = 150;
    public static readonly RULE_create_mv_target = 151;
    public static readonly RULE_optnolog = 152;
    public static readonly RULE_refreshmatviewstmt = 153;
    public static readonly RULE_createseqstmt = 154;
    public static readonly RULE_alterseqstmt = 155;
    public static readonly RULE_optseqoptlist = 156;
    public static readonly RULE_optparenthesizedseqoptlist = 157;
    public static readonly RULE_seqoptlist = 158;
    public static readonly RULE_seqoptelem = 159;
    public static readonly RULE_opt_by = 160;
    public static readonly RULE_numericonly = 161;
    public static readonly RULE_numericonly_list = 162;
    public static readonly RULE_createplangstmt = 163;
    public static readonly RULE_opt_trusted = 164;
    public static readonly RULE_handler_name = 165;
    public static readonly RULE_opt_inline_handler = 166;
    public static readonly RULE_validator_clause = 167;
    public static readonly RULE_opt_validator = 168;
    public static readonly RULE_opt_procedural = 169;
    public static readonly RULE_createtablespacestmt = 170;
    public static readonly RULE_opttablespaceowner = 171;
    public static readonly RULE_createextensionstmt = 172;
    public static readonly RULE_create_extension_opt_list = 173;
    public static readonly RULE_create_extension_opt_item = 174;
    public static readonly RULE_alterextensionstmt = 175;
    public static readonly RULE_alter_extension_opt_list = 176;
    public static readonly RULE_alter_extension_opt_item = 177;
    public static readonly RULE_alterextensioncontentsstmt = 178;
    public static readonly RULE_createfdwstmt = 179;
    public static readonly RULE_fdw_option = 180;
    public static readonly RULE_fdw_options = 181;
    public static readonly RULE_opt_fdw_options = 182;
    public static readonly RULE_alterfdwstmt = 183;
    public static readonly RULE_create_generic_options = 184;
    public static readonly RULE_generic_option_list = 185;
    public static readonly RULE_alter_generic_options = 186;
    public static readonly RULE_alter_generic_option_list = 187;
    public static readonly RULE_alter_generic_option_elem = 188;
    public static readonly RULE_generic_option_elem = 189;
    public static readonly RULE_generic_option_name = 190;
    public static readonly RULE_generic_option_arg = 191;
    public static readonly RULE_createforeignserverstmt = 192;
    public static readonly RULE_opt_type = 193;
    public static readonly RULE_foreign_server_version = 194;
    public static readonly RULE_opt_foreign_server_version = 195;
    public static readonly RULE_alterforeignserverstmt = 196;
    public static readonly RULE_createforeigntablestmt = 197;
    public static readonly RULE_importforeignschemastmt = 198;
    public static readonly RULE_import_qualification_type = 199;
    public static readonly RULE_import_qualification = 200;
    public static readonly RULE_createusermappingstmt = 201;
    public static readonly RULE_auth_ident = 202;
    public static readonly RULE_alterusermappingstmt = 203;
    public static readonly RULE_createpolicystmt = 204;
    public static readonly RULE_alterpolicystmt = 205;
    public static readonly RULE_alterprocedurestmt = 206;
    public static readonly RULE_procedure_cluase = 207;
    public static readonly RULE_procedure_action = 208;
    public static readonly RULE_rowsecurityoptionalexpr = 209;
    public static readonly RULE_rowsecurityoptionalwithcheck = 210;
    public static readonly RULE_rowsecuritydefaulttorole = 211;
    public static readonly RULE_rowsecurityoptionaltorole = 212;
    public static readonly RULE_rowsecuritydefaultpermissive = 213;
    public static readonly RULE_rowsecuritydefaultforcmd = 214;
    public static readonly RULE_row_security_cmd = 215;
    public static readonly RULE_createamstmt = 216;
    public static readonly RULE_am_type = 217;
    public static readonly RULE_createtrigstmt = 218;
    public static readonly RULE_triggeractiontime = 219;
    public static readonly RULE_foreachrow = 220;
    public static readonly RULE_roworstatment = 221;
    public static readonly RULE_triggerevents = 222;
    public static readonly RULE_triggeroneevent = 223;
    public static readonly RULE_triggerreferencing = 224;
    public static readonly RULE_triggertransitions = 225;
    public static readonly RULE_triggertransition = 226;
    public static readonly RULE_transitionoldornew = 227;
    public static readonly RULE_transitionrowortable = 228;
    public static readonly RULE_transitionrelname = 229;
    public static readonly RULE_triggerforspec = 230;
    public static readonly RULE_triggerforopteach = 231;
    public static readonly RULE_triggerfortype = 232;
    public static readonly RULE_triggerwhen = 233;
    public static readonly RULE_function_or_procedure = 234;
    public static readonly RULE_triggerfuncargs = 235;
    public static readonly RULE_triggerfuncarg = 236;
    public static readonly RULE_optconstrfromtable = 237;
    public static readonly RULE_constraintattributespec = 238;
    public static readonly RULE_constraintattributeElem = 239;
    public static readonly RULE_createeventtrigstmt = 240;
    public static readonly RULE_event_trigger_when_list = 241;
    public static readonly RULE_event_trigger_when_item = 242;
    public static readonly RULE_event_trigger_value_list = 243;
    public static readonly RULE_altereventtrigstmt = 244;
    public static readonly RULE_enable_trigger = 245;
    public static readonly RULE_createassertionstmt = 246;
    public static readonly RULE_definestmt = 247;
    public static readonly RULE_definition = 248;
    public static readonly RULE_def_list = 249;
    public static readonly RULE_def_elem = 250;
    public static readonly RULE_def_arg = 251;
    public static readonly RULE_old_aggr_definition = 252;
    public static readonly RULE_old_aggr_list = 253;
    public static readonly RULE_old_aggr_elem = 254;
    public static readonly RULE_opt_enum_val_list = 255;
    public static readonly RULE_enum_val_list = 256;
    public static readonly RULE_alterenumstmt = 257;
    public static readonly RULE_opt_if_not_exists = 258;
    public static readonly RULE_createopclassstmt = 259;
    public static readonly RULE_opclass_item_list = 260;
    public static readonly RULE_opclass_item = 261;
    public static readonly RULE_opt_default = 262;
    public static readonly RULE_opt_opfamily = 263;
    public static readonly RULE_opclass_purpose = 264;
    public static readonly RULE_opt_recheck = 265;
    public static readonly RULE_createopfamilystmt = 266;
    public static readonly RULE_alteropfamilystmt = 267;
    public static readonly RULE_opclass_drop_list = 268;
    public static readonly RULE_opclass_drop = 269;
    public static readonly RULE_reassignownedstmt = 270;
    public static readonly RULE_dropstmt = 271;
    public static readonly RULE_view_nameList = 272;
    public static readonly RULE_object_type_any_name = 273;
    public static readonly RULE_object_type_name = 274;
    public static readonly RULE_object_type_name_on_any_name = 275;
    public static readonly RULE_any_name_list = 276;
    public static readonly RULE_relation_column_name = 277;
    public static readonly RULE_relation_name = 278;
    public static readonly RULE_any_name = 279;
    public static readonly RULE_attrs = 280;
    public static readonly RULE_type_name_list = 281;
    public static readonly RULE_truncatestmt = 282;
    public static readonly RULE_truncate_table = 283;
    public static readonly RULE_commentstmt = 284;
    public static readonly RULE_comment_text = 285;
    public static readonly RULE_seclabelstmt = 286;
    public static readonly RULE_opt_provider = 287;
    public static readonly RULE_security_label = 288;
    public static readonly RULE_fetchstmt = 289;
    public static readonly RULE_fetch_args = 290;
    public static readonly RULE_from_in = 291;
    public static readonly RULE_opt_from_in = 292;
    public static readonly RULE_grantstmt = 293;
    public static readonly RULE_revokestmt = 294;
    public static readonly RULE_privileges = 295;
    public static readonly RULE_beforeprivilegeselectlist = 296;
    public static readonly RULE_beforeprivilegeselect = 297;
    public static readonly RULE_privilege_list = 298;
    public static readonly RULE_privilege = 299;
    public static readonly RULE_privilege_target = 300;
    public static readonly RULE_grantee_list = 301;
    public static readonly RULE_grantee = 302;
    public static readonly RULE_opt_grant_grant_option = 303;
    public static readonly RULE_grantrolestmt = 304;
    public static readonly RULE_revokerolestmt = 305;
    public static readonly RULE_opt_grant_admin_option = 306;
    public static readonly RULE_opt_granted_by = 307;
    public static readonly RULE_alterdefaultprivilegesstmt = 308;
    public static readonly RULE_defacloptionlist = 309;
    public static readonly RULE_defacloption = 310;
    public static readonly RULE_defaclaction = 311;
    public static readonly RULE_defacl_privilege_target = 312;
    public static readonly RULE_indexstmt = 313;
    public static readonly RULE_opt_unique = 314;
    public static readonly RULE_opt_concurrently = 315;
    public static readonly RULE_opt_index_name = 316;
    public static readonly RULE_access_method_clause = 317;
    public static readonly RULE_index_params = 318;
    public static readonly RULE_index_elem_options = 319;
    public static readonly RULE_index_elem = 320;
    public static readonly RULE_opt_include = 321;
    public static readonly RULE_index_including_params = 322;
    public static readonly RULE_opt_collate = 323;
    public static readonly RULE_opt_class = 324;
    public static readonly RULE_opt_asc_desc = 325;
    public static readonly RULE_opt_nulls_order = 326;
    public static readonly RULE_createfunctionstmt = 327;
    public static readonly RULE_attrilist = 328;
    public static readonly RULE_opt_or_replace = 329;
    public static readonly RULE_func_args = 330;
    public static readonly RULE_func_args_list = 331;
    public static readonly RULE_routine_with_argtypes_list = 332;
    public static readonly RULE_routine_with_argtypes = 333;
    public static readonly RULE_procedure_with_argtypes_list = 334;
    public static readonly RULE_procedure_with_argtypes = 335;
    public static readonly RULE_function_with_argtypes_list = 336;
    public static readonly RULE_function_with_argtypes = 337;
    public static readonly RULE_func_args_with_defaults = 338;
    public static readonly RULE_func_args_with_defaults_list = 339;
    public static readonly RULE_func_arg = 340;
    public static readonly RULE_arg_class = 341;
    public static readonly RULE_param_name = 342;
    public static readonly RULE_func_return = 343;
    public static readonly RULE_func_type = 344;
    public static readonly RULE_func_arg_with_default = 345;
    public static readonly RULE_aggr_arg = 346;
    public static readonly RULE_aggr_args = 347;
    public static readonly RULE_aggr_args_list = 348;
    public static readonly RULE_aggregate_with_argtypes = 349;
    public static readonly RULE_aggregate_with_argtypes_list = 350;
    public static readonly RULE_createfunc_opt_list = 351;
    public static readonly RULE_common_func_opt_item = 352;
    public static readonly RULE_createfunc_opt_item = 353;
    public static readonly RULE_transform_type_list = 354;
    public static readonly RULE_opt_definition = 355;
    public static readonly RULE_table_func_column = 356;
    public static readonly RULE_table_func_column_list = 357;
    public static readonly RULE_alterfunctionstmt = 358;
    public static readonly RULE_alterFunctionTypeClause = 359;
    public static readonly RULE_alterfunc_opt_list = 360;
    public static readonly RULE_opt_restrict = 361;
    public static readonly RULE_removefuncstmt = 362;
    public static readonly RULE_removeaggrstmt = 363;
    public static readonly RULE_removeoperstmt = 364;
    public static readonly RULE_oper_argtypes = 365;
    public static readonly RULE_any_operator = 366;
    public static readonly RULE_operator_with_argtypes_list = 367;
    public static readonly RULE_operator_with_argtypes = 368;
    public static readonly RULE_dostmt = 369;
    public static readonly RULE_dostmt_opt_list = 370;
    public static readonly RULE_dostmt_opt_item = 371;
    public static readonly RULE_createcaststmt = 372;
    public static readonly RULE_cast_context = 373;
    public static readonly RULE_opt_if_exists = 374;
    public static readonly RULE_createtransformstmt = 375;
    public static readonly RULE_transform_element_list = 376;
    public static readonly RULE_reindexstmt = 377;
    public static readonly RULE_reindex_target_type = 378;
    public static readonly RULE_reindex_target_multitable = 379;
    public static readonly RULE_reindex_option_list = 380;
    public static readonly RULE_reindex_option_elem = 381;
    public static readonly RULE_altertblspcstmt = 382;
    public static readonly RULE_renamestmt = 383;
    public static readonly RULE_opt_set_data = 384;
    public static readonly RULE_alterobjectdependsstmt = 385;
    public static readonly RULE_opt_no = 386;
    public static readonly RULE_alterobjectschemastmt = 387;
    public static readonly RULE_alteroperatorstmt = 388;
    public static readonly RULE_operator_def_list = 389;
    public static readonly RULE_operator_def_elem = 390;
    public static readonly RULE_operator_def_arg = 391;
    public static readonly RULE_altertypestmt = 392;
    public static readonly RULE_alterownerstmt = 393;
    public static readonly RULE_createpublicationstmt = 394;
    public static readonly RULE_opt_publication_for_tables = 395;
    public static readonly RULE_publication_for_tables = 396;
    public static readonly RULE_alterpublicationstmt = 397;
    public static readonly RULE_createsubscriptionstmt = 398;
    public static readonly RULE_publication_name_list = 399;
    public static readonly RULE_publication_name_item = 400;
    public static readonly RULE_altersubscriptionstmt = 401;
    public static readonly RULE_rulestmt = 402;
    public static readonly RULE_ruleactionlist = 403;
    public static readonly RULE_ruleactionmulti = 404;
    public static readonly RULE_ruleactionstmt = 405;
    public static readonly RULE_ruleactionstmtOrEmpty = 406;
    public static readonly RULE_event = 407;
    public static readonly RULE_opt_instead = 408;
    public static readonly RULE_notifystmt = 409;
    public static readonly RULE_notify_payload = 410;
    public static readonly RULE_listenstmt = 411;
    public static readonly RULE_unlistenstmt = 412;
    public static readonly RULE_transactionstmt = 413;
    public static readonly RULE_opt_transaction = 414;
    public static readonly RULE_transaction_mode_item = 415;
    public static readonly RULE_transaction_mode_list = 416;
    public static readonly RULE_transaction_mode_list_or_empty = 417;
    public static readonly RULE_opt_transaction_chain = 418;
    public static readonly RULE_viewstmt = 419;
    public static readonly RULE_opt_check_option = 420;
    public static readonly RULE_loadstmt = 421;
    public static readonly RULE_createdbstmt = 422;
    public static readonly RULE_createdb_opt_list = 423;
    public static readonly RULE_createdb_opt_items = 424;
    public static readonly RULE_createdb_opt_item = 425;
    public static readonly RULE_createdb_opt_name = 426;
    public static readonly RULE_opt_equal = 427;
    public static readonly RULE_alterdatabasestmt = 428;
    public static readonly RULE_alterdatabasesetstmt = 429;
    public static readonly RULE_drop_option_list = 430;
    public static readonly RULE_drop_option = 431;
    public static readonly RULE_altercollationstmt = 432;
    public static readonly RULE_altersystemstmt = 433;
    public static readonly RULE_createdomainstmt = 434;
    public static readonly RULE_alterdomainstmt = 435;
    public static readonly RULE_opt_as = 436;
    public static readonly RULE_altertsdictionarystmt = 437;
    public static readonly RULE_altertsconfigurationstmt = 438;
    public static readonly RULE_any_with = 439;
    public static readonly RULE_createconversionstmt = 440;
    public static readonly RULE_clusterstmt = 441;
    public static readonly RULE_opt_verbose_list = 442;
    public static readonly RULE_cluster_index_specification = 443;
    public static readonly RULE_vacuumstmt = 444;
    public static readonly RULE_analyzestmt = 445;
    public static readonly RULE_vac_analyze_option_list = 446;
    public static readonly RULE_analyze_keyword = 447;
    public static readonly RULE_vac_analyze_option_elem = 448;
    public static readonly RULE_vac_analyze_option_name = 449;
    public static readonly RULE_vac_analyze_option_arg = 450;
    public static readonly RULE_opt_analyze = 451;
    public static readonly RULE_analyze_options_list = 452;
    public static readonly RULE_analyze_option_elem = 453;
    public static readonly RULE_opt_verbose = 454;
    public static readonly RULE_opt_skiplock = 455;
    public static readonly RULE_opt_buffer_usage_limit = 456;
    public static readonly RULE_opt_full = 457;
    public static readonly RULE_opt_freeze = 458;
    public static readonly RULE_opt_name_list = 459;
    public static readonly RULE_vacuum_relation = 460;
    public static readonly RULE_vacuum_relation_list = 461;
    public static readonly RULE_opt_vacuum_relation_list = 462;
    public static readonly RULE_explainstmt = 463;
    public static readonly RULE_explainablestmt = 464;
    public static readonly RULE_explain_option_list = 465;
    public static readonly RULE_explain_option_elem = 466;
    public static readonly RULE_explain_option_name = 467;
    public static readonly RULE_explain_option_arg = 468;
    public static readonly RULE_preparestmt = 469;
    public static readonly RULE_prep_type_clause = 470;
    public static readonly RULE_preparablestmt = 471;
    public static readonly RULE_executestmt = 472;
    public static readonly RULE_execute_param_clause = 473;
    public static readonly RULE_deallocatestmt = 474;
    public static readonly RULE_insertstmt = 475;
    public static readonly RULE_insert_target = 476;
    public static readonly RULE_insert_rest = 477;
    public static readonly RULE_override_kind = 478;
    public static readonly RULE_insert_column_list = 479;
    public static readonly RULE_insert_column_item = 480;
    public static readonly RULE_opt_on_conflict = 481;
    public static readonly RULE_opt_conf_expr = 482;
    public static readonly RULE_returning_clause = 483;
    public static readonly RULE_deletestmt = 484;
    public static readonly RULE_using_clause = 485;
    public static readonly RULE_lockstmt = 486;
    public static readonly RULE_opt_lock = 487;
    public static readonly RULE_lock_type = 488;
    public static readonly RULE_opt_nowait = 489;
    public static readonly RULE_opt_nowait_or_skip = 490;
    public static readonly RULE_updatestmt = 491;
    public static readonly RULE_set_clause_list = 492;
    public static readonly RULE_set_clause = 493;
    public static readonly RULE_set_target = 494;
    public static readonly RULE_set_target_list = 495;
    public static readonly RULE_declarecursorstmt = 496;
    public static readonly RULE_cursor_name = 497;
    public static readonly RULE_cursor_options = 498;
    public static readonly RULE_opt_hold = 499;
    public static readonly RULE_selectstmt = 500;
    public static readonly RULE_select_with_parens = 501;
    public static readonly RULE_select_no_parens = 502;
    public static readonly RULE_select_clause = 503;
    public static readonly RULE_simple_select = 504;
    public static readonly RULE_set_operator = 505;
    public static readonly RULE_set_operator_with_all_or_distinct = 506;
    public static readonly RULE_with_clause = 507;
    public static readonly RULE_cte_list = 508;
    public static readonly RULE_common_table_expr = 509;
    public static readonly RULE_search_cluase = 510;
    public static readonly RULE_cycle_cluase = 511;
    public static readonly RULE_opt_materialized = 512;
    public static readonly RULE_opt_with_clause = 513;
    public static readonly RULE_into_clause = 514;
    public static readonly RULE_opt_strict = 515;
    public static readonly RULE_opttempTableName = 516;
    public static readonly RULE_opt_table = 517;
    public static readonly RULE_all_or_distinct = 518;
    public static readonly RULE_distinct_clause = 519;
    public static readonly RULE_opt_all_clause = 520;
    public static readonly RULE_opt_sort_clause = 521;
    public static readonly RULE_sort_clause = 522;
    public static readonly RULE_sortby_list = 523;
    public static readonly RULE_sortby = 524;
    public static readonly RULE_select_limit = 525;
    public static readonly RULE_opt_select_limit = 526;
    public static readonly RULE_limit_clause = 527;
    public static readonly RULE_fetch_clause = 528;
    public static readonly RULE_offset_clause = 529;
    public static readonly RULE_select_limit_value = 530;
    public static readonly RULE_select_offset_value = 531;
    public static readonly RULE_select_fetch_first_value = 532;
    public static readonly RULE_i_or_f_const = 533;
    public static readonly RULE_row_or_rows = 534;
    public static readonly RULE_first_or_next = 535;
    public static readonly RULE_group_clause = 536;
    public static readonly RULE_group_by_list = 537;
    public static readonly RULE_group_by_item = 538;
    public static readonly RULE_empty_grouping_set = 539;
    public static readonly RULE_rollup_clause = 540;
    public static readonly RULE_cube_clause = 541;
    public static readonly RULE_grouping_sets_clause = 542;
    public static readonly RULE_having_clause = 543;
    public static readonly RULE_for_locking_clause = 544;
    public static readonly RULE_opt_for_locking_clause = 545;
    public static readonly RULE_for_locking_items = 546;
    public static readonly RULE_for_locking_item = 547;
    public static readonly RULE_for_locking_strength = 548;
    public static readonly RULE_locked_rels_list = 549;
    public static readonly RULE_values_clause = 550;
    public static readonly RULE_from_clause = 551;
    public static readonly RULE_from_list = 552;
    public static readonly RULE_table_ref = 553;
    public static readonly RULE_alias_clause = 554;
    public static readonly RULE_opt_alias_clause = 555;
    public static readonly RULE_func_alias_clause = 556;
    public static readonly RULE_join_type = 557;
    public static readonly RULE_join_qual = 558;
    public static readonly RULE_relation_expr = 559;
    public static readonly RULE_view_relation_expr = 560;
    public static readonly RULE_publication_relation_expr = 561;
    public static readonly RULE_relation_expr_list = 562;
    public static readonly RULE_publication_relation_expr_list = 563;
    public static readonly RULE_relation_expr_opt_alias = 564;
    public static readonly RULE_tablesample_clause = 565;
    public static readonly RULE_opt_repeatable_clause = 566;
    public static readonly RULE_func_table = 567;
    public static readonly RULE_rowsfrom_item = 568;
    public static readonly RULE_rowsfrom_list = 569;
    public static readonly RULE_opt_col_def_list = 570;
    public static readonly RULE_opt_ordinality = 571;
    public static readonly RULE_where_clause = 572;
    public static readonly RULE_where_or_current_clause = 573;
    public static readonly RULE_opttablefuncelementlist = 574;
    public static readonly RULE_tablefuncelementlist = 575;
    public static readonly RULE_tablefuncelement = 576;
    public static readonly RULE_xmltable = 577;
    public static readonly RULE_xmltable_column_list = 578;
    public static readonly RULE_xmltable_column_el = 579;
    public static readonly RULE_xmltable_column_option_list = 580;
    public static readonly RULE_xmltable_column_option_el = 581;
    public static readonly RULE_xml_namespace_list = 582;
    public static readonly RULE_xml_namespace_el = 583;
    public static readonly RULE_typename = 584;
    public static readonly RULE_opt_array_bounds = 585;
    public static readonly RULE_simpletypename = 586;
    public static readonly RULE_consttypename = 587;
    public static readonly RULE_generictype = 588;
    public static readonly RULE_opt_type_modifiers = 589;
    public static readonly RULE_numeric = 590;
    public static readonly RULE_opt_float = 591;
    public static readonly RULE_bit = 592;
    public static readonly RULE_constbit = 593;
    public static readonly RULE_bitwithlength = 594;
    public static readonly RULE_bitwithoutlength = 595;
    public static readonly RULE_character = 596;
    public static readonly RULE_constcharacter = 597;
    public static readonly RULE_character_c = 598;
    public static readonly RULE_opt_varying = 599;
    public static readonly RULE_constdatetime = 600;
    public static readonly RULE_constinterval = 601;
    public static readonly RULE_opt_timezone = 602;
    public static readonly RULE_opt_interval = 603;
    public static readonly RULE_interval_second = 604;
    public static readonly RULE_opt_escape = 605;
    public static readonly RULE_a_expr = 606;
    public static readonly RULE_a_expr_qual = 607;
    public static readonly RULE_a_expr_lessless = 608;
    public static readonly RULE_a_expr_or = 609;
    public static readonly RULE_a_expr_and = 610;
    public static readonly RULE_a_expr_in = 611;
    public static readonly RULE_a_expr_unary_not = 612;
    public static readonly RULE_a_expr_isnull = 613;
    public static readonly RULE_a_expr_is_not = 614;
    public static readonly RULE_a_expr_compare = 615;
    public static readonly RULE_a_expr_like = 616;
    public static readonly RULE_a_expr_qual_op = 617;
    public static readonly RULE_a_expr_unary_qualop = 618;
    public static readonly RULE_a_expr_add = 619;
    public static readonly RULE_a_expr_mul = 620;
    public static readonly RULE_a_expr_caret = 621;
    public static readonly RULE_a_expr_unary_sign = 622;
    public static readonly RULE_a_expr_at_time_zone = 623;
    public static readonly RULE_a_expr_collate = 624;
    public static readonly RULE_a_expr_typecast = 625;
    public static readonly RULE_b_expr = 626;
    public static readonly RULE_c_expr = 627;
    public static readonly RULE_plsqlvariablename = 628;
    public static readonly RULE_func_application = 629;
    public static readonly RULE_func_expr = 630;
    public static readonly RULE_func_expr_windowless = 631;
    public static readonly RULE_func_expr_common_subexpr = 632;
    public static readonly RULE_xml_root_version = 633;
    public static readonly RULE_opt_xml_root_standalone = 634;
    public static readonly RULE_xml_attributes = 635;
    public static readonly RULE_xml_attribute_list = 636;
    public static readonly RULE_xml_attribute_el = 637;
    public static readonly RULE_document_or_content = 638;
    public static readonly RULE_xml_whitespace_option = 639;
    public static readonly RULE_xmlexists_argument = 640;
    public static readonly RULE_xml_passing_mech = 641;
    public static readonly RULE_within_group_clause = 642;
    public static readonly RULE_filter_clause = 643;
    public static readonly RULE_window_clause = 644;
    public static readonly RULE_window_definition_list = 645;
    public static readonly RULE_window_definition = 646;
    public static readonly RULE_over_clause = 647;
    public static readonly RULE_window_specification = 648;
    public static readonly RULE_opt_existing_window_name = 649;
    public static readonly RULE_opt_partition_clause = 650;
    public static readonly RULE_opt_frame_clause = 651;
    public static readonly RULE_frame_extent = 652;
    public static readonly RULE_frame_bound = 653;
    public static readonly RULE_opt_window_exclusion_clause = 654;
    public static readonly RULE_row = 655;
    public static readonly RULE_explicit_row = 656;
    public static readonly RULE_implicit_row = 657;
    public static readonly RULE_sub_type = 658;
    public static readonly RULE_all_op = 659;
    public static readonly RULE_mathop = 660;
    public static readonly RULE_qual_op = 661;
    public static readonly RULE_qual_all_op = 662;
    public static readonly RULE_subquery_Op = 663;
    public static readonly RULE_expr_list = 664;
    public static readonly RULE_column_expr_list_noparen = 665;
    public static readonly RULE_column_expr_list = 666;
    public static readonly RULE_column_expr = 667;
    public static readonly RULE_column_expr_noparen = 668;
    public static readonly RULE_func_arg_list = 669;
    public static readonly RULE_func_arg_expr = 670;
    public static readonly RULE_type_list = 671;
    public static readonly RULE_array_expr = 672;
    public static readonly RULE_array_expr_list = 673;
    public static readonly RULE_extract_list = 674;
    public static readonly RULE_extract_arg = 675;
    public static readonly RULE_unicode_normal_form = 676;
    public static readonly RULE_overlay_list = 677;
    public static readonly RULE_position_list = 678;
    public static readonly RULE_substr_list = 679;
    public static readonly RULE_trim_list = 680;
    public static readonly RULE_in_expr = 681;
    public static readonly RULE_case_expr = 682;
    public static readonly RULE_when_clause_list = 683;
    public static readonly RULE_when_clause = 684;
    public static readonly RULE_case_default = 685;
    public static readonly RULE_case_arg = 686;
    public static readonly RULE_columnref = 687;
    public static readonly RULE_indirection_el = 688;
    public static readonly RULE_opt_slice_bound = 689;
    public static readonly RULE_indirection = 690;
    public static readonly RULE_opt_indirection = 691;
    public static readonly RULE_opt_target_list = 692;
    public static readonly RULE_target_list = 693;
    public static readonly RULE_target_el = 694;
    public static readonly RULE_qualified_name_list = 695;
    public static readonly RULE_table_name_list = 696;
    public static readonly RULE_schema_name_list = 697;
    public static readonly RULE_database_nameList = 698;
    public static readonly RULE_procedure_name_list = 699;
    public static readonly RULE_tablespace_name_create = 700;
    public static readonly RULE_tablespace_name = 701;
    public static readonly RULE_table_name_create = 702;
    public static readonly RULE_table_name = 703;
    public static readonly RULE_view_name_create = 704;
    public static readonly RULE_view_name = 705;
    public static readonly RULE_qualified_name = 706;
    public static readonly RULE_tablespace_name_list = 707;
    public static readonly RULE_name_list = 708;
    public static readonly RULE_database_name_create = 709;
    public static readonly RULE_database_name = 710;
    public static readonly RULE_schema_name = 711;
    public static readonly RULE_routine_name_create = 712;
    public static readonly RULE_routine_name = 713;
    public static readonly RULE_procedure_name = 714;
    public static readonly RULE_procedure_name_create = 715;
    public static readonly RULE_column_name = 716;
    public static readonly RULE_column_name_create = 717;
    public static readonly RULE_name = 718;
    public static readonly RULE_attr_name = 719;
    public static readonly RULE_file_name = 720;
    public static readonly RULE_function_name_create = 721;
    public static readonly RULE_function_name = 722;
    public static readonly RULE_usual_name = 723;
    public static readonly RULE_aexprconst = 724;
    public static readonly RULE_xconst = 725;
    public static readonly RULE_bconst = 726;
    public static readonly RULE_fconst = 727;
    public static readonly RULE_iconst = 728;
    public static readonly RULE_sconst = 729;
    public static readonly RULE_anysconst = 730;
    public static readonly RULE_opt_uescape = 731;
    public static readonly RULE_signediconst = 732;
    public static readonly RULE_groupname = 733;
    public static readonly RULE_roleid = 734;
    public static readonly RULE_rolespec = 735;
    public static readonly RULE_role_list = 736;
    public static readonly RULE_colid = 737;
    public static readonly RULE_index_method_choices = 738;
    public static readonly RULE_exclude_element = 739;
    public static readonly RULE_index_paramenters = 740;
    public static readonly RULE_type_function_name = 741;
    public static readonly RULE_type_usual_name = 742;
    public static readonly RULE_nonreservedword_column = 743;
    public static readonly RULE_nonreservedword = 744;
    public static readonly RULE_collabel = 745;
    public static readonly RULE_identifier = 746;
    public static readonly RULE_plsqlidentifier = 747;
    public static readonly RULE_unreserved_keyword = 748;
    public static readonly RULE_col_name_keyword = 749;
    public static readonly RULE_type_func_name_keyword = 750;
    public static readonly RULE_reserved_keyword = 751;
    public static readonly RULE_pl_function = 752;
    public static readonly RULE_comp_options = 753;
    public static readonly RULE_comp_option = 754;
    public static readonly RULE_sharp = 755;
    public static readonly RULE_option_value = 756;
    public static readonly RULE_opt_semi = 757;
    public static readonly RULE_pl_block = 758;
    public static readonly RULE_decl_sect = 759;
    public static readonly RULE_decl_start = 760;
    public static readonly RULE_decl_stmts = 761;
    public static readonly RULE_label_decl = 762;
    public static readonly RULE_decl_stmt = 763;
    public static readonly RULE_decl_statement = 764;
    public static readonly RULE_opt_scrollable = 765;
    public static readonly RULE_decl_cursor_query = 766;
    public static readonly RULE_decl_cursor_args = 767;
    public static readonly RULE_decl_cursor_arglist = 768;
    public static readonly RULE_decl_cursor_arg = 769;
    public static readonly RULE_decl_is_for = 770;
    public static readonly RULE_decl_aliasitem = 771;
    public static readonly RULE_decl_varname = 772;
    public static readonly RULE_decl_const = 773;
    public static readonly RULE_decl_datatype = 774;
    public static readonly RULE_decl_collate = 775;
    public static readonly RULE_decl_notnull = 776;
    public static readonly RULE_decl_defval = 777;
    public static readonly RULE_decl_defkey = 778;
    public static readonly RULE_assign_operator = 779;
    public static readonly RULE_proc_sect = 780;
    public static readonly RULE_proc_stmt = 781;
    public static readonly RULE_stmt_perform = 782;
    public static readonly RULE_stmt_call = 783;
    public static readonly RULE_opt_expr_list = 784;
    public static readonly RULE_stmt_assign = 785;
    public static readonly RULE_stmt_getdiag = 786;
    public static readonly RULE_getdiag_area_opt = 787;
    public static readonly RULE_getdiag_list = 788;
    public static readonly RULE_getdiag_list_item = 789;
    public static readonly RULE_getdiag_item = 790;
    public static readonly RULE_getdiag_target = 791;
    public static readonly RULE_assign_var = 792;
    public static readonly RULE_stmt_if = 793;
    public static readonly RULE_stmt_elsifs = 794;
    public static readonly RULE_stmt_else = 795;
    public static readonly RULE_stmt_case = 796;
    public static readonly RULE_opt_expr_until_when = 797;
    public static readonly RULE_case_when_list = 798;
    public static readonly RULE_case_when = 799;
    public static readonly RULE_opt_case_else = 800;
    public static readonly RULE_stmt_loop = 801;
    public static readonly RULE_stmt_while = 802;
    public static readonly RULE_stmt_for = 803;
    public static readonly RULE_for_control = 804;
    public static readonly RULE_opt_for_using_expression = 805;
    public static readonly RULE_opt_cursor_parameters = 806;
    public static readonly RULE_opt_reverse = 807;
    public static readonly RULE_opt_by_expression = 808;
    public static readonly RULE_for_variable = 809;
    public static readonly RULE_stmt_foreach_a = 810;
    public static readonly RULE_foreach_slice = 811;
    public static readonly RULE_stmt_exit = 812;
    public static readonly RULE_exit_type = 813;
    public static readonly RULE_stmt_return = 814;
    public static readonly RULE_opt_return_result = 815;
    public static readonly RULE_stmt_raise = 816;
    public static readonly RULE_opt_stmt_raise_level = 817;
    public static readonly RULE_opt_raise_list = 818;
    public static readonly RULE_opt_raise_using = 819;
    public static readonly RULE_opt_raise_using_elem = 820;
    public static readonly RULE_opt_raise_using_elem_list = 821;
    public static readonly RULE_stmt_assert = 822;
    public static readonly RULE_opt_stmt_assert_message = 823;
    public static readonly RULE_loop_body = 824;
    public static readonly RULE_stmt_execsql = 825;
    public static readonly RULE_stmt_dynexecute = 826;
    public static readonly RULE_opt_execute_using = 827;
    public static readonly RULE_opt_execute_using_list = 828;
    public static readonly RULE_opt_execute_into = 829;
    public static readonly RULE_stmt_open = 830;
    public static readonly RULE_opt_open_bound_list_item = 831;
    public static readonly RULE_opt_open_bound_list = 832;
    public static readonly RULE_opt_open_using = 833;
    public static readonly RULE_opt_scroll_option = 834;
    public static readonly RULE_opt_scroll_option_no = 835;
    public static readonly RULE_stmt_fetch = 836;
    public static readonly RULE_into_target = 837;
    public static readonly RULE_opt_cursor_from = 838;
    public static readonly RULE_opt_fetch_direction = 839;
    public static readonly RULE_stmt_move = 840;
    public static readonly RULE_mergestmt = 841;
    public static readonly RULE_data_source = 842;
    public static readonly RULE_join_condition = 843;
    public static readonly RULE_merge_when_clause = 844;
    public static readonly RULE_merge_insert = 845;
    public static readonly RULE_merge_update = 846;
    public static readonly RULE_default_values_or_values = 847;
    public static readonly RULE_exprofdefaultlist = 848;
    public static readonly RULE_exprofdefault = 849;
    public static readonly RULE_stmt_close = 850;
    public static readonly RULE_stmt_null = 851;
    public static readonly RULE_stmt_commit = 852;
    public static readonly RULE_stmt_rollback = 853;
    public static readonly RULE_plsql_opt_transaction_chain = 854;
    public static readonly RULE_stmt_set = 855;
    public static readonly RULE_cursor_variable = 856;
    public static readonly RULE_exception_sect = 857;
    public static readonly RULE_proc_exceptions = 858;
    public static readonly RULE_proc_exception = 859;
    public static readonly RULE_proc_conditions = 860;
    public static readonly RULE_proc_condition = 861;
    public static readonly RULE_opt_block_label = 862;
    public static readonly RULE_opt_loop_label = 863;
    public static readonly RULE_opt_label = 864;
    public static readonly RULE_opt_exitcond = 865;
    public static readonly RULE_any_identifier = 866;
    public static readonly RULE_plsql_unreserved_keyword = 867;
    public static readonly RULE_sql_expression = 868;
    public static readonly RULE_expr_until_then = 869;
    public static readonly RULE_expr_until_semi = 870;
    public static readonly RULE_expr_until_rightbracket = 871;
    public static readonly RULE_expr_until_loop = 872;
    public static readonly RULE_make_execsql_stmt = 873;
    public static readonly RULE_opt_returning_clause_into = 874;

    public static readonly literalNames = [
        null, "'$'", "'('", "')'", "'['", "']'", "','", "';'", "':'", "'*'", 
        "'='", "'.'", "'+'", "'-'", "'/'", "'^'", "'<'", "'>'", "'<<'", 
        "'>>'", "':='", "'<='", "'=>'", "'>='", "'..'", "'<>'", "'::'", 
        "'%'", null, null, "'ALL'", "'ANALYSE'", "'ANALYZE'", "'AND'", "'ANY'", 
        "'ARRAY'", "'AS'", "'ASC'", "'ASYMMETRIC'", "'BOTH'", "'CASE'", 
        "'CAST'", "'CHECK'", "'COLLATE'", "'COLUMN'", "'CONSTRAINT'", "'CREATE'", 
        "'CURRENT_CATALOG'", "'CURRENT_DATE'", "'CURRENT_ROLE'", "'CURRENT_TIME'", 
        "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DEFAULT'", "'DEFERRABLE'", 
        "'DESC'", "'DISTINCT'", "'DO'", "'ELSE'", "'EXCEPT'", "'FALSE'", 
        "'FETCH'", "'FOR'", "'FOREIGN'", "'FROM'", "'GRANT'", "'GROUP'", 
        "'HAVING'", "'IN'", "'INITIALLY'", "'INTERSECT'", "'INTO'", "'LATERAL'", 
        "'LEADING'", "'LIMIT'", "'LOCALTIME'", "'LOCALTIMESTAMP'", "'NOT'", 
        "'NULL'", "'OFFSET'", "'ON'", "'ONLY'", "'OR'", "'ORDER'", "'PLACING'", 
        "'PRIMARY'", "'REFERENCES'", "'RETURNING'", "'SELECT'", "'SESSION_USER'", 
        "'SOME'", "'SYMMETRIC'", "'TABLE'", "'THEN'", "'TO'", "'TRAILING'", 
        "'TRUE'", "'UNION'", "'UNIQUE'", "'USER'", "'USING'", "'VARIADIC'", 
        "'WHEN'", "'WHERE'", "'WINDOW'", "'WITH'", "'AUTHORIZATION'", "'BINARY'", 
        "'COLLATION'", "'CONCURRENTLY'", "'CROSS'", "'CURRENT_SCHEMA'", 
        "'FREEZE'", "'FULL'", "'ILIKE'", "'INNER'", "'IS'", "'ISNULL'", 
        "'JOIN'", "'LEFT'", "'LIKE'", "'NATURAL'", "'NOTNULL'", "'OUTER'", 
        "'OVER'", "'OVERLAPS'", "'RIGHT'", "'SIMILAR'", "'VERBOSE'", "'ABORT'", 
        "'ABSOLUTE'", "'ACCESS'", "'ACTION'", "'ADD'", "'ADMIN'", "'AFTER'", 
        "'AGGREGATE'", "'ALSO'", "'ALTER'", "'ALWAYS'", "'ASSERTION'", "'ASSIGNMENT'", 
        "'AT'", "'ATTRIBUTE'", "'BACKWARD'", "'BEFORE'", "'BEGIN'", "'BY'", 
        "'CACHE'", "'CALLED'", "'CASCADE'", "'CASCADED'", "'CATALOG'", "'CHAIN'", 
        "'CHARACTERISTICS'", "'CHECKPOINT'", "'CLASS'", "'CLOSE'", "'CLUSTER'", 
        "'COMMENT'", "'COMMENTS'", "'COMMIT'", "'COMMITTED'", "'CONFIGURATION'", 
        "'CONNECTION'", "'CONSTRAINTS'", "'CONTENT'", "'CONTINUE'", "'CONVERSION'", 
        "'COPY'", "'COST'", "'CSV'", "'CURSOR'", "'CYCLE'", "'DATA'", "'DATABASE'", 
        "'DAY'", "'DEALLOCATE'", "'DECLARE'", "'DEFAULTS'", "'DEFERRED'", 
        "'DEFINER'", "'DELETE'", "'DELIMITER'", "'DELIMITERS'", "'DICTIONARY'", 
        "'DISABLE'", "'DISCARD'", "'DOCUMENT'", "'DOMAIN'", "'DOUBLE'", 
        "'DROP'", "'EACH'", "'ENABLE'", "'ENCODING'", "'ENCRYPTED'", "'ENUM'", 
        "'ESCAPE'", "'EVENT'", "'EXCLUDE'", "'EXCLUDING'", "'EXCLUSIVE'", 
        "'EXECUTE'", "'EXPLAIN'", "'EXTENSION'", "'EXTERNAL'", "'FAMILY'", 
        "'FIRST'", "'FOLLOWING'", "'FORCE'", "'FORWARD'", "'FUNCTION'", 
        "'FUNCTIONS'", "'GLOBAL'", "'GRANTED'", "'HANDLER'", "'HEADER'", 
        "'HOLD'", "'HOUR'", "'IDENTITY'", "'IF'", "'IMMEDIATE'", "'IMMUTABLE'", 
        "'IMPLICIT'", "'INCLUDING'", "'INCREMENT'", "'INDEX'", "'INDEXES'", 
        "'INHERIT'", "'NOINHERIT'", "'SUPERUSER'", "'NOSUPERUSER'", "'CREATEDB'", 
        "'NOCREATEDB'", "'CREATEROLE'", "'NOCREATEROLE'", "'CREATEUSER'", 
        "'NOCREATEUSER'", "'INHERITS'", "'INLINE'", "'INSENSITIVE'", "'INSERT'", 
        "'INSTEAD'", "'INVOKER'", "'ISOLATION'", "'KEY'", "'LABEL'", "'LANGUAGE'", 
        "'LARGE'", "'LAST'", "'LEAKPROOF'", "'LEVEL'", "'LISTEN'", "'LOAD'", 
        "'LOCAL'", "'LOCATION'", "'LOCK'", "'MAPPING'", "'MATCH'", "'MATERIALIZED'", 
        "'MAXVALUE'", "'MINUTE'", "'MINVALUE'", "'MODE'", "'MONTH'", "'MOVE'", 
        "'NAME'", "'NAMES'", "'NEXT'", "'NO'", "'NOTHING'", "'NOTIFY'", 
        "'NOWAIT'", "'NULLS'", "'OBJECT'", "'OF'", "'OFF'", "'OIDS'", "'OPERATOR'", 
        "'OPTION'", "'OPTIONS'", "'OWNED'", "'OWNER'", "'PARSER'", "'PARTIAL'", 
        "'PARTITION'", "'PASSING'", "'PASSWORD'", "'PLANS'", "'PRECEDING'", 
        "'PREPARE'", "'PREPARED'", "'PRESERVE'", "'PRIOR'", "'PRIVILEGES'", 
        "'PROCEDURAL'", "'PROCEDURE'", "'PROGRAM'", "'QUOTE'", "'RANGE'", 
        "'READ'", "'REASSIGN'", "'RECHECK'", "'RECURSIVE'", "'REF'", "'REFRESH'", 
        "'REINDEX'", "'RELATIVE'", "'RELEASE'", "'RENAME'", "'REPEATABLE'", 
        "'REPLACE'", "'REPLICA'", "'RESET'", "'RESTART'", "'RESTRICT'", 
        "'RETURNS'", "'REVOKE'", "'ROLE'", "'ROLLBACK'", "'ROWS'", "'RULE'", 
        "'SAVEPOINT'", "'SCHEMA'", "'SCROLL'", "'SEARCH'", "'SECOND'", "'SECURITY'", 
        "'SEQUENCE'", "'SEQUENCES'", "'SERIALIZABLE'", "'SERVER'", "'SESSION'", 
        "'SET'", "'SHARE'", "'SHOW'", "'SIMPLE'", "'SNAPSHOT'", "'STABLE'", 
        "'STANDALONE'", "'START'", "'STATEMENT'", "'STATISTICS'", "'STDIN'", 
        "'STDOUT'", "'STORAGE'", "'STRICT'", "'STRIP'", "'SYSID'", "'SYSTEM'", 
        "'TABLES'", "'TABLESPACE'", "'TEMP'", "'TEMPLATE'", "'TEMPORARY'", 
        "'TEXT'", "'TRANSACTION'", "'TRIGGER'", "'TRUNCATE'", "'TRUSTED'", 
        "'TYPE'", "'TYPES'", "'UNBOUNDED'", "'UNCOMMITTED'", "'UNENCRYPTED'", 
        "'UNKNOWN'", "'UNLISTEN'", "'UNLOGGED'", "'UNTIL'", "'UPDATE'", 
        "'VACUUM'", "'VALID'", "'VALIDATE'", "'VALIDATOR'", "'VARYING'", 
        "'VERSION'", "'VIEW'", "'VOLATILE'", "'WHITESPACE'", "'WITHOUT'", 
        "'WORK'", "'WRAPPER'", "'WRITE'", "'XML'", "'YEAR'", "'YES'", "'ZONE'", 
        "'BETWEEN'", "'BIGINT'", "'BIT'", "'BOOLEAN'", "'CHAR'", "'CHARACTER'", 
        "'COALESCE'", "'DEC'", "'DECIMAL'", "'EXISTS'", "'EXTRACT'", "'FLOAT'", 
        "'GREATEST'", "'INOUT'", "'INT'", "'INTEGER'", "'INTERVAL'", "'LEAST'", 
        "'NATIONAL'", "'NCHAR'", "'NONE'", "'NULLIF'", "'NUMERIC'", "'OVERLAY'", 
        "'POSITION'", "'PRECISION'", "'REAL'", "'ROW'", "'SETOF'", "'SMALLINT'", 
        "'SUBSTRING'", "'TIME'", "'TIMESTAMP'", "'TREAT'", "'TRIM'", "'VALUES'", 
        "'VARCHAR'", "'XMLATTRIBUTES'", "'XMLCONCAT'", "'XMLELEMENT'", "'XMLEXISTS'", 
        "'XMLFOREST'", "'XMLPARSE'", "'XMLPI'", "'XMLROOT'", "'XMLSERIALIZE'", 
        "'CALL'", "'CURRENT'", "'ATTACH'", "'DETACH'", "'EXPRESSION'", "'GENERATED'", 
        "'LOGGED'", "'STORED'", "'INCLUDE'", "'ROUTINE'", "'TRANSFORM'", 
        "'IMPORT'", "'POLICY'", "'METHOD'", "'REFERENCING'", "'NEW'", "'OLD'", 
        "'VALUE'", "'SUBSCRIPTION'", "'PUBLICATION'", "'OUT'", "'END'", 
        "'ROUTINES'", "'SCHEMAS'", "'PROCEDURES'", "'INPUT'", "'SUPPORT'", 
        "'PARALLEL'", "'SQL'", "'DEPENDS'", "'OVERRIDING'", "'CONFLICT'", 
        "'SKIP'", "'LOCKED'", "'TIES'", "'ROLLUP'", "'CUBE'", "'GROUPING'", 
        "'SETS'", "'TABLESAMPLE'", "'ORDINALITY'", "'XMLTABLE'", "'COLUMNS'", 
        "'XMLNAMESPACES'", "'ROWTYPE'", "'NORMALIZED'", "'WITHIN'", "'FILTER'", 
        "'GROUPS'", "'OTHERS'", "'NFC'", "'NFD'", "'NFKC'", "'NFKD'", "'UESCAPE'", 
        "'VIEWS'", "'NORMALIZE'", "'DUMP'", "'PRINT_STRICT_PARAMS'", "'VARIABLE_CONFLICT'", 
        "'ERROR'", "'USE_VARIABLE'", "'USE_COLUMN'", "'ALIAS'", "'CONSTANT'", 
        "'PERFORM'", "'GET'", "'DIAGNOSTICS'", "'STACKED'", "'ELSIF'", "'WHILE'", 
        "'REVERSE'", "'FOREACH'", "'SLICE'", "'EXIT'", "'RETURN'", "'QUERY'", 
        "'RAISE'", "'SQLSTATE'", "'DEBUG'", "'LOG'", "'INFO'", "'NOTICE'", 
        "'WARNING'", "'EXCEPTION'", "'ASSERT'", "'LOOP'", "'OPEN'", "'PEFERENCES'", 
        "'USAGE'", "'CONNECT'", "'PUBLIC'", "'MERGE'", "'MATCHED'", "'BREADTH'", 
        "'DEPTH'", "'UNSAFE'", "'RESTRICTED'", "'SAFE'", "'FINALIZE'", "'MODULUS'", 
        "'REMAINDER'", "'LOGIN'", "'NOLOGIN'", "'REPLICATION'", "'NOREPLICATION'", 
        "'BYPASSRLS'", "'NOBYPASSRLS'", "'PERMISSIVE'", "'RESTRICTIVE'", 
        "'COMPRESSION'", "'PLAIN'", "'EXTENDED'", "'MAIN'", "'SKIP_LOCKED'", 
        "'BUFFER_USAGE_LIMIT'", null, null, null, null, null, null, null, 
        null, null, null, null, null, null, null, null, null, null, null, 
        null, null, null, null, null, null, null, null, null, null, null, 
        null, null, null, null, "'\\\\'", null, null, null, null, null, 
        null, null, "'''"
    ];

    public static readonly symbolicNames = [
        null, "Dollar", "OPEN_PAREN", "CLOSE_PAREN", "OPEN_BRACKET", "CLOSE_BRACKET", 
        "COMMA", "SEMI", "COLON", "STAR", "EQUAL", "DOT", "PLUS", "MINUS", 
        "SLASH", "CARET", "LT", "GT", "LESS_LESS", "GREATER_GREATER", "COLON_EQUALS", 
        "LESS_EQUALS", "EQUALS_GREATER", "GREATER_EQUALS", "DOT_DOT", "NOT_EQUALS", 
        "TYPECAST", "PERCENT", "PARAM", "Operator", "KW_ALL", "KW_ANALYSE", 
        "KW_ANALYZE", "KW_AND", "KW_ANY", "KW_ARRAY", "KW_AS", "KW_ASC", 
        "KW_ASYMMETRIC", "KW_BOTH", "KW_CASE", "KW_CAST", "KW_CHECK", "KW_COLLATE", 
        "KW_COLUMN", "KW_CONSTRAINT", "KW_CREATE", "KW_CURRENT_CATALOG", 
        "KW_CURRENT_DATE", "KW_CURRENT_ROLE", "KW_CURRENT_TIME", "KW_CURRENT_TIMESTAMP", 
        "KW_CURRENT_USER", "KW_DEFAULT", "KW_DEFERRABLE", "KW_DESC", "KW_DISTINCT", 
        "KW_DO", "KW_ELSE", "KW_EXCEPT", "KW_FALSE", "KW_FETCH", "KW_FOR", 
        "KW_FOREIGN", "KW_FROM", "KW_GRANT", "KW_GROUP", "KW_HAVING", "KW_IN", 
        "KW_INITIALLY", "KW_INTERSECT", "KW_INTO", "KW_LATERAL", "KW_LEADING", 
        "KW_LIMIT", "KW_LOCALTIME", "KW_LOCALTIMESTAMP", "KW_NOT", "KW_NULL", 
        "KW_OFFSET", "KW_ON", "KW_ONLY", "KW_OR", "KW_ORDER", "KW_PLACING", 
        "KW_PRIMARY", "KW_REFERENCES", "KW_RETURNING", "KW_SELECT", "KW_SESSION_USER", 
        "KW_SOME", "KW_SYMMETRIC", "KW_TABLE", "KW_THEN", "KW_TO", "KW_TRAILING", 
        "KW_TRUE", "KW_UNION", "KW_UNIQUE", "KW_USER", "KW_USING", "KW_VARIADIC", 
        "KW_WHEN", "KW_WHERE", "KW_WINDOW", "KW_WITH", "KW_AUTHORIZATION", 
        "KW_BINARY", "KW_COLLATION", "KW_CONCURRENTLY", "KW_CROSS", "KW_CURRENT_SCHEMA", 
        "KW_FREEZE", "KW_FULL", "KW_ILIKE", "KW_INNER", "KW_IS", "KW_ISNULL", 
        "KW_JOIN", "KW_LEFT", "KW_LIKE", "KW_NATURAL", "KW_NOTNULL", "KW_OUTER", 
        "KW_OVER", "KW_OVERLAPS", "KW_RIGHT", "KW_SIMILAR", "KW_VERBOSE", 
        "KW_ABORT", "KW_ABSOLUTE", "KW_ACCESS", "KW_ACTION", "KW_ADD", "KW_ADMIN", 
        "KW_AFTER", "KW_AGGREGATE", "KW_ALSO", "KW_ALTER", "KW_ALWAYS", 
        "KW_ASSERTION", "KW_ASSIGNMENT", "KW_AT", "KW_ATTRIBUTE", "KW_BACKWARD", 
        "KW_BEFORE", "KW_BEGIN", "KW_BY", "KW_CACHE", "KW_CALLED", "KW_CASCADE", 
        "KW_CASCADED", "KW_CATALOG", "KW_CHAIN", "KW_CHARACTERISTICS", "KW_CHECKPOINT", 
        "KW_CLASS", "KW_CLOSE", "KW_CLUSTER", "KW_COMMENT", "KW_COMMENTS", 
        "KW_COMMIT", "KW_COMMITTED", "KW_CONFIGURATION", "KW_CONNECTION", 
        "KW_CONSTRAINTS", "KW_CONTENT", "KW_CONTINUE", "KW_CONVERSION", 
        "KW_COPY", "KW_COST", "KW_CSV", "KW_CURSOR", "KW_CYCLE", "KW_DATA", 
        "KW_DATABASE", "KW_DAY", "KW_DEALLOCATE", "KW_DECLARE", "KW_DEFAULTS", 
        "KW_DEFERRED", "KW_DEFINER", "KW_DELETE", "KW_DELIMITER", "KW_DELIMITERS", 
        "KW_DICTIONARY", "KW_DISABLE", "KW_DISCARD", "KW_DOCUMENT", "KW_DOMAIN", 
        "KW_DOUBLE", "KW_DROP", "KW_EACH", "KW_ENABLE", "KW_ENCODING", "KW_ENCRYPTED", 
        "KW_ENUM", "KW_ESCAPE", "KW_EVENT", "KW_EXCLUDE", "KW_EXCLUDING", 
        "KW_EXCLUSIVE", "KW_EXECUTE", "KW_EXPLAIN", "KW_EXTENSION", "KW_EXTERNAL", 
        "KW_FAMILY", "KW_FIRST", "KW_FOLLOWING", "KW_FORCE", "KW_FORWARD", 
        "KW_FUNCTION", "KW_FUNCTIONS", "KW_GLOBAL", "KW_GRANTED", "KW_HANDLER", 
        "KW_HEADER", "KW_HOLD", "KW_HOUR", "KW_IDENTITY", "KW_IF", "KW_IMMEDIATE", 
        "KW_IMMUTABLE", "KW_IMPLICIT", "KW_INCLUDING", "KW_INCREMENT", "KW_INDEX", 
        "KW_INDEXES", "KW_INHERIT", "KW_NOINHERIT", "KW_SUPERUSER", "KW_NOSUPERUSER", 
        "KW_CREATEDB", "KW_NOCREATEDB", "KW_CREATEROLE", "KW_NOCREATEROLE", 
        "KW_CREATEUSER", "KW_NOCREATEUSER", "KW_INHERITS", "KW_INLINE", 
        "KW_INSENSITIVE", "KW_INSERT", "KW_INSTEAD", "KW_INVOKER", "KW_ISOLATION", 
        "KW_KEY", "KW_LABEL", "KW_LANGUAGE", "KW_LARGE", "KW_LAST", "KW_LEAKPROOF", 
        "KW_LEVEL", "KW_LISTEN", "KW_LOAD", "KW_LOCAL", "KW_LOCATION", "KW_LOCK", 
        "KW_MAPPING", "KW_MATCH", "KW_MATERIALIZED", "KW_MAXVALUE", "KW_MINUTE", 
        "KW_MINVALUE", "KW_MODE", "KW_MONTH", "KW_MOVE", "KW_NAME", "KW_NAMES", 
        "KW_NEXT", "KW_NO", "KW_NOTHING", "KW_NOTIFY", "KW_NOWAIT", "KW_NULLS", 
        "KW_OBJECT", "KW_OF", "KW_OFF", "KW_OIDS", "KW_OPERATOR", "KW_OPTION", 
        "KW_OPTIONS", "KW_OWNED", "KW_OWNER", "KW_PARSER", "KW_PARTIAL", 
        "KW_PARTITION", "KW_PASSING", "KW_PASSWORD", "KW_PLANS", "KW_PRECEDING", 
        "KW_PREPARE", "KW_PREPARED", "KW_PRESERVE", "KW_PRIOR", "KW_PRIVILEGES", 
        "KW_PROCEDURAL", "KW_PROCEDURE", "KW_PROGRAM", "KW_QUOTE", "KW_RANGE", 
        "KW_READ", "KW_REASSIGN", "KW_RECHECK", "KW_RECURSIVE", "KW_REF", 
        "KW_REFRESH", "KW_REINDEX", "KW_RELATIVE", "KW_RELEASE", "KW_RENAME", 
        "KW_REPEATABLE", "KW_REPLACE", "KW_REPLICA", "KW_RESET", "KW_RESTART", 
        "KW_RESTRICT", "KW_RETURNS", "KW_REVOKE", "KW_ROLE", "KW_ROLLBACK", 
        "KW_ROWS", "KW_RULE", "KW_SAVEPOINT", "KW_SCHEMA", "KW_SCROLL", 
        "KW_SEARCH", "KW_SECOND", "KW_SECURITY", "KW_SEQUENCE", "KW_SEQUENCES", 
        "KW_SERIALIZABLE", "KW_SERVER", "KW_SESSION", "KW_SET", "KW_SHARE", 
        "KW_SHOW", "KW_SIMPLE", "KW_SNAPSHOT", "KW_STABLE", "KW_STANDALONE", 
        "KW_START", "KW_STATEMENT", "KW_STATISTICS", "KW_STDIN", "KW_STDOUT", 
        "KW_STORAGE", "KW_STRICT", "KW_STRIP", "KW_SYSID", "KW_SYSTEM", 
        "KW_TABLES", "KW_TABLESPACE", "KW_TEMP", "KW_TEMPLATE", "KW_TEMPORARY", 
        "KW_TEXT", "KW_TRANSACTION", "KW_TRIGGER", "KW_TRUNCATE", "KW_TRUSTED", 
        "KW_TYPE", "KW_TYPES", "KW_UNBOUNDED", "KW_UNCOMMITTED", "KW_UNENCRYPTED", 
        "KW_UNKNOWN", "KW_UNLISTEN", "KW_UNLOGGED", "KW_UNTIL", "KW_UPDATE", 
        "KW_VACUUM", "KW_VALID", "KW_VALIDATE", "KW_VALIDATOR", "KW_VARYING", 
        "KW_VERSION", "KW_VIEW", "KW_VOLATILE", "KW_WHITESPACE", "KW_WITHOUT", 
        "KW_WORK", "KW_WRAPPER", "KW_WRITE", "KW_XML", "KW_YEAR", "KW_YES", 
        "KW_ZONE", "KW_BETWEEN", "KW_BIGINT", "KW_BIT", "KW_BOOLEAN", "KW_CHAR", 
        "KW_CHARACTER", "KW_COALESCE", "KW_DEC", "KW_DECIMAL", "KW_EXISTS", 
        "KW_EXTRACT", "KW_FLOAT", "KW_GREATEST", "KW_INOUT", "KW_INT", "KW_INTEGER", 
        "KW_INTERVAL", "KW_LEAST", "KW_NATIONAL", "KW_NCHAR", "KW_NONE", 
        "KW_NULLIF", "KW_NUMERIC", "KW_OVERLAY", "KW_POSITION", "KW_PRECISION", 
        "KW_REAL", "KW_ROW", "KW_SETOF", "KW_SMALLINT", "KW_SUBSTRING", 
        "KW_TIME", "KW_TIMESTAMP", "KW_TREAT", "KW_TRIM", "KW_VALUES", "KW_VARCHAR", 
        "KW_XMLATTRIBUTES", "KW_XMLCONCAT", "KW_XMLELEMENT", "KW_XMLEXISTS", 
        "KW_XMLFOREST", "KW_XMLPARSE", "KW_XMLPI", "KW_XMLROOT", "KW_XMLSERIALIZE", 
        "KW_CALL", "KW_CURRENT", "KW_ATTACH", "KW_DETACH", "KW_EXPRESSION", 
        "KW_GENERATED", "KW_LOGGED", "KW_STORED", "KW_INCLUDE", "KW_ROUTINE", 
        "KW_TRANSFORM", "KW_IMPORT", "KW_POLICY", "KW_METHOD", "KW_REFERENCING", 
        "KW_NEW", "KW_OLD", "KW_VALUE", "KW_SUBSCRIPTION", "KW_PUBLICATION", 
        "KW_OUT", "KW_END", "KW_ROUTINES", "KW_SCHEMAS", "KW_PROCEDURES", 
        "KW_INPUT", "KW_SUPPORT", "KW_PARALLEL", "KW_SQL", "KW_DEPENDS", 
        "KW_OVERRIDING", "KW_CONFLICT", "KW_SKIP", "KW_LOCKED", "KW_TIES", 
        "KW_ROLLUP", "KW_CUBE", "KW_GROUPING", "KW_SETS", "KW_TABLESAMPLE", 
        "KW_ORDINALITY", "KW_XMLTABLE", "KW_COLUMNS", "KW_XMLNAMESPACES", 
        "KW_ROWTYPE", "KW_NORMALIZED", "KW_WITHIN", "KW_FILTER", "KW_GROUPS", 
        "KW_OTHERS", "KW_NFC", "KW_NFD", "KW_NFKC", "KW_NFKD", "KW_UESCAPE", 
        "KW_VIEWS", "KW_NORMALIZE", "KW_DUMP", "KW_PRINT_STRICT_PARAMS", 
        "KW_VARIABLE_CONFLICT", "KW_ERROR", "KW_USE_VARIABLE", "KW_USE_COLUMN", 
        "KW_ALIAS", "KW_CONSTANT", "KW_PERFORM", "KW_GET", "KW_DIAGNOSTICS", 
        "KW_STACKED", "KW_ELSIF", "KW_WHILE", "KW_REVERSE", "KW_FOREACH", 
        "KW_SLICE", "KW_EXIT", "KW_RETURN", "KW_QUERY", "KW_RAISE", "KW_SQLSTATE", 
        "KW_DEBUG", "KW_LOG", "KW_INFO", "KW_NOTICE", "KW_WARNING", "KW_EXCEPTION", 
        "KW_ASSERT", "KW_LOOP", "KW_OPEN", "KW_PEFERENCES", "KW_USAGE", 
        "KW_CONNECT", "KW_PUBLIC", "KW_MERGE", "KW_MATCHED", "KW_BREADTH", 
        "KW_DEPTH", "KW_UNSAFE", "KW_RESTRICTED", "KW_SAFE", "KW_FINALIZE", 
        "KW_MODULUS", "KW_REMAINDER", "KW_LOGIN", "KW_NOLOGIN", "KW_REPLICATION", 
        "KW_NOREPLICATION", "KW_BYPASSRLS", "KW_NOBYPASSRLS", "KW_PERMISSIVE", 
        "KW_RESTRICTIVE", "KW_COMPRESSION", "KW_PLAIN", "KW_EXTENDED", "KW_MAIN", 
        "KW_SKIP_LOCKED", "KW_BUFFER_USAGE_LIMIT", "Identifier", "QuotedIdentifier", 
        "UnterminatedQuotedIdentifier", "InvalidQuotedIdentifier", "InvalidUnterminatedQuotedIdentifier", 
        "UnicodeQuotedIdentifier", "UnterminatedUnicodeQuotedIdentifier", 
        "InvalidUnicodeQuotedIdentifier", "InvalidUnterminatedUnicodeQuotedIdentifier", 
        "StringConstant", "UnterminatedStringConstant", "UnicodeEscapeStringConstant", 
        "UnterminatedUnicodeEscapeStringConstant", "BeginDollarStringConstant", 
        "BinaryStringConstant", "UnterminatedBinaryStringConstant", "InvalidBinaryStringConstant", 
        "InvalidUnterminatedBinaryStringConstant", "HexadecimalStringConstant", 
        "UnterminatedHexadecimalStringConstant", "InvalidHexadecimalStringConstant", 
        "InvalidUnterminatedHexadecimalStringConstant", "Integral", "NumericFail", 
        "Numeric", "PLSQLVARIABLENAME", "PLSQLIDENTIFIER", "Whitespace", 
        "Newline", "LineComment", "BlockComment", "UnterminatedBlockComment", 
        "MetaCommand", "EndMetaCommand", "ErrorCharacter", "EscapeStringConstant", 
        "UnterminatedEscapeStringConstant", "InvalidEscapeStringConstant", 
        "InvalidUnterminatedEscapeStringConstant", "DollarText", "EndDollarStringConstant", 
        "AfterEscapeStringConstantWithNewlineMode_Continued"
    ];
    public static readonly ruleNames = [
        "program", "plsqlroot", "singleStmt", "stmt", "plsqlconsolecommand", 
        "callstmt", "createrolestmt", "opt_with", "optrolelist", "alteroptrolelist", 
        "alteroptroleelem", "createoptroleelem", "createuserstmt", "alterrolestmt", 
        "opt_in_database", "alterrolesetstmt", "alterroutinestmt", "alter_routine_cluase", 
        "routine_action_list", "routine_action", "creategroupstmt", "altergroupstmt", 
        "add_drop", "createschemastmt", "schema_name_create", "optschemaeltlist", 
        "schema_stmt", "variablesetstmt", "set_rest", "generic_set", "set_rest_more", 
        "var_name", "var_list", "var_value", "iso_level", "opt_boolean_or_string_column", 
        "opt_boolean_or_string", "zone_value", "opt_encoding", "nonreservedword_or_sconst_column", 
        "nonreservedword_or_sconst", "variableresetstmt", "reset_rest", 
        "generic_reset", "setresetclause", "functionsetresetclause", "variableshowstmt", 
        "constraintssetstmt", "constraints_set_list", "constraints_set_mode", 
        "checkpointstmt", "discardstmt", "altertablestmt", "alter_table_cmds", 
        "partition_bound_spec", "partition_bound_cluase", "partition_bound_choose", 
        "partition_with_cluase", "partition_cmd", "index_partition_cmd", 
        "alter_table_cmd", "alter_column_default", "opt_drop_behavior", 
        "opt_collate_clause", "alter_using", "replica_identity", "reloptions", 
        "opt_reloptions", "reloption_list", "reloption_elem", "alter_identity_column_option_list", 
        "alter_identity_column_option", "partitionboundspec", "hash_partbound_elem", 
        "hash_partbound", "altercompositetypestmt", "alter_type_cmds", "alter_type_cmd", 
        "closeportalstmt", "copystmt", "copy_from", "opt_program", "copy_file_name", 
        "copy_options", "copy_opt_list", "copy_opt_item", "opt_binary", 
        "copy_delimiter", "opt_using", "copy_generic_opt_list", "copy_generic_opt_elem", 
        "copy_generic_opt_arg", "copy_generic_opt_arg_list", "copy_generic_opt_arg_list_item", 
        "createstmt", "opttemp", "table_column_list", "opttableelementlist", 
        "opttypedtableelementlist", "tableelementlist", "typedtableelementlist", 
        "tableelement", "typedtableelement", "column_def", "compressionCluase", 
        "storageCluase", "columnOptions", "colquallist", "colconstraint", 
        "colconstraintelem", "nulls_distinct", "generated_when", "deferrable_trigger", 
        "initially_trigger", "tablelikeclause", "tablelikeoptionlist", "tablelikeoption", 
        "tableconstraint", "constraintelem", "opt_no_inherit", "opt_column_list", 
        "opt_column_list_create", "column_list", "column_list_create", "opt_c_include", 
        "key_match", "exclusionconstraintlist", "exclusionconstraintelem", 
        "exclusionwhereclause", "key_actions", "key_update", "key_delete", 
        "key_action", "optinherit", "optpartitionspec", "partitionspec", 
        "part_params", "part_elem", "table_access_method_clause", "optwith", 
        "oncommitoption", "opttablespace", "index_paramenters_create", "optconstablespace", 
        "existingindex", "createstatsstmt", "alterstatsstmt", "createasstmt", 
        "create_as_target", "opt_with_data", "creatematviewstmt", "create_mv_target", 
        "optnolog", "refreshmatviewstmt", "createseqstmt", "alterseqstmt", 
        "optseqoptlist", "optparenthesizedseqoptlist", "seqoptlist", "seqoptelem", 
        "opt_by", "numericonly", "numericonly_list", "createplangstmt", 
        "opt_trusted", "handler_name", "opt_inline_handler", "validator_clause", 
        "opt_validator", "opt_procedural", "createtablespacestmt", "opttablespaceowner", 
        "createextensionstmt", "create_extension_opt_list", "create_extension_opt_item", 
        "alterextensionstmt", "alter_extension_opt_list", "alter_extension_opt_item", 
        "alterextensioncontentsstmt", "createfdwstmt", "fdw_option", "fdw_options", 
        "opt_fdw_options", "alterfdwstmt", "create_generic_options", "generic_option_list", 
        "alter_generic_options", "alter_generic_option_list", "alter_generic_option_elem", 
        "generic_option_elem", "generic_option_name", "generic_option_arg", 
        "createforeignserverstmt", "opt_type", "foreign_server_version", 
        "opt_foreign_server_version", "alterforeignserverstmt", "createforeigntablestmt", 
        "importforeignschemastmt", "import_qualification_type", "import_qualification", 
        "createusermappingstmt", "auth_ident", "alterusermappingstmt", "createpolicystmt", 
        "alterpolicystmt", "alterprocedurestmt", "procedure_cluase", "procedure_action", 
        "rowsecurityoptionalexpr", "rowsecurityoptionalwithcheck", "rowsecuritydefaulttorole", 
        "rowsecurityoptionaltorole", "rowsecuritydefaultpermissive", "rowsecuritydefaultforcmd", 
        "row_security_cmd", "createamstmt", "am_type", "createtrigstmt", 
        "triggeractiontime", "foreachrow", "roworstatment", "triggerevents", 
        "triggeroneevent", "triggerreferencing", "triggertransitions", "triggertransition", 
        "transitionoldornew", "transitionrowortable", "transitionrelname", 
        "triggerforspec", "triggerforopteach", "triggerfortype", "triggerwhen", 
        "function_or_procedure", "triggerfuncargs", "triggerfuncarg", "optconstrfromtable", 
        "constraintattributespec", "constraintattributeElem", "createeventtrigstmt", 
        "event_trigger_when_list", "event_trigger_when_item", "event_trigger_value_list", 
        "altereventtrigstmt", "enable_trigger", "createassertionstmt", "definestmt", 
        "definition", "def_list", "def_elem", "def_arg", "old_aggr_definition", 
        "old_aggr_list", "old_aggr_elem", "opt_enum_val_list", "enum_val_list", 
        "alterenumstmt", "opt_if_not_exists", "createopclassstmt", "opclass_item_list", 
        "opclass_item", "opt_default", "opt_opfamily", "opclass_purpose", 
        "opt_recheck", "createopfamilystmt", "alteropfamilystmt", "opclass_drop_list", 
        "opclass_drop", "reassignownedstmt", "dropstmt", "view_nameList", 
        "object_type_any_name", "object_type_name", "object_type_name_on_any_name", 
        "any_name_list", "relation_column_name", "relation_name", "any_name", 
        "attrs", "type_name_list", "truncatestmt", "truncate_table", "commentstmt", 
        "comment_text", "seclabelstmt", "opt_provider", "security_label", 
        "fetchstmt", "fetch_args", "from_in", "opt_from_in", "grantstmt", 
        "revokestmt", "privileges", "beforeprivilegeselectlist", "beforeprivilegeselect", 
        "privilege_list", "privilege", "privilege_target", "grantee_list", 
        "grantee", "opt_grant_grant_option", "grantrolestmt", "revokerolestmt", 
        "opt_grant_admin_option", "opt_granted_by", "alterdefaultprivilegesstmt", 
        "defacloptionlist", "defacloption", "defaclaction", "defacl_privilege_target", 
        "indexstmt", "opt_unique", "opt_concurrently", "opt_index_name", 
        "access_method_clause", "index_params", "index_elem_options", "index_elem", 
        "opt_include", "index_including_params", "opt_collate", "opt_class", 
        "opt_asc_desc", "opt_nulls_order", "createfunctionstmt", "attrilist", 
        "opt_or_replace", "func_args", "func_args_list", "routine_with_argtypes_list", 
        "routine_with_argtypes", "procedure_with_argtypes_list", "procedure_with_argtypes", 
        "function_with_argtypes_list", "function_with_argtypes", "func_args_with_defaults", 
        "func_args_with_defaults_list", "func_arg", "arg_class", "param_name", 
        "func_return", "func_type", "func_arg_with_default", "aggr_arg", 
        "aggr_args", "aggr_args_list", "aggregate_with_argtypes", "aggregate_with_argtypes_list", 
        "createfunc_opt_list", "common_func_opt_item", "createfunc_opt_item", 
        "transform_type_list", "opt_definition", "table_func_column", "table_func_column_list", 
        "alterfunctionstmt", "alterFunctionTypeClause", "alterfunc_opt_list", 
        "opt_restrict", "removefuncstmt", "removeaggrstmt", "removeoperstmt", 
        "oper_argtypes", "any_operator", "operator_with_argtypes_list", 
        "operator_with_argtypes", "dostmt", "dostmt_opt_list", "dostmt_opt_item", 
        "createcaststmt", "cast_context", "opt_if_exists", "createtransformstmt", 
        "transform_element_list", "reindexstmt", "reindex_target_type", 
        "reindex_target_multitable", "reindex_option_list", "reindex_option_elem", 
        "altertblspcstmt", "renamestmt", "opt_set_data", "alterobjectdependsstmt", 
        "opt_no", "alterobjectschemastmt", "alteroperatorstmt", "operator_def_list", 
        "operator_def_elem", "operator_def_arg", "altertypestmt", "alterownerstmt", 
        "createpublicationstmt", "opt_publication_for_tables", "publication_for_tables", 
        "alterpublicationstmt", "createsubscriptionstmt", "publication_name_list", 
        "publication_name_item", "altersubscriptionstmt", "rulestmt", "ruleactionlist", 
        "ruleactionmulti", "ruleactionstmt", "ruleactionstmtOrEmpty", "event", 
        "opt_instead", "notifystmt", "notify_payload", "listenstmt", "unlistenstmt", 
        "transactionstmt", "opt_transaction", "transaction_mode_item", "transaction_mode_list", 
        "transaction_mode_list_or_empty", "opt_transaction_chain", "viewstmt", 
        "opt_check_option", "loadstmt", "createdbstmt", "createdb_opt_list", 
        "createdb_opt_items", "createdb_opt_item", "createdb_opt_name", 
        "opt_equal", "alterdatabasestmt", "alterdatabasesetstmt", "drop_option_list", 
        "drop_option", "altercollationstmt", "altersystemstmt", "createdomainstmt", 
        "alterdomainstmt", "opt_as", "altertsdictionarystmt", "altertsconfigurationstmt", 
        "any_with", "createconversionstmt", "clusterstmt", "opt_verbose_list", 
        "cluster_index_specification", "vacuumstmt", "analyzestmt", "vac_analyze_option_list", 
        "analyze_keyword", "vac_analyze_option_elem", "vac_analyze_option_name", 
        "vac_analyze_option_arg", "opt_analyze", "analyze_options_list", 
        "analyze_option_elem", "opt_verbose", "opt_skiplock", "opt_buffer_usage_limit", 
        "opt_full", "opt_freeze", "opt_name_list", "vacuum_relation", "vacuum_relation_list", 
        "opt_vacuum_relation_list", "explainstmt", "explainablestmt", "explain_option_list", 
        "explain_option_elem", "explain_option_name", "explain_option_arg", 
        "preparestmt", "prep_type_clause", "preparablestmt", "executestmt", 
        "execute_param_clause", "deallocatestmt", "insertstmt", "insert_target", 
        "insert_rest", "override_kind", "insert_column_list", "insert_column_item", 
        "opt_on_conflict", "opt_conf_expr", "returning_clause", "deletestmt", 
        "using_clause", "lockstmt", "opt_lock", "lock_type", "opt_nowait", 
        "opt_nowait_or_skip", "updatestmt", "set_clause_list", "set_clause", 
        "set_target", "set_target_list", "declarecursorstmt", "cursor_name", 
        "cursor_options", "opt_hold", "selectstmt", "select_with_parens", 
        "select_no_parens", "select_clause", "simple_select", "set_operator", 
        "set_operator_with_all_or_distinct", "with_clause", "cte_list", 
        "common_table_expr", "search_cluase", "cycle_cluase", "opt_materialized", 
        "opt_with_clause", "into_clause", "opt_strict", "opttempTableName", 
        "opt_table", "all_or_distinct", "distinct_clause", "opt_all_clause", 
        "opt_sort_clause", "sort_clause", "sortby_list", "sortby", "select_limit", 
        "opt_select_limit", "limit_clause", "fetch_clause", "offset_clause", 
        "select_limit_value", "select_offset_value", "select_fetch_first_value", 
        "i_or_f_const", "row_or_rows", "first_or_next", "group_clause", 
        "group_by_list", "group_by_item", "empty_grouping_set", "rollup_clause", 
        "cube_clause", "grouping_sets_clause", "having_clause", "for_locking_clause", 
        "opt_for_locking_clause", "for_locking_items", "for_locking_item", 
        "for_locking_strength", "locked_rels_list", "values_clause", "from_clause", 
        "from_list", "table_ref", "alias_clause", "opt_alias_clause", "func_alias_clause", 
        "join_type", "join_qual", "relation_expr", "view_relation_expr", 
        "publication_relation_expr", "relation_expr_list", "publication_relation_expr_list", 
        "relation_expr_opt_alias", "tablesample_clause", "opt_repeatable_clause", 
        "func_table", "rowsfrom_item", "rowsfrom_list", "opt_col_def_list", 
        "opt_ordinality", "where_clause", "where_or_current_clause", "opttablefuncelementlist", 
        "tablefuncelementlist", "tablefuncelement", "xmltable", "xmltable_column_list", 
        "xmltable_column_el", "xmltable_column_option_list", "xmltable_column_option_el", 
        "xml_namespace_list", "xml_namespace_el", "typename", "opt_array_bounds", 
        "simpletypename", "consttypename", "generictype", "opt_type_modifiers", 
        "numeric", "opt_float", "bit", "constbit", "bitwithlength", "bitwithoutlength", 
        "character", "constcharacter", "character_c", "opt_varying", "constdatetime", 
        "constinterval", "opt_timezone", "opt_interval", "interval_second", 
        "opt_escape", "a_expr", "a_expr_qual", "a_expr_lessless", "a_expr_or", 
        "a_expr_and", "a_expr_in", "a_expr_unary_not", "a_expr_isnull", 
        "a_expr_is_not", "a_expr_compare", "a_expr_like", "a_expr_qual_op", 
        "a_expr_unary_qualop", "a_expr_add", "a_expr_mul", "a_expr_caret", 
        "a_expr_unary_sign", "a_expr_at_time_zone", "a_expr_collate", "a_expr_typecast", 
        "b_expr", "c_expr", "plsqlvariablename", "func_application", "func_expr", 
        "func_expr_windowless", "func_expr_common_subexpr", "xml_root_version", 
        "opt_xml_root_standalone", "xml_attributes", "xml_attribute_list", 
        "xml_attribute_el", "document_or_content", "xml_whitespace_option", 
        "xmlexists_argument", "xml_passing_mech", "within_group_clause", 
        "filter_clause", "window_clause", "window_definition_list", "window_definition", 
        "over_clause", "window_specification", "opt_existing_window_name", 
        "opt_partition_clause", "opt_frame_clause", "frame_extent", "frame_bound", 
        "opt_window_exclusion_clause", "row", "explicit_row", "implicit_row", 
        "sub_type", "all_op", "mathop", "qual_op", "qual_all_op", "subquery_Op", 
        "expr_list", "column_expr_list_noparen", "column_expr_list", "column_expr", 
        "column_expr_noparen", "func_arg_list", "func_arg_expr", "type_list", 
        "array_expr", "array_expr_list", "extract_list", "extract_arg", 
        "unicode_normal_form", "overlay_list", "position_list", "substr_list", 
        "trim_list", "in_expr", "case_expr", "when_clause_list", "when_clause", 
        "case_default", "case_arg", "columnref", "indirection_el", "opt_slice_bound", 
        "indirection", "opt_indirection", "opt_target_list", "target_list", 
        "target_el", "qualified_name_list", "table_name_list", "schema_name_list", 
        "database_nameList", "procedure_name_list", "tablespace_name_create", 
        "tablespace_name", "table_name_create", "table_name", "view_name_create", 
        "view_name", "qualified_name", "tablespace_name_list", "name_list", 
        "database_name_create", "database_name", "schema_name", "routine_name_create", 
        "routine_name", "procedure_name", "procedure_name_create", "column_name", 
        "column_name_create", "name", "attr_name", "file_name", "function_name_create", 
        "function_name", "usual_name", "aexprconst", "xconst", "bconst", 
        "fconst", "iconst", "sconst", "anysconst", "opt_uescape", "signediconst", 
        "groupname", "roleid", "rolespec", "role_list", "colid", "index_method_choices", 
        "exclude_element", "index_paramenters", "type_function_name", "type_usual_name", 
        "nonreservedword_column", "nonreservedword", "collabel", "identifier", 
        "plsqlidentifier", "unreserved_keyword", "col_name_keyword", "type_func_name_keyword", 
        "reserved_keyword", "pl_function", "comp_options", "comp_option", 
        "sharp", "option_value", "opt_semi", "pl_block", "decl_sect", "decl_start", 
        "decl_stmts", "label_decl", "decl_stmt", "decl_statement", "opt_scrollable", 
        "decl_cursor_query", "decl_cursor_args", "decl_cursor_arglist", 
        "decl_cursor_arg", "decl_is_for", "decl_aliasitem", "decl_varname", 
        "decl_const", "decl_datatype", "decl_collate", "decl_notnull", "decl_defval", 
        "decl_defkey", "assign_operator", "proc_sect", "proc_stmt", "stmt_perform", 
        "stmt_call", "opt_expr_list", "stmt_assign", "stmt_getdiag", "getdiag_area_opt", 
        "getdiag_list", "getdiag_list_item", "getdiag_item", "getdiag_target", 
        "assign_var", "stmt_if", "stmt_elsifs", "stmt_else", "stmt_case", 
        "opt_expr_until_when", "case_when_list", "case_when", "opt_case_else", 
        "stmt_loop", "stmt_while", "stmt_for", "for_control", "opt_for_using_expression", 
        "opt_cursor_parameters", "opt_reverse", "opt_by_expression", "for_variable", 
        "stmt_foreach_a", "foreach_slice", "stmt_exit", "exit_type", "stmt_return", 
        "opt_return_result", "stmt_raise", "opt_stmt_raise_level", "opt_raise_list", 
        "opt_raise_using", "opt_raise_using_elem", "opt_raise_using_elem_list", 
        "stmt_assert", "opt_stmt_assert_message", "loop_body", "stmt_execsql", 
        "stmt_dynexecute", "opt_execute_using", "opt_execute_using_list", 
        "opt_execute_into", "stmt_open", "opt_open_bound_list_item", "opt_open_bound_list", 
        "opt_open_using", "opt_scroll_option", "opt_scroll_option_no", "stmt_fetch", 
        "into_target", "opt_cursor_from", "opt_fetch_direction", "stmt_move", 
        "mergestmt", "data_source", "join_condition", "merge_when_clause", 
        "merge_insert", "merge_update", "default_values_or_values", "exprofdefaultlist", 
        "exprofdefault", "stmt_close", "stmt_null", "stmt_commit", "stmt_rollback", 
        "plsql_opt_transaction_chain", "stmt_set", "cursor_variable", "exception_sect", 
        "proc_exceptions", "proc_exception", "proc_conditions", "proc_condition", 
        "opt_block_label", "opt_loop_label", "opt_label", "opt_exitcond", 
        "any_identifier", "plsql_unreserved_keyword", "sql_expression", 
        "expr_until_then", "expr_until_semi", "expr_until_rightbracket", 
        "expr_until_loop", "make_execsql_stmt", "opt_returning_clause_into",
    ];

    public get grammarFileName(): string { return "PostgreSqlParser.g4"; }
    public get literalNames(): (string | null)[] { return PostgreSqlParser.literalNames; }
    public get symbolicNames(): (string | null)[] { return PostgreSqlParser.symbolicNames; }
    public get ruleNames(): string[] { return PostgreSqlParser.ruleNames; }
    public get serializedATN(): number[] { return PostgreSqlParser._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, PostgreSqlParser._ATN, PostgreSqlParser.decisionsToDFA, new antlr.PredictionContextCache());
    }
    public program(): ProgramContext {
        let localContext = new ProgramContext(this.context, this.state);
        this.enterRule(localContext, 0, PostgreSqlParser.RULE_program);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1753;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 2 || _la === 31 || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 570441729) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 142606337) !== 0) || _la === 105 || _la === 129 || ((((_la - 138)) & ~0x1F) === 0 && ((1 << (_la - 138)) & 2159673601) !== 0) || ((((_la - 177)) & ~0x1F) === 0 && ((1 << (_la - 177)) & 100680739) !== 0) || ((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 1090557953) !== 0) || ((((_la - 290)) & ~0x1F) === 0 && ((1 << (_la - 290)) & 679839745) !== 0) || ((((_la - 322)) & ~0x1F) === 0 && ((1 << (_la - 322)) & 272417) !== 0) || ((((_la - 358)) & ~0x1F) === 0 && ((1 << (_la - 358)) & 6401) !== 0) || ((((_la - 422)) & ~0x1F) === 0 && ((1 << (_la - 422)) & 4196353) !== 0) || _la === 454 || _la === 525 || _la === 581) {
                {
                {
                this.state = 1750;
                this.singleStmt();
                }
                }
                this.state = 1755;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 1756;
            this.match(PostgreSqlParser.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 plsqlroot(): PlsqlrootContext {
        let localContext = new PlsqlrootContext(this.context, this.state);
        this.enterRule(localContext, 2, PostgreSqlParser.RULE_plsqlroot);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1758;
            this.pl_function();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public singleStmt(): SingleStmtContext {
        let localContext = new SingleStmtContext(this.context, this.state);
        this.enterRule(localContext, 4, PostgreSqlParser.RULE_singleStmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1760;
            this.stmt();
            this.state = 1762;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 7) {
                {
                this.state = 1761;
                this.match(PostgreSqlParser.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 stmt(): StmtContext {
        let localContext = new StmtContext(this.context, this.state);
        this.enterRule(localContext, 6, PostgreSqlParser.RULE_stmt);
        try {
            this.state = 1881;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 2, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1764;
                this.altereventtrigstmt();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1765;
                this.altercollationstmt();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1766;
                this.alterdatabasestmt();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1767;
                this.alterdatabasesetstmt();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1768;
                this.alterdefaultprivilegesstmt();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1769;
                this.alterdomainstmt();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1770;
                this.alterenumstmt();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 1771;
                this.alterextensionstmt();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 1772;
                this.alterextensioncontentsstmt();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 1773;
                this.alterfdwstmt();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 1774;
                this.alterforeignserverstmt();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 1775;
                this.alterfunctionstmt();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 1776;
                this.altergroupstmt();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 1777;
                this.alterobjectdependsstmt();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 1778;
                this.alterobjectschemastmt();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 1779;
                this.alterownerstmt();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 1780;
                this.alteroperatorstmt();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 1781;
                this.altertypestmt();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 1782;
                this.alterpolicystmt();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 1783;
                this.alterprocedurestmt();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 1784;
                this.alterseqstmt();
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 1785;
                this.altersystemstmt();
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 1786;
                this.altertablestmt();
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 1787;
                this.altertblspcstmt();
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 1788;
                this.altercompositetypestmt();
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 1789;
                this.alterpublicationstmt();
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 1790;
                this.alterrolesetstmt();
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 1791;
                this.alterroutinestmt();
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 1792;
                this.alterrolestmt();
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 1793;
                this.altersubscriptionstmt();
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 1794;
                this.alterstatsstmt();
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 1795;
                this.altertsconfigurationstmt();
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 1796;
                this.altertsdictionarystmt();
                }
                break;
            case 34:
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 1797;
                this.alterusermappingstmt();
                }
                break;
            case 35:
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 1798;
                this.analyzestmt();
                }
                break;
            case 36:
                this.enterOuterAlt(localContext, 36);
                {
                this.state = 1799;
                this.callstmt();
                }
                break;
            case 37:
                this.enterOuterAlt(localContext, 37);
                {
                this.state = 1800;
                this.checkpointstmt();
                }
                break;
            case 38:
                this.enterOuterAlt(localContext, 38);
                {
                this.state = 1801;
                this.closeportalstmt();
                }
                break;
            case 39:
                this.enterOuterAlt(localContext, 39);
                {
                this.state = 1802;
                this.clusterstmt();
                }
                break;
            case 40:
                this.enterOuterAlt(localContext, 40);
                {
                this.state = 1803;
                this.commentstmt();
                }
                break;
            case 41:
                this.enterOuterAlt(localContext, 41);
                {
                this.state = 1804;
                this.constraintssetstmt();
                }
                break;
            case 42:
                this.enterOuterAlt(localContext, 42);
                {
                this.state = 1805;
                this.copystmt();
                }
                break;
            case 43:
                this.enterOuterAlt(localContext, 43);
                {
                this.state = 1806;
                this.createamstmt();
                }
                break;
            case 44:
                this.enterOuterAlt(localContext, 44);
                {
                this.state = 1807;
                this.createasstmt();
                }
                break;
            case 45:
                this.enterOuterAlt(localContext, 45);
                {
                this.state = 1808;
                this.createassertionstmt();
                }
                break;
            case 46:
                this.enterOuterAlt(localContext, 46);
                {
                this.state = 1809;
                this.createcaststmt();
                }
                break;
            case 47:
                this.enterOuterAlt(localContext, 47);
                {
                this.state = 1810;
                this.createconversionstmt();
                }
                break;
            case 48:
                this.enterOuterAlt(localContext, 48);
                {
                this.state = 1811;
                this.createdomainstmt();
                }
                break;
            case 49:
                this.enterOuterAlt(localContext, 49);
                {
                this.state = 1812;
                this.createextensionstmt();
                }
                break;
            case 50:
                this.enterOuterAlt(localContext, 50);
                {
                this.state = 1813;
                this.createfdwstmt();
                }
                break;
            case 51:
                this.enterOuterAlt(localContext, 51);
                {
                this.state = 1814;
                this.createforeignserverstmt();
                }
                break;
            case 52:
                this.enterOuterAlt(localContext, 52);
                {
                this.state = 1815;
                this.createforeigntablestmt();
                }
                break;
            case 53:
                this.enterOuterAlt(localContext, 53);
                {
                this.state = 1816;
                this.createfunctionstmt();
                }
                break;
            case 54:
                this.enterOuterAlt(localContext, 54);
                {
                this.state = 1817;
                this.creategroupstmt();
                }
                break;
            case 55:
                this.enterOuterAlt(localContext, 55);
                {
                this.state = 1818;
                this.creatematviewstmt();
                }
                break;
            case 56:
                this.enterOuterAlt(localContext, 56);
                {
                this.state = 1819;
                this.createopclassstmt();
                }
                break;
            case 57:
                this.enterOuterAlt(localContext, 57);
                {
                this.state = 1820;
                this.createopfamilystmt();
                }
                break;
            case 58:
                this.enterOuterAlt(localContext, 58);
                {
                this.state = 1821;
                this.createpublicationstmt();
                }
                break;
            case 59:
                this.enterOuterAlt(localContext, 59);
                {
                this.state = 1822;
                this.alteropfamilystmt();
                }
                break;
            case 60:
                this.enterOuterAlt(localContext, 60);
                {
                this.state = 1823;
                this.createpolicystmt();
                }
                break;
            case 61:
                this.enterOuterAlt(localContext, 61);
                {
                this.state = 1824;
                this.createplangstmt();
                }
                break;
            case 62:
                this.enterOuterAlt(localContext, 62);
                {
                this.state = 1825;
                this.createschemastmt();
                }
                break;
            case 63:
                this.enterOuterAlt(localContext, 63);
                {
                this.state = 1826;
                this.createseqstmt();
                }
                break;
            case 64:
                this.enterOuterAlt(localContext, 64);
                {
                this.state = 1827;
                this.createstmt();
                }
                break;
            case 65:
                this.enterOuterAlt(localContext, 65);
                {
                this.state = 1828;
                this.createsubscriptionstmt();
                }
                break;
            case 66:
                this.enterOuterAlt(localContext, 66);
                {
                this.state = 1829;
                this.createstatsstmt();
                }
                break;
            case 67:
                this.enterOuterAlt(localContext, 67);
                {
                this.state = 1830;
                this.createtablespacestmt();
                }
                break;
            case 68:
                this.enterOuterAlt(localContext, 68);
                {
                this.state = 1831;
                this.createtransformstmt();
                }
                break;
            case 69:
                this.enterOuterAlt(localContext, 69);
                {
                this.state = 1832;
                this.createtrigstmt();
                }
                break;
            case 70:
                this.enterOuterAlt(localContext, 70);
                {
                this.state = 1833;
                this.createeventtrigstmt();
                }
                break;
            case 71:
                this.enterOuterAlt(localContext, 71);
                {
                this.state = 1834;
                this.createrolestmt();
                }
                break;
            case 72:
                this.enterOuterAlt(localContext, 72);
                {
                this.state = 1835;
                this.createuserstmt();
                }
                break;
            case 73:
                this.enterOuterAlt(localContext, 73);
                {
                this.state = 1836;
                this.createusermappingstmt();
                }
                break;
            case 74:
                this.enterOuterAlt(localContext, 74);
                {
                this.state = 1837;
                this.createdbstmt();
                }
                break;
            case 75:
                this.enterOuterAlt(localContext, 75);
                {
                this.state = 1838;
                this.deallocatestmt();
                }
                break;
            case 76:
                this.enterOuterAlt(localContext, 76);
                {
                this.state = 1839;
                this.declarecursorstmt();
                }
                break;
            case 77:
                this.enterOuterAlt(localContext, 77);
                {
                this.state = 1840;
                this.definestmt();
                }
                break;
            case 78:
                this.enterOuterAlt(localContext, 78);
                {
                this.state = 1841;
                this.deletestmt();
                }
                break;
            case 79:
                this.enterOuterAlt(localContext, 79);
                {
                this.state = 1842;
                this.discardstmt();
                }
                break;
            case 80:
                this.enterOuterAlt(localContext, 80);
                {
                this.state = 1843;
                this.dostmt();
                }
                break;
            case 81:
                this.enterOuterAlt(localContext, 81);
                {
                this.state = 1844;
                this.dropstmt();
                }
                break;
            case 82:
                this.enterOuterAlt(localContext, 82);
                {
                this.state = 1845;
                this.executestmt();
                }
                break;
            case 83:
                this.enterOuterAlt(localContext, 83);
                {
                this.state = 1846;
                this.explainstmt();
                }
                break;
            case 84:
                this.enterOuterAlt(localContext, 84);
                {
                this.state = 1847;
                this.fetchstmt();
                }
                break;
            case 85:
                this.enterOuterAlt(localContext, 85);
                {
                this.state = 1848;
                this.grantstmt();
                }
                break;
            case 86:
                this.enterOuterAlt(localContext, 86);
                {
                this.state = 1849;
                this.grantrolestmt();
                }
                break;
            case 87:
                this.enterOuterAlt(localContext, 87);
                {
                this.state = 1850;
                this.mergestmt();
                }
                break;
            case 88:
                this.enterOuterAlt(localContext, 88);
                {
                this.state = 1851;
                this.importforeignschemastmt();
                }
                break;
            case 89:
                this.enterOuterAlt(localContext, 89);
                {
                this.state = 1852;
                this.indexstmt();
                }
                break;
            case 90:
                this.enterOuterAlt(localContext, 90);
                {
                this.state = 1853;
                this.insertstmt();
                }
                break;
            case 91:
                this.enterOuterAlt(localContext, 91);
                {
                this.state = 1854;
                this.listenstmt();
                }
                break;
            case 92:
                this.enterOuterAlt(localContext, 92);
                {
                this.state = 1855;
                this.refreshmatviewstmt();
                }
                break;
            case 93:
                this.enterOuterAlt(localContext, 93);
                {
                this.state = 1856;
                this.loadstmt();
                }
                break;
            case 94:
                this.enterOuterAlt(localContext, 94);
                {
                this.state = 1857;
                this.lockstmt();
                }
                break;
            case 95:
                this.enterOuterAlt(localContext, 95);
                {
                this.state = 1858;
                this.notifystmt();
                }
                break;
            case 96:
                this.enterOuterAlt(localContext, 96);
                {
                this.state = 1859;
                this.preparestmt();
                }
                break;
            case 97:
                this.enterOuterAlt(localContext, 97);
                {
                this.state = 1860;
                this.reassignownedstmt();
                }
                break;
            case 98:
                this.enterOuterAlt(localContext, 98);
                {
                this.state = 1861;
                this.reindexstmt();
                }
                break;
            case 99:
                this.enterOuterAlt(localContext, 99);
                {
                this.state = 1862;
                this.removeaggrstmt();
                }
                break;
            case 100:
                this.enterOuterAlt(localContext, 100);
                {
                this.state = 1863;
                this.removefuncstmt();
                }
                break;
            case 101:
                this.enterOuterAlt(localContext, 101);
                {
                this.state = 1864;
                this.removeoperstmt();
                }
                break;
            case 102:
                this.enterOuterAlt(localContext, 102);
                {
                this.state = 1865;
                this.renamestmt();
                }
                break;
            case 103:
                this.enterOuterAlt(localContext, 103);
                {
                this.state = 1866;
                this.revokestmt();
                }
                break;
            case 104:
                this.enterOuterAlt(localContext, 104);
                {
                this.state = 1867;
                this.revokerolestmt();
                }
                break;
            case 105:
                this.enterOuterAlt(localContext, 105);
                {
                this.state = 1868;
                this.rulestmt();
                }
                break;
            case 106:
                this.enterOuterAlt(localContext, 106);
                {
                this.state = 1869;
                this.seclabelstmt();
                }
                break;
            case 107:
                this.enterOuterAlt(localContext, 107);
                {
                this.state = 1870;
                this.selectstmt();
                }
                break;
            case 108:
                this.enterOuterAlt(localContext, 108);
                {
                this.state = 1871;
                this.transactionstmt();
                }
                break;
            case 109:
                this.enterOuterAlt(localContext, 109);
                {
                this.state = 1872;
                this.truncatestmt();
                }
                break;
            case 110:
                this.enterOuterAlt(localContext, 110);
                {
                this.state = 1873;
                this.unlistenstmt();
                }
                break;
            case 111:
                this.enterOuterAlt(localContext, 111);
                {
                this.state = 1874;
                this.updatestmt();
                }
                break;
            case 112:
                this.enterOuterAlt(localContext, 112);
                {
                this.state = 1875;
                this.vacuumstmt();
                }
                break;
            case 113:
                this.enterOuterAlt(localContext, 113);
                {
                this.state = 1876;
                this.variableresetstmt();
                }
                break;
            case 114:
                this.enterOuterAlt(localContext, 114);
                {
                this.state = 1877;
                this.variablesetstmt();
                }
                break;
            case 115:
                this.enterOuterAlt(localContext, 115);
                {
                this.state = 1878;
                this.variableshowstmt();
                }
                break;
            case 116:
                this.enterOuterAlt(localContext, 116);
                {
                this.state = 1879;
                this.viewstmt();
                }
                break;
            case 117:
                this.enterOuterAlt(localContext, 117);
                {
                this.state = 1880;
                this.plsqlconsolecommand();
                }
                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 plsqlconsolecommand(): PlsqlconsolecommandContext {
        let localContext = new PlsqlconsolecommandContext(this.context, this.state);
        this.enterRule(localContext, 8, PostgreSqlParser.RULE_plsqlconsolecommand);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1883;
            this.match(PostgreSqlParser.MetaCommand);
            this.state = 1885;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 582) {
                {
                this.state = 1884;
                this.match(PostgreSqlParser.EndMetaCommand);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public callstmt(): CallstmtContext {
        let localContext = new CallstmtContext(this.context, this.state);
        this.enterRule(localContext, 10, PostgreSqlParser.RULE_callstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1887;
            this.match(PostgreSqlParser.KW_CALL);
            this.state = 1888;
            this.func_application();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createrolestmt(): CreaterolestmtContext {
        let localContext = new CreaterolestmtContext(this.context, this.state);
        this.enterRule(localContext, 12, PostgreSqlParser.RULE_createrolestmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1890;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 1891;
            this.match(PostgreSqlParser.KW_ROLE);
            this.state = 1892;
            this.roleid();
            this.state = 1894;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 4, this.context) ) {
            case 1:
                {
                this.state = 1893;
                this.opt_with();
                }
                break;
            }
            this.state = 1896;
            this.optrolelist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_with(): Opt_withContext {
        let localContext = new Opt_withContext(this.context, this.state);
        this.enterRule(localContext, 14, PostgreSqlParser.RULE_opt_with);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1898;
            this.match(PostgreSqlParser.KW_WITH);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optrolelist(): OptrolelistContext {
        let localContext = new OptrolelistContext(this.context, this.state);
        this.enterRule(localContext, 16, PostgreSqlParser.RULE_optrolelist);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1903;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 5, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 1900;
                    this.createoptroleelem();
                    }
                    }
                }
                this.state = 1905;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 5, 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 alteroptrolelist(): AlteroptrolelistContext {
        let localContext = new AlteroptrolelistContext(this.context, this.state);
        this.enterRule(localContext, 18, PostgreSqlParser.RULE_alteroptrolelist);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1909;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 6, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 1906;
                    this.alteroptroleelem();
                    }
                    }
                }
                this.state = 1911;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 6, 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 alteroptroleelem(): AlteroptroleelemContext {
        let localContext = new AlteroptroleelemContext(this.context, this.state);
        this.enterRule(localContext, 20, PostgreSqlParser.RULE_alteroptroleelem);
        let _la: number;
        try {
            this.state = 1947;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 8, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1912;
                this.match(PostgreSqlParser.KW_PASSWORD);
                this.state = 1915;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 1913;
                    this.sconst();
                    }
                    break;
                case PostgreSqlParser.KW_NULL:
                    {
                    this.state = 1914;
                    this.match(PostgreSqlParser.KW_NULL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1917;
                _la = this.tokenStream.LA(1);
                if(!(_la === 195 || _la === 364)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1918;
                this.match(PostgreSqlParser.KW_PASSWORD);
                this.state = 1919;
                this.sconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1920;
                _la = this.tokenStream.LA(1);
                if(!(_la === 228 || _la === 229)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1921;
                _la = this.tokenStream.LA(1);
                if(!(_la === 236 || _la === 237)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1922;
                _la = this.tokenStream.LA(1);
                if(!(_la === 234 || _la === 235)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1923;
                _la = this.tokenStream.LA(1);
                if(!(_la === 232 || _la === 233)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1924;
                _la = this.tokenStream.LA(1);
                if(!(_la === 230 || _la === 231)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 1925;
                _la = this.tokenStream.LA(1);
                if(!(_la === 535 || _la === 536)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 1926;
                _la = this.tokenStream.LA(1);
                if(!(_la === 537 || _la === 538)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 1927;
                _la = this.tokenStream.LA(1);
                if(!(_la === 539 || _la === 540)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 1928;
                this.match(PostgreSqlParser.KW_CONNECTION);
                this.state = 1929;
                this.match(PostgreSqlParser.KW_LIMIT);
                this.state = 1930;
                this.signediconst();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 1931;
                this.match(PostgreSqlParser.KW_VALID);
                this.state = 1932;
                this.match(PostgreSqlParser.KW_UNTIL);
                this.state = 1933;
                this.sconst();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 1934;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 1935;
                this.match(PostgreSqlParser.KW_ROLE);
                this.state = 1936;
                this.name_list();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 1937;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 1938;
                this.match(PostgreSqlParser.KW_GROUP);
                this.state = 1939;
                this.name_list();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 1940;
                this.match(PostgreSqlParser.KW_ROLE);
                this.state = 1941;
                this.role_list();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 1942;
                this.match(PostgreSqlParser.KW_ADMIN);
                this.state = 1943;
                this.name_list();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 1944;
                this.match(PostgreSqlParser.KW_USER);
                this.state = 1945;
                this.role_list();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 1946;
                this.identifier();
                }
                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 createoptroleelem(): CreateoptroleelemContext {
        let localContext = new CreateoptroleelemContext(this.context, this.state);
        this.enterRule(localContext, 22, PostgreSqlParser.RULE_createoptroleelem);
        let _la: number;
        try {
            this.state = 1959;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1949;
                this.alteroptroleelem();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1950;
                this.match(PostgreSqlParser.KW_SYSID);
                this.state = 1951;
                this.iconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1952;
                this.match(PostgreSqlParser.KW_ADMIN);
                this.state = 1953;
                this.role_list();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1954;
                this.match(PostgreSqlParser.KW_ROLE);
                this.state = 1955;
                this.role_list();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1956;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 1957;
                _la = this.tokenStream.LA(1);
                if(!(_la === 66 || _la === 318)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1958;
                this.role_list();
                }
                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 createuserstmt(): CreateuserstmtContext {
        let localContext = new CreateuserstmtContext(this.context, this.state);
        this.enterRule(localContext, 24, PostgreSqlParser.RULE_createuserstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1961;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 1962;
            this.match(PostgreSqlParser.KW_USER);
            this.state = 1963;
            this.roleid();
            this.state = 1965;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 10, this.context) ) {
            case 1:
                {
                this.state = 1964;
                this.opt_with();
                }
                break;
            }
            this.state = 1967;
            this.optrolelist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterrolestmt(): AlterrolestmtContext {
        let localContext = new AlterrolestmtContext(this.context, this.state);
        this.enterRule(localContext, 26, PostgreSqlParser.RULE_alterrolestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1969;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 1970;
            _la = this.tokenStream.LA(1);
            if(!(_la === 99 || _la === 318)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1971;
            this.rolespec();
            this.state = 1973;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 11, this.context) ) {
            case 1:
                {
                this.state = 1972;
                this.opt_with();
                }
                break;
            }
            this.state = 1975;
            this.alteroptrolelist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_in_database(): Opt_in_databaseContext {
        let localContext = new Opt_in_databaseContext(this.context, this.state);
        this.enterRule(localContext, 28, PostgreSqlParser.RULE_opt_in_database);
        try {
            this.state = 1981;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_SET:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_IN:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1978;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 1979;
                this.match(PostgreSqlParser.KW_DATABASE);
                this.state = 1980;
                this.database_name();
                }
                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 alterrolesetstmt(): AlterrolesetstmtContext {
        let localContext = new AlterrolesetstmtContext(this.context, this.state);
        this.enterRule(localContext, 30, PostgreSqlParser.RULE_alterrolesetstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1983;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 1984;
            _la = this.tokenStream.LA(1);
            if(!(_la === 99 || _la === 318)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1987;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ALL:
                {
                this.state = 1985;
                this.match(PostgreSqlParser.KW_ALL);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_PUBLIC:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 1986;
                this.rolespec();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 1989;
            this.opt_in_database();
            this.state = 1990;
            this.setresetclause();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterroutinestmt(): AlterroutinestmtContext {
        let localContext = new AlterroutinestmtContext(this.context, this.state);
        this.enterRule(localContext, 32, PostgreSqlParser.RULE_alterroutinestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1992;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 1993;
            this.match(PostgreSqlParser.KW_ROUTINE);
            this.state = 1994;
            this.routine_name();
            this.state = 1996;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 1995;
                this.func_args();
                }
            }

            this.state = 1998;
            this.alter_routine_cluase();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alter_routine_cluase(): Alter_routine_cluaseContext {
        let localContext = new Alter_routine_cluaseContext(this.context, this.state);
        this.enterRule(localContext, 34, PostgreSqlParser.RULE_alter_routine_cluase);
        let _la: number;
        try {
            this.state = 2020;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 17, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2000;
                this.routine_action_list();
                this.state = 2002;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 15, this.context) ) {
                case 1:
                    {
                    this.state = 2001;
                    this.match(PostgreSqlParser.KW_RESTRICT);
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2004;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 2005;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 2006;
                this.routine_name_create();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2007;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 2008;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 2009;
                this.rolespec();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2010;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2011;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 2012;
                this.schema_name_create();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2014;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 2013;
                    this.match(PostgreSqlParser.KW_NO);
                    }
                }

                this.state = 2016;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 2017;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 2018;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 2019;
                this.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 routine_action_list(): Routine_action_listContext {
        let localContext = new Routine_action_listContext(this.context, this.state);
        this.enterRule(localContext, 36, PostgreSqlParser.RULE_routine_action_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2022;
            this.routine_action();
            this.state = 2026;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 18, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 2023;
                    this.routine_action();
                    }
                    }
                }
                this.state = 2028;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 18, 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 routine_action(): Routine_actionContext {
        let localContext = new Routine_actionContext(this.context, this.state);
        this.enterRule(localContext, 38, PostgreSqlParser.RULE_routine_action);
        let _la: number;
        try {
            this.state = 2070;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 24, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2029;
                this.match(PostgreSqlParser.KW_IMMUTABLE);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2030;
                this.match(PostgreSqlParser.KW_STABLE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2031;
                this.match(PostgreSqlParser.KW_VOLATILE);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2033;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 77) {
                    {
                    this.state = 2032;
                    this.match(PostgreSqlParser.KW_NOT);
                    }
                }

                this.state = 2035;
                this.match(PostgreSqlParser.KW_LEAKPROOF);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2046;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 22, this.context) ) {
                case 1:
                    {
                    this.state = 2037;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 205) {
                        {
                        this.state = 2036;
                        this.match(PostgreSqlParser.KW_EXTERNAL);
                        }
                    }

                    this.state = 2039;
                    this.match(PostgreSqlParser.KW_SECURITY);
                    this.state = 2040;
                    this.match(PostgreSqlParser.KW_INVOKER);
                    }
                    break;
                case 2:
                    {
                    this.state = 2042;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 205) {
                        {
                        this.state = 2041;
                        this.match(PostgreSqlParser.KW_EXTERNAL);
                        }
                    }

                    this.state = 2044;
                    this.match(PostgreSqlParser.KW_SECURITY);
                    this.state = 2045;
                    this.match(PostgreSqlParser.KW_DEFINER);
                    }
                    break;
                }
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2048;
                this.match(PostgreSqlParser.KW_PARALLEL);
                this.state = 2049;
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 529)) & ~0x1F) === 0 && ((1 << (_la - 529)) & 7) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2050;
                this.match(PostgreSqlParser.KW_COST);
                this.state = 2051;
                this.attr_name();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2052;
                this.match(PostgreSqlParser.KW_ROWS);
                this.state = 2053;
                this.name();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 2054;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2055;
                this.name();
                this.state = 2056;
                _la = this.tokenStream.LA(1);
                if(!(_la === 10 || _la === 94)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2059;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 23, this.context) ) {
                case 1:
                    {
                    this.state = 2057;
                    this.name();
                    }
                    break;
                case 2:
                    {
                    this.state = 2058;
                    this.match(PostgreSqlParser.KW_DEFAULT);
                    }
                    break;
                }
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 2061;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2062;
                this.name();
                this.state = 2063;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 2064;
                this.match(PostgreSqlParser.KW_CURRENT);
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 2066;
                this.match(PostgreSqlParser.KW_RESET);
                this.state = 2067;
                this.name();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 2068;
                this.match(PostgreSqlParser.KW_RESET);
                this.state = 2069;
                this.match(PostgreSqlParser.KW_ALL);
                }
                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 creategroupstmt(): CreategroupstmtContext {
        let localContext = new CreategroupstmtContext(this.context, this.state);
        this.enterRule(localContext, 40, PostgreSqlParser.RULE_creategroupstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2072;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 2073;
            this.match(PostgreSqlParser.KW_GROUP);
            this.state = 2074;
            this.groupname();
            this.state = 2076;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 25, this.context) ) {
            case 1:
                {
                this.state = 2075;
                this.opt_with();
                }
                break;
            }
            this.state = 2078;
            this.optrolelist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public altergroupstmt(): AltergroupstmtContext {
        let localContext = new AltergroupstmtContext(this.context, this.state);
        this.enterRule(localContext, 42, PostgreSqlParser.RULE_altergroupstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2080;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 2081;
            this.match(PostgreSqlParser.KW_GROUP);
            this.state = 2082;
            this.rolespec();
            this.state = 2083;
            this.add_drop();
            this.state = 2084;
            this.match(PostgreSqlParser.KW_USER);
            this.state = 2085;
            this.role_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public add_drop(): Add_dropContext {
        let localContext = new Add_dropContext(this.context, this.state);
        this.enterRule(localContext, 44, PostgreSqlParser.RULE_add_drop);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2087;
            _la = this.tokenStream.LA(1);
            if(!(_la === 133 || _la === 191)) {
            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 createschemastmt(): CreateschemastmtContext {
        let localContext = new CreateschemastmtContext(this.context, this.state);
        this.enterRule(localContext, 46, PostgreSqlParser.RULE_createschemastmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2089;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 2090;
            this.match(PostgreSqlParser.KW_SCHEMA);
            this.state = 2092;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 26, this.context) ) {
            case 1:
                {
                this.state = 2091;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 2100;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 28, this.context) ) {
            case 1:
                {
                this.state = 2095;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                    {
                    this.state = 2094;
                    this.schema_name_create();
                    }
                }

                this.state = 2097;
                this.match(PostgreSqlParser.KW_AUTHORIZATION);
                this.state = 2098;
                this.rolespec();
                }
                break;
            case 2:
                {
                this.state = 2099;
                this.schema_name_create();
                }
                break;
            }
            this.state = 2102;
            this.optschemaeltlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public schema_name_create(): Schema_name_createContext {
        let localContext = new Schema_name_createContext(this.context, this.state);
        this.enterRule(localContext, 48, PostgreSqlParser.RULE_schema_name_create);
        let _la: number;
        try {
            localContext = new SchemaNameCreateContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2104;
            this.colid();
            this.state = 2106;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 11) {
                {
                this.state = 2105;
                this.attrs();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optschemaeltlist(): OptschemaeltlistContext {
        let localContext = new OptschemaeltlistContext(this.context, this.state);
        this.enterRule(localContext, 50, PostgreSqlParser.RULE_optschemaeltlist);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2111;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 30, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 2108;
                    this.schema_stmt();
                    }
                    }
                }
                this.state = 2113;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 30, 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 schema_stmt(): Schema_stmtContext {
        let localContext = new Schema_stmtContext(this.context, this.state);
        this.enterRule(localContext, 52, PostgreSqlParser.RULE_schema_stmt);
        try {
            this.state = 2120;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 31, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2114;
                this.createstmt();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2115;
                this.indexstmt();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2116;
                this.createseqstmt();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2117;
                this.createtrigstmt();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2118;
                this.grantstmt();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2119;
                this.viewstmt();
                }
                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 variablesetstmt(): VariablesetstmtContext {
        let localContext = new VariablesetstmtContext(this.context, this.state);
        this.enterRule(localContext, 54, PostgreSqlParser.RULE_variablesetstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2122;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 2124;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 32, this.context) ) {
            case 1:
                {
                this.state = 2123;
                _la = this.tokenStream.LA(1);
                if(!(_la === 254 || _la === 332)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
            this.state = 2126;
            this.set_rest();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public set_rest(): Set_restContext {
        let localContext = new Set_restContext(this.context, this.state);
        this.enterRule(localContext, 56, PostgreSqlParser.RULE_set_rest);
        try {
            this.state = 2136;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 33, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2128;
                this.match(PostgreSqlParser.KW_TRANSACTION);
                this.state = 2129;
                this.transaction_mode_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2130;
                this.match(PostgreSqlParser.KW_SESSION);
                this.state = 2131;
                this.match(PostgreSqlParser.KW_CHARACTERISTICS);
                this.state = 2132;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 2133;
                this.match(PostgreSqlParser.KW_TRANSACTION);
                this.state = 2134;
                this.transaction_mode_list();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2135;
                this.set_rest_more();
                }
                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 generic_set(): Generic_setContext {
        let localContext = new Generic_setContext(this.context, this.state);
        this.enterRule(localContext, 58, PostgreSqlParser.RULE_generic_set);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2140;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ALL:
                {
                this.state = 2138;
                this.match(PostgreSqlParser.KW_ALL);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 2139;
                this.var_name();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 2143;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 10 || _la === 94) {
                {
                this.state = 2142;
                _la = this.tokenStream.LA(1);
                if(!(_la === 10 || _la === 94)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 2147;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 36, this.context) ) {
            case 1:
                {
                this.state = 2145;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                break;
            case 2:
                {
                this.state = 2146;
                this.var_list();
                }
                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 set_rest_more(): Set_rest_moreContext {
        let localContext = new Set_rest_moreContext(this.context, this.state);
        this.enterRule(localContext, 60, PostgreSqlParser.RULE_set_rest_more);
        try {
            this.state = 2176;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 38, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2149;
                this.match(PostgreSqlParser.KW_TIME);
                this.state = 2150;
                this.match(PostgreSqlParser.KW_ZONE);
                this.state = 2151;
                this.zone_value();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2152;
                this.match(PostgreSqlParser.KW_CATALOG);
                this.state = 2153;
                this.sconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2154;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 2155;
                this.schema_name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2156;
                this.match(PostgreSqlParser.KW_NAMES);
                this.state = 2158;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 37, this.context) ) {
                case 1:
                    {
                    this.state = 2157;
                    this.opt_encoding();
                    }
                    break;
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2160;
                this.match(PostgreSqlParser.KW_ROLE);
                this.state = 2161;
                this.nonreservedword_or_sconst();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2162;
                this.match(PostgreSqlParser.KW_SESSION);
                this.state = 2163;
                this.match(PostgreSqlParser.KW_AUTHORIZATION);
                this.state = 2164;
                this.nonreservedword_or_sconst();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2165;
                this.match(PostgreSqlParser.KW_XML);
                this.state = 2166;
                this.match(PostgreSqlParser.KW_OPTION);
                this.state = 2167;
                this.document_or_content();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2168;
                this.match(PostgreSqlParser.KW_TRANSACTION);
                this.state = 2169;
                this.match(PostgreSqlParser.KW_SNAPSHOT);
                this.state = 2170;
                this.sconst();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 2171;
                this.var_name();
                this.state = 2172;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 2173;
                this.match(PostgreSqlParser.KW_CURRENT);
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 2175;
                this.generic_set();
                }
                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 var_name(): Var_nameContext {
        let localContext = new Var_nameContext(this.context, this.state);
        this.enterRule(localContext, 62, PostgreSqlParser.RULE_var_name);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2178;
            this.colid();
            this.state = 2183;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 11) {
                {
                {
                this.state = 2179;
                this.match(PostgreSqlParser.DOT);
                this.state = 2180;
                this.colid();
                }
                }
                this.state = 2185;
                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 var_list(): Var_listContext {
        let localContext = new Var_listContext(this.context, this.state);
        this.enterRule(localContext, 64, PostgreSqlParser.RULE_var_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2186;
            this.var_value();
            this.state = 2191;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 2187;
                this.match(PostgreSqlParser.COMMA);
                this.state = 2188;
                this.var_value();
                }
                }
                this.state = 2193;
                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 var_value(): Var_valueContext {
        let localContext = new Var_valueContext(this.context, this.state);
        this.enterRule(localContext, 66, PostgreSqlParser.RULE_var_value);
        try {
            this.state = 2196;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_ON:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2194;
                this.opt_boolean_or_string();
                }
                break;
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2195;
                this.numericonly();
                }
                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 iso_level(): Iso_levelContext {
        let localContext = new Iso_levelContext(this.context, this.state);
        this.enterRule(localContext, 68, PostgreSqlParser.RULE_iso_level);
        let _la: number;
        try {
            this.state = 2203;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_READ:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2198;
                this.match(PostgreSqlParser.KW_READ);
                this.state = 2199;
                _la = this.tokenStream.LA(1);
                if(!(_la === 162 || _la === 363)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case PostgreSqlParser.KW_REPEATABLE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2200;
                this.match(PostgreSqlParser.KW_REPEATABLE);
                this.state = 2201;
                this.match(PostgreSqlParser.KW_READ);
                }
                break;
            case PostgreSqlParser.KW_SERIALIZABLE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2202;
                this.match(PostgreSqlParser.KW_SERIALIZABLE);
                }
                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 opt_boolean_or_string_column(): Opt_boolean_or_string_columnContext {
        let localContext = new Opt_boolean_or_string_columnContext(this.context, this.state);
        this.enterRule(localContext, 70, PostgreSqlParser.RULE_opt_boolean_or_string_column);
        try {
            this.state = 2209;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 43, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2205;
                this.match(PostgreSqlParser.KW_TRUE);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2206;
                this.match(PostgreSqlParser.KW_FALSE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2207;
                this.match(PostgreSqlParser.KW_ON);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2208;
                this.nonreservedword_or_sconst_column();
                }
                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 opt_boolean_or_string(): Opt_boolean_or_stringContext {
        let localContext = new Opt_boolean_or_stringContext(this.context, this.state);
        this.enterRule(localContext, 72, PostgreSqlParser.RULE_opt_boolean_or_string);
        try {
            this.state = 2215;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_TRUE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2211;
                this.match(PostgreSqlParser.KW_TRUE);
                }
                break;
            case PostgreSqlParser.KW_FALSE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2212;
                this.match(PostgreSqlParser.KW_FALSE);
                }
                break;
            case PostgreSqlParser.KW_ON:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2213;
                this.match(PostgreSqlParser.KW_ON);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2214;
                this.nonreservedword_or_sconst();
                }
                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 zone_value(): Zone_valueContext {
        let localContext = new Zone_valueContext(this.context, this.state);
        this.enterRule(localContext, 74, PostgreSqlParser.RULE_zone_value);
        try {
            this.state = 2233;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 46, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2217;
                this.sconst();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2218;
                this.identifier();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2219;
                this.constinterval();
                this.state = 2220;
                this.sconst();
                this.state = 2222;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 45, this.context) ) {
                case 1:
                    {
                    this.state = 2221;
                    this.opt_interval();
                    }
                    break;
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2224;
                this.constinterval();
                this.state = 2225;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2226;
                this.iconst();
                this.state = 2227;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 2228;
                this.sconst();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2230;
                this.numericonly();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2231;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2232;
                this.match(PostgreSqlParser.KW_LOCAL);
                }
                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 opt_encoding(): Opt_encodingContext {
        let localContext = new Opt_encodingContext(this.context, this.state);
        this.enterRule(localContext, 76, PostgreSqlParser.RULE_opt_encoding);
        try {
            this.state = 2237;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2235;
                this.sconst();
                }
                break;
            case PostgreSqlParser.KW_DEFAULT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2236;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                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 nonreservedword_or_sconst_column(): Nonreservedword_or_sconst_columnContext {
        let localContext = new Nonreservedword_or_sconst_columnContext(this.context, this.state);
        this.enterRule(localContext, 78, PostgreSqlParser.RULE_nonreservedword_or_sconst_column);
        try {
            this.state = 2241;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 48, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2239;
                this.nonreservedword_column();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2240;
                this.sconst();
                }
                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 nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
        let localContext = new Nonreservedword_or_sconstContext(this.context, this.state);
        this.enterRule(localContext, 80, PostgreSqlParser.RULE_nonreservedword_or_sconst);
        try {
            this.state = 2245;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 49, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2243;
                this.nonreservedword();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2244;
                this.sconst();
                }
                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 variableresetstmt(): VariableresetstmtContext {
        let localContext = new VariableresetstmtContext(this.context, this.state);
        this.enterRule(localContext, 82, PostgreSqlParser.RULE_variableresetstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2247;
            this.match(PostgreSqlParser.KW_RESET);
            this.state = 2248;
            this.reset_rest();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public reset_rest(): Reset_restContext {
        let localContext = new Reset_restContext(this.context, this.state);
        this.enterRule(localContext, 84, PostgreSqlParser.RULE_reset_rest);
        try {
            this.state = 2258;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 50, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2250;
                this.match(PostgreSqlParser.KW_TIME);
                this.state = 2251;
                this.match(PostgreSqlParser.KW_ZONE);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2252;
                this.match(PostgreSqlParser.KW_TRANSACTION);
                this.state = 2253;
                this.match(PostgreSqlParser.KW_ISOLATION);
                this.state = 2254;
                this.match(PostgreSqlParser.KW_LEVEL);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2255;
                this.match(PostgreSqlParser.KW_SESSION);
                this.state = 2256;
                this.match(PostgreSqlParser.KW_AUTHORIZATION);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2257;
                this.generic_reset();
                }
                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 generic_reset(): Generic_resetContext {
        let localContext = new Generic_resetContext(this.context, this.state);
        this.enterRule(localContext, 86, PostgreSqlParser.RULE_generic_reset);
        try {
            this.state = 2262;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ALL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2260;
                this.match(PostgreSqlParser.KW_ALL);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2261;
                this.var_name();
                }
                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 setresetclause(): SetresetclauseContext {
        let localContext = new SetresetclauseContext(this.context, this.state);
        this.enterRule(localContext, 88, PostgreSqlParser.RULE_setresetclause);
        try {
            this.state = 2267;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SET:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2264;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2265;
                this.set_rest();
                }
                break;
            case PostgreSqlParser.KW_RESET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2266;
                this.variableresetstmt();
                }
                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 functionsetresetclause(): FunctionsetresetclauseContext {
        let localContext = new FunctionsetresetclauseContext(this.context, this.state);
        this.enterRule(localContext, 90, PostgreSqlParser.RULE_functionsetresetclause);
        try {
            this.state = 2272;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SET:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2269;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2270;
                this.set_rest_more();
                }
                break;
            case PostgreSqlParser.KW_RESET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2271;
                this.variableresetstmt();
                }
                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 variableshowstmt(): VariableshowstmtContext {
        let localContext = new VariableshowstmtContext(this.context, this.state);
        this.enterRule(localContext, 92, PostgreSqlParser.RULE_variableshowstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2274;
            this.match(PostgreSqlParser.KW_SHOW);
            this.state = 2284;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 54, this.context) ) {
            case 1:
                {
                this.state = 2275;
                this.var_name();
                }
                break;
            case 2:
                {
                this.state = 2276;
                this.match(PostgreSqlParser.KW_TIME);
                this.state = 2277;
                this.match(PostgreSqlParser.KW_ZONE);
                }
                break;
            case 3:
                {
                this.state = 2278;
                this.match(PostgreSqlParser.KW_TRANSACTION);
                this.state = 2279;
                this.match(PostgreSqlParser.KW_ISOLATION);
                this.state = 2280;
                this.match(PostgreSqlParser.KW_LEVEL);
                }
                break;
            case 4:
                {
                this.state = 2281;
                this.match(PostgreSqlParser.KW_SESSION);
                this.state = 2282;
                this.match(PostgreSqlParser.KW_AUTHORIZATION);
                }
                break;
            case 5:
                {
                this.state = 2283;
                this.match(PostgreSqlParser.KW_ALL);
                }
                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 constraintssetstmt(): ConstraintssetstmtContext {
        let localContext = new ConstraintssetstmtContext(this.context, this.state);
        this.enterRule(localContext, 94, PostgreSqlParser.RULE_constraintssetstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2286;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 2287;
            this.match(PostgreSqlParser.KW_CONSTRAINTS);
            this.state = 2288;
            this.constraints_set_list();
            this.state = 2289;
            this.constraints_set_mode();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public constraints_set_list(): Constraints_set_listContext {
        let localContext = new Constraints_set_listContext(this.context, this.state);
        this.enterRule(localContext, 96, PostgreSqlParser.RULE_constraints_set_list);
        try {
            this.state = 2293;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ALL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2291;
                this.match(PostgreSqlParser.KW_ALL);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2292;
                this.qualified_name_list();
                }
                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 constraints_set_mode(): Constraints_set_modeContext {
        let localContext = new Constraints_set_modeContext(this.context, this.state);
        this.enterRule(localContext, 98, PostgreSqlParser.RULE_constraints_set_mode);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2295;
            _la = this.tokenStream.LA(1);
            if(!(_la === 180 || _la === 221)) {
            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 checkpointstmt(): CheckpointstmtContext {
        let localContext = new CheckpointstmtContext(this.context, this.state);
        this.enterRule(localContext, 100, PostgreSqlParser.RULE_checkpointstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2297;
            this.match(PostgreSqlParser.KW_CHECKPOINT);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public discardstmt(): DiscardstmtContext {
        let localContext = new DiscardstmtContext(this.context, this.state);
        this.enterRule(localContext, 102, PostgreSqlParser.RULE_discardstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2299;
            this.match(PostgreSqlParser.KW_DISCARD);
            this.state = 2300;
            _la = this.tokenStream.LA(1);
            if(!(_la === 30 || _la === 288 || ((((_la - 329)) & ~0x1F) === 0 && ((1 << (_la - 329)) & 41943041) !== 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 altertablestmt(): AltertablestmtContext {
        let localContext = new AltertablestmtContext(this.context, this.state);
        this.enterRule(localContext, 104, PostgreSqlParser.RULE_altertablestmt);
        let _la: number;
        try {
            this.state = 2435;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 74, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2302;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2303;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 2305;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 56, this.context) ) {
                case 1:
                    {
                    this.state = 2304;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2307;
                this.relation_expr();
                this.state = 2310;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_NOT:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_VALIDATE:
                    {
                    this.state = 2308;
                    this.alter_table_cmds();
                    }
                    break;
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                    {
                    this.state = 2309;
                    this.partition_cmd();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2312;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2313;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 2314;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 2315;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 2316;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 2317;
                this.tablespace_name();
                this.state = 2321;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 281) {
                    {
                    this.state = 2318;
                    this.match(PostgreSqlParser.KW_OWNED);
                    this.state = 2319;
                    this.match(PostgreSqlParser.KW_BY);
                    this.state = 2320;
                    this.role_list();
                    }
                }

                this.state = 2323;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2324;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 2325;
                this.tablespace_name_create();
                this.state = 2327;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 59, this.context) ) {
                case 1:
                    {
                    this.state = 2326;
                    this.opt_nowait();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2329;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2330;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 2332;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 60, this.context) ) {
                case 1:
                    {
                    this.state = 2331;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2334;
                this.table_name();
                this.state = 2335;
                this.match(PostgreSqlParser.KW_ATTACH);
                this.state = 2336;
                this.match(PostgreSqlParser.KW_PARTITION);
                this.state = 2337;
                this.qualified_name();
                this.state = 2342;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_FOR:
                    {
                    this.state = 2338;
                    this.match(PostgreSqlParser.KW_FOR);
                    this.state = 2339;
                    this.match(PostgreSqlParser.KW_VALUES);
                    this.state = 2340;
                    this.partition_bound_spec();
                    }
                    break;
                case PostgreSqlParser.KW_DEFAULT:
                    {
                    this.state = 2341;
                    this.match(PostgreSqlParser.KW_DEFAULT);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2344;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2345;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 2347;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 62, this.context) ) {
                case 1:
                    {
                    this.state = 2346;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2349;
                this.table_name();
                this.state = 2350;
                this.match(PostgreSqlParser.KW_DETACH);
                this.state = 2351;
                this.match(PostgreSqlParser.KW_PARTITION);
                this.state = 2352;
                this.qualified_name();
                this.state = 2354;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 109 || _la === 532) {
                    {
                    this.state = 2353;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 109 || _la === 532)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2356;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2357;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 2359;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 64, this.context) ) {
                case 1:
                    {
                    this.state = 2358;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2361;
                this.qualified_name();
                this.state = 2364;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_NOT:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_VALIDATE:
                    {
                    this.state = 2362;
                    this.alter_table_cmds();
                    }
                    break;
                case PostgreSqlParser.KW_ATTACH:
                    {
                    this.state = 2363;
                    this.index_partition_cmd();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2366;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2367;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 2368;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 2369;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 2370;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 2371;
                this.tablespace_name();
                this.state = 2375;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 281) {
                    {
                    this.state = 2372;
                    this.match(PostgreSqlParser.KW_OWNED);
                    this.state = 2373;
                    this.match(PostgreSqlParser.KW_BY);
                    this.state = 2374;
                    this.role_list();
                    }
                }

                this.state = 2377;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2378;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 2379;
                this.tablespace_name();
                this.state = 2381;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 67, this.context) ) {
                case 1:
                    {
                    this.state = 2380;
                    this.opt_nowait();
                    }
                    break;
                }
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2383;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2384;
                this.match(PostgreSqlParser.KW_SEQUENCE);
                this.state = 2386;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 68, this.context) ) {
                case 1:
                    {
                    this.state = 2385;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2388;
                this.qualified_name();
                this.state = 2389;
                this.alter_table_cmds();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2391;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2392;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 2394;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 69, this.context) ) {
                case 1:
                    {
                    this.state = 2393;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2396;
                this.view_name();
                this.state = 2397;
                this.alter_table_cmds();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 2399;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2400;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                this.state = 2401;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 2403;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 70, this.context) ) {
                case 1:
                    {
                    this.state = 2402;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2405;
                this.view_name();
                this.state = 2406;
                this.alter_table_cmds();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 2408;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2409;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                this.state = 2410;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 2411;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 2412;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 2413;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 2414;
                this.tablespace_name();
                this.state = 2418;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 281) {
                    {
                    this.state = 2415;
                    this.match(PostgreSqlParser.KW_OWNED);
                    this.state = 2416;
                    this.match(PostgreSqlParser.KW_BY);
                    this.state = 2417;
                    this.role_list();
                    }
                }

                this.state = 2420;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2421;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 2422;
                this.tablespace_name_create();
                this.state = 2424;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 72, this.context) ) {
                case 1:
                    {
                    this.state = 2423;
                    this.opt_nowait();
                    }
                    break;
                }
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 2426;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2427;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 2428;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 2430;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 73, this.context) ) {
                case 1:
                    {
                    this.state = 2429;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2432;
                this.relation_expr();
                this.state = 2433;
                this.alter_table_cmds();
                }
                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 alter_table_cmds(): Alter_table_cmdsContext {
        let localContext = new Alter_table_cmdsContext(this.context, this.state);
        this.enterRule(localContext, 106, PostgreSqlParser.RULE_alter_table_cmds);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2437;
            this.alter_table_cmd();
            this.state = 2442;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 2438;
                this.match(PostgreSqlParser.COMMA);
                this.state = 2439;
                this.alter_table_cmd();
                }
                }
                this.state = 2444;
                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 partition_bound_spec(): Partition_bound_specContext {
        let localContext = new Partition_bound_specContext(this.context, this.state);
        this.enterRule(localContext, 108, PostgreSqlParser.RULE_partition_bound_spec);
        try {
            this.state = 2454;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_IN:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2445;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 2446;
                this.opt_type_modifiers();
                }
                break;
            case PostgreSqlParser.KW_FROM:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2447;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 2448;
                this.partition_bound_cluase();
                this.state = 2449;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 2450;
                this.partition_bound_cluase();
                }
                break;
            case PostgreSqlParser.KW_WITH:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2452;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 2453;
                this.partition_with_cluase();
                }
                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 partition_bound_cluase(): Partition_bound_cluaseContext {
        let localContext = new Partition_bound_cluaseContext(this.context, this.state);
        this.enterRule(localContext, 110, PostgreSqlParser.RULE_partition_bound_cluase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2456;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 2457;
            this.partition_bound_choose();
            this.state = 2462;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 2458;
                this.match(PostgreSqlParser.COMMA);
                this.state = 2459;
                this.partition_bound_choose();
                }
                }
                this.state = 2464;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 2465;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partition_bound_choose(): Partition_bound_chooseContext {
        let localContext = new Partition_bound_chooseContext(this.context, this.state);
        this.enterRule(localContext, 112, PostgreSqlParser.RULE_partition_bound_choose);
        try {
            this.state = 2470;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.OPEN_PAREN:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2467;
                this.opt_type_modifiers();
                }
                break;
            case PostgreSqlParser.KW_MINVALUE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2468;
                this.match(PostgreSqlParser.KW_MINVALUE);
                }
                break;
            case PostgreSqlParser.KW_MAXVALUE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2469;
                this.match(PostgreSqlParser.KW_MAXVALUE);
                }
                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 partition_with_cluase(): Partition_with_cluaseContext {
        let localContext = new Partition_with_cluaseContext(this.context, this.state);
        this.enterRule(localContext, 114, PostgreSqlParser.RULE_partition_with_cluase);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2472;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 2473;
            this.match(PostgreSqlParser.KW_MODULUS);
            this.state = 2474;
            this.numericonly();
            this.state = 2475;
            this.match(PostgreSqlParser.COMMA);
            this.state = 2476;
            this.match(PostgreSqlParser.KW_REMAINDER);
            this.state = 2477;
            this.numericonly();
            this.state = 2478;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partition_cmd(): Partition_cmdContext {
        let localContext = new Partition_cmdContext(this.context, this.state);
        this.enterRule(localContext, 116, PostgreSqlParser.RULE_partition_cmd);
        try {
            this.state = 2488;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ATTACH:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2480;
                this.match(PostgreSqlParser.KW_ATTACH);
                this.state = 2481;
                this.match(PostgreSqlParser.KW_PARTITION);
                this.state = 2482;
                this.qualified_name();
                this.state = 2483;
                this.partitionboundspec();
                }
                break;
            case PostgreSqlParser.KW_DETACH:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2485;
                this.match(PostgreSqlParser.KW_DETACH);
                this.state = 2486;
                this.match(PostgreSqlParser.KW_PARTITION);
                this.state = 2487;
                this.qualified_name();
                }
                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 index_partition_cmd(): Index_partition_cmdContext {
        let localContext = new Index_partition_cmdContext(this.context, this.state);
        this.enterRule(localContext, 118, PostgreSqlParser.RULE_index_partition_cmd);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2490;
            this.match(PostgreSqlParser.KW_ATTACH);
            this.state = 2491;
            this.match(PostgreSqlParser.KW_PARTITION);
            this.state = 2492;
            this.qualified_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alter_table_cmd(): Alter_table_cmdContext {
        let localContext = new Alter_table_cmdContext(this.context, this.state);
        this.enterRule(localContext, 120, PostgreSqlParser.RULE_alter_table_cmd);
        let _la: number;
        try {
            this.state = 2711;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 108, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2494;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 2497;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 45) {
                    {
                    this.state = 2495;
                    this.match(PostgreSqlParser.KW_CONSTRAINT);
                    this.state = 2496;
                    this.name();
                    }
                }

                this.state = 2499;
                this.constraintelem();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2500;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2501;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 2502;
                this.name();
                this.state = 2503;
                this.constraintattributespec();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2505;
                this.match(PostgreSqlParser.KW_VALIDATE);
                this.state = 2506;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 2507;
                this.name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2508;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 2509;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 2511;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 81, this.context) ) {
                case 1:
                    {
                    this.state = 2510;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2513;
                this.name();
                this.state = 2515;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 82, this.context) ) {
                case 1:
                    {
                    this.state = 2514;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2517;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2518;
                this.match(PostgreSqlParser.KW_WITHOUT);
                this.state = 2519;
                this.match(PostgreSqlParser.KW_OIDS);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2520;
                this.match(PostgreSqlParser.KW_CLUSTER);
                this.state = 2521;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 2522;
                this.name();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2523;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2524;
                this.match(PostgreSqlParser.KW_WITHOUT);
                this.state = 2525;
                this.match(PostgreSqlParser.KW_CLUSTER);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2526;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2527;
                _la = this.tokenStream.LA(1);
                if(!(_la === 367 || _la === 439)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 2528;
                this.match(PostgreSqlParser.KW_ENABLE);
                this.state = 2530;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 139 || _la === 312) {
                    {
                    this.state = 2529;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 139 || _la === 312)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 2532;
                this.match(PostgreSqlParser.KW_TRIGGER);
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 2533;
                this.match(PostgreSqlParser.KW_DISABLE);
                this.state = 2534;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 2538;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_ALL:
                    {
                    this.state = 2535;
                    this.match(PostgreSqlParser.KW_ALL);
                    }
                    break;
                case PostgreSqlParser.KW_USER:
                    {
                    this.state = 2536;
                    this.match(PostgreSqlParser.KW_USER);
                    }
                    break;
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 2537;
                    this.name();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 2540;
                this.match(PostgreSqlParser.KW_ENABLE);
                this.state = 2541;
                _la = this.tokenStream.LA(1);
                if(!(_la === 139 || _la === 312)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2542;
                this.match(PostgreSqlParser.KW_RULE);
                this.state = 2543;
                this.name();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 2544;
                this.match(PostgreSqlParser.KW_DISABLE);
                this.state = 2545;
                this.match(PostgreSqlParser.KW_RULE);
                this.state = 2546;
                this.name();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 2548;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 2547;
                    this.match(PostgreSqlParser.KW_NO);
                    }
                }

                this.state = 2550;
                this.match(PostgreSqlParser.KW_INHERIT);
                this.state = 2551;
                this.qualified_name();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 2552;
                this.match(PostgreSqlParser.KW_OF);
                this.state = 2553;
                this.any_name();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 2554;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 2555;
                this.match(PostgreSqlParser.KW_OF);
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 2556;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 2557;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 2558;
                this.rolespec();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 2559;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2560;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 2561;
                this.tablespace_name_create();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 2562;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2563;
                this.reloptions();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 2564;
                this.match(PostgreSqlParser.KW_RESET);
                this.state = 2565;
                this.reloptions();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 2566;
                this.match(PostgreSqlParser.KW_REPLICA);
                this.state = 2567;
                this.match(PostgreSqlParser.KW_IDENTITY);
                this.state = 2568;
                this.replica_identity();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 2569;
                this.match(PostgreSqlParser.KW_ENABLE);
                this.state = 2570;
                this.match(PostgreSqlParser.KW_ROW);
                this.state = 2571;
                this.match(PostgreSqlParser.KW_LEVEL);
                this.state = 2572;
                this.match(PostgreSqlParser.KW_SECURITY);
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 2573;
                this.match(PostgreSqlParser.KW_DISABLE);
                this.state = 2574;
                this.match(PostgreSqlParser.KW_ROW);
                this.state = 2575;
                this.match(PostgreSqlParser.KW_LEVEL);
                this.state = 2576;
                this.match(PostgreSqlParser.KW_SECURITY);
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 2577;
                this.match(PostgreSqlParser.KW_FORCE);
                this.state = 2578;
                this.match(PostgreSqlParser.KW_ROW);
                this.state = 2579;
                this.match(PostgreSqlParser.KW_LEVEL);
                this.state = 2580;
                this.match(PostgreSqlParser.KW_SECURITY);
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 2581;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 2582;
                this.match(PostgreSqlParser.KW_FORCE);
                this.state = 2583;
                this.match(PostgreSqlParser.KW_ROW);
                this.state = 2584;
                this.match(PostgreSqlParser.KW_LEVEL);
                this.state = 2585;
                this.match(PostgreSqlParser.KW_SECURITY);
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 2586;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 2588;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 86, this.context) ) {
                case 1:
                    {
                    this.state = 2587;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2591;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 87, this.context) ) {
                case 1:
                    {
                    this.state = 2590;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2593;
                this.column_name();
                this.state = 2595;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 88, this.context) ) {
                case 1:
                    {
                    this.state = 2594;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 2597;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 2599;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 44) {
                    {
                    this.state = 2598;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                }

                this.state = 2602;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 90, this.context) ) {
                case 1:
                    {
                    this.state = 2601;
                    this.opt_if_not_exists();
                    }
                    break;
                }
                this.state = 2604;
                this.column_def();
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 2605;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2607;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 91, this.context) ) {
                case 1:
                    {
                    this.state = 2606;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2609;
                this.column_name();
                this.state = 2610;
                this.alter_column_default();
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 2612;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2614;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 92, this.context) ) {
                case 1:
                    {
                    this.state = 2613;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2616;
                this.column_name();
                this.state = 2617;
                _la = this.tokenStream.LA(1);
                if(!(_la === 191 || _la === 333)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2618;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 2619;
                this.match(PostgreSqlParser.KW_NULL);
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 2621;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2623;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 93, this.context) ) {
                case 1:
                    {
                    this.state = 2622;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2625;
                this.column_name();
                this.state = 2626;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 2627;
                this.match(PostgreSqlParser.KW_EXPRESSION);
                this.state = 2629;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 94, this.context) ) {
                case 1:
                    {
                    this.state = 2628;
                    this.opt_if_exists();
                    }
                    break;
                }
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 2631;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2633;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 95, this.context) ) {
                case 1:
                    {
                    this.state = 2632;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2635;
                this.column_name();
                this.state = 2636;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2637;
                this.match(PostgreSqlParser.KW_STATISTICS);
                this.state = 2638;
                this.signediconst();
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 2640;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2642;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 96, this.context) ) {
                case 1:
                    {
                    this.state = 2641;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2644;
                this.column_name();
                this.state = 2645;
                _la = this.tokenStream.LA(1);
                if(!(_la === 313 || _la === 333)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2646;
                this.reloptions();
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 2648;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2650;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 97, this.context) ) {
                case 1:
                    {
                    this.state = 2649;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2652;
                this.column_name();
                this.state = 2653;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2654;
                this.match(PostgreSqlParser.KW_STORAGE);
                this.state = 2655;
                this.colid();
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 2657;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2659;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 98, this.context) ) {
                case 1:
                    {
                    this.state = 2658;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2661;
                this.column_name();
                this.state = 2662;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 2663;
                this.match(PostgreSqlParser.KW_GENERATED);
                this.state = 2664;
                this.generated_when();
                this.state = 2665;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 2666;
                this.match(PostgreSqlParser.KW_IDENTITY);
                this.state = 2668;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 99, this.context) ) {
                case 1:
                    {
                    this.state = 2667;
                    this.optparenthesizedseqoptlist();
                    }
                    break;
                }
                }
                break;
            case 34:
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 2670;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2672;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 100, this.context) ) {
                case 1:
                    {
                    this.state = 2671;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2674;
                this.column_name();
                this.state = 2675;
                this.alter_identity_column_option_list();
                }
                break;
            case 35:
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 2677;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2679;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 101, this.context) ) {
                case 1:
                    {
                    this.state = 2678;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2681;
                this.column_name();
                this.state = 2682;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 2683;
                this.match(PostgreSqlParser.KW_IDENTITY);
                this.state = 2685;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 102, this.context) ) {
                case 1:
                    {
                    this.state = 2684;
                    this.opt_if_exists();
                    }
                    break;
                }
                }
                break;
            case 36:
                this.enterOuterAlt(localContext, 36);
                {
                this.state = 2687;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2689;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 103, this.context) ) {
                case 1:
                    {
                    this.state = 2688;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2691;
                this.column_name();
                this.state = 2693;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 333) {
                    {
                    this.state = 2692;
                    this.opt_set_data();
                    }
                }

                this.state = 2695;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 2696;
                this.typename();
                this.state = 2698;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 105, this.context) ) {
                case 1:
                    {
                    this.state = 2697;
                    this.opt_collate_clause();
                    }
                    break;
                }
                this.state = 2701;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 2700;
                    this.alter_using();
                    }
                }

                }
                break;
            case 37:
                this.enterOuterAlt(localContext, 37);
                {
                this.state = 2703;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2705;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 107, this.context) ) {
                case 1:
                    {
                    this.state = 2704;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2707;
                this.column_name();
                this.state = 2708;
                this.alter_generic_options();
                }
                break;
            case 38:
                this.enterOuterAlt(localContext, 38);
                {
                this.state = 2710;
                this.alter_generic_options();
                }
                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 alter_column_default(): Alter_column_defaultContext {
        let localContext = new Alter_column_defaultContext(this.context, this.state);
        this.enterRule(localContext, 122, PostgreSqlParser.RULE_alter_column_default);
        try {
            this.state = 2718;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SET:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2713;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2714;
                this.match(PostgreSqlParser.KW_DEFAULT);
                this.state = 2715;
                this.a_expr();
                }
                break;
            case PostgreSqlParser.KW_DROP:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2716;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 2717;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                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 opt_drop_behavior(): Opt_drop_behaviorContext {
        let localContext = new Opt_drop_behaviorContext(this.context, this.state);
        this.enterRule(localContext, 124, PostgreSqlParser.RULE_opt_drop_behavior);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2720;
            _la = this.tokenStream.LA(1);
            if(!(_la === 150 || _la === 315)) {
            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 opt_collate_clause(): Opt_collate_clauseContext {
        let localContext = new Opt_collate_clauseContext(this.context, this.state);
        this.enterRule(localContext, 126, PostgreSqlParser.RULE_opt_collate_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2722;
            this.match(PostgreSqlParser.KW_COLLATE);
            this.state = 2723;
            this.any_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alter_using(): Alter_usingContext {
        let localContext = new Alter_usingContext(this.context, this.state);
        this.enterRule(localContext, 128, PostgreSqlParser.RULE_alter_using);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2725;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 2726;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public replica_identity(): Replica_identityContext {
        let localContext = new Replica_identityContext(this.context, this.state);
        this.enterRule(localContext, 130, PostgreSqlParser.RULE_replica_identity);
        try {
            this.state = 2734;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_NOTHING:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2728;
                this.match(PostgreSqlParser.KW_NOTHING);
                }
                break;
            case PostgreSqlParser.KW_FULL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2729;
                this.match(PostgreSqlParser.KW_FULL);
                }
                break;
            case PostgreSqlParser.KW_DEFAULT:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2730;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                break;
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2731;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 2732;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 2733;
                this.name();
                }
                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 reloptions(): ReloptionsContext {
        let localContext = new ReloptionsContext(this.context, this.state);
        this.enterRule(localContext, 132, PostgreSqlParser.RULE_reloptions);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2736;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 2737;
            this.reloption_list();
            this.state = 2738;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_reloptions(): Opt_reloptionsContext {
        let localContext = new Opt_reloptionsContext(this.context, this.state);
        this.enterRule(localContext, 134, PostgreSqlParser.RULE_opt_reloptions);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2740;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 2741;
            this.reloptions();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public reloption_list(): Reloption_listContext {
        let localContext = new Reloption_listContext(this.context, this.state);
        this.enterRule(localContext, 136, PostgreSqlParser.RULE_reloption_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2743;
            this.reloption_elem();
            this.state = 2748;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 2744;
                this.match(PostgreSqlParser.COMMA);
                this.state = 2745;
                this.reloption_elem();
                }
                }
                this.state = 2750;
                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 reloption_elem(): Reloption_elemContext {
        let localContext = new Reloption_elemContext(this.context, this.state);
        this.enterRule(localContext, 138, PostgreSqlParser.RULE_reloption_elem);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2751;
            this.collabel();
            this.state = 2760;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.EQUAL:
                {
                this.state = 2752;
                this.match(PostgreSqlParser.EQUAL);
                this.state = 2753;
                this.def_arg();
                }
                break;
            case PostgreSqlParser.DOT:
                {
                this.state = 2754;
                this.match(PostgreSqlParser.DOT);
                this.state = 2755;
                this.collabel();
                this.state = 2758;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 10) {
                    {
                    this.state = 2756;
                    this.match(PostgreSqlParser.EQUAL);
                    this.state = 2757;
                    this.def_arg();
                    }
                }

                }
                break;
            case PostgreSqlParser.CLOSE_PAREN:
            case PostgreSqlParser.COMMA:
                break;
            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 alter_identity_column_option_list(): Alter_identity_column_option_listContext {
        let localContext = new Alter_identity_column_option_listContext(this.context, this.state);
        this.enterRule(localContext, 140, PostgreSqlParser.RULE_alter_identity_column_option_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2763;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 2762;
                    this.alter_identity_column_option();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 2765;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 114, 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 alter_identity_column_option(): Alter_identity_column_optionContext {
        let localContext = new Alter_identity_column_optionContext(this.context, this.state);
        this.enterRule(localContext, 142, PostgreSqlParser.RULE_alter_identity_column_option);
        let _la: number;
        try {
            this.state = 2780;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_RESTART:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2767;
                this.match(PostgreSqlParser.KW_RESTART);
                this.state = 2772;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 116, this.context) ) {
                case 1:
                    {
                    this.state = 2769;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 105) {
                        {
                        this.state = 2768;
                        this.opt_with();
                        }
                    }

                    this.state = 2771;
                    this.numericonly();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_SET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2774;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 2778;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_AS:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_START:
                    {
                    this.state = 2775;
                    this.seqoptelem();
                    }
                    break;
                case PostgreSqlParser.KW_GENERATED:
                    {
                    this.state = 2776;
                    this.match(PostgreSqlParser.KW_GENERATED);
                    this.state = 2777;
                    this.generated_when();
                    }
                    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 partitionboundspec(): PartitionboundspecContext {
        let localContext = new PartitionboundspecContext(this.context, this.state);
        this.enterRule(localContext, 144, PostgreSqlParser.RULE_partitionboundspec);
        try {
            this.state = 2808;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 119, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2782;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 2783;
                this.match(PostgreSqlParser.KW_VALUES);
                this.state = 2784;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 2785;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2786;
                this.hash_partbound();
                this.state = 2787;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2789;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 2790;
                this.match(PostgreSqlParser.KW_VALUES);
                this.state = 2791;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 2792;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2793;
                this.expr_list();
                this.state = 2794;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2796;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 2797;
                this.match(PostgreSqlParser.KW_VALUES);
                this.state = 2798;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 2799;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2800;
                this.expr_list();
                this.state = 2801;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 2802;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 2803;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2804;
                this.expr_list();
                this.state = 2805;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2807;
                this.match(PostgreSqlParser.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 hash_partbound_elem(): Hash_partbound_elemContext {
        let localContext = new Hash_partbound_elemContext(this.context, this.state);
        this.enterRule(localContext, 146, PostgreSqlParser.RULE_hash_partbound_elem);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2810;
            this.nonreservedword();
            this.state = 2811;
            this.iconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public hash_partbound(): Hash_partboundContext {
        let localContext = new Hash_partboundContext(this.context, this.state);
        this.enterRule(localContext, 148, PostgreSqlParser.RULE_hash_partbound);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2813;
            this.hash_partbound_elem();
            this.state = 2818;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 2814;
                this.match(PostgreSqlParser.COMMA);
                this.state = 2815;
                this.hash_partbound_elem();
                }
                }
                this.state = 2820;
                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 altercompositetypestmt(): AltercompositetypestmtContext {
        let localContext = new AltercompositetypestmtContext(this.context, this.state);
        this.enterRule(localContext, 150, PostgreSqlParser.RULE_altercompositetypestmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2821;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 2822;
            this.match(PostgreSqlParser.KW_TYPE);
            this.state = 2823;
            this.any_name();
            this.state = 2824;
            this.alter_type_cmds();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alter_type_cmds(): Alter_type_cmdsContext {
        let localContext = new Alter_type_cmdsContext(this.context, this.state);
        this.enterRule(localContext, 152, PostgreSqlParser.RULE_alter_type_cmds);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2826;
            this.alter_type_cmd();
            this.state = 2831;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 2827;
                this.match(PostgreSqlParser.COMMA);
                this.state = 2828;
                this.alter_type_cmd();
                }
                }
                this.state = 2833;
                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 alter_type_cmd(): Alter_type_cmdContext {
        let localContext = new Alter_type_cmdContext(this.context, this.state);
        this.enterRule(localContext, 154, PostgreSqlParser.RULE_alter_type_cmd);
        let _la: number;
        try {
            this.state = 2863;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ADD:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2834;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 2835;
                this.match(PostgreSqlParser.KW_ATTRIBUTE);
                this.state = 2836;
                this.tablefuncelement();
                this.state = 2838;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 122, this.context) ) {
                case 1:
                    {
                    this.state = 2837;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_DROP:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2840;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 2841;
                this.match(PostgreSqlParser.KW_ATTRIBUTE);
                this.state = 2843;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 123, this.context) ) {
                case 1:
                    {
                    this.state = 2842;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 2845;
                this.colid();
                this.state = 2847;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 124, this.context) ) {
                case 1:
                    {
                    this.state = 2846;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_ALTER:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2849;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 2850;
                this.match(PostgreSqlParser.KW_ATTRIBUTE);
                this.state = 2851;
                this.colid();
                this.state = 2853;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 333) {
                    {
                    this.state = 2852;
                    this.opt_set_data();
                    }
                }

                this.state = 2855;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 2856;
                this.typename();
                this.state = 2858;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 126, this.context) ) {
                case 1:
                    {
                    this.state = 2857;
                    this.opt_collate_clause();
                    }
                    break;
                }
                this.state = 2861;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 127, this.context) ) {
                case 1:
                    {
                    this.state = 2860;
                    this.opt_drop_behavior();
                    }
                    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 closeportalstmt(): CloseportalstmtContext {
        let localContext = new CloseportalstmtContext(this.context, this.state);
        this.enterRule(localContext, 156, PostgreSqlParser.RULE_closeportalstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2865;
            this.match(PostgreSqlParser.KW_CLOSE);
            this.state = 2868;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 2866;
                this.cursor_name();
                }
                break;
            case PostgreSqlParser.KW_ALL:
                {
                this.state = 2867;
                this.match(PostgreSqlParser.KW_ALL);
                }
                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 copystmt(): CopystmtContext {
        let localContext = new CopystmtContext(this.context, this.state);
        this.enterRule(localContext, 158, PostgreSqlParser.RULE_copystmt);
        let _la: number;
        try {
            this.state = 2907;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 138, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2870;
                this.match(PostgreSqlParser.KW_COPY);
                this.state = 2872;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 107) {
                    {
                    this.state = 2871;
                    this.opt_binary();
                    }
                }

                this.state = 2874;
                this.table_name();
                this.state = 2876;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 2875;
                    this.opt_column_list();
                    }
                }

                this.state = 2878;
                this.copy_from();
                this.state = 2880;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 297) {
                    {
                    this.state = 2879;
                    this.opt_program();
                    }
                }

                this.state = 2882;
                this.copy_file_name();
                this.state = 2884;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 133, this.context) ) {
                case 1:
                    {
                    this.state = 2883;
                    this.copy_delimiter();
                    }
                    break;
                }
                this.state = 2887;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 134, this.context) ) {
                case 1:
                    {
                    this.state = 2886;
                    this.opt_with();
                    }
                    break;
                }
                this.state = 2889;
                this.copy_options();
                this.state = 2891;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 103) {
                    {
                    this.state = 2890;
                    this.where_clause();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2893;
                this.match(PostgreSqlParser.KW_COPY);
                this.state = 2894;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2895;
                this.preparablestmt();
                this.state = 2896;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 2897;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 2899;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 297) {
                    {
                    this.state = 2898;
                    this.opt_program();
                    }
                }

                this.state = 2901;
                this.copy_file_name();
                this.state = 2903;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 137, this.context) ) {
                case 1:
                    {
                    this.state = 2902;
                    this.opt_with();
                    }
                    break;
                }
                this.state = 2905;
                this.copy_options();
                }
                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 copy_from(): Copy_fromContext {
        let localContext = new Copy_fromContext(this.context, this.state);
        this.enterRule(localContext, 160, PostgreSqlParser.RULE_copy_from);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2909;
            _la = this.tokenStream.LA(1);
            if(!(_la === 64 || _la === 94)) {
            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 opt_program(): Opt_programContext {
        let localContext = new Opt_programContext(this.context, this.state);
        this.enterRule(localContext, 162, PostgreSqlParser.RULE_opt_program);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2911;
            this.match(PostgreSqlParser.KW_PROGRAM);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public copy_file_name(): Copy_file_nameContext {
        let localContext = new Copy_file_nameContext(this.context, this.state);
        this.enterRule(localContext, 164, PostgreSqlParser.RULE_copy_file_name);
        try {
            this.state = 2916;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2913;
                this.sconst();
                }
                break;
            case PostgreSqlParser.KW_STDIN:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2914;
                this.match(PostgreSqlParser.KW_STDIN);
                }
                break;
            case PostgreSqlParser.KW_STDOUT:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2915;
                this.match(PostgreSqlParser.KW_STDOUT);
                }
                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 copy_options(): Copy_optionsContext {
        let localContext = new Copy_optionsContext(this.context, this.state);
        this.enterRule(localContext, 166, PostgreSqlParser.RULE_copy_options);
        try {
            this.state = 2923;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 140, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2918;
                this.copy_opt_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2919;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2920;
                this.copy_generic_opt_list();
                this.state = 2921;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 copy_opt_list(): Copy_opt_listContext {
        let localContext = new Copy_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 168, PostgreSqlParser.RULE_copy_opt_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2928;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 141, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 2925;
                    this.copy_opt_item();
                    }
                    }
                }
                this.state = 2930;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 141, 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 copy_opt_item(): Copy_opt_itemContext {
        let localContext = new Copy_opt_itemContext(this.context, this.state);
        this.enterRule(localContext, 170, PostgreSqlParser.RULE_copy_opt_item);
        let _la: number;
        try {
            this.state = 2970;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 146, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2931;
                this.match(PostgreSqlParser.KW_BINARY);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2932;
                this.match(PostgreSqlParser.KW_FREEZE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2933;
                this.match(PostgreSqlParser.KW_DELIMITER);
                this.state = 2935;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 36) {
                    {
                    this.state = 2934;
                    this.opt_as();
                    }
                }

                this.state = 2937;
                this.sconst();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2938;
                this.match(PostgreSqlParser.KW_NULL);
                this.state = 2940;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 36) {
                    {
                    this.state = 2939;
                    this.opt_as();
                    }
                }

                this.state = 2942;
                this.sconst();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2943;
                this.match(PostgreSqlParser.KW_CSV);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2944;
                this.match(PostgreSqlParser.KW_HEADER);
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2945;
                this.match(PostgreSqlParser.KW_QUOTE);
                this.state = 2947;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 36) {
                    {
                    this.state = 2946;
                    this.opt_as();
                    }
                }

                this.state = 2949;
                this.sconst();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2950;
                this.match(PostgreSqlParser.KW_ESCAPE);
                this.state = 2952;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 36) {
                    {
                    this.state = 2951;
                    this.opt_as();
                    }
                }

                this.state = 2954;
                this.sconst();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 2955;
                this.match(PostgreSqlParser.KW_FORCE);
                this.state = 2956;
                this.match(PostgreSqlParser.KW_QUOTE);
                this.state = 2957;
                this.column_list();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 2958;
                this.match(PostgreSqlParser.KW_FORCE);
                this.state = 2959;
                this.match(PostgreSqlParser.KW_QUOTE);
                this.state = 2960;
                this.match(PostgreSqlParser.STAR);
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 2961;
                this.match(PostgreSqlParser.KW_FORCE);
                this.state = 2962;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 2963;
                this.match(PostgreSqlParser.KW_NULL);
                this.state = 2964;
                this.column_list();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 2965;
                this.match(PostgreSqlParser.KW_FORCE);
                this.state = 2966;
                this.match(PostgreSqlParser.KW_NULL);
                this.state = 2967;
                this.column_list();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 2968;
                this.match(PostgreSqlParser.KW_ENCODING);
                this.state = 2969;
                this.sconst();
                }
                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 opt_binary(): Opt_binaryContext {
        let localContext = new Opt_binaryContext(this.context, this.state);
        this.enterRule(localContext, 172, PostgreSqlParser.RULE_opt_binary);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2972;
            this.match(PostgreSqlParser.KW_BINARY);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public copy_delimiter(): Copy_delimiterContext {
        let localContext = new Copy_delimiterContext(this.context, this.state);
        this.enterRule(localContext, 174, PostgreSqlParser.RULE_copy_delimiter);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2975;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 2974;
                this.opt_using();
                }
            }

            this.state = 2977;
            this.match(PostgreSqlParser.KW_DELIMITERS);
            this.state = 2978;
            this.sconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_using(): Opt_usingContext {
        let localContext = new Opt_usingContext(this.context, this.state);
        this.enterRule(localContext, 176, PostgreSqlParser.RULE_opt_using);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2980;
            this.match(PostgreSqlParser.KW_USING);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public copy_generic_opt_list(): Copy_generic_opt_listContext {
        let localContext = new Copy_generic_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 178, PostgreSqlParser.RULE_copy_generic_opt_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2982;
            this.copy_generic_opt_elem();
            this.state = 2987;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 2983;
                this.match(PostgreSqlParser.COMMA);
                this.state = 2984;
                this.copy_generic_opt_elem();
                }
                }
                this.state = 2989;
                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 copy_generic_opt_elem(): Copy_generic_opt_elemContext {
        let localContext = new Copy_generic_opt_elemContext(this.context, this.state);
        this.enterRule(localContext, 180, PostgreSqlParser.RULE_copy_generic_opt_elem);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2990;
            this.collabel();
            this.state = 2992;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 12804) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 420484101) !== 0) || ((((_la - 80)) & ~0x1F) === 0 && ((1 << (_la - 80)) & 4227928065) !== 0) || ((((_la - 112)) & ~0x1F) === 0 && ((1 << (_la - 112)) & 4294967295) !== 0) || ((((_la - 144)) & ~0x1F) === 0 && ((1 << (_la - 144)) & 4294967295) !== 0) || ((((_la - 176)) & ~0x1F) === 0 && ((1 << (_la - 176)) & 4294967295) !== 0) || ((((_la - 208)) & ~0x1F) === 0 && ((1 << (_la - 208)) & 3223322623) !== 0) || ((((_la - 240)) & ~0x1F) === 0 && ((1 << (_la - 240)) & 4294967295) !== 0) || ((((_la - 272)) & ~0x1F) === 0 && ((1 << (_la - 272)) & 4294967295) !== 0) || ((((_la - 304)) & ~0x1F) === 0 && ((1 << (_la - 304)) & 4294967295) !== 0) || ((((_la - 336)) & ~0x1F) === 0 && ((1 << (_la - 336)) & 4294967295) !== 0) || ((((_la - 368)) & ~0x1F) === 0 && ((1 << (_la - 368)) & 4294967295) !== 0) || ((((_la - 400)) & ~0x1F) === 0 && ((1 << (_la - 400)) & 4294967295) !== 0) || ((((_la - 432)) & ~0x1F) === 0 && ((1 << (_la - 432)) & 4290772991) !== 0) || ((((_la - 464)) & ~0x1F) === 0 && ((1 << (_la - 464)) & 4294967295) !== 0) || ((((_la - 496)) & ~0x1F) === 0 && ((1 << (_la - 496)) & 25165183) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 486582415) !== 0) || _la === 584) {
                {
                this.state = 2991;
                this.copy_generic_opt_arg();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public copy_generic_opt_arg(): Copy_generic_opt_argContext {
        let localContext = new Copy_generic_opt_argContext(this.context, this.state);
        this.enterRule(localContext, 182, PostgreSqlParser.RULE_copy_generic_opt_arg);
        try {
            this.state = 3001;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_ON:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2994;
                this.opt_boolean_or_string();
                }
                break;
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2995;
                this.numericonly();
                }
                break;
            case PostgreSqlParser.STAR:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2996;
                this.match(PostgreSqlParser.STAR);
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2997;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 2998;
                this.copy_generic_opt_arg_list();
                this.state = 2999;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 copy_generic_opt_arg_list(): Copy_generic_opt_arg_listContext {
        let localContext = new Copy_generic_opt_arg_listContext(this.context, this.state);
        this.enterRule(localContext, 184, PostgreSqlParser.RULE_copy_generic_opt_arg_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3003;
            this.copy_generic_opt_arg_list_item();
            this.state = 3008;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 3004;
                this.match(PostgreSqlParser.COMMA);
                this.state = 3005;
                this.copy_generic_opt_arg_list_item();
                }
                }
                this.state = 3010;
                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 copy_generic_opt_arg_list_item(): Copy_generic_opt_arg_list_itemContext {
        let localContext = new Copy_generic_opt_arg_list_itemContext(this.context, this.state);
        this.enterRule(localContext, 186, PostgreSqlParser.RULE_copy_generic_opt_arg_list_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3011;
            this.opt_boolean_or_string_column();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createstmt(): CreatestmtContext {
        let localContext = new CreatestmtContext(this.context, this.state);
        this.enterRule(localContext, 188, PostgreSqlParser.RULE_createstmt);
        let _la: number;
        try {
            localContext = new ColumnCreateTableContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3013;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3015;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 213 || _la === 254 || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 32773) !== 0)) {
                {
                this.state = 3014;
                this.opttemp();
                }
            }

            this.state = 3017;
            this.match(PostgreSqlParser.KW_TABLE);
            this.state = 3019;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 153, this.context) ) {
            case 1:
                {
                this.state = 3018;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 3021;
            this.table_name_create();
            this.state = 3087;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.OPEN_PAREN:
                {
                this.state = 3022;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3024;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1360008709) !== 0) || ((((_la - 85)) & ~0x1F) === 0 && ((1 << (_la - 85)) & 2147491969) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 4294966809) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 4294967295) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 4294967295) !== 0) || ((((_la - 216)) & ~0x1F) === 0 && ((1 << (_la - 216)) & 4290781183) !== 0) || ((((_la - 248)) & ~0x1F) === 0 && ((1 << (_la - 248)) & 4294967295) !== 0) || ((((_la - 280)) & ~0x1F) === 0 && ((1 << (_la - 280)) & 4294967295) !== 0) || ((((_la - 312)) & ~0x1F) === 0 && ((1 << (_la - 312)) & 4294967295) !== 0) || ((((_la - 344)) & ~0x1F) === 0 && ((1 << (_la - 344)) & 4294967295) !== 0) || ((((_la - 376)) & ~0x1F) === 0 && ((1 << (_la - 376)) & 4294967295) !== 0) || ((((_la - 408)) & ~0x1F) === 0 && ((1 << (_la - 408)) & 4294967295) !== 0) || ((((_la - 440)) & ~0x1F) === 0 && ((1 << (_la - 440)) & 4294950911) !== 0) || ((((_la - 473)) & ~0x1F) === 0 && ((1 << (_la - 473)) & 3221225471) !== 0) || ((((_la - 506)) & ~0x1F) === 0 && ((1 << (_la - 506)) & 24575) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                    {
                    this.state = 3023;
                    this.table_column_list();
                    }
                }

                this.state = 3026;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 3028;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 155, this.context) ) {
                case 1:
                    {
                    this.state = 3027;
                    this.optinherit();
                    }
                    break;
                }
                this.state = 3031;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 156, this.context) ) {
                case 1:
                    {
                    this.state = 3030;
                    this.optpartitionspec();
                    }
                    break;
                }
                this.state = 3034;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3033;
                    this.table_access_method_clause();
                    }
                }

                this.state = 3037;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 158, this.context) ) {
                case 1:
                    {
                    this.state = 3036;
                    this.optwith();
                    }
                    break;
                }
                this.state = 3040;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 80) {
                    {
                    this.state = 3039;
                    this.oncommitoption();
                    }
                }

                this.state = 3043;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 160, this.context) ) {
                case 1:
                    {
                    this.state = 3042;
                    this.opttablespace();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_OF:
                {
                this.state = 3045;
                this.match(PostgreSqlParser.KW_OF);
                this.state = 3046;
                this.any_name();
                this.state = 3048;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 161, this.context) ) {
                case 1:
                    {
                    this.state = 3047;
                    this.opttypedtableelementlist();
                    }
                    break;
                }
                this.state = 3051;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 162, this.context) ) {
                case 1:
                    {
                    this.state = 3050;
                    this.optpartitionspec();
                    }
                    break;
                }
                this.state = 3054;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3053;
                    this.table_access_method_clause();
                    }
                }

                this.state = 3057;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 164, this.context) ) {
                case 1:
                    {
                    this.state = 3056;
                    this.optwith();
                    }
                    break;
                }
                this.state = 3060;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 80) {
                    {
                    this.state = 3059;
                    this.oncommitoption();
                    }
                }

                this.state = 3063;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 166, this.context) ) {
                case 1:
                    {
                    this.state = 3062;
                    this.opttablespace();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_PARTITION:
                {
                this.state = 3065;
                this.match(PostgreSqlParser.KW_PARTITION);
                this.state = 3066;
                this.match(PostgreSqlParser.KW_OF);
                this.state = 3067;
                this.qualified_name();
                this.state = 3069;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 3068;
                    this.opttypedtableelementlist();
                    }
                }

                this.state = 3071;
                this.partitionboundspec();
                this.state = 3073;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 168, this.context) ) {
                case 1:
                    {
                    this.state = 3072;
                    this.optpartitionspec();
                    }
                    break;
                }
                this.state = 3076;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3075;
                    this.table_access_method_clause();
                    }
                }

                this.state = 3079;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 170, this.context) ) {
                case 1:
                    {
                    this.state = 3078;
                    this.optwith();
                    }
                    break;
                }
                this.state = 3082;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 80) {
                    {
                    this.state = 3081;
                    this.oncommitoption();
                    }
                }

                this.state = 3085;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 172, this.context) ) {
                case 1:
                    {
                    this.state = 3084;
                    this.opttablespace();
                    }
                    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 opttemp(): OpttempContext {
        let localContext = new OpttempContext(this.context, this.state);
        this.enterRule(localContext, 190, PostgreSqlParser.RULE_opttemp);
        let _la: number;
        try {
            this.state = 3096;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_TEMPORARY:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3089;
                this.match(PostgreSqlParser.KW_TEMPORARY);
                }
                break;
            case PostgreSqlParser.KW_TEMP:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3090;
                this.match(PostgreSqlParser.KW_TEMP);
                }
                break;
            case PostgreSqlParser.KW_LOCAL:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3091;
                this.match(PostgreSqlParser.KW_LOCAL);
                this.state = 3092;
                _la = this.tokenStream.LA(1);
                if(!(_la === 352 || _la === 354)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case PostgreSqlParser.KW_GLOBAL:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3093;
                this.match(PostgreSqlParser.KW_GLOBAL);
                this.state = 3094;
                _la = this.tokenStream.LA(1);
                if(!(_la === 352 || _la === 354)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case PostgreSqlParser.KW_UNLOGGED:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 3095;
                this.match(PostgreSqlParser.KW_UNLOGGED);
                }
                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 table_column_list(): Table_column_listContext {
        let localContext = new Table_column_listContext(this.context, this.state);
        this.enterRule(localContext, 192, PostgreSqlParser.RULE_table_column_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3098;
            this.tableelementlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opttableelementlist(): OpttableelementlistContext {
        let localContext = new OpttableelementlistContext(this.context, this.state);
        this.enterRule(localContext, 194, PostgreSqlParser.RULE_opttableelementlist);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3100;
            this.tableelementlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opttypedtableelementlist(): OpttypedtableelementlistContext {
        let localContext = new OpttypedtableelementlistContext(this.context, this.state);
        this.enterRule(localContext, 196, PostgreSqlParser.RULE_opttypedtableelementlist);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3102;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3103;
            this.typedtableelementlist();
            this.state = 3104;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableelementlist(): TableelementlistContext {
        let localContext = new TableelementlistContext(this.context, this.state);
        this.enterRule(localContext, 198, PostgreSqlParser.RULE_tableelementlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3106;
            this.tableelement();
            this.state = 3111;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 3107;
                this.match(PostgreSqlParser.COMMA);
                this.state = 3108;
                this.tableelement();
                }
                }
                this.state = 3113;
                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 typedtableelementlist(): TypedtableelementlistContext {
        let localContext = new TypedtableelementlistContext(this.context, this.state);
        this.enterRule(localContext, 200, PostgreSqlParser.RULE_typedtableelementlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3114;
            this.typedtableelement();
            this.state = 3119;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 3115;
                this.match(PostgreSqlParser.COMMA);
                this.state = 3116;
                this.typedtableelement();
                }
                }
                this.state = 3121;
                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 tableelement(): TableelementContext {
        let localContext = new TableelementContext(this.context, this.state);
        this.enterRule(localContext, 202, PostgreSqlParser.RULE_tableelement);
        try {
            this.state = 3125;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 177, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3122;
                this.column_def();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3123;
                this.tablelikeclause();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3124;
                this.tableconstraint();
                }
                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 typedtableelement(): TypedtableelementContext {
        let localContext = new TypedtableelementContext(this.context, this.state);
        this.enterRule(localContext, 204, PostgreSqlParser.RULE_typedtableelement);
        try {
            this.state = 3129;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 178, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3127;
                this.columnOptions();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3128;
                this.tableconstraint();
                }
                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 column_def(): Column_defContext {
        let localContext = new Column_defContext(this.context, this.state);
        this.enterRule(localContext, 206, PostgreSqlParser.RULE_column_def);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3131;
            this.column_name_create();
            this.state = 3132;
            this.typename();
            this.state = 3134;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 179, this.context) ) {
            case 1:
                {
                this.state = 3133;
                this.create_generic_options();
                }
                break;
            }
            this.state = 3137;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 180, this.context) ) {
            case 1:
                {
                this.state = 3136;
                this.storageCluase();
                }
                break;
            }
            this.state = 3140;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 543) {
                {
                this.state = 3139;
                this.compressionCluase();
                }
            }

            this.state = 3144;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 182, this.context) ) {
            case 1:
                {
                this.state = 3142;
                this.match(PostgreSqlParser.KW_COLLATE);
                this.state = 3143;
                this.any_name();
                }
                break;
            }
            this.state = 3148;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 183, this.context) ) {
            case 1:
                {
                this.state = 3146;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 3147;
                this.match(PostgreSqlParser.KW_OPTIONS);
                }
                break;
            }
            this.state = 3150;
            this.colquallist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public compressionCluase(): CompressionCluaseContext {
        let localContext = new CompressionCluaseContext(this.context, this.state);
        this.enterRule(localContext, 208, PostgreSqlParser.RULE_compressionCluase);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3152;
            this.match(PostgreSqlParser.KW_COMPRESSION);
            this.state = 3153;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public storageCluase(): StorageCluaseContext {
        let localContext = new StorageCluaseContext(this.context, this.state);
        this.enterRule(localContext, 210, PostgreSqlParser.RULE_storageCluase);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3155;
            this.match(PostgreSqlParser.KW_STORAGE);
            this.state = 3162;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 184, this.context) ) {
            case 1:
                {
                this.state = 3156;
                this.match(PostgreSqlParser.KW_PLAIN);
                }
                break;
            case 2:
                {
                this.state = 3157;
                this.match(PostgreSqlParser.KW_EXTERNAL);
                }
                break;
            case 3:
                {
                this.state = 3158;
                this.match(PostgreSqlParser.KW_EXTENDED);
                }
                break;
            case 4:
                {
                this.state = 3159;
                this.match(PostgreSqlParser.KW_MAIN);
                }
                break;
            case 5:
                {
                this.state = 3160;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                break;
            case 6:
                {
                this.state = 3161;
                this.colid();
                }
                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 columnOptions(): ColumnOptionsContext {
        let localContext = new ColumnOptionsContext(this.context, this.state);
        this.enterRule(localContext, 212, PostgreSqlParser.RULE_columnOptions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3164;
            this.column_name_create();
            this.state = 3167;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105) {
                {
                this.state = 3165;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 3166;
                this.match(PostgreSqlParser.KW_OPTIONS);
                }
            }

            this.state = 3169;
            this.colquallist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public colquallist(): ColquallistContext {
        let localContext = new ColquallistContext(this.context, this.state);
        this.enterRule(localContext, 214, PostgreSqlParser.RULE_colquallist);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3174;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 186, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 3171;
                    this.colconstraint();
                    }
                    }
                }
                this.state = 3176;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 186, 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 colconstraint(): ColconstraintContext {
        let localContext = new ColconstraintContext(this.context, this.state);
        this.enterRule(localContext, 216, PostgreSqlParser.RULE_colconstraint);
        let _la: number;
        try {
            this.state = 3195;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 192, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3179;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 45) {
                    {
                    this.state = 3177;
                    this.match(PostgreSqlParser.KW_CONSTRAINT);
                    this.state = 3178;
                    this.name();
                    }
                }

                this.state = 3181;
                this.colconstraintelem();
                this.state = 3183;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 188, this.context) ) {
                case 1:
                    {
                    this.state = 3182;
                    this.deferrable_trigger();
                    }
                    break;
                }
                this.state = 3186;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 69) {
                    {
                    this.state = 3185;
                    this.initially_trigger();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3188;
                this.colconstraintelem();
                this.state = 3190;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 190, this.context) ) {
                case 1:
                    {
                    this.state = 3189;
                    this.deferrable_trigger();
                    }
                    break;
                }
                this.state = 3193;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 69) {
                    {
                    this.state = 3192;
                    this.initially_trigger();
                    }
                }

                }
                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 colconstraintelem(): ColconstraintelemContext {
        let localContext = new ColconstraintelemContext(this.context, this.state);
        this.enterRule(localContext, 218, PostgreSqlParser.RULE_colconstraintelem);
        let _la: number;
        try {
            this.state = 3255;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 204, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3197;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 3198;
                this.match(PostgreSqlParser.KW_NULL);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3199;
                this.match(PostgreSqlParser.KW_NULL);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3200;
                this.match(PostgreSqlParser.KW_UNIQUE);
                this.state = 3202;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 193, this.context) ) {
                case 1:
                    {
                    this.state = 3201;
                    this.opt_definition();
                    }
                    break;
                }
                this.state = 3205;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3204;
                    this.optconstablespace();
                    }
                }

                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3207;
                this.match(PostgreSqlParser.KW_UNIQUE);
                this.state = 3209;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 195, this.context) ) {
                case 1:
                    {
                    this.state = 3208;
                    this.nulls_distinct();
                    }
                    break;
                }
                this.state = 3211;
                this.index_paramenters_create();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 3212;
                this.match(PostgreSqlParser.KW_PRIMARY);
                this.state = 3213;
                this.match(PostgreSqlParser.KW_KEY);
                this.state = 3215;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 196, this.context) ) {
                case 1:
                    {
                    this.state = 3214;
                    this.opt_definition();
                    }
                    break;
                }
                this.state = 3218;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3217;
                    this.optconstablespace();
                    }
                }

                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 3220;
                this.match(PostgreSqlParser.KW_CHECK);
                this.state = 3221;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3222;
                this.a_expr();
                this.state = 3223;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 3225;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 198, this.context) ) {
                case 1:
                    {
                    this.state = 3224;
                    this.opt_no_inherit();
                    }
                    break;
                }
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 3227;
                this.match(PostgreSqlParser.KW_DEFAULT);
                this.state = 3228;
                this.b_expr(0);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 3229;
                this.match(PostgreSqlParser.KW_GENERATED);
                this.state = 3230;
                this.generated_when();
                this.state = 3231;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 3241;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_IDENTITY:
                    {
                    this.state = 3232;
                    this.match(PostgreSqlParser.KW_IDENTITY);
                    this.state = 3234;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 199, this.context) ) {
                    case 1:
                        {
                        this.state = 3233;
                        this.optparenthesizedseqoptlist();
                        }
                        break;
                    }
                    }
                    break;
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 3236;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 3237;
                    this.a_expr();
                    this.state = 3238;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    this.state = 3239;
                    this.match(PostgreSqlParser.KW_STORED);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 3243;
                this.match(PostgreSqlParser.KW_REFERENCES);
                this.state = 3244;
                this.qualified_name();
                this.state = 3246;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 201, this.context) ) {
                case 1:
                    {
                    this.state = 3245;
                    this.opt_column_list();
                    }
                    break;
                }
                this.state = 3249;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 202, this.context) ) {
                case 1:
                    {
                    this.state = 3248;
                    this.key_match();
                    }
                    break;
                }
                this.state = 3252;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 80) {
                    {
                    this.state = 3251;
                    this.key_actions();
                    }
                }

                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 3254;
                this.opt_collate();
                }
                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 nulls_distinct(): Nulls_distinctContext {
        let localContext = new Nulls_distinctContext(this.context, this.state);
        this.enterRule(localContext, 220, PostgreSqlParser.RULE_nulls_distinct);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3257;
            this.match(PostgreSqlParser.KW_NULLS);
            this.state = 3259;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 77) {
                {
                this.state = 3258;
                this.match(PostgreSqlParser.KW_NOT);
                }
            }

            this.state = 3261;
            this.match(PostgreSqlParser.KW_DISTINCT);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public generated_when(): Generated_whenContext {
        let localContext = new Generated_whenContext(this.context, this.state);
        this.enterRule(localContext, 222, PostgreSqlParser.RULE_generated_when);
        try {
            this.state = 3266;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ALWAYS:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3263;
                this.match(PostgreSqlParser.KW_ALWAYS);
                }
                break;
            case PostgreSqlParser.KW_BY:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3264;
                this.match(PostgreSqlParser.KW_BY);
                this.state = 3265;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                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 deferrable_trigger(): Deferrable_triggerContext {
        let localContext = new Deferrable_triggerContext(this.context, this.state);
        this.enterRule(localContext, 224, PostgreSqlParser.RULE_deferrable_trigger);
        try {
            this.state = 3271;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_DEFERRABLE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3268;
                this.match(PostgreSqlParser.KW_DEFERRABLE);
                }
                break;
            case PostgreSqlParser.KW_NOT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3269;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 3270;
                this.match(PostgreSqlParser.KW_DEFERRABLE);
                }
                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 initially_trigger(): Initially_triggerContext {
        let localContext = new Initially_triggerContext(this.context, this.state);
        this.enterRule(localContext, 226, PostgreSqlParser.RULE_initially_trigger);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3273;
            this.match(PostgreSqlParser.KW_INITIALLY);
            this.state = 3274;
            _la = this.tokenStream.LA(1);
            if(!(_la === 180 || _la === 221)) {
            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 tablelikeclause(): TablelikeclauseContext {
        let localContext = new TablelikeclauseContext(this.context, this.state);
        this.enterRule(localContext, 228, PostgreSqlParser.RULE_tablelikeclause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3276;
            this.match(PostgreSqlParser.KW_LIKE);
            this.state = 3277;
            this.qualified_name();
            this.state = 3278;
            this.tablelikeoptionlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablelikeoptionlist(): TablelikeoptionlistContext {
        let localContext = new TablelikeoptionlistContext(this.context, this.state);
        this.enterRule(localContext, 230, PostgreSqlParser.RULE_tablelikeoptionlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3284;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 200 || _la === 224) {
                {
                {
                this.state = 3280;
                _la = this.tokenStream.LA(1);
                if(!(_la === 200 || _la === 224)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 3281;
                this.tablelikeoption();
                }
                }
                this.state = 3286;
                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 tablelikeoption(): TablelikeoptionContext {
        let localContext = new TablelikeoptionContext(this.context, this.state);
        this.enterRule(localContext, 232, PostgreSqlParser.RULE_tablelikeoption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3287;
            _la = this.tokenStream.LA(1);
            if(!(_la === 30 || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 524321) !== 0) || _la === 219 || _la === 227 || _la === 342 || _la === 345 || _la === 438)) {
            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 tableconstraint(): TableconstraintContext {
        let localContext = new TableconstraintContext(this.context, this.state);
        this.enterRule(localContext, 234, PostgreSqlParser.RULE_tableconstraint);
        try {
            this.state = 3294;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_CONSTRAINT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3289;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 3290;
                this.name();
                this.state = 3291;
                this.constraintelem();
                }
                break;
            case PostgreSqlParser.KW_CHECK:
            case PostgreSqlParser.KW_FOREIGN:
            case PostgreSqlParser.KW_PRIMARY:
            case PostgreSqlParser.KW_UNIQUE:
            case PostgreSqlParser.KW_EXCLUDE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3293;
                this.constraintelem();
                }
                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 constraintelem(): ConstraintelemContext {
        let localContext = new ConstraintelemContext(this.context, this.state);
        this.enterRule(localContext, 236, PostgreSqlParser.RULE_constraintelem);
        let _la: number;
        try {
            this.state = 3382;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_CHECK:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3296;
                this.match(PostgreSqlParser.KW_CHECK);
                this.state = 3297;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3298;
                this.a_expr();
                this.state = 3299;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 3300;
                this.constraintattributespec();
                }
                break;
            case PostgreSqlParser.KW_UNIQUE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3302;
                this.match(PostgreSqlParser.KW_UNIQUE);
                this.state = 3320;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 3303;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 3304;
                    this.column_list();
                    this.state = 3305;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    this.state = 3307;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 210, this.context) ) {
                    case 1:
                        {
                        this.state = 3306;
                        this.opt_c_include();
                        }
                        break;
                    }
                    this.state = 3310;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 211, this.context) ) {
                    case 1:
                        {
                        this.state = 3309;
                        this.opt_definition();
                        }
                        break;
                    }
                    this.state = 3313;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 100) {
                        {
                        this.state = 3312;
                        this.optconstablespace();
                        }
                    }

                    this.state = 3315;
                    this.constraintattributespec();
                    }
                    break;
                case PostgreSqlParser.KW_USING:
                    {
                    this.state = 3317;
                    this.existingindex();
                    this.state = 3318;
                    this.constraintattributespec();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case PostgreSqlParser.KW_PRIMARY:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3322;
                this.match(PostgreSqlParser.KW_PRIMARY);
                this.state = 3323;
                this.match(PostgreSqlParser.KW_KEY);
                this.state = 3341;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 3324;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 3325;
                    this.column_list();
                    this.state = 3326;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    this.state = 3328;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 214, this.context) ) {
                    case 1:
                        {
                        this.state = 3327;
                        this.opt_c_include();
                        }
                        break;
                    }
                    this.state = 3331;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 215, this.context) ) {
                    case 1:
                        {
                        this.state = 3330;
                        this.opt_definition();
                        }
                        break;
                    }
                    this.state = 3334;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 100) {
                        {
                        this.state = 3333;
                        this.optconstablespace();
                        }
                    }

                    this.state = 3336;
                    this.constraintattributespec();
                    }
                    break;
                case PostgreSqlParser.KW_USING:
                    {
                    this.state = 3338;
                    this.existingindex();
                    this.state = 3339;
                    this.constraintattributespec();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case PostgreSqlParser.KW_EXCLUDE:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3343;
                this.match(PostgreSqlParser.KW_EXCLUDE);
                this.state = 3345;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3344;
                    this.access_method_clause();
                    }
                }

                this.state = 3347;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3348;
                this.exclusionconstraintlist();
                this.state = 3349;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 3351;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 219, this.context) ) {
                case 1:
                    {
                    this.state = 3350;
                    this.opt_c_include();
                    }
                    break;
                }
                this.state = 3354;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 220, this.context) ) {
                case 1:
                    {
                    this.state = 3353;
                    this.opt_definition();
                    }
                    break;
                }
                this.state = 3357;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3356;
                    this.optconstablespace();
                    }
                }

                this.state = 3360;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 103) {
                    {
                    this.state = 3359;
                    this.exclusionwhereclause();
                    }
                }

                this.state = 3362;
                this.constraintattributespec();
                }
                break;
            case PostgreSqlParser.KW_FOREIGN:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 3364;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 3365;
                this.match(PostgreSqlParser.KW_KEY);
                this.state = 3366;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3367;
                this.column_list();
                this.state = 3368;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 3369;
                this.match(PostgreSqlParser.KW_REFERENCES);
                this.state = 3370;
                this.qualified_name();
                this.state = 3372;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 223, this.context) ) {
                case 1:
                    {
                    this.state = 3371;
                    this.opt_column_list();
                    }
                    break;
                }
                this.state = 3375;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 224, this.context) ) {
                case 1:
                    {
                    this.state = 3374;
                    this.key_match();
                    }
                    break;
                }
                this.state = 3378;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 80) {
                    {
                    this.state = 3377;
                    this.key_actions();
                    }
                }

                this.state = 3380;
                this.constraintattributespec();
                }
                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 opt_no_inherit(): Opt_no_inheritContext {
        let localContext = new Opt_no_inheritContext(this.context, this.state);
        this.enterRule(localContext, 238, PostgreSqlParser.RULE_opt_no_inherit);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3384;
            this.match(PostgreSqlParser.KW_NO);
            this.state = 3385;
            this.match(PostgreSqlParser.KW_INHERIT);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_column_list(): Opt_column_listContext {
        let localContext = new Opt_column_listContext(this.context, this.state);
        this.enterRule(localContext, 240, PostgreSqlParser.RULE_opt_column_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3387;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3388;
            this.column_list();
            this.state = 3389;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_column_list_create(): Opt_column_list_createContext {
        let localContext = new Opt_column_list_createContext(this.context, this.state);
        this.enterRule(localContext, 242, PostgreSqlParser.RULE_opt_column_list_create);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3391;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3392;
            this.column_list_create();
            this.state = 3393;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public column_list(): Column_listContext {
        let localContext = new Column_listContext(this.context, this.state);
        this.enterRule(localContext, 244, PostgreSqlParser.RULE_column_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3395;
            this.column_name();
            this.state = 3400;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 227, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 3396;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 3397;
                    this.column_name();
                    }
                    }
                }
                this.state = 3402;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 227, 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 column_list_create(): Column_list_createContext {
        let localContext = new Column_list_createContext(this.context, this.state);
        this.enterRule(localContext, 246, PostgreSqlParser.RULE_column_list_create);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3403;
            this.column_name_create();
            this.state = 3408;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 3404;
                this.match(PostgreSqlParser.COMMA);
                this.state = 3405;
                this.column_name_create();
                }
                }
                this.state = 3410;
                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 opt_c_include(): Opt_c_includeContext {
        let localContext = new Opt_c_includeContext(this.context, this.state);
        this.enterRule(localContext, 248, PostgreSqlParser.RULE_opt_c_include);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3411;
            this.match(PostgreSqlParser.KW_INCLUDE);
            this.state = 3412;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3413;
            this.column_list();
            this.state = 3414;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public key_match(): Key_matchContext {
        let localContext = new Key_matchContext(this.context, this.state);
        this.enterRule(localContext, 250, PostgreSqlParser.RULE_key_match);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3416;
            this.match(PostgreSqlParser.KW_MATCH);
            this.state = 3417;
            _la = this.tokenStream.LA(1);
            if(!(_la === 113 || _la === 284 || _la === 336)) {
            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 exclusionconstraintlist(): ExclusionconstraintlistContext {
        let localContext = new ExclusionconstraintlistContext(this.context, this.state);
        this.enterRule(localContext, 252, PostgreSqlParser.RULE_exclusionconstraintlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3419;
            this.exclusionconstraintelem();
            this.state = 3424;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 3420;
                this.match(PostgreSqlParser.COMMA);
                this.state = 3421;
                this.exclusionconstraintelem();
                }
                }
                this.state = 3426;
                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 exclusionconstraintelem(): ExclusionconstraintelemContext {
        let localContext = new ExclusionconstraintelemContext(this.context, this.state);
        this.enterRule(localContext, 254, PostgreSqlParser.RULE_exclusionconstraintelem);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3427;
            this.index_elem();
            this.state = 3428;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 3435;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 230, this.context) ) {
            case 1:
                {
                this.state = 3429;
                this.any_operator();
                }
                break;
            case 2:
                {
                this.state = 3430;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 3431;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3432;
                this.any_operator();
                this.state = 3433;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 exclusionwhereclause(): ExclusionwhereclauseContext {
        let localContext = new ExclusionwhereclauseContext(this.context, this.state);
        this.enterRule(localContext, 256, PostgreSqlParser.RULE_exclusionwhereclause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3437;
            this.match(PostgreSqlParser.KW_WHERE);
            this.state = 3438;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3439;
            this.a_expr();
            this.state = 3440;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public key_actions(): Key_actionsContext {
        let localContext = new Key_actionsContext(this.context, this.state);
        this.enterRule(localContext, 258, PostgreSqlParser.RULE_key_actions);
        try {
            this.state = 3450;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 231, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3442;
                this.key_update();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3443;
                this.key_delete();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3444;
                this.key_update();
                this.state = 3445;
                this.key_delete();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3447;
                this.key_delete();
                this.state = 3448;
                this.key_update();
                }
                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 key_update(): Key_updateContext {
        let localContext = new Key_updateContext(this.context, this.state);
        this.enterRule(localContext, 260, PostgreSqlParser.RULE_key_update);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3452;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 3453;
            this.match(PostgreSqlParser.KW_UPDATE);
            this.state = 3454;
            this.key_action();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public key_delete(): Key_deleteContext {
        let localContext = new Key_deleteContext(this.context, this.state);
        this.enterRule(localContext, 262, PostgreSqlParser.RULE_key_delete);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3456;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 3457;
            this.match(PostgreSqlParser.KW_DELETE);
            this.state = 3458;
            this.key_action();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public key_action(): Key_actionContext {
        let localContext = new Key_actionContext(this.context, this.state);
        this.enterRule(localContext, 264, PostgreSqlParser.RULE_key_action);
        let _la: number;
        try {
            this.state = 3469;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_NO:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3460;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 3461;
                this.match(PostgreSqlParser.KW_ACTION);
                }
                break;
            case PostgreSqlParser.KW_RESTRICT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3462;
                this.match(PostgreSqlParser.KW_RESTRICT);
                }
                break;
            case PostgreSqlParser.KW_CASCADE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3463;
                this.match(PostgreSqlParser.KW_CASCADE);
                }
                break;
            case PostgreSqlParser.KW_SET:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3464;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 3465;
                _la = this.tokenStream.LA(1);
                if(!(_la === 53 || _la === 78)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 3467;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 232, this.context) ) {
                case 1:
                    {
                    this.state = 3466;
                    this.column_list();
                    }
                    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 optinherit(): OptinheritContext {
        let localContext = new OptinheritContext(this.context, this.state);
        this.enterRule(localContext, 266, PostgreSqlParser.RULE_optinherit);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3471;
            this.match(PostgreSqlParser.KW_INHERITS);
            this.state = 3472;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3473;
            this.qualified_name_list();
            this.state = 3474;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optpartitionspec(): OptpartitionspecContext {
        let localContext = new OptpartitionspecContext(this.context, this.state);
        this.enterRule(localContext, 268, PostgreSqlParser.RULE_optpartitionspec);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3476;
            this.partitionspec();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionspec(): PartitionspecContext {
        let localContext = new PartitionspecContext(this.context, this.state);
        this.enterRule(localContext, 270, PostgreSqlParser.RULE_partitionspec);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3478;
            this.match(PostgreSqlParser.KW_PARTITION);
            this.state = 3479;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 3480;
            this.colid();
            this.state = 3481;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3482;
            this.part_params();
            this.state = 3483;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public part_params(): Part_paramsContext {
        let localContext = new Part_paramsContext(this.context, this.state);
        this.enterRule(localContext, 272, PostgreSqlParser.RULE_part_params);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3485;
            this.part_elem();
            this.state = 3490;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 3486;
                this.match(PostgreSqlParser.COMMA);
                this.state = 3487;
                this.part_elem();
                }
                }
                this.state = 3492;
                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 part_elem(): Part_elemContext {
        let localContext = new Part_elemContext(this.context, this.state);
        this.enterRule(localContext, 274, PostgreSqlParser.RULE_part_elem);
        let _la: number;
        try {
            this.state = 3516;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 241, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3493;
                this.column_name();
                this.state = 3495;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 235, this.context) ) {
                case 1:
                    {
                    this.state = 3494;
                    this.opt_collate();
                    }
                    break;
                }
                this.state = 3498;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                    {
                    this.state = 3497;
                    this.opt_class();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3500;
                this.func_expr_windowless();
                this.state = 3502;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 237, this.context) ) {
                case 1:
                    {
                    this.state = 3501;
                    this.opt_collate();
                    }
                    break;
                }
                this.state = 3505;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                    {
                    this.state = 3504;
                    this.opt_class();
                    }
                }

                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3507;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3508;
                this.a_expr();
                this.state = 3509;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 3511;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 239, this.context) ) {
                case 1:
                    {
                    this.state = 3510;
                    this.opt_collate();
                    }
                    break;
                }
                this.state = 3514;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                    {
                    this.state = 3513;
                    this.opt_class();
                    }
                }

                }
                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 table_access_method_clause(): Table_access_method_clauseContext {
        let localContext = new Table_access_method_clauseContext(this.context, this.state);
        this.enterRule(localContext, 276, PostgreSqlParser.RULE_table_access_method_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3518;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 3519;
            this.name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optwith(): OptwithContext {
        let localContext = new OptwithContext(this.context, this.state);
        this.enterRule(localContext, 278, PostgreSqlParser.RULE_optwith);
        try {
            this.state = 3527;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 242, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3521;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 3522;
                this.reloptions();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3523;
                this.match(PostgreSqlParser.KW_WITHOUT);
                this.state = 3524;
                this.match(PostgreSqlParser.KW_OIDS);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3525;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 3526;
                this.match(PostgreSqlParser.KW_OIDS);
                }
                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 oncommitoption(): OncommitoptionContext {
        let localContext = new OncommitoptionContext(this.context, this.state);
        this.enterRule(localContext, 280, PostgreSqlParser.RULE_oncommitoption);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3529;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 3530;
            this.match(PostgreSqlParser.KW_COMMIT);
            this.state = 3536;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_DROP:
                {
                this.state = 3531;
                this.match(PostgreSqlParser.KW_DROP);
                }
                break;
            case PostgreSqlParser.KW_DELETE:
                {
                this.state = 3532;
                this.match(PostgreSqlParser.KW_DELETE);
                this.state = 3533;
                this.match(PostgreSqlParser.KW_ROWS);
                }
                break;
            case PostgreSqlParser.KW_PRESERVE:
                {
                this.state = 3534;
                this.match(PostgreSqlParser.KW_PRESERVE);
                this.state = 3535;
                this.match(PostgreSqlParser.KW_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 opttablespace(): OpttablespaceContext {
        let localContext = new OpttablespaceContext(this.context, this.state);
        this.enterRule(localContext, 282, PostgreSqlParser.RULE_opttablespace);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3538;
            this.match(PostgreSqlParser.KW_TABLESPACE);
            this.state = 3539;
            this.tablespace_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public index_paramenters_create(): Index_paramenters_createContext {
        let localContext = new Index_paramenters_createContext(this.context, this.state);
        this.enterRule(localContext, 284, PostgreSqlParser.RULE_index_paramenters_create);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3542;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 244, this.context) ) {
            case 1:
                {
                this.state = 3541;
                this.opt_include();
                }
                break;
            }
            this.state = 3545;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 245, this.context) ) {
            case 1:
                {
                this.state = 3544;
                this.with_clause();
                }
                break;
            }
            this.state = 3548;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3547;
                this.optconstablespace();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optconstablespace(): OptconstablespaceContext {
        let localContext = new OptconstablespaceContext(this.context, this.state);
        this.enterRule(localContext, 286, PostgreSqlParser.RULE_optconstablespace);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3550;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 3551;
            this.match(PostgreSqlParser.KW_INDEX);
            this.state = 3552;
            this.match(PostgreSqlParser.KW_TABLESPACE);
            this.state = 3553;
            this.tablespace_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public existingindex(): ExistingindexContext {
        let localContext = new ExistingindexContext(this.context, this.state);
        this.enterRule(localContext, 288, PostgreSqlParser.RULE_existingindex);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3555;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 3556;
            this.match(PostgreSqlParser.KW_INDEX);
            this.state = 3557;
            this.name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createstatsstmt(): CreatestatsstmtContext {
        let localContext = new CreatestatsstmtContext(this.context, this.state);
        this.enterRule(localContext, 290, PostgreSqlParser.RULE_createstatsstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3559;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3560;
            this.match(PostgreSqlParser.KW_STATISTICS);
            this.state = 3565;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                {
                this.state = 3562;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 247, this.context) ) {
                case 1:
                    {
                    this.state = 3561;
                    this.opt_if_not_exists();
                    }
                    break;
                }
                this.state = 3564;
                this.any_name();
                }
            }

            this.state = 3568;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 3567;
                this.opt_name_list();
                }
            }

            this.state = 3570;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 3573;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 250, this.context) ) {
            case 1:
                {
                this.state = 3571;
                this.column_expr_list();
                }
                break;
            case 2:
                {
                this.state = 3572;
                this.expr_list();
                }
                break;
            }
            this.state = 3575;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 3576;
            this.from_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterstatsstmt(): AlterstatsstmtContext {
        let localContext = new AlterstatsstmtContext(this.context, this.state);
        this.enterRule(localContext, 292, PostgreSqlParser.RULE_alterstatsstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3578;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 3579;
            this.match(PostgreSqlParser.KW_STATISTICS);
            this.state = 3581;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 251, this.context) ) {
            case 1:
                {
                this.state = 3580;
                this.opt_if_exists();
                }
                break;
            }
            this.state = 3583;
            this.any_name();
            this.state = 3584;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 3585;
            this.match(PostgreSqlParser.KW_STATISTICS);
            this.state = 3586;
            this.signediconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createasstmt(): CreateasstmtContext {
        let localContext = new CreateasstmtContext(this.context, this.state);
        this.enterRule(localContext, 294, PostgreSqlParser.RULE_createasstmt);
        let _la: number;
        try {
            localContext = new QueryCreateTableContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3588;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3590;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 213 || _la === 254 || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 32773) !== 0)) {
                {
                this.state = 3589;
                this.opttemp();
                }
            }

            this.state = 3592;
            this.match(PostgreSqlParser.KW_TABLE);
            this.state = 3594;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 253, this.context) ) {
            case 1:
                {
                this.state = 3593;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 3596;
            this.create_as_target();
            this.state = 3597;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 3598;
            this.selectstmt();
            this.state = 3600;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 254, this.context) ) {
            case 1:
                {
                this.state = 3599;
                this.opt_with_data();
                }
                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 create_as_target(): Create_as_targetContext {
        let localContext = new Create_as_targetContext(this.context, this.state);
        this.enterRule(localContext, 296, PostgreSqlParser.RULE_create_as_target);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3602;
            this.table_name_create();
            this.state = 3604;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 3603;
                this.opt_column_list_create();
                }
            }

            this.state = 3607;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3606;
                this.table_access_method_clause();
                }
            }

            this.state = 3610;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105 || _la === 379) {
                {
                this.state = 3609;
                this.optwith();
                }
            }

            this.state = 3613;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 80) {
                {
                this.state = 3612;
                this.oncommitoption();
                }
            }

            this.state = 3616;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 351) {
                {
                this.state = 3615;
                this.opttablespace();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_with_data(): Opt_with_dataContext {
        let localContext = new Opt_with_dataContext(this.context, this.state);
        this.enterRule(localContext, 298, PostgreSqlParser.RULE_opt_with_data);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3618;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 3622;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_DATA:
                {
                this.state = 3619;
                this.match(PostgreSqlParser.KW_DATA);
                }
                break;
            case PostgreSqlParser.KW_NO:
                {
                this.state = 3620;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 3621;
                this.match(PostgreSqlParser.KW_DATA);
                }
                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 creatematviewstmt(): CreatematviewstmtContext {
        let localContext = new CreatematviewstmtContext(this.context, this.state);
        this.enterRule(localContext, 300, PostgreSqlParser.RULE_creatematviewstmt);
        let _la: number;
        try {
            localContext = new CreateMaterializedViewContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3624;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3626;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 367) {
                {
                this.state = 3625;
                this.optnolog();
                }
            }

            this.state = 3628;
            this.match(PostgreSqlParser.KW_MATERIALIZED);
            this.state = 3629;
            this.match(PostgreSqlParser.KW_VIEW);
            this.state = 3631;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 262, this.context) ) {
            case 1:
                {
                this.state = 3630;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 3633;
            this.create_mv_target();
            this.state = 3634;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 3635;
            this.selectstmt();
            this.state = 3637;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 263, this.context) ) {
            case 1:
                {
                this.state = 3636;
                this.opt_with_data();
                }
                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 create_mv_target(): Create_mv_targetContext {
        let localContext = new Create_mv_targetContext(this.context, this.state);
        this.enterRule(localContext, 302, PostgreSqlParser.RULE_create_mv_target);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3639;
            this.view_name_create();
            this.state = 3641;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 3640;
                this.opt_column_list_create();
                }
            }

            this.state = 3644;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3643;
                this.table_access_method_clause();
                }
            }

            this.state = 3647;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105) {
                {
                this.state = 3646;
                this.opt_reloptions();
                }
            }

            this.state = 3650;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 351) {
                {
                this.state = 3649;
                this.opttablespace();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optnolog(): OptnologContext {
        let localContext = new OptnologContext(this.context, this.state);
        this.enterRule(localContext, 304, PostgreSqlParser.RULE_optnolog);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3652;
            this.match(PostgreSqlParser.KW_UNLOGGED);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public refreshmatviewstmt(): RefreshmatviewstmtContext {
        let localContext = new RefreshmatviewstmtContext(this.context, this.state);
        this.enterRule(localContext, 306, PostgreSqlParser.RULE_refreshmatviewstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3654;
            this.match(PostgreSqlParser.KW_REFRESH);
            this.state = 3655;
            this.match(PostgreSqlParser.KW_MATERIALIZED);
            this.state = 3656;
            this.match(PostgreSqlParser.KW_VIEW);
            this.state = 3658;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 109) {
                {
                this.state = 3657;
                this.opt_concurrently();
                }
            }

            this.state = 3660;
            this.view_name();
            this.state = 3662;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 269, this.context) ) {
            case 1:
                {
                this.state = 3661;
                this.opt_with_data();
                }
                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 createseqstmt(): CreateseqstmtContext {
        let localContext = new CreateseqstmtContext(this.context, this.state);
        this.enterRule(localContext, 308, PostgreSqlParser.RULE_createseqstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3664;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3666;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 213 || _la === 254 || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 32773) !== 0)) {
                {
                this.state = 3665;
                this.opttemp();
                }
            }

            this.state = 3668;
            this.match(PostgreSqlParser.KW_SEQUENCE);
            this.state = 3670;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 271, this.context) ) {
            case 1:
                {
                this.state = 3669;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 3672;
            this.qualified_name();
            this.state = 3674;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 272, this.context) ) {
            case 1:
                {
                this.state = 3673;
                this.optseqoptlist();
                }
                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 alterseqstmt(): AlterseqstmtContext {
        let localContext = new AlterseqstmtContext(this.context, this.state);
        this.enterRule(localContext, 310, PostgreSqlParser.RULE_alterseqstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3676;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 3677;
            this.match(PostgreSqlParser.KW_SEQUENCE);
            this.state = 3679;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 273, this.context) ) {
            case 1:
                {
                this.state = 3678;
                this.opt_if_exists();
                }
                break;
            }
            this.state = 3681;
            this.qualified_name();
            this.state = 3682;
            this.seqoptlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optseqoptlist(): OptseqoptlistContext {
        let localContext = new OptseqoptlistContext(this.context, this.state);
        this.enterRule(localContext, 312, PostgreSqlParser.RULE_optseqoptlist);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3684;
            this.seqoptlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optparenthesizedseqoptlist(): OptparenthesizedseqoptlistContext {
        let localContext = new OptparenthesizedseqoptlistContext(this.context, this.state);
        this.enterRule(localContext, 314, PostgreSqlParser.RULE_optparenthesizedseqoptlist);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3686;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3687;
            this.seqoptlist();
            this.state = 3688;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public seqoptlist(): SeqoptlistContext {
        let localContext = new SeqoptlistContext(this.context, this.state);
        this.enterRule(localContext, 316, PostgreSqlParser.RULE_seqoptlist);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3691;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 3690;
                    this.seqoptelem();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 3693;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 274, 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 seqoptelem(): SeqoptelemContext {
        let localContext = new SeqoptelemContext(this.context, this.state);
        this.enterRule(localContext, 318, PostgreSqlParser.RULE_seqoptelem);
        let _la: number;
        try {
            this.state = 3729;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AS:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3695;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 3696;
                this.simpletypename();
                }
                break;
            case PostgreSqlParser.KW_CACHE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3697;
                this.match(PostgreSqlParser.KW_CACHE);
                this.state = 3698;
                this.numericonly();
                }
                break;
            case PostgreSqlParser.KW_CYCLE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3699;
                this.match(PostgreSqlParser.KW_CYCLE);
                }
                break;
            case PostgreSqlParser.KW_INCREMENT:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3700;
                this.match(PostgreSqlParser.KW_INCREMENT);
                this.state = 3702;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 147) {
                    {
                    this.state = 3701;
                    this.opt_by();
                    }
                }

                this.state = 3704;
                this.numericonly();
                }
                break;
            case PostgreSqlParser.KW_MAXVALUE:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 3705;
                this.match(PostgreSqlParser.KW_MAXVALUE);
                this.state = 3706;
                this.numericonly();
                }
                break;
            case PostgreSqlParser.KW_MINVALUE:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 3707;
                this.match(PostgreSqlParser.KW_MINVALUE);
                this.state = 3708;
                this.numericonly();
                }
                break;
            case PostgreSqlParser.KW_NO:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 3709;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 3710;
                _la = this.tokenStream.LA(1);
                if(!(_la === 173 || _la === 260 || _la === 262)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case PostgreSqlParser.KW_OWNED:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 3711;
                this.match(PostgreSqlParser.KW_OWNED);
                this.state = 3712;
                this.match(PostgreSqlParser.KW_BY);
                this.state = 3713;
                this.column_name();
                }
                break;
            case PostgreSqlParser.KW_SEQUENCE:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 3714;
                this.match(PostgreSqlParser.KW_SEQUENCE);
                this.state = 3715;
                this.match(PostgreSqlParser.KW_NAME);
                this.state = 3716;
                this.any_name();
                }
                break;
            case PostgreSqlParser.KW_START:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 3717;
                this.match(PostgreSqlParser.KW_START);
                this.state = 3719;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 105) {
                    {
                    this.state = 3718;
                    this.opt_with();
                    }
                }

                this.state = 3721;
                this.numericonly();
                }
                break;
            case PostgreSqlParser.KW_RESTART:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 3722;
                this.match(PostgreSqlParser.KW_RESTART);
                this.state = 3724;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 277, this.context) ) {
                case 1:
                    {
                    this.state = 3723;
                    this.opt_with();
                    }
                    break;
                }
                this.state = 3727;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 12 || _la === 13 || _la === 571 || _la === 573) {
                    {
                    this.state = 3726;
                    this.numericonly();
                    }
                }

                }
                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 opt_by(): Opt_byContext {
        let localContext = new Opt_byContext(this.context, this.state);
        this.enterRule(localContext, 320, PostgreSqlParser.RULE_opt_by);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3731;
            this.match(PostgreSqlParser.KW_BY);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public numericonly(): NumericonlyContext {
        let localContext = new NumericonlyContext(this.context, this.state);
        this.enterRule(localContext, 322, PostgreSqlParser.RULE_numericonly);
        try {
            this.state = 3739;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 280, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3733;
                this.fconst();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3734;
                this.match(PostgreSqlParser.PLUS);
                this.state = 3735;
                this.fconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3736;
                this.match(PostgreSqlParser.MINUS);
                this.state = 3737;
                this.fconst();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3738;
                this.signediconst();
                }
                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 numericonly_list(): Numericonly_listContext {
        let localContext = new Numericonly_listContext(this.context, this.state);
        this.enterRule(localContext, 324, PostgreSqlParser.RULE_numericonly_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3741;
            this.numericonly();
            this.state = 3746;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 3742;
                this.match(PostgreSqlParser.COMMA);
                this.state = 3743;
                this.numericonly();
                }
                }
                this.state = 3748;
                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 createplangstmt(): CreateplangstmtContext {
        let localContext = new CreateplangstmtContext(this.context, this.state);
        this.enterRule(localContext, 326, PostgreSqlParser.RULE_createplangstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3749;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3751;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 82) {
                {
                this.state = 3750;
                this.opt_or_replace();
                }
            }

            this.state = 3754;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 359) {
                {
                this.state = 3753;
                this.opt_trusted();
                }
            }

            this.state = 3757;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 295) {
                {
                this.state = 3756;
                this.opt_procedural();
                }
            }

            this.state = 3759;
            this.match(PostgreSqlParser.KW_LANGUAGE);
            this.state = 3760;
            this.name();
            this.state = 3769;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 287, this.context) ) {
            case 1:
                {
                this.state = 3761;
                this.match(PostgreSqlParser.KW_HANDLER);
                this.state = 3762;
                this.handler_name();
                this.state = 3764;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 285, this.context) ) {
                case 1:
                    {
                    this.state = 3763;
                    this.opt_inline_handler();
                    }
                    break;
                }
                this.state = 3767;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 286, this.context) ) {
                case 1:
                    {
                    this.state = 3766;
                    this.opt_validator();
                    }
                    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 opt_trusted(): Opt_trustedContext {
        let localContext = new Opt_trustedContext(this.context, this.state);
        this.enterRule(localContext, 328, PostgreSqlParser.RULE_opt_trusted);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3771;
            this.match(PostgreSqlParser.KW_TRUSTED);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public handler_name(): Handler_nameContext {
        let localContext = new Handler_nameContext(this.context, this.state);
        this.enterRule(localContext, 330, PostgreSqlParser.RULE_handler_name);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3773;
            this.name();
            this.state = 3775;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 11) {
                {
                this.state = 3774;
                this.attrs();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_inline_handler(): Opt_inline_handlerContext {
        let localContext = new Opt_inline_handlerContext(this.context, this.state);
        this.enterRule(localContext, 332, PostgreSqlParser.RULE_opt_inline_handler);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3777;
            this.match(PostgreSqlParser.KW_INLINE);
            this.state = 3778;
            this.handler_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public validator_clause(): Validator_clauseContext {
        let localContext = new Validator_clauseContext(this.context, this.state);
        this.enterRule(localContext, 334, PostgreSqlParser.RULE_validator_clause);
        try {
            this.state = 3784;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_VALIDATOR:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3780;
                this.match(PostgreSqlParser.KW_VALIDATOR);
                this.state = 3781;
                this.handler_name();
                }
                break;
            case PostgreSqlParser.KW_NO:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3782;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 3783;
                this.match(PostgreSqlParser.KW_VALIDATOR);
                }
                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 opt_validator(): Opt_validatorContext {
        let localContext = new Opt_validatorContext(this.context, this.state);
        this.enterRule(localContext, 336, PostgreSqlParser.RULE_opt_validator);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3786;
            this.validator_clause();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_procedural(): Opt_proceduralContext {
        let localContext = new Opt_proceduralContext(this.context, this.state);
        this.enterRule(localContext, 338, PostgreSqlParser.RULE_opt_procedural);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3788;
            this.match(PostgreSqlParser.KW_PROCEDURAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createtablespacestmt(): CreatetablespacestmtContext {
        let localContext = new CreatetablespacestmtContext(this.context, this.state);
        this.enterRule(localContext, 340, PostgreSqlParser.RULE_createtablespacestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3790;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3791;
            this.match(PostgreSqlParser.KW_TABLESPACE);
            this.state = 3792;
            this.tablespace_name();
            this.state = 3794;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 282) {
                {
                this.state = 3793;
                this.opttablespaceowner();
                }
            }

            this.state = 3796;
            this.match(PostgreSqlParser.KW_LOCATION);
            this.state = 3797;
            this.sconst();
            this.state = 3799;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 291, this.context) ) {
            case 1:
                {
                this.state = 3798;
                this.opt_reloptions();
                }
                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 opttablespaceowner(): OpttablespaceownerContext {
        let localContext = new OpttablespaceownerContext(this.context, this.state);
        this.enterRule(localContext, 342, PostgreSqlParser.RULE_opttablespaceowner);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3801;
            this.match(PostgreSqlParser.KW_OWNER);
            this.state = 3802;
            this.rolespec();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createextensionstmt(): CreateextensionstmtContext {
        let localContext = new CreateextensionstmtContext(this.context, this.state);
        this.enterRule(localContext, 344, PostgreSqlParser.RULE_createextensionstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3804;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3805;
            this.match(PostgreSqlParser.KW_EXTENSION);
            this.state = 3807;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 292, this.context) ) {
            case 1:
                {
                this.state = 3806;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 3809;
            this.name();
            this.state = 3811;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 293, this.context) ) {
            case 1:
                {
                this.state = 3810;
                this.opt_with();
                }
                break;
            }
            this.state = 3813;
            this.create_extension_opt_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public create_extension_opt_list(): Create_extension_opt_listContext {
        let localContext = new Create_extension_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 346, PostgreSqlParser.RULE_create_extension_opt_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3818;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 294, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 3815;
                    this.create_extension_opt_item();
                    }
                    }
                }
                this.state = 3820;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 294, 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 create_extension_opt_item(): Create_extension_opt_itemContext {
        let localContext = new Create_extension_opt_itemContext(this.context, this.state);
        this.enterRule(localContext, 348, PostgreSqlParser.RULE_create_extension_opt_item);
        try {
            this.state = 3828;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SCHEMA:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3821;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 3822;
                this.schema_name();
                }
                break;
            case PostgreSqlParser.KW_VERSION:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3823;
                this.match(PostgreSqlParser.KW_VERSION);
                this.state = 3824;
                this.nonreservedword_or_sconst();
                }
                break;
            case PostgreSqlParser.KW_FROM:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3825;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 3826;
                this.nonreservedword_or_sconst();
                }
                break;
            case PostgreSqlParser.KW_CASCADE:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3827;
                this.match(PostgreSqlParser.KW_CASCADE);
                }
                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 alterextensionstmt(): AlterextensionstmtContext {
        let localContext = new AlterextensionstmtContext(this.context, this.state);
        this.enterRule(localContext, 350, PostgreSqlParser.RULE_alterextensionstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3830;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 3831;
            this.match(PostgreSqlParser.KW_EXTENSION);
            this.state = 3832;
            this.name();
            this.state = 3833;
            this.match(PostgreSqlParser.KW_UPDATE);
            this.state = 3834;
            this.alter_extension_opt_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alter_extension_opt_list(): Alter_extension_opt_listContext {
        let localContext = new Alter_extension_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 352, PostgreSqlParser.RULE_alter_extension_opt_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3839;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 94) {
                {
                {
                this.state = 3836;
                this.alter_extension_opt_item();
                }
                }
                this.state = 3841;
                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 alter_extension_opt_item(): Alter_extension_opt_itemContext {
        let localContext = new Alter_extension_opt_itemContext(this.context, this.state);
        this.enterRule(localContext, 354, PostgreSqlParser.RULE_alter_extension_opt_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3842;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 3843;
            this.nonreservedword_or_sconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterextensioncontentsstmt(): AlterextensioncontentsstmtContext {
        let localContext = new AlterextensioncontentsstmtContext(this.context, this.state);
        this.enterRule(localContext, 356, PostgreSqlParser.RULE_alterextensioncontentsstmt);
        try {
            this.state = 3947;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 297, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3845;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3846;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3847;
                this.name();
                this.state = 3848;
                this.add_drop();
                this.state = 3849;
                this.object_type_name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3851;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3852;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3853;
                this.name();
                this.state = 3854;
                this.add_drop();
                this.state = 3855;
                this.object_type_any_name();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3857;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3858;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3859;
                this.name();
                this.state = 3860;
                this.add_drop();
                this.state = 3861;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 3862;
                this.aggregate_with_argtypes();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3864;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3865;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3866;
                this.name();
                this.state = 3867;
                this.add_drop();
                this.state = 3868;
                this.match(PostgreSqlParser.KW_CAST);
                this.state = 3869;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 3870;
                this.typename();
                this.state = 3871;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 3872;
                this.typename();
                this.state = 3873;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 3875;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3876;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3877;
                this.name();
                this.state = 3878;
                this.add_drop();
                this.state = 3879;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 3880;
                this.typename();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 3882;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3883;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3884;
                this.name();
                this.state = 3885;
                this.add_drop();
                this.state = 3886;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 3887;
                this.function_with_argtypes();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 3889;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3890;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3891;
                this.name();
                this.state = 3892;
                this.add_drop();
                this.state = 3893;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 3894;
                this.operator_with_argtypes();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 3896;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3897;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3898;
                this.name();
                this.state = 3899;
                this.add_drop();
                this.state = 3900;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 3901;
                this.match(PostgreSqlParser.KW_CLASS);
                this.state = 3902;
                this.any_name();
                this.state = 3903;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 3904;
                this.name();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 3906;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3907;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3908;
                this.name();
                this.state = 3909;
                this.add_drop();
                this.state = 3910;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 3911;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 3912;
                this.any_name();
                this.state = 3913;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 3914;
                this.name();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 3916;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3917;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3918;
                this.name();
                this.state = 3919;
                this.add_drop();
                this.state = 3920;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 3921;
                this.procedure_with_argtypes();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 3923;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3924;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3925;
                this.name();
                this.state = 3926;
                this.add_drop();
                this.state = 3927;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 3928;
                this.routine_with_argtypes();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 3930;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3931;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3932;
                this.name();
                this.state = 3933;
                this.add_drop();
                this.state = 3934;
                this.match(PostgreSqlParser.KW_TRANSFORM);
                this.state = 3935;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 3936;
                this.typename();
                this.state = 3937;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 3938;
                this.name();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 3940;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3941;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 3942;
                this.name();
                this.state = 3943;
                this.add_drop();
                this.state = 3944;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 3945;
                this.typename();
                }
                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 createfdwstmt(): CreatefdwstmtContext {
        let localContext = new CreatefdwstmtContext(this.context, this.state);
        this.enterRule(localContext, 358, PostgreSqlParser.RULE_createfdwstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3949;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 3950;
            this.match(PostgreSqlParser.KW_FOREIGN);
            this.state = 3951;
            this.match(PostgreSqlParser.KW_DATA);
            this.state = 3952;
            this.match(PostgreSqlParser.KW_WRAPPER);
            this.state = 3953;
            this.name();
            this.state = 3955;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 298, this.context) ) {
            case 1:
                {
                this.state = 3954;
                this.opt_fdw_options();
                }
                break;
            }
            this.state = 3958;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 299, this.context) ) {
            case 1:
                {
                this.state = 3957;
                this.create_generic_options();
                }
                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 fdw_option(): Fdw_optionContext {
        let localContext = new Fdw_optionContext(this.context, this.state);
        this.enterRule(localContext, 360, PostgreSqlParser.RULE_fdw_option);
        try {
            this.state = 3968;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 300, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3960;
                this.match(PostgreSqlParser.KW_HANDLER);
                this.state = 3961;
                this.handler_name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3962;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 3963;
                this.match(PostgreSqlParser.KW_HANDLER);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3964;
                this.match(PostgreSqlParser.KW_VALIDATOR);
                this.state = 3965;
                this.handler_name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3966;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 3967;
                this.match(PostgreSqlParser.KW_VALIDATOR);
                }
                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 fdw_options(): Fdw_optionsContext {
        let localContext = new Fdw_optionsContext(this.context, this.state);
        this.enterRule(localContext, 362, PostgreSqlParser.RULE_fdw_options);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3971;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 3970;
                    this.fdw_option();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 3973;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 301, 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 opt_fdw_options(): Opt_fdw_optionsContext {
        let localContext = new Opt_fdw_optionsContext(this.context, this.state);
        this.enterRule(localContext, 364, PostgreSqlParser.RULE_opt_fdw_options);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3975;
            this.fdw_options();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterfdwstmt(): AlterfdwstmtContext {
        let localContext = new AlterfdwstmtContext(this.context, this.state);
        this.enterRule(localContext, 366, PostgreSqlParser.RULE_alterfdwstmt);
        let _la: number;
        try {
            this.state = 3994;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 303, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3977;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3978;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 3979;
                this.match(PostgreSqlParser.KW_DATA);
                this.state = 3980;
                this.match(PostgreSqlParser.KW_WRAPPER);
                this.state = 3981;
                this.name();
                this.state = 3983;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 215 || _la === 269 || _la === 373) {
                    {
                    this.state = 3982;
                    this.opt_fdw_options();
                    }
                }

                this.state = 3985;
                this.alter_generic_options();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3987;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 3988;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 3989;
                this.match(PostgreSqlParser.KW_DATA);
                this.state = 3990;
                this.match(PostgreSqlParser.KW_WRAPPER);
                this.state = 3991;
                this.name();
                this.state = 3992;
                this.fdw_options();
                }
                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 create_generic_options(): Create_generic_optionsContext {
        let localContext = new Create_generic_optionsContext(this.context, this.state);
        this.enterRule(localContext, 368, PostgreSqlParser.RULE_create_generic_options);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3996;
            this.match(PostgreSqlParser.KW_OPTIONS);
            this.state = 3997;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 3998;
            this.generic_option_list();
            this.state = 3999;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public generic_option_list(): Generic_option_listContext {
        let localContext = new Generic_option_listContext(this.context, this.state);
        this.enterRule(localContext, 370, PostgreSqlParser.RULE_generic_option_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4001;
            this.generic_option_elem();
            this.state = 4006;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4002;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4003;
                this.generic_option_elem();
                }
                }
                this.state = 4008;
                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 alter_generic_options(): Alter_generic_optionsContext {
        let localContext = new Alter_generic_optionsContext(this.context, this.state);
        this.enterRule(localContext, 372, PostgreSqlParser.RULE_alter_generic_options);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4009;
            this.match(PostgreSqlParser.KW_OPTIONS);
            this.state = 4010;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4011;
            this.alter_generic_option_list();
            this.state = 4012;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alter_generic_option_list(): Alter_generic_option_listContext {
        let localContext = new Alter_generic_option_listContext(this.context, this.state);
        this.enterRule(localContext, 374, PostgreSqlParser.RULE_alter_generic_option_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4014;
            this.alter_generic_option_elem();
            this.state = 4019;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4015;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4016;
                this.alter_generic_option_elem();
                }
                }
                this.state = 4021;
                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 alter_generic_option_elem(): Alter_generic_option_elemContext {
        let localContext = new Alter_generic_option_elemContext(this.context, this.state);
        this.enterRule(localContext, 376, PostgreSqlParser.RULE_alter_generic_option_elem);
        try {
            this.state = 4029;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 306, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4022;
                this.generic_option_elem();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4023;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 4024;
                this.generic_option_elem();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4025;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 4026;
                this.generic_option_elem();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4027;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4028;
                this.generic_option_elem();
                }
                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 generic_option_elem(): Generic_option_elemContext {
        let localContext = new Generic_option_elemContext(this.context, this.state);
        this.enterRule(localContext, 378, PostgreSqlParser.RULE_generic_option_elem);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4031;
            this.generic_option_name();
            this.state = 4032;
            this.generic_option_arg();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public generic_option_name(): Generic_option_nameContext {
        let localContext = new Generic_option_nameContext(this.context, this.state);
        this.enterRule(localContext, 380, PostgreSqlParser.RULE_generic_option_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4034;
            this.collabel();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public generic_option_arg(): Generic_option_argContext {
        let localContext = new Generic_option_argContext(this.context, this.state);
        this.enterRule(localContext, 382, PostgreSqlParser.RULE_generic_option_arg);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4036;
            this.sconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createforeignserverstmt(): CreateforeignserverstmtContext {
        let localContext = new CreateforeignserverstmtContext(this.context, this.state);
        this.enterRule(localContext, 384, PostgreSqlParser.RULE_createforeignserverstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4038;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 4039;
            this.match(PostgreSqlParser.KW_SERVER);
            this.state = 4041;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 307, this.context) ) {
            case 1:
                {
                this.state = 4040;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 4043;
            this.name();
            this.state = 4045;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 360) {
                {
                this.state = 4044;
                this.opt_type();
                }
            }

            this.state = 4048;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 375) {
                {
                this.state = 4047;
                this.opt_foreign_server_version();
                }
            }

            this.state = 4050;
            this.match(PostgreSqlParser.KW_FOREIGN);
            this.state = 4051;
            this.match(PostgreSqlParser.KW_DATA);
            this.state = 4052;
            this.match(PostgreSqlParser.KW_WRAPPER);
            this.state = 4053;
            this.name();
            this.state = 4055;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 310, this.context) ) {
            case 1:
                {
                this.state = 4054;
                this.create_generic_options();
                }
                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 opt_type(): Opt_typeContext {
        let localContext = new Opt_typeContext(this.context, this.state);
        this.enterRule(localContext, 386, PostgreSqlParser.RULE_opt_type);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4057;
            this.match(PostgreSqlParser.KW_TYPE);
            this.state = 4058;
            this.sconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public foreign_server_version(): Foreign_server_versionContext {
        let localContext = new Foreign_server_versionContext(this.context, this.state);
        this.enterRule(localContext, 388, PostgreSqlParser.RULE_foreign_server_version);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4060;
            this.match(PostgreSqlParser.KW_VERSION);
            this.state = 4063;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 4061;
                this.sconst();
                }
                break;
            case PostgreSqlParser.KW_NULL:
                {
                this.state = 4062;
                this.match(PostgreSqlParser.KW_NULL);
                }
                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 opt_foreign_server_version(): Opt_foreign_server_versionContext {
        let localContext = new Opt_foreign_server_versionContext(this.context, this.state);
        this.enterRule(localContext, 390, PostgreSqlParser.RULE_opt_foreign_server_version);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4065;
            this.foreign_server_version();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterforeignserverstmt(): AlterforeignserverstmtContext {
        let localContext = new AlterforeignserverstmtContext(this.context, this.state);
        this.enterRule(localContext, 392, PostgreSqlParser.RULE_alterforeignserverstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4067;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 4068;
            this.match(PostgreSqlParser.KW_SERVER);
            this.state = 4069;
            this.name();
            this.state = 4075;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_OPTIONS:
                {
                this.state = 4070;
                this.alter_generic_options();
                }
                break;
            case PostgreSqlParser.KW_VERSION:
                {
                this.state = 4071;
                this.foreign_server_version();
                this.state = 4073;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 312, this.context) ) {
                case 1:
                    {
                    this.state = 4072;
                    this.alter_generic_options();
                    }
                    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 createforeigntablestmt(): CreateforeigntablestmtContext {
        let localContext = new CreateforeigntablestmtContext(this.context, this.state);
        this.enterRule(localContext, 394, PostgreSqlParser.RULE_createforeigntablestmt);
        let _la: number;
        try {
            this.state = 4116;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 321, this.context) ) {
            case 1:
                localContext = new CreateForeignTableContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4077;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4078;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 4079;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 4081;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 314, this.context) ) {
                case 1:
                    {
                    this.state = 4080;
                    this.opt_if_not_exists();
                    }
                    break;
                }
                this.state = 4083;
                this.table_name_create();
                this.state = 4084;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4086;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1360008709) !== 0) || ((((_la - 85)) & ~0x1F) === 0 && ((1 << (_la - 85)) & 2147491969) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 4294966809) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 4294967295) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 4294967295) !== 0) || ((((_la - 216)) & ~0x1F) === 0 && ((1 << (_la - 216)) & 4290781183) !== 0) || ((((_la - 248)) & ~0x1F) === 0 && ((1 << (_la - 248)) & 4294967295) !== 0) || ((((_la - 280)) & ~0x1F) === 0 && ((1 << (_la - 280)) & 4294967295) !== 0) || ((((_la - 312)) & ~0x1F) === 0 && ((1 << (_la - 312)) & 4294967295) !== 0) || ((((_la - 344)) & ~0x1F) === 0 && ((1 << (_la - 344)) & 4294967295) !== 0) || ((((_la - 376)) & ~0x1F) === 0 && ((1 << (_la - 376)) & 4294967295) !== 0) || ((((_la - 408)) & ~0x1F) === 0 && ((1 << (_la - 408)) & 4294967295) !== 0) || ((((_la - 440)) & ~0x1F) === 0 && ((1 << (_la - 440)) & 4294950911) !== 0) || ((((_la - 473)) & ~0x1F) === 0 && ((1 << (_la - 473)) & 3221225471) !== 0) || ((((_la - 506)) & ~0x1F) === 0 && ((1 << (_la - 506)) & 24575) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                    {
                    this.state = 4085;
                    this.opttableelementlist();
                    }
                }

                this.state = 4088;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 4090;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 238) {
                    {
                    this.state = 4089;
                    this.optinherit();
                    }
                }

                this.state = 4092;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 4093;
                this.name();
                this.state = 4095;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 317, this.context) ) {
                case 1:
                    {
                    this.state = 4094;
                    this.create_generic_options();
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new CreatePartitionForeignTableContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4097;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4098;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 4099;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 4101;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 318, this.context) ) {
                case 1:
                    {
                    this.state = 4100;
                    this.opt_if_not_exists();
                    }
                    break;
                }
                this.state = 4103;
                this.table_name_create();
                this.state = 4104;
                this.match(PostgreSqlParser.KW_PARTITION);
                this.state = 4105;
                this.match(PostgreSqlParser.KW_OF);
                this.state = 4106;
                this.table_name();
                this.state = 4108;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 4107;
                    this.opttypedtableelementlist();
                    }
                }

                this.state = 4110;
                this.partitionboundspec();
                this.state = 4111;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 4112;
                this.name();
                this.state = 4114;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 320, this.context) ) {
                case 1:
                    {
                    this.state = 4113;
                    this.create_generic_options();
                    }
                    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 importforeignschemastmt(): ImportforeignschemastmtContext {
        let localContext = new ImportforeignschemastmtContext(this.context, this.state);
        this.enterRule(localContext, 396, PostgreSqlParser.RULE_importforeignschemastmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4118;
            this.match(PostgreSqlParser.KW_IMPORT);
            this.state = 4119;
            this.match(PostgreSqlParser.KW_FOREIGN);
            this.state = 4120;
            this.match(PostgreSqlParser.KW_SCHEMA);
            this.state = 4121;
            this.schema_name();
            this.state = 4123;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 59 || _la === 74) {
                {
                this.state = 4122;
                this.import_qualification();
                }
            }

            this.state = 4125;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 4126;
            this.match(PostgreSqlParser.KW_SERVER);
            this.state = 4127;
            this.name();
            this.state = 4128;
            this.match(PostgreSqlParser.KW_INTO);
            this.state = 4129;
            this.name();
            this.state = 4131;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 323, this.context) ) {
            case 1:
                {
                this.state = 4130;
                this.create_generic_options();
                }
                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 import_qualification_type(): Import_qualification_typeContext {
        let localContext = new Import_qualification_typeContext(this.context, this.state);
        this.enterRule(localContext, 398, PostgreSqlParser.RULE_import_qualification_type);
        try {
            this.state = 4136;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_LIMIT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4133;
                this.match(PostgreSqlParser.KW_LIMIT);
                this.state = 4134;
                this.match(PostgreSqlParser.KW_TO);
                }
                break;
            case PostgreSqlParser.KW_EXCEPT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4135;
                this.match(PostgreSqlParser.KW_EXCEPT);
                }
                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 import_qualification(): Import_qualificationContext {
        let localContext = new Import_qualificationContext(this.context, this.state);
        this.enterRule(localContext, 400, PostgreSqlParser.RULE_import_qualification);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4138;
            this.import_qualification_type();
            this.state = 4139;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4140;
            this.relation_expr_list();
            this.state = 4141;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createusermappingstmt(): CreateusermappingstmtContext {
        let localContext = new CreateusermappingstmtContext(this.context, this.state);
        this.enterRule(localContext, 402, PostgreSqlParser.RULE_createusermappingstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4143;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 4144;
            this.match(PostgreSqlParser.KW_USER);
            this.state = 4145;
            this.match(PostgreSqlParser.KW_MAPPING);
            this.state = 4147;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 220) {
                {
                this.state = 4146;
                this.opt_if_not_exists();
                }
            }

            this.state = 4149;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 4150;
            this.auth_ident();
            this.state = 4151;
            this.match(PostgreSqlParser.KW_SERVER);
            this.state = 4152;
            this.name();
            this.state = 4154;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 326, this.context) ) {
            case 1:
                {
                this.state = 4153;
                this.create_generic_options();
                }
                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 auth_ident(): Auth_identContext {
        let localContext = new Auth_identContext(this.context, this.state);
        this.enterRule(localContext, 404, PostgreSqlParser.RULE_auth_ident);
        try {
            this.state = 4158;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_PUBLIC:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4156;
                this.rolespec();
                }
                break;
            case PostgreSqlParser.KW_USER:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4157;
                this.match(PostgreSqlParser.KW_USER);
                }
                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 alterusermappingstmt(): AlterusermappingstmtContext {
        let localContext = new AlterusermappingstmtContext(this.context, this.state);
        this.enterRule(localContext, 406, PostgreSqlParser.RULE_alterusermappingstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4160;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 4161;
            this.match(PostgreSqlParser.KW_USER);
            this.state = 4162;
            this.match(PostgreSqlParser.KW_MAPPING);
            this.state = 4163;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 4164;
            this.auth_ident();
            this.state = 4165;
            this.match(PostgreSqlParser.KW_SERVER);
            this.state = 4166;
            this.name();
            this.state = 4167;
            this.alter_generic_options();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createpolicystmt(): CreatepolicystmtContext {
        let localContext = new CreatepolicystmtContext(this.context, this.state);
        this.enterRule(localContext, 408, PostgreSqlParser.RULE_createpolicystmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4169;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 4170;
            this.match(PostgreSqlParser.KW_POLICY);
            this.state = 4171;
            this.name();
            this.state = 4172;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 4173;
            this.qualified_name();
            this.state = 4175;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 328, this.context) ) {
            case 1:
                {
                this.state = 4174;
                this.rowsecuritydefaultpermissive();
                }
                break;
            }
            this.state = 4178;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 62) {
                {
                this.state = 4177;
                this.rowsecuritydefaultforcmd();
                }
            }

            this.state = 4181;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 94) {
                {
                this.state = 4180;
                this.rowsecuritydefaulttorole();
                }
            }

            this.state = 4184;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 4183;
                this.rowsecurityoptionalexpr();
                }
            }

            this.state = 4187;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 332, this.context) ) {
            case 1:
                {
                this.state = 4186;
                this.rowsecurityoptionalwithcheck();
                }
                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 alterpolicystmt(): AlterpolicystmtContext {
        let localContext = new AlterpolicystmtContext(this.context, this.state);
        this.enterRule(localContext, 410, PostgreSqlParser.RULE_alterpolicystmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4189;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 4190;
            this.match(PostgreSqlParser.KW_POLICY);
            this.state = 4191;
            this.name();
            this.state = 4192;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 4193;
            this.qualified_name();
            this.state = 4195;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 94) {
                {
                this.state = 4194;
                this.rowsecurityoptionaltorole();
                }
            }

            this.state = 4198;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 4197;
                this.rowsecurityoptionalexpr();
                }
            }

            this.state = 4201;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 335, this.context) ) {
            case 1:
                {
                this.state = 4200;
                this.rowsecurityoptionalwithcheck();
                }
                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 alterprocedurestmt(): AlterprocedurestmtContext {
        let localContext = new AlterprocedurestmtContext(this.context, this.state);
        this.enterRule(localContext, 412, PostgreSqlParser.RULE_alterprocedurestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4203;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 4204;
            this.match(PostgreSqlParser.KW_PROCEDURE);
            this.state = 4205;
            this.procedure_name();
            this.state = 4207;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 4206;
                this.func_args();
                }
            }

            this.state = 4209;
            this.procedure_cluase();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public procedure_cluase(): Procedure_cluaseContext {
        let localContext = new Procedure_cluaseContext(this.context, this.state);
        this.enterRule(localContext, 414, PostgreSqlParser.RULE_procedure_cluase);
        let _la: number;
        try {
            let alternative: number;
            this.state = 4237;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 340, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4211;
                this.procedure_action();
                this.state = 4215;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 337, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 4212;
                        this.procedure_action();
                        }
                        }
                    }
                    this.state = 4217;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 337, this.context);
                }
                this.state = 4219;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 338, this.context) ) {
                case 1:
                    {
                    this.state = 4218;
                    this.match(PostgreSqlParser.KW_RESTRICT);
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4221;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 4222;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 4223;
                this.procedure_name_create();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4224;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 4225;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 4226;
                this.rolespec();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4227;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 4228;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 4229;
                this.schema_name_create();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4231;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 4230;
                    this.match(PostgreSqlParser.KW_NO);
                    }
                }

                this.state = 4233;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 4234;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 4235;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 4236;
                this.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 procedure_action(): Procedure_actionContext {
        let localContext = new Procedure_actionContext(this.context, this.state);
        this.enterRule(localContext, 416, PostgreSqlParser.RULE_procedure_action);
        let _la: number;
        try {
            this.state = 4267;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 345, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4249;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 343, this.context) ) {
                case 1:
                    {
                    this.state = 4240;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 205) {
                        {
                        this.state = 4239;
                        this.match(PostgreSqlParser.KW_EXTERNAL);
                        }
                    }

                    this.state = 4242;
                    this.match(PostgreSqlParser.KW_SECURITY);
                    this.state = 4243;
                    this.match(PostgreSqlParser.KW_INVOKER);
                    }
                    break;
                case 2:
                    {
                    this.state = 4245;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 205) {
                        {
                        this.state = 4244;
                        this.match(PostgreSqlParser.KW_EXTERNAL);
                        }
                    }

                    this.state = 4247;
                    this.match(PostgreSqlParser.KW_SECURITY);
                    this.state = 4248;
                    this.match(PostgreSqlParser.KW_DEFINER);
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4251;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 4252;
                this.name();
                this.state = 4253;
                _la = this.tokenStream.LA(1);
                if(!(_la === 9 || _la === 94)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 4256;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 344, this.context) ) {
                case 1:
                    {
                    this.state = 4254;
                    this.name();
                    }
                    break;
                case 2:
                    {
                    this.state = 4255;
                    this.match(PostgreSqlParser.KW_DEFAULT);
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4258;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 4259;
                this.name();
                this.state = 4260;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 4261;
                this.match(PostgreSqlParser.KW_CURRENT);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4263;
                this.match(PostgreSqlParser.KW_RESET);
                this.state = 4264;
                this.name();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4265;
                this.match(PostgreSqlParser.KW_RESET);
                this.state = 4266;
                this.match(PostgreSqlParser.KW_ALL);
                }
                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 rowsecurityoptionalexpr(): RowsecurityoptionalexprContext {
        let localContext = new RowsecurityoptionalexprContext(this.context, this.state);
        this.enterRule(localContext, 418, PostgreSqlParser.RULE_rowsecurityoptionalexpr);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4269;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 4270;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4271;
            this.a_expr();
            this.state = 4272;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rowsecurityoptionalwithcheck(): RowsecurityoptionalwithcheckContext {
        let localContext = new RowsecurityoptionalwithcheckContext(this.context, this.state);
        this.enterRule(localContext, 420, PostgreSqlParser.RULE_rowsecurityoptionalwithcheck);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4274;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 4275;
            this.match(PostgreSqlParser.KW_CHECK);
            this.state = 4276;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4277;
            this.a_expr();
            this.state = 4278;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rowsecuritydefaulttorole(): RowsecuritydefaulttoroleContext {
        let localContext = new RowsecuritydefaulttoroleContext(this.context, this.state);
        this.enterRule(localContext, 422, PostgreSqlParser.RULE_rowsecuritydefaulttorole);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4280;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 4281;
            this.role_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rowsecurityoptionaltorole(): RowsecurityoptionaltoroleContext {
        let localContext = new RowsecurityoptionaltoroleContext(this.context, this.state);
        this.enterRule(localContext, 424, PostgreSqlParser.RULE_rowsecurityoptionaltorole);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4283;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 4284;
            this.role_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rowsecuritydefaultpermissive(): RowsecuritydefaultpermissiveContext {
        let localContext = new RowsecuritydefaultpermissiveContext(this.context, this.state);
        this.enterRule(localContext, 426, PostgreSqlParser.RULE_rowsecuritydefaultpermissive);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4286;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 4290;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_PERMISSIVE:
                {
                this.state = 4287;
                this.match(PostgreSqlParser.KW_PERMISSIVE);
                }
                break;
            case PostgreSqlParser.KW_RESTRICTIVE:
                {
                this.state = 4288;
                this.match(PostgreSqlParser.KW_RESTRICTIVE);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 4289;
                this.identifier();
                }
                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 rowsecuritydefaultforcmd(): RowsecuritydefaultforcmdContext {
        let localContext = new RowsecuritydefaultforcmdContext(this.context, this.state);
        this.enterRule(localContext, 428, PostgreSqlParser.RULE_rowsecuritydefaultforcmd);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4292;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 4293;
            this.row_security_cmd();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public row_security_cmd(): Row_security_cmdContext {
        let localContext = new Row_security_cmdContext(this.context, this.state);
        this.enterRule(localContext, 430, PostgreSqlParser.RULE_row_security_cmd);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4295;
            _la = this.tokenStream.LA(1);
            if(!(_la === 30 || _la === 88 || _la === 182 || _la === 241 || _la === 369)) {
            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 createamstmt(): CreateamstmtContext {
        let localContext = new CreateamstmtContext(this.context, this.state);
        this.enterRule(localContext, 432, PostgreSqlParser.RULE_createamstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4297;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 4298;
            this.match(PostgreSqlParser.KW_ACCESS);
            this.state = 4299;
            this.match(PostgreSqlParser.KW_METHOD);
            this.state = 4300;
            this.name();
            this.state = 4301;
            this.match(PostgreSqlParser.KW_TYPE);
            this.state = 4302;
            this.am_type();
            this.state = 4303;
            this.match(PostgreSqlParser.KW_HANDLER);
            this.state = 4304;
            this.handler_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public am_type(): Am_typeContext {
        let localContext = new Am_typeContext(this.context, this.state);
        this.enterRule(localContext, 434, PostgreSqlParser.RULE_am_type);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4306;
            _la = this.tokenStream.LA(1);
            if(!(_la === 92 || _la === 226)) {
            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 createtrigstmt(): CreatetrigstmtContext {
        let localContext = new CreatetrigstmtContext(this.context, this.state);
        this.enterRule(localContext, 436, PostgreSqlParser.RULE_createtrigstmt);
        let _la: number;
        try {
            this.state = 4362;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 356, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4308;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4310;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82) {
                    {
                    this.state = 4309;
                    this.opt_or_replace();
                    }
                }

                this.state = 4312;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 4313;
                this.name();
                this.state = 4314;
                this.triggeractiontime();
                this.state = 4315;
                this.triggerevents();
                this.state = 4316;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 4317;
                this.table_name();
                this.state = 4319;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 447) {
                    {
                    this.state = 4318;
                    this.triggerreferencing();
                    }
                }

                this.state = 4322;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 4321;
                    this.triggerforspec();
                    }
                }

                this.state = 4325;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 102) {
                    {
                    this.state = 4324;
                    this.triggerwhen();
                    }
                }

                this.state = 4327;
                this.match(PostgreSqlParser.KW_EXECUTE);
                this.state = 4328;
                this.function_or_procedure();
                this.state = 4329;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4330;
                this.triggerfuncargs();
                this.state = 4331;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4333;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4335;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82) {
                    {
                    this.state = 4334;
                    this.opt_or_replace();
                    }
                }

                this.state = 4338;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 45) {
                    {
                    this.state = 4337;
                    this.match(PostgreSqlParser.KW_CONSTRAINT);
                    }
                }

                this.state = 4340;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 4341;
                this.name();
                this.state = 4342;
                this.triggeractiontime();
                this.state = 4343;
                this.triggerevents();
                this.state = 4344;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 4345;
                this.table_name();
                this.state = 4347;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64) {
                    {
                    this.state = 4346;
                    this.optconstrfromtable();
                    }
                }

                this.state = 4349;
                this.constraintattributespec();
                this.state = 4351;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 4350;
                    this.foreachrow();
                    }
                }

                this.state = 4354;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 102) {
                    {
                    this.state = 4353;
                    this.triggerwhen();
                    }
                }

                this.state = 4356;
                this.match(PostgreSqlParser.KW_EXECUTE);
                this.state = 4357;
                this.function_or_procedure();
                this.state = 4358;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4359;
                this.triggerfuncargs();
                this.state = 4360;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 triggeractiontime(): TriggeractiontimeContext {
        let localContext = new TriggeractiontimeContext(this.context, this.state);
        this.enterRule(localContext, 438, PostgreSqlParser.RULE_triggeractiontime);
        try {
            this.state = 4368;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_BEFORE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4364;
                this.match(PostgreSqlParser.KW_BEFORE);
                }
                break;
            case PostgreSqlParser.KW_AFTER:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4365;
                this.match(PostgreSqlParser.KW_AFTER);
                }
                break;
            case PostgreSqlParser.KW_INSTEAD:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4366;
                this.match(PostgreSqlParser.KW_INSTEAD);
                this.state = 4367;
                this.match(PostgreSqlParser.KW_OF);
                }
                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 foreachrow(): ForeachrowContext {
        let localContext = new ForeachrowContext(this.context, this.state);
        this.enterRule(localContext, 440, PostgreSqlParser.RULE_foreachrow);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4370;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 4372;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 4371;
                this.match(PostgreSqlParser.KW_EACH);
                }
            }

            this.state = 4374;
            this.roworstatment();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public roworstatment(): RoworstatmentContext {
        let localContext = new RoworstatmentContext(this.context, this.state);
        this.enterRule(localContext, 442, PostgreSqlParser.RULE_roworstatment);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4376;
            _la = this.tokenStream.LA(1);
            if(!(_la === 341 || _la === 414)) {
            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 triggerevents(): TriggereventsContext {
        let localContext = new TriggereventsContext(this.context, this.state);
        this.enterRule(localContext, 444, PostgreSqlParser.RULE_triggerevents);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4378;
            this.triggeroneevent();
            this.state = 4383;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 82) {
                {
                {
                this.state = 4379;
                this.match(PostgreSqlParser.KW_OR);
                this.state = 4380;
                this.triggeroneevent();
                }
                }
                this.state = 4385;
                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 triggeroneevent(): TriggeroneeventContext {
        let localContext = new TriggeroneeventContext(this.context, this.state);
        this.enterRule(localContext, 446, PostgreSqlParser.RULE_triggeroneevent);
        try {
            this.state = 4393;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 360, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4386;
                this.match(PostgreSqlParser.KW_INSERT);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4387;
                this.match(PostgreSqlParser.KW_DELETE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4388;
                this.match(PostgreSqlParser.KW_UPDATE);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4389;
                this.match(PostgreSqlParser.KW_UPDATE);
                this.state = 4390;
                this.match(PostgreSqlParser.KW_OF);
                this.state = 4391;
                this.column_list();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4392;
                this.match(PostgreSqlParser.KW_TRUNCATE);
                }
                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 triggerreferencing(): TriggerreferencingContext {
        let localContext = new TriggerreferencingContext(this.context, this.state);
        this.enterRule(localContext, 448, PostgreSqlParser.RULE_triggerreferencing);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4395;
            this.match(PostgreSqlParser.KW_REFERENCING);
            this.state = 4396;
            this.triggertransitions();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public triggertransitions(): TriggertransitionsContext {
        let localContext = new TriggertransitionsContext(this.context, this.state);
        this.enterRule(localContext, 450, PostgreSqlParser.RULE_triggertransitions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4399;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 4398;
                this.triggertransition();
                }
                }
                this.state = 4401;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 448 || _la === 449);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public triggertransition(): TriggertransitionContext {
        let localContext = new TriggertransitionContext(this.context, this.state);
        this.enterRule(localContext, 452, PostgreSqlParser.RULE_triggertransition);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4403;
            this.transitionoldornew();
            this.state = 4404;
            this.transitionrowortable();
            this.state = 4406;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 36) {
                {
                this.state = 4405;
                this.opt_as();
                }
            }

            this.state = 4408;
            this.transitionrelname();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public transitionoldornew(): TransitionoldornewContext {
        let localContext = new TransitionoldornewContext(this.context, this.state);
        this.enterRule(localContext, 454, PostgreSqlParser.RULE_transitionoldornew);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4410;
            _la = this.tokenStream.LA(1);
            if(!(_la === 448 || _la === 449)) {
            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 transitionrowortable(): TransitionrowortableContext {
        let localContext = new TransitionrowortableContext(this.context, this.state);
        this.enterRule(localContext, 456, PostgreSqlParser.RULE_transitionrowortable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4412;
            _la = this.tokenStream.LA(1);
            if(!(_la === 92 || _la === 414)) {
            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 transitionrelname(): TransitionrelnameContext {
        let localContext = new TransitionrelnameContext(this.context, this.state);
        this.enterRule(localContext, 458, PostgreSqlParser.RULE_transitionrelname);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4414;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public triggerforspec(): TriggerforspecContext {
        let localContext = new TriggerforspecContext(this.context, this.state);
        this.enterRule(localContext, 460, PostgreSqlParser.RULE_triggerforspec);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4416;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 4418;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 4417;
                this.triggerforopteach();
                }
            }

            this.state = 4420;
            this.triggerfortype();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public triggerforopteach(): TriggerforopteachContext {
        let localContext = new TriggerforopteachContext(this.context, this.state);
        this.enterRule(localContext, 462, PostgreSqlParser.RULE_triggerforopteach);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4422;
            this.match(PostgreSqlParser.KW_EACH);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public triggerfortype(): TriggerfortypeContext {
        let localContext = new TriggerfortypeContext(this.context, this.state);
        this.enterRule(localContext, 464, PostgreSqlParser.RULE_triggerfortype);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4424;
            _la = this.tokenStream.LA(1);
            if(!(_la === 341 || _la === 414)) {
            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 triggerwhen(): TriggerwhenContext {
        let localContext = new TriggerwhenContext(this.context, this.state);
        this.enterRule(localContext, 466, PostgreSqlParser.RULE_triggerwhen);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4426;
            this.match(PostgreSqlParser.KW_WHEN);
            this.state = 4427;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4428;
            this.a_expr();
            this.state = 4429;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public function_or_procedure(): Function_or_procedureContext {
        let localContext = new Function_or_procedureContext(this.context, this.state);
        this.enterRule(localContext, 468, PostgreSqlParser.RULE_function_or_procedure);
        try {
            this.state = 4435;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FUNCTION:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4431;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 4432;
                this.function_name();
                }
                break;
            case PostgreSqlParser.KW_PROCEDURE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4433;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 4434;
                this.procedure_name();
                }
                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 triggerfuncargs(): TriggerfuncargsContext {
        let localContext = new TriggerfuncargsContext(this.context, this.state);
        this.enterRule(localContext, 470, PostgreSqlParser.RULE_triggerfuncargs);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4439;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ALL:
            case PostgreSqlParser.KW_ANALYSE:
            case PostgreSqlParser.KW_ANALYZE:
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ANY:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_AS:
            case PostgreSqlParser.KW_ASC:
            case PostgreSqlParser.KW_ASYMMETRIC:
            case PostgreSqlParser.KW_BOTH:
            case PostgreSqlParser.KW_CASE:
            case PostgreSqlParser.KW_CAST:
            case PostgreSqlParser.KW_CHECK:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_COLUMN:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CREATE:
            case PostgreSqlParser.KW_CURRENT_CATALOG:
            case PostgreSqlParser.KW_CURRENT_DATE:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_TIME:
            case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DEFERRABLE:
            case PostgreSqlParser.KW_DESC:
            case PostgreSqlParser.KW_DISTINCT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_ELSE:
            case PostgreSqlParser.KW_EXCEPT:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_FOR:
            case PostgreSqlParser.KW_FOREIGN:
            case PostgreSqlParser.KW_FROM:
            case PostgreSqlParser.KW_GRANT:
            case PostgreSqlParser.KW_GROUP:
            case PostgreSqlParser.KW_HAVING:
            case PostgreSqlParser.KW_IN:
            case PostgreSqlParser.KW_INITIALLY:
            case PostgreSqlParser.KW_INTERSECT:
            case PostgreSqlParser.KW_LATERAL:
            case PostgreSqlParser.KW_LEADING:
            case PostgreSqlParser.KW_LIMIT:
            case PostgreSqlParser.KW_LOCALTIME:
            case PostgreSqlParser.KW_LOCALTIMESTAMP:
            case PostgreSqlParser.KW_NOT:
            case PostgreSqlParser.KW_NULL:
            case PostgreSqlParser.KW_OFFSET:
            case PostgreSqlParser.KW_ON:
            case PostgreSqlParser.KW_ONLY:
            case PostgreSqlParser.KW_OR:
            case PostgreSqlParser.KW_ORDER:
            case PostgreSqlParser.KW_PLACING:
            case PostgreSqlParser.KW_PRIMARY:
            case PostgreSqlParser.KW_REFERENCES:
            case PostgreSqlParser.KW_RETURNING:
            case PostgreSqlParser.KW_SELECT:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_SOME:
            case PostgreSqlParser.KW_SYMMETRIC:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_THEN:
            case PostgreSqlParser.KW_TO:
            case PostgreSqlParser.KW_TRAILING:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_UNION:
            case PostgreSqlParser.KW_UNIQUE:
            case PostgreSqlParser.KW_USER:
            case PostgreSqlParser.KW_USING:
            case PostgreSqlParser.KW_VARIADIC:
            case PostgreSqlParser.KW_WHEN:
            case PostgreSqlParser.KW_WHERE:
            case PostgreSqlParser.KW_WINDOW:
            case PostgreSqlParser.KW_WITH:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_END:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 4437;
                this.triggerfuncarg();
                }
                break;
            case PostgreSqlParser.CLOSE_PAREN:
            case PostgreSqlParser.COMMA:
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 4445;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4441;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4442;
                this.triggerfuncarg();
                }
                }
                this.state = 4447;
                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 triggerfuncarg(): TriggerfuncargContext {
        let localContext = new TriggerfuncargContext(this.context, this.state);
        this.enterRule(localContext, 472, PostgreSqlParser.RULE_triggerfuncarg);
        try {
            this.state = 4452;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 367, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4448;
                this.iconst();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4449;
                this.fconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4450;
                this.sconst();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4451;
                this.collabel();
                }
                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 optconstrfromtable(): OptconstrfromtableContext {
        let localContext = new OptconstrfromtableContext(this.context, this.state);
        this.enterRule(localContext, 474, PostgreSqlParser.RULE_optconstrfromtable);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4454;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 4455;
            this.qualified_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public constraintattributespec(): ConstraintattributespecContext {
        let localContext = new ConstraintattributespecContext(this.context, this.state);
        this.enterRule(localContext, 476, PostgreSqlParser.RULE_constraintattributespec);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4460;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 368, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4457;
                    this.constraintattributeElem();
                    }
                    }
                }
                this.state = 4462;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 368, 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 constraintattributeElem(): ConstraintattributeElemContext {
        let localContext = new ConstraintattributeElemContext(this.context, this.state);
        this.enterRule(localContext, 478, PostgreSqlParser.RULE_constraintattributeElem);
        try {
            this.state = 4474;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 369, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4463;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 4464;
                this.match(PostgreSqlParser.KW_DEFERRABLE);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4465;
                this.match(PostgreSqlParser.KW_DEFERRABLE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4466;
                this.match(PostgreSqlParser.KW_INITIALLY);
                this.state = 4467;
                this.match(PostgreSqlParser.KW_IMMEDIATE);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4468;
                this.match(PostgreSqlParser.KW_INITIALLY);
                this.state = 4469;
                this.match(PostgreSqlParser.KW_DEFERRED);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4470;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 4471;
                this.match(PostgreSqlParser.KW_VALID);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 4472;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 4473;
                this.match(PostgreSqlParser.KW_INHERIT);
                }
                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 createeventtrigstmt(): CreateeventtrigstmtContext {
        let localContext = new CreateeventtrigstmtContext(this.context, this.state);
        this.enterRule(localContext, 480, PostgreSqlParser.RULE_createeventtrigstmt);
        try {
            this.state = 4500;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 370, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4476;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4477;
                this.match(PostgreSqlParser.KW_EVENT);
                this.state = 4478;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 4479;
                this.name();
                this.state = 4480;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 4481;
                this.collabel();
                this.state = 4482;
                this.match(PostgreSqlParser.KW_EXECUTE);
                this.state = 4483;
                this.function_or_procedure();
                this.state = 4484;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4485;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4487;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4488;
                this.match(PostgreSqlParser.KW_EVENT);
                this.state = 4489;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 4490;
                this.name();
                this.state = 4491;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 4492;
                this.collabel();
                this.state = 4493;
                this.match(PostgreSqlParser.KW_WHEN);
                this.state = 4494;
                this.event_trigger_when_list();
                this.state = 4495;
                this.match(PostgreSqlParser.KW_EXECUTE);
                this.state = 4496;
                this.function_or_procedure();
                this.state = 4497;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4498;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 event_trigger_when_list(): Event_trigger_when_listContext {
        let localContext = new Event_trigger_when_listContext(this.context, this.state);
        this.enterRule(localContext, 482, PostgreSqlParser.RULE_event_trigger_when_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4502;
            this.event_trigger_when_item();
            this.state = 4507;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 33) {
                {
                {
                this.state = 4503;
                this.match(PostgreSqlParser.KW_AND);
                this.state = 4504;
                this.event_trigger_when_item();
                }
                }
                this.state = 4509;
                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 event_trigger_when_item(): Event_trigger_when_itemContext {
        let localContext = new Event_trigger_when_itemContext(this.context, this.state);
        this.enterRule(localContext, 484, PostgreSqlParser.RULE_event_trigger_when_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4510;
            this.colid();
            this.state = 4511;
            this.match(PostgreSqlParser.KW_IN);
            this.state = 4512;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4513;
            this.event_trigger_value_list();
            this.state = 4514;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public event_trigger_value_list(): Event_trigger_value_listContext {
        let localContext = new Event_trigger_value_listContext(this.context, this.state);
        this.enterRule(localContext, 486, PostgreSqlParser.RULE_event_trigger_value_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4516;
            this.sconst();
            this.state = 4521;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4517;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4518;
                this.sconst();
                }
                }
                this.state = 4523;
                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 altereventtrigstmt(): AltereventtrigstmtContext {
        let localContext = new AltereventtrigstmtContext(this.context, this.state);
        this.enterRule(localContext, 488, PostgreSqlParser.RULE_altereventtrigstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4524;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 4525;
            this.match(PostgreSqlParser.KW_EVENT);
            this.state = 4526;
            this.match(PostgreSqlParser.KW_TRIGGER);
            this.state = 4527;
            this.name();
            this.state = 4528;
            this.enable_trigger();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public enable_trigger(): Enable_triggerContext {
        let localContext = new Enable_triggerContext(this.context, this.state);
        this.enterRule(localContext, 490, PostgreSqlParser.RULE_enable_trigger);
        let _la: number;
        try {
            this.state = 4535;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ENABLE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4530;
                this.match(PostgreSqlParser.KW_ENABLE);
                this.state = 4532;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 373, this.context) ) {
                case 1:
                    {
                    this.state = 4531;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 139 || _la === 312)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_DISABLE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4534;
                this.match(PostgreSqlParser.KW_DISABLE);
                }
                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 createassertionstmt(): CreateassertionstmtContext {
        let localContext = new CreateassertionstmtContext(this.context, this.state);
        this.enterRule(localContext, 492, PostgreSqlParser.RULE_createassertionstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4537;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 4538;
            this.match(PostgreSqlParser.KW_ASSERTION);
            this.state = 4539;
            this.any_name();
            this.state = 4540;
            this.match(PostgreSqlParser.KW_CHECK);
            this.state = 4541;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4542;
            this.a_expr();
            this.state = 4543;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            this.state = 4544;
            this.constraintattributespec();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public definestmt(): DefinestmtContext {
        let localContext = new DefinestmtContext(this.context, this.state);
        this.enterRule(localContext, 494, PostgreSqlParser.RULE_definestmt);
        let _la: number;
        try {
            this.state = 4649;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 381, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4546;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4548;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82) {
                    {
                    this.state = 4547;
                    this.opt_or_replace();
                    }
                }

                this.state = 4550;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 4551;
                this.function_name();
                this.state = 4552;
                this.aggr_args();
                this.state = 4553;
                this.definition();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4555;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4557;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82) {
                    {
                    this.state = 4556;
                    this.opt_or_replace();
                    }
                }

                this.state = 4559;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 4560;
                this.function_name();
                this.state = 4561;
                this.old_aggr_definition();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4563;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4564;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 4565;
                this.any_operator();
                this.state = 4566;
                this.definition();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4568;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4569;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 4570;
                this.any_name();
                this.state = 4571;
                this.definition();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4573;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4574;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 4575;
                this.any_name();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 4576;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4577;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 4578;
                this.any_name();
                this.state = 4579;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 4580;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4582;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                    {
                    this.state = 4581;
                    this.opttablefuncelementlist();
                    }
                }

                this.state = 4584;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 4586;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4587;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 4588;
                this.any_name();
                this.state = 4589;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 4590;
                this.match(PostgreSqlParser.KW_ENUM);
                this.state = 4591;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4593;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 558)) & ~0x1F) === 0 && ((1 << (_la - 558)) & 67108885) !== 0)) {
                    {
                    this.state = 4592;
                    this.opt_enum_val_list();
                    }
                }

                this.state = 4595;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 4597;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4598;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 4599;
                this.any_name();
                this.state = 4600;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 4601;
                this.match(PostgreSqlParser.KW_RANGE);
                this.state = 4602;
                this.definition();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 4604;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4605;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4606;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4607;
                this.match(PostgreSqlParser.KW_PARSER);
                this.state = 4608;
                this.any_name();
                this.state = 4609;
                this.definition();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 4611;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4612;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4613;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4614;
                this.match(PostgreSqlParser.KW_DICTIONARY);
                this.state = 4615;
                this.any_name();
                this.state = 4616;
                this.definition();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 4618;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4619;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4620;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4621;
                this.match(PostgreSqlParser.KW_TEMPLATE);
                this.state = 4622;
                this.any_name();
                this.state = 4623;
                this.definition();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 4625;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4626;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4627;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4628;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 4629;
                this.any_name();
                this.state = 4630;
                this.definition();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 4632;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4633;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 4635;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 379, this.context) ) {
                case 1:
                    {
                    this.state = 4634;
                    this.opt_if_not_exists();
                    }
                    break;
                }
                this.state = 4637;
                this.any_name();
                this.state = 4638;
                this.definition();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 4640;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 4641;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 4643;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 380, this.context) ) {
                case 1:
                    {
                    this.state = 4642;
                    this.opt_if_not_exists();
                    }
                    break;
                }
                this.state = 4645;
                this.any_name();
                this.state = 4646;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 4647;
                this.any_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 definition(): DefinitionContext {
        let localContext = new DefinitionContext(this.context, this.state);
        this.enterRule(localContext, 496, PostgreSqlParser.RULE_definition);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4651;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4652;
            this.def_list();
            this.state = 4653;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public def_list(): Def_listContext {
        let localContext = new Def_listContext(this.context, this.state);
        this.enterRule(localContext, 498, PostgreSqlParser.RULE_def_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4655;
            this.def_elem();
            this.state = 4660;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4656;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4657;
                this.def_elem();
                }
                }
                this.state = 4662;
                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 def_elem(): Def_elemContext {
        let localContext = new Def_elemContext(this.context, this.state);
        this.enterRule(localContext, 500, PostgreSqlParser.RULE_def_elem);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4663;
            this.collabel();
            this.state = 4666;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 10) {
                {
                this.state = 4664;
                this.match(PostgreSqlParser.EQUAL);
                this.state = 4665;
                this.def_arg();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public def_arg(): Def_argContext {
        let localContext = new Def_argContext(this.context, this.state);
        this.enterRule(localContext, 502, PostgreSqlParser.RULE_def_arg);
        try {
            this.state = 4674;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 384, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4668;
                this.func_type();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4669;
                this.reserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4670;
                this.qual_all_op();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4671;
                this.numericonly();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4672;
                this.sconst();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 4673;
                this.match(PostgreSqlParser.KW_NONE);
                }
                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 old_aggr_definition(): Old_aggr_definitionContext {
        let localContext = new Old_aggr_definitionContext(this.context, this.state);
        this.enterRule(localContext, 504, PostgreSqlParser.RULE_old_aggr_definition);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4676;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 4677;
            this.old_aggr_list();
            this.state = 4678;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public old_aggr_list(): Old_aggr_listContext {
        let localContext = new Old_aggr_listContext(this.context, this.state);
        this.enterRule(localContext, 506, PostgreSqlParser.RULE_old_aggr_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4680;
            this.old_aggr_elem();
            this.state = 4685;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4681;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4682;
                this.old_aggr_elem();
                }
                }
                this.state = 4687;
                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 old_aggr_elem(): Old_aggr_elemContext {
        let localContext = new Old_aggr_elemContext(this.context, this.state);
        this.enterRule(localContext, 508, PostgreSqlParser.RULE_old_aggr_elem);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4688;
            this.identifier();
            this.state = 4689;
            this.match(PostgreSqlParser.EQUAL);
            this.state = 4690;
            this.def_arg();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_enum_val_list(): Opt_enum_val_listContext {
        let localContext = new Opt_enum_val_listContext(this.context, this.state);
        this.enterRule(localContext, 510, PostgreSqlParser.RULE_opt_enum_val_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4692;
            this.enum_val_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public enum_val_list(): Enum_val_listContext {
        let localContext = new Enum_val_listContext(this.context, this.state);
        this.enterRule(localContext, 512, PostgreSqlParser.RULE_enum_val_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4694;
            this.sconst();
            this.state = 4699;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4695;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4696;
                this.sconst();
                }
                }
                this.state = 4701;
                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 alterenumstmt(): AlterenumstmtContext {
        let localContext = new AlterenumstmtContext(this.context, this.state);
        this.enterRule(localContext, 514, PostgreSqlParser.RULE_alterenumstmt);
        let _la: number;
        try {
            this.state = 4724;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 389, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4702;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 4703;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 4704;
                this.any_name();
                this.state = 4705;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 4706;
                this.match(PostgreSqlParser.KW_VALUE);
                this.state = 4708;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 220) {
                    {
                    this.state = 4707;
                    this.opt_if_not_exists();
                    }
                }

                this.state = 4710;
                this.sconst();
                this.state = 4713;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 388, this.context) ) {
                case 1:
                    {
                    this.state = 4711;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 135 || _la === 145)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 4712;
                    this.sconst();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4715;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 4716;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 4717;
                this.any_name();
                this.state = 4718;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 4719;
                this.match(PostgreSqlParser.KW_VALUE);
                this.state = 4720;
                this.sconst();
                this.state = 4721;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 4722;
                this.sconst();
                }
                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 opt_if_not_exists(): Opt_if_not_existsContext {
        let localContext = new Opt_if_not_existsContext(this.context, this.state);
        this.enterRule(localContext, 516, PostgreSqlParser.RULE_opt_if_not_exists);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4726;
            this.match(PostgreSqlParser.KW_IF);
            this.state = 4727;
            this.match(PostgreSqlParser.KW_NOT);
            this.state = 4728;
            this.match(PostgreSqlParser.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 createopclassstmt(): CreateopclassstmtContext {
        let localContext = new CreateopclassstmtContext(this.context, this.state);
        this.enterRule(localContext, 518, PostgreSqlParser.RULE_createopclassstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4730;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 4731;
            this.match(PostgreSqlParser.KW_OPERATOR);
            this.state = 4732;
            this.match(PostgreSqlParser.KW_CLASS);
            this.state = 4733;
            this.any_name();
            this.state = 4735;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 53) {
                {
                this.state = 4734;
                this.opt_default();
                }
            }

            this.state = 4737;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 4738;
            this.match(PostgreSqlParser.KW_TYPE);
            this.state = 4739;
            this.typename();
            this.state = 4740;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 4741;
            this.name();
            this.state = 4743;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 206) {
                {
                this.state = 4742;
                this.opt_opfamily();
                }
            }

            this.state = 4745;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 4746;
            this.opclass_item_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opclass_item_list(): Opclass_item_listContext {
        let localContext = new Opclass_item_listContext(this.context, this.state);
        this.enterRule(localContext, 520, PostgreSqlParser.RULE_opclass_item_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4748;
            this.opclass_item();
            this.state = 4753;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4749;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4750;
                this.opclass_item();
                }
                }
                this.state = 4755;
                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 opclass_item(): Opclass_itemContext {
        let localContext = new Opclass_itemContext(this.context, this.state);
        this.enterRule(localContext, 522, PostgreSqlParser.RULE_opclass_item);
        let _la: number;
        try {
            this.state = 4787;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 397, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4756;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 4757;
                this.iconst();
                this.state = 4758;
                this.any_operator();
                this.state = 4760;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 4759;
                    this.opclass_purpose();
                    }
                }

                this.state = 4763;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 394, this.context) ) {
                case 1:
                    {
                    this.state = 4762;
                    this.opt_recheck();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4765;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 4766;
                this.iconst();
                this.state = 4767;
                this.operator_with_argtypes();
                this.state = 4769;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 4768;
                    this.opclass_purpose();
                    }
                }

                this.state = 4772;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 396, this.context) ) {
                case 1:
                    {
                    this.state = 4771;
                    this.opt_recheck();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4774;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 4775;
                this.iconst();
                this.state = 4776;
                this.function_with_argtypes();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4778;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 4779;
                this.iconst();
                this.state = 4780;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4781;
                this.type_list();
                this.state = 4782;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 4783;
                this.function_with_argtypes();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4785;
                this.match(PostgreSqlParser.KW_STORAGE);
                this.state = 4786;
                this.typename();
                }
                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 opt_default(): Opt_defaultContext {
        let localContext = new Opt_defaultContext(this.context, this.state);
        this.enterRule(localContext, 524, PostgreSqlParser.RULE_opt_default);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4789;
            this.match(PostgreSqlParser.KW_DEFAULT);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_opfamily(): Opt_opfamilyContext {
        let localContext = new Opt_opfamilyContext(this.context, this.state);
        this.enterRule(localContext, 526, PostgreSqlParser.RULE_opt_opfamily);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4791;
            this.match(PostgreSqlParser.KW_FAMILY);
            this.state = 4792;
            this.any_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opclass_purpose(): Opclass_purposeContext {
        let localContext = new Opclass_purposeContext(this.context, this.state);
        this.enterRule(localContext, 528, PostgreSqlParser.RULE_opclass_purpose);
        try {
            this.state = 4800;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 398, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4794;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 4795;
                this.match(PostgreSqlParser.KW_SEARCH);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4796;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 4797;
                this.match(PostgreSqlParser.KW_ORDER);
                this.state = 4798;
                this.match(PostgreSqlParser.KW_BY);
                this.state = 4799;
                this.any_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 opt_recheck(): Opt_recheckContext {
        let localContext = new Opt_recheckContext(this.context, this.state);
        this.enterRule(localContext, 530, PostgreSqlParser.RULE_opt_recheck);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4802;
            this.match(PostgreSqlParser.KW_RECHECK);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createopfamilystmt(): CreateopfamilystmtContext {
        let localContext = new CreateopfamilystmtContext(this.context, this.state);
        this.enterRule(localContext, 532, PostgreSqlParser.RULE_createopfamilystmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4804;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 4805;
            this.match(PostgreSqlParser.KW_OPERATOR);
            this.state = 4806;
            this.match(PostgreSqlParser.KW_FAMILY);
            this.state = 4807;
            this.any_name();
            this.state = 4808;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 4809;
            this.name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alteropfamilystmt(): AlteropfamilystmtContext {
        let localContext = new AlteropfamilystmtContext(this.context, this.state);
        this.enterRule(localContext, 534, PostgreSqlParser.RULE_alteropfamilystmt);
        try {
            this.state = 4829;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 399, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4811;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 4812;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 4813;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 4814;
                this.any_name();
                this.state = 4815;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 4816;
                this.name();
                this.state = 4817;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 4818;
                this.opclass_item_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4820;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 4821;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 4822;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 4823;
                this.any_name();
                this.state = 4824;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 4825;
                this.name();
                this.state = 4826;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4827;
                this.opclass_drop_list();
                }
                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 opclass_drop_list(): Opclass_drop_listContext {
        let localContext = new Opclass_drop_listContext(this.context, this.state);
        this.enterRule(localContext, 536, PostgreSqlParser.RULE_opclass_drop_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4831;
            this.opclass_drop();
            this.state = 4836;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 4832;
                this.match(PostgreSqlParser.COMMA);
                this.state = 4833;
                this.opclass_drop();
                }
                }
                this.state = 4838;
                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 opclass_drop(): Opclass_dropContext {
        let localContext = new Opclass_dropContext(this.context, this.state);
        this.enterRule(localContext, 538, PostgreSqlParser.RULE_opclass_drop);
        try {
            this.state = 4851;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_OPERATOR:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4839;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 4840;
                this.iconst();
                this.state = 4841;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4842;
                this.type_list();
                this.state = 4843;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_FUNCTION:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4845;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 4846;
                this.iconst();
                this.state = 4847;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 4848;
                this.type_list();
                this.state = 4849;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 reassignownedstmt(): ReassignownedstmtContext {
        let localContext = new ReassignownedstmtContext(this.context, this.state);
        this.enterRule(localContext, 540, PostgreSqlParser.RULE_reassignownedstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4853;
            this.match(PostgreSqlParser.KW_REASSIGN);
            this.state = 4854;
            this.match(PostgreSqlParser.KW_OWNED);
            this.state = 4855;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 4856;
            this.role_list();
            this.state = 4857;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 4858;
            this.rolespec();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropstmt(): DropstmtContext {
        let localContext = new DropstmtContext(this.context, this.state);
        this.enterRule(localContext, 542, PostgreSqlParser.RULE_dropstmt);
        let _la: number;
        try {
            this.state = 5239;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 476, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4860;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4861;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 4863;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 402, this.context) ) {
                case 1:
                    {
                    this.state = 4862;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4865;
                this.table_name_list();
                this.state = 4867;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 403, this.context) ) {
                case 1:
                    {
                    this.state = 4866;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4869;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4870;
                this.match(PostgreSqlParser.KW_SEQUENCE);
                this.state = 4872;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 404, this.context) ) {
                case 1:
                    {
                    this.state = 4871;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4874;
                this.name_list();
                this.state = 4876;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 405, this.context) ) {
                case 1:
                    {
                    this.state = 4875;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4878;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4879;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 4881;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 406, this.context) ) {
                case 1:
                    {
                    this.state = 4880;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4883;
                this.view_nameList();
                this.state = 4885;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 407, this.context) ) {
                case 1:
                    {
                    this.state = 4884;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4887;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4888;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                this.state = 4889;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 4891;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 408, this.context) ) {
                case 1:
                    {
                    this.state = 4890;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4893;
                this.view_nameList();
                this.state = 4895;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 409, this.context) ) {
                case 1:
                    {
                    this.state = 4894;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4897;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4898;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 4900;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 410, this.context) ) {
                case 1:
                    {
                    this.state = 4899;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4902;
                this.name_list();
                this.state = 4904;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 411, this.context) ) {
                case 1:
                    {
                    this.state = 4903;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 4906;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4907;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 4908;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 4910;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 412, this.context) ) {
                case 1:
                    {
                    this.state = 4909;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4912;
                this.table_name_list();
                this.state = 4914;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 413, this.context) ) {
                case 1:
                    {
                    this.state = 4913;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 4916;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4917;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 4919;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 414, this.context) ) {
                case 1:
                    {
                    this.state = 4918;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4921;
                this.name_list();
                this.state = 4923;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 415, this.context) ) {
                case 1:
                    {
                    this.state = 4922;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 4925;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4926;
                this.match(PostgreSqlParser.KW_CONVERSION);
                this.state = 4928;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 416, this.context) ) {
                case 1:
                    {
                    this.state = 4927;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4930;
                this.name_list();
                this.state = 4932;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 417, this.context) ) {
                case 1:
                    {
                    this.state = 4931;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 4934;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4935;
                this.match(PostgreSqlParser.KW_STATISTICS);
                this.state = 4937;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 418, this.context) ) {
                case 1:
                    {
                    this.state = 4936;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4939;
                this.name_list();
                this.state = 4941;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 419, this.context) ) {
                case 1:
                    {
                    this.state = 4940;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 4943;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4944;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4945;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4946;
                this.match(PostgreSqlParser.KW_PARSER);
                this.state = 4948;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 420, this.context) ) {
                case 1:
                    {
                    this.state = 4947;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4950;
                this.name_list();
                this.state = 4952;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 421, this.context) ) {
                case 1:
                    {
                    this.state = 4951;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 4954;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4955;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4956;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4957;
                this.match(PostgreSqlParser.KW_DICTIONARY);
                this.state = 4959;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 422, this.context) ) {
                case 1:
                    {
                    this.state = 4958;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4961;
                this.name_list();
                this.state = 4963;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 423, this.context) ) {
                case 1:
                    {
                    this.state = 4962;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 4965;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4966;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4967;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4968;
                this.match(PostgreSqlParser.KW_TEMPLATE);
                this.state = 4970;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 424, this.context) ) {
                case 1:
                    {
                    this.state = 4969;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4972;
                this.name_list();
                this.state = 4974;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 425, this.context) ) {
                case 1:
                    {
                    this.state = 4973;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 4976;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4977;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 4978;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 4979;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 4981;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 426, this.context) ) {
                case 1:
                    {
                    this.state = 4980;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4983;
                this.name_list();
                this.state = 4985;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 427, this.context) ) {
                case 1:
                    {
                    this.state = 4984;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 4987;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4988;
                this.match(PostgreSqlParser.KW_ACCESS);
                this.state = 4989;
                this.match(PostgreSqlParser.KW_METHOD);
                this.state = 4991;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 428, this.context) ) {
                case 1:
                    {
                    this.state = 4990;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 4993;
                this.name_list();
                this.state = 4995;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 429, this.context) ) {
                case 1:
                    {
                    this.state = 4994;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 4997;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 4998;
                this.match(PostgreSqlParser.KW_EVENT);
                this.state = 4999;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 5001;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 430, this.context) ) {
                case 1:
                    {
                    this.state = 5000;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5003;
                this.name_list();
                this.state = 5005;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 431, this.context) ) {
                case 1:
                    {
                    this.state = 5004;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 5007;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5008;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 5010;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 432, this.context) ) {
                case 1:
                    {
                    this.state = 5009;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5012;
                this.name_list();
                this.state = 5014;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 433, this.context) ) {
                case 1:
                    {
                    this.state = 5013;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 5016;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5017;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 5018;
                this.match(PostgreSqlParser.KW_DATA);
                this.state = 5019;
                this.match(PostgreSqlParser.KW_WRAPPER);
                this.state = 5021;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 434, this.context) ) {
                case 1:
                    {
                    this.state = 5020;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5023;
                this.name_list();
                this.state = 5025;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 435, this.context) ) {
                case 1:
                    {
                    this.state = 5024;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 5027;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5029;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 295) {
                    {
                    this.state = 5028;
                    this.opt_procedural();
                    }
                }

                this.state = 5031;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 5033;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 437, this.context) ) {
                case 1:
                    {
                    this.state = 5032;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5035;
                this.name_list();
                this.state = 5037;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 438, this.context) ) {
                case 1:
                    {
                    this.state = 5036;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 5039;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5040;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 5042;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 439, this.context) ) {
                case 1:
                    {
                    this.state = 5041;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5044;
                this.name_list();
                this.state = 5046;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 440, this.context) ) {
                case 1:
                    {
                    this.state = 5045;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 5048;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5049;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 5051;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 441, this.context) ) {
                case 1:
                    {
                    this.state = 5050;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5053;
                this.name_list();
                this.state = 5055;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 442, this.context) ) {
                case 1:
                    {
                    this.state = 5054;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 5057;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5058;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5060;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 443, this.context) ) {
                case 1:
                    {
                    this.state = 5059;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5062;
                this.schema_name_list();
                this.state = 5064;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 444, this.context) ) {
                case 1:
                    {
                    this.state = 5063;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 5066;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5067;
                this.match(PostgreSqlParser.KW_POLICY);
                this.state = 5069;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 445, this.context) ) {
                case 1:
                    {
                    this.state = 5068;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5071;
                this.name();
                this.state = 5072;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5073;
                this.any_name();
                this.state = 5075;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 446, this.context) ) {
                case 1:
                    {
                    this.state = 5074;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 5077;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5078;
                this.match(PostgreSqlParser.KW_RULE);
                this.state = 5080;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 447, this.context) ) {
                case 1:
                    {
                    this.state = 5079;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5082;
                this.name();
                this.state = 5083;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5084;
                this.any_name();
                this.state = 5086;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 448, this.context) ) {
                case 1:
                    {
                    this.state = 5085;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 5088;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5089;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 5091;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 449, this.context) ) {
                case 1:
                    {
                    this.state = 5090;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5093;
                this.name();
                this.state = 5094;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5095;
                this.any_name();
                this.state = 5097;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 450, this.context) ) {
                case 1:
                    {
                    this.state = 5096;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 5099;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5100;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 5102;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 451, this.context) ) {
                case 1:
                    {
                    this.state = 5101;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5104;
                this.type_name_list();
                this.state = 5106;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 452, this.context) ) {
                case 1:
                    {
                    this.state = 5105;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 5108;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5109;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 5111;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 453, this.context) ) {
                case 1:
                    {
                    this.state = 5110;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5113;
                this.type_name_list();
                this.state = 5115;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 454, this.context) ) {
                case 1:
                    {
                    this.state = 5114;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 5117;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5118;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 5119;
                this.match(PostgreSqlParser.KW_CONCURRENTLY);
                this.state = 5121;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 455, this.context) ) {
                case 1:
                    {
                    this.state = 5120;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5123;
                this.any_name_list();
                this.state = 5125;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 456, this.context) ) {
                case 1:
                    {
                    this.state = 5124;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 5127;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5128;
                this.match(PostgreSqlParser.KW_CAST);
                this.state = 5130;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 220) {
                    {
                    this.state = 5129;
                    this.opt_if_exists();
                    }
                }

                this.state = 5132;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 5133;
                this.typename();
                this.state = 5134;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 5135;
                this.typename();
                this.state = 5136;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 5138;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 458, this.context) ) {
                case 1:
                    {
                    this.state = 5137;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 5140;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5141;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 5142;
                this.match(PostgreSqlParser.KW_CLASS);
                this.state = 5144;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 459, this.context) ) {
                case 1:
                    {
                    this.state = 5143;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5146;
                this.any_name();
                this.state = 5147;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 5148;
                this.name();
                this.state = 5150;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 460, this.context) ) {
                case 1:
                    {
                    this.state = 5149;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 5152;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5153;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 5154;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 5156;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 461, this.context) ) {
                case 1:
                    {
                    this.state = 5155;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5158;
                this.any_name();
                this.state = 5159;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 5160;
                this.name();
                this.state = 5162;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 462, this.context) ) {
                case 1:
                    {
                    this.state = 5161;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 5164;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5165;
                this.match(PostgreSqlParser.KW_OWNED);
                this.state = 5166;
                this.match(PostgreSqlParser.KW_BY);
                this.state = 5167;
                this.role_list();
                this.state = 5169;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 463, this.context) ) {
                case 1:
                    {
                    this.state = 5168;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 5171;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5172;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 5174;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 464, this.context) ) {
                case 1:
                    {
                    this.state = 5173;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5176;
                this.view_nameList();
                this.state = 5178;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 465, this.context) ) {
                case 1:
                    {
                    this.state = 5177;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 5180;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5181;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 5183;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 466, this.context) ) {
                case 1:
                    {
                    this.state = 5182;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5185;
                this.name();
                this.state = 5187;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 467, this.context) ) {
                case 1:
                    {
                    this.state = 5186;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 34:
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 5189;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5190;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 5192;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 468, this.context) ) {
                case 1:
                    {
                    this.state = 5191;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5194;
                this.tablespace_name();
                }
                break;
            case 35:
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 5195;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5196;
                this.match(PostgreSqlParser.KW_TRANSFORM);
                this.state = 5198;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 220) {
                    {
                    this.state = 5197;
                    this.opt_if_exists();
                    }
                }

                this.state = 5200;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 5201;
                this.typename();
                this.state = 5202;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 5203;
                this.name();
                this.state = 5205;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 470, this.context) ) {
                case 1:
                    {
                    this.state = 5204;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 36:
                this.enterOuterAlt(localContext, 36);
                {
                this.state = 5207;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5208;
                _la = this.tokenStream.LA(1);
                if(!(_la === 66 || _la === 99 || _la === 318)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 5210;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 471, this.context) ) {
                case 1:
                    {
                    this.state = 5209;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5212;
                this.role_list();
                }
                break;
            case 37:
                this.enterOuterAlt(localContext, 37);
                {
                this.state = 5213;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5214;
                this.match(PostgreSqlParser.KW_USER);
                this.state = 5215;
                this.match(PostgreSqlParser.KW_MAPPING);
                this.state = 5217;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 220) {
                    {
                    this.state = 5216;
                    this.opt_if_exists();
                    }
                }

                this.state = 5219;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 5220;
                this.auth_ident();
                this.state = 5221;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 5222;
                this.name();
                }
                break;
            case 38:
                this.enterOuterAlt(localContext, 38);
                {
                this.state = 5224;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 5225;
                this.match(PostgreSqlParser.KW_DATABASE);
                this.state = 5227;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 473, this.context) ) {
                case 1:
                    {
                    this.state = 5226;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 5229;
                this.database_name();
                this.state = 5237;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 475, this.context) ) {
                case 1:
                    {
                    this.state = 5231;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 105) {
                        {
                        this.state = 5230;
                        this.opt_with();
                        }
                    }

                    this.state = 5233;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 5234;
                    this.drop_option_list();
                    this.state = 5235;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    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 view_nameList(): View_nameListContext {
        let localContext = new View_nameListContext(this.context, this.state);
        this.enterRule(localContext, 544, PostgreSqlParser.RULE_view_nameList);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5241;
            this.view_name();
            this.state = 5246;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 5242;
                this.match(PostgreSqlParser.COMMA);
                this.state = 5243;
                this.view_name();
                }
                }
                this.state = 5248;
                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 object_type_any_name(): Object_type_any_nameContext {
        let localContext = new Object_type_any_nameContext(this.context, this.state);
        this.enterRule(localContext, 546, PostgreSqlParser.RULE_object_type_any_name);
        let _la: number;
        try {
            this.state = 5273;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FOREIGN:
            case PostgreSqlParser.KW_TABLE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5250;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 63) {
                    {
                    this.state = 5249;
                    this.match(PostgreSqlParser.KW_FOREIGN);
                    }
                }

                this.state = 5252;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 5253;
                this.table_name();
                }
                break;
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_VIEW:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5255;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 259) {
                    {
                    this.state = 5254;
                    this.match(PostgreSqlParser.KW_MATERIALIZED);
                    }
                }

                this.state = 5257;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 5258;
                this.view_name();
                }
                break;
            case PostgreSqlParser.KW_INDEX:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5259;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 5260;
                this.any_name();
                }
                break;
            case PostgreSqlParser.KW_COLLATION:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5261;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 5262;
                this.any_name();
                }
                break;
            case PostgreSqlParser.KW_CONVERSION:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5263;
                this.match(PostgreSqlParser.KW_CONVERSION);
                this.state = 5264;
                this.any_name();
                }
                break;
            case PostgreSqlParser.KW_STATISTICS:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5265;
                this.match(PostgreSqlParser.KW_STATISTICS);
                this.state = 5266;
                this.any_name();
                }
                break;
            case PostgreSqlParser.KW_SEQUENCE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 5267;
                this.match(PostgreSqlParser.KW_SEQUENCE);
                this.state = 5268;
                this.any_name();
                }
                break;
            case PostgreSqlParser.KW_TEXT:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 5269;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 5270;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 5271;
                _la = this.tokenStream.LA(1);
                if(!(_la === 163 || _la === 185 || _la === 283 || _la === 353)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 5272;
                this.any_name();
                }
                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 object_type_name(): Object_type_nameContext {
        let localContext = new Object_type_nameContext(this.context, this.state);
        this.enterRule(localContext, 548, PostgreSqlParser.RULE_object_type_name);
        let _la: number;
        try {
            this.state = 5306;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ACCESS:
                this.enterOuterAlt(localContext, 1);
                {
                {
                this.state = 5275;
                this.match(PostgreSqlParser.KW_ACCESS);
                this.state = 5276;
                this.match(PostgreSqlParser.KW_METHOD);
                this.state = 5277;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_EVENT:
                this.enterOuterAlt(localContext, 2);
                {
                {
                this.state = 5278;
                this.match(PostgreSqlParser.KW_EVENT);
                this.state = 5279;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 5280;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_EXTENSION:
                this.enterOuterAlt(localContext, 3);
                {
                {
                this.state = 5281;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 5282;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_FOREIGN:
                this.enterOuterAlt(localContext, 4);
                {
                {
                this.state = 5283;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 5284;
                this.match(PostgreSqlParser.KW_DATA);
                this.state = 5285;
                this.match(PostgreSqlParser.KW_WRAPPER);
                this.state = 5286;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_PROCEDURAL:
                this.enterOuterAlt(localContext, 5);
                {
                {
                this.state = 5288;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 295) {
                    {
                    this.state = 5287;
                    this.opt_procedural();
                    }
                }

                this.state = 5290;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 5291;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_PUBLICATION:
                this.enterOuterAlt(localContext, 6);
                {
                {
                this.state = 5292;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 5293;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_SCHEMA:
                this.enterOuterAlt(localContext, 7);
                {
                {
                this.state = 5294;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5295;
                this.schema_name();
                }
                }
                break;
            case PostgreSqlParser.KW_SERVER:
                this.enterOuterAlt(localContext, 8);
                {
                {
                this.state = 5296;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 5297;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_DATABASE:
                this.enterOuterAlt(localContext, 9);
                {
                {
                this.state = 5298;
                this.match(PostgreSqlParser.KW_DATABASE);
                this.state = 5299;
                this.database_name();
                }
                }
                break;
            case PostgreSqlParser.KW_ROLE:
                this.enterOuterAlt(localContext, 10);
                {
                {
                this.state = 5300;
                this.match(PostgreSqlParser.KW_ROLE);
                this.state = 5301;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_SUBSCRIPTION:
                this.enterOuterAlt(localContext, 11);
                {
                {
                this.state = 5302;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 5303;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_TABLESPACE:
                this.enterOuterAlt(localContext, 12);
                {
                {
                this.state = 5304;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 5305;
                this.tablespace_name();
                }
                }
                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 object_type_name_on_any_name(): Object_type_name_on_any_nameContext {
        let localContext = new Object_type_name_on_any_nameContext(this.context, this.state);
        this.enterRule(localContext, 550, PostgreSqlParser.RULE_object_type_name_on_any_name);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5308;
            _la = this.tokenStream.LA(1);
            if(!(_la === 321 || _la === 357 || _la === 445)) {
            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 any_name_list(): Any_name_listContext {
        let localContext = new Any_name_listContext(this.context, this.state);
        this.enterRule(localContext, 552, PostgreSqlParser.RULE_any_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5310;
            this.any_name();
            this.state = 5315;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 5311;
                this.match(PostgreSqlParser.COMMA);
                this.state = 5312;
                this.any_name();
                }
                }
                this.state = 5317;
                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 relation_column_name(): Relation_column_nameContext {
        let localContext = new Relation_column_nameContext(this.context, this.state);
        this.enterRule(localContext, 554, PostgreSqlParser.RULE_relation_column_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5318;
            this.relation_name();
            this.state = 5319;
            this.match(PostgreSqlParser.DOT);
            this.state = 5320;
            this.column_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public relation_name(): Relation_nameContext {
        let localContext = new Relation_nameContext(this.context, this.state);
        this.enterRule(localContext, 556, PostgreSqlParser.RULE_relation_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5322;
            this.colid();
            this.state = 5324;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 484, this.context) ) {
            case 1:
                {
                this.state = 5323;
                this.attrs();
                }
                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 any_name(): Any_nameContext {
        let localContext = new Any_nameContext(this.context, this.state);
        this.enterRule(localContext, 558, PostgreSqlParser.RULE_any_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5326;
            this.colid();
            this.state = 5328;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 485, this.context) ) {
            case 1:
                {
                this.state = 5327;
                this.attrs();
                }
                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 attrs(): AttrsContext {
        let localContext = new AttrsContext(this.context, this.state);
        this.enterRule(localContext, 560, PostgreSqlParser.RULE_attrs);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5332;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 5330;
                    this.match(PostgreSqlParser.DOT);
                    this.state = 5331;
                    this.attr_name();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5334;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 486, 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 type_name_list(): Type_name_listContext {
        let localContext = new Type_name_listContext(this.context, this.state);
        this.enterRule(localContext, 562, PostgreSqlParser.RULE_type_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5336;
            this.typename();
            this.state = 5341;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 5337;
                this.match(PostgreSqlParser.COMMA);
                this.state = 5338;
                this.typename();
                }
                }
                this.state = 5343;
                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 truncatestmt(): TruncatestmtContext {
        let localContext = new TruncatestmtContext(this.context, this.state);
        this.enterRule(localContext, 564, PostgreSqlParser.RULE_truncatestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5344;
            this.match(PostgreSqlParser.KW_TRUNCATE);
            this.state = 5346;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 488, this.context) ) {
            case 1:
                {
                this.state = 5345;
                this.match(PostgreSqlParser.KW_TABLE);
                }
                break;
            }
            this.state = 5348;
            this.truncate_table();
            this.state = 5353;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 5349;
                this.match(PostgreSqlParser.COMMA);
                this.state = 5350;
                this.truncate_table();
                }
                }
                this.state = 5355;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 5358;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 490, this.context) ) {
            case 1:
                {
                this.state = 5356;
                _la = this.tokenStream.LA(1);
                if(!(_la === 167 || _la === 314)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 5357;
                this.match(PostgreSqlParser.KW_IDENTITY);
                }
                break;
            }
            this.state = 5361;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 491, this.context) ) {
            case 1:
                {
                this.state = 5360;
                this.opt_drop_behavior();
                }
                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 truncate_table(): Truncate_tableContext {
        let localContext = new Truncate_tableContext(this.context, this.state);
        this.enterRule(localContext, 566, PostgreSqlParser.RULE_truncate_table);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5364;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 81) {
                {
                this.state = 5363;
                this.match(PostgreSqlParser.KW_ONLY);
                }
            }

            this.state = 5366;
            this.table_name();
            this.state = 5368;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 9) {
                {
                this.state = 5367;
                this.match(PostgreSqlParser.STAR);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public commentstmt(): CommentstmtContext {
        let localContext = new CommentstmtContext(this.context, this.state);
        this.enterRule(localContext, 568, PostgreSqlParser.RULE_commentstmt);
        try {
            this.state = 5535;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 495, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5370;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5371;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5372;
                this.object_type_any_name();
                this.state = 5373;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5374;
                this.comment_text();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5376;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5377;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5378;
                this.match(PostgreSqlParser.KW_COLUMN);
                this.state = 5379;
                this.relation_column_name();
                this.state = 5380;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5381;
                this.comment_text();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5383;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5384;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5385;
                this.object_type_name();
                this.state = 5386;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5387;
                this.comment_text();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5389;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5390;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5391;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 5392;
                this.typename();
                this.state = 5393;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5394;
                this.comment_text();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5396;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5397;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5398;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 5399;
                this.typename();
                this.state = 5400;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5401;
                this.comment_text();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5403;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5404;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5405;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 5406;
                this.aggregate_with_argtypes();
                this.state = 5407;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5408;
                this.comment_text();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 5410;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5411;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5412;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 5413;
                this.function_with_argtypes();
                this.state = 5414;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5415;
                this.comment_text();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 5417;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5418;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5419;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 5420;
                this.operator_with_argtypes();
                this.state = 5421;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5422;
                this.comment_text();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 5424;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5425;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5426;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 5427;
                this.name();
                this.state = 5428;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5429;
                this.table_name();
                this.state = 5430;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5431;
                this.comment_text();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 5433;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5434;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5435;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 5436;
                this.name();
                this.state = 5437;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5439;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 494, this.context) ) {
                case 1:
                    {
                    this.state = 5438;
                    this.match(PostgreSqlParser.KW_DOMAIN);
                    }
                    break;
                }
                this.state = 5441;
                this.any_name();
                this.state = 5442;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5443;
                this.comment_text();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 5445;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5446;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5447;
                this.match(PostgreSqlParser.KW_POLICY);
                this.state = 5448;
                this.name();
                this.state = 5449;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5450;
                this.any_name();
                this.state = 5451;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5452;
                this.comment_text();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 5454;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5455;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5456;
                this.match(PostgreSqlParser.KW_RULE);
                this.state = 5457;
                this.name();
                this.state = 5458;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5459;
                this.any_name();
                this.state = 5460;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5461;
                this.comment_text();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 5463;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5464;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5465;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 5466;
                this.name();
                this.state = 5467;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5468;
                this.any_name();
                this.state = 5469;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5470;
                this.comment_text();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 5472;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5473;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5474;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 5475;
                this.procedure_with_argtypes();
                this.state = 5476;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5477;
                this.comment_text();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 5479;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5480;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5481;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 5482;
                this.routine_with_argtypes();
                this.state = 5483;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5484;
                this.comment_text();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 5486;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5487;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5488;
                this.match(PostgreSqlParser.KW_TRANSFORM);
                this.state = 5489;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 5490;
                this.typename();
                this.state = 5491;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 5492;
                this.name();
                this.state = 5493;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5494;
                this.comment_text();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 5496;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5497;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5498;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 5499;
                this.match(PostgreSqlParser.KW_CLASS);
                this.state = 5500;
                this.any_name();
                this.state = 5501;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 5502;
                this.name();
                this.state = 5503;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5504;
                this.comment_text();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 5506;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5507;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5508;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 5509;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 5510;
                this.any_name();
                this.state = 5511;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 5512;
                this.name();
                this.state = 5513;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5514;
                this.comment_text();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 5516;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5517;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5518;
                this.match(PostgreSqlParser.KW_LARGE);
                this.state = 5519;
                this.match(PostgreSqlParser.KW_OBJECT);
                this.state = 5520;
                this.numericonly();
                this.state = 5521;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5522;
                this.comment_text();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 5524;
                this.match(PostgreSqlParser.KW_COMMENT);
                this.state = 5525;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5526;
                this.match(PostgreSqlParser.KW_CAST);
                this.state = 5527;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 5528;
                this.typename();
                this.state = 5529;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 5530;
                this.typename();
                this.state = 5531;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 5532;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5533;
                this.comment_text();
                }
                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 comment_text(): Comment_textContext {
        let localContext = new Comment_textContext(this.context, this.state);
        this.enterRule(localContext, 570, PostgreSqlParser.RULE_comment_text);
        try {
            this.state = 5539;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5537;
                this.sconst();
                }
                break;
            case PostgreSqlParser.KW_NULL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5538;
                this.match(PostgreSqlParser.KW_NULL);
                }
                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 seclabelstmt(): SeclabelstmtContext {
        let localContext = new SeclabelstmtContext(this.context, this.state);
        this.enterRule(localContext, 572, PostgreSqlParser.RULE_seclabelstmt);
        let _la: number;
        try {
            this.state = 5650;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 507, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5541;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5542;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5544;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5543;
                    this.opt_provider();
                    }
                }

                this.state = 5546;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5547;
                this.match(PostgreSqlParser.KW_COLUMN);
                this.state = 5548;
                this.column_name();
                this.state = 5549;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5550;
                this.security_label();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5552;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5553;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5555;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5554;
                    this.opt_provider();
                    }
                }

                this.state = 5557;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5558;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 5559;
                this.typename();
                this.state = 5560;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5561;
                this.security_label();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5563;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5564;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5566;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5565;
                    this.opt_provider();
                    }
                }

                this.state = 5568;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5569;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 5570;
                this.typename();
                this.state = 5571;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5572;
                this.security_label();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5574;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5575;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5577;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5576;
                    this.opt_provider();
                    }
                }

                this.state = 5579;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5580;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 5581;
                this.aggregate_with_argtypes();
                this.state = 5582;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5583;
                this.security_label();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5585;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5586;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5588;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5587;
                    this.opt_provider();
                    }
                }

                this.state = 5590;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5591;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 5592;
                this.function_with_argtypes();
                this.state = 5593;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5594;
                this.security_label();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5596;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5597;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5599;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5598;
                    this.opt_provider();
                    }
                }

                this.state = 5601;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5602;
                this.match(PostgreSqlParser.KW_LARGE);
                this.state = 5603;
                this.match(PostgreSqlParser.KW_OBJECT);
                this.state = 5604;
                this.numericonly();
                this.state = 5605;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5606;
                this.security_label();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 5608;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5609;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5611;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5610;
                    this.opt_provider();
                    }
                }

                this.state = 5613;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5614;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 5615;
                this.procedure_with_argtypes();
                this.state = 5616;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5617;
                this.security_label();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 5619;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5620;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5622;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5621;
                    this.opt_provider();
                    }
                }

                this.state = 5624;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5625;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 5626;
                this.routine_with_argtypes();
                this.state = 5627;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5628;
                this.security_label();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 5630;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5631;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5633;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5632;
                    this.opt_provider();
                    }
                }

                this.state = 5635;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5636;
                this.object_type_any_name();
                this.state = 5637;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5638;
                this.security_label();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 5640;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 5641;
                this.match(PostgreSqlParser.KW_LABEL);
                this.state = 5643;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 62) {
                    {
                    this.state = 5642;
                    this.opt_provider();
                    }
                }

                this.state = 5645;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5646;
                this.object_type_name();
                this.state = 5647;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 5648;
                this.security_label();
                }
                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 opt_provider(): Opt_providerContext {
        let localContext = new Opt_providerContext(this.context, this.state);
        this.enterRule(localContext, 574, PostgreSqlParser.RULE_opt_provider);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5652;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 5653;
            this.nonreservedword_or_sconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public security_label(): Security_labelContext {
        let localContext = new Security_labelContext(this.context, this.state);
        this.enterRule(localContext, 576, PostgreSqlParser.RULE_security_label);
        try {
            this.state = 5657;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5655;
                this.sconst();
                }
                break;
            case PostgreSqlParser.KW_NULL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5656;
                this.match(PostgreSqlParser.KW_NULL);
                }
                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 fetchstmt(): FetchstmtContext {
        let localContext = new FetchstmtContext(this.context, this.state);
        this.enterRule(localContext, 578, PostgreSqlParser.RULE_fetchstmt);
        try {
            this.state = 5663;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FETCH:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5659;
                this.match(PostgreSqlParser.KW_FETCH);
                this.state = 5660;
                this.fetch_args();
                }
                break;
            case PostgreSqlParser.KW_MOVE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5661;
                this.match(PostgreSqlParser.KW_MOVE);
                this.state = 5662;
                this.fetch_args();
                }
                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 fetch_args(): Fetch_argsContext {
        let localContext = new Fetch_argsContext(this.context, this.state);
        this.enterRule(localContext, 580, PostgreSqlParser.RULE_fetch_args);
        let _la: number;
        try {
            this.state = 5750;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 524, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5665;
                this.cursor_name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5666;
                this.from_in();
                this.state = 5667;
                this.cursor_name();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5669;
                this.match(PostgreSqlParser.KW_NEXT);
                this.state = 5671;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5670;
                    this.opt_from_in();
                    }
                }

                this.state = 5673;
                this.cursor_name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5674;
                this.match(PostgreSqlParser.KW_PRIOR);
                this.state = 5676;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5675;
                    this.opt_from_in();
                    }
                }

                this.state = 5678;
                this.cursor_name();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5679;
                this.match(PostgreSqlParser.KW_FIRST);
                this.state = 5681;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5680;
                    this.opt_from_in();
                    }
                }

                this.state = 5683;
                this.cursor_name();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5684;
                this.match(PostgreSqlParser.KW_LAST);
                this.state = 5686;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5685;
                    this.opt_from_in();
                    }
                }

                this.state = 5688;
                this.cursor_name();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 5689;
                this.match(PostgreSqlParser.KW_ABSOLUTE);
                this.state = 5690;
                this.signediconst();
                this.state = 5692;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5691;
                    this.opt_from_in();
                    }
                }

                this.state = 5694;
                this.cursor_name();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 5696;
                this.match(PostgreSqlParser.KW_RELATIVE);
                this.state = 5697;
                this.signediconst();
                this.state = 5699;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5698;
                    this.opt_from_in();
                    }
                }

                this.state = 5701;
                this.cursor_name();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 5703;
                this.signediconst();
                this.state = 5705;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5704;
                    this.opt_from_in();
                    }
                }

                this.state = 5707;
                this.cursor_name();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 5709;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5711;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5710;
                    this.opt_from_in();
                    }
                }

                this.state = 5713;
                this.cursor_name();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 5714;
                this.match(PostgreSqlParser.KW_FORWARD);
                this.state = 5716;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5715;
                    this.opt_from_in();
                    }
                }

                this.state = 5718;
                this.cursor_name();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 5719;
                this.match(PostgreSqlParser.KW_FORWARD);
                this.state = 5720;
                this.signediconst();
                this.state = 5722;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5721;
                    this.opt_from_in();
                    }
                }

                this.state = 5724;
                this.cursor_name();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 5726;
                this.match(PostgreSqlParser.KW_FORWARD);
                this.state = 5727;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5729;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5728;
                    this.opt_from_in();
                    }
                }

                this.state = 5731;
                this.cursor_name();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 5732;
                this.match(PostgreSqlParser.KW_BACKWARD);
                this.state = 5734;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5733;
                    this.opt_from_in();
                    }
                }

                this.state = 5736;
                this.cursor_name();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 5737;
                this.match(PostgreSqlParser.KW_BACKWARD);
                this.state = 5738;
                this.signediconst();
                this.state = 5740;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5739;
                    this.opt_from_in();
                    }
                }

                this.state = 5742;
                this.cursor_name();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 5744;
                this.match(PostgreSqlParser.KW_BACKWARD);
                this.state = 5745;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5747;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64 || _la === 68) {
                    {
                    this.state = 5746;
                    this.opt_from_in();
                    }
                }

                this.state = 5749;
                this.cursor_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 from_in(): From_inContext {
        let localContext = new From_inContext(this.context, this.state);
        this.enterRule(localContext, 582, PostgreSqlParser.RULE_from_in);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5752;
            _la = this.tokenStream.LA(1);
            if(!(_la === 64 || _la === 68)) {
            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 opt_from_in(): Opt_from_inContext {
        let localContext = new Opt_from_inContext(this.context, this.state);
        this.enterRule(localContext, 584, PostgreSqlParser.RULE_opt_from_in);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5754;
            this.from_in();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public grantstmt(): GrantstmtContext {
        let localContext = new GrantstmtContext(this.context, this.state);
        this.enterRule(localContext, 586, PostgreSqlParser.RULE_grantstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5756;
            this.match(PostgreSqlParser.KW_GRANT);
            this.state = 5757;
            this.privileges();
            this.state = 5758;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 5759;
            this.privilege_target();
            this.state = 5760;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 5761;
            this.grantee_list();
            this.state = 5763;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 525, this.context) ) {
            case 1:
                {
                this.state = 5762;
                this.opt_grant_grant_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 revokestmt(): RevokestmtContext {
        let localContext = new RevokestmtContext(this.context, this.state);
        this.enterRule(localContext, 588, PostgreSqlParser.RULE_revokestmt);
        try {
            this.state = 5786;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 528, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5765;
                this.match(PostgreSqlParser.KW_REVOKE);
                this.state = 5766;
                this.privileges();
                this.state = 5767;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5768;
                this.privilege_target();
                this.state = 5769;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 5770;
                this.grantee_list();
                this.state = 5772;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 526, this.context) ) {
                case 1:
                    {
                    this.state = 5771;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5774;
                this.match(PostgreSqlParser.KW_REVOKE);
                this.state = 5775;
                this.match(PostgreSqlParser.KW_GRANT);
                this.state = 5776;
                this.match(PostgreSqlParser.KW_OPTION);
                this.state = 5777;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 5778;
                this.privileges();
                this.state = 5779;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5780;
                this.privilege_target();
                this.state = 5781;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 5782;
                this.grantee_list();
                this.state = 5784;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 527, this.context) ) {
                case 1:
                    {
                    this.state = 5783;
                    this.opt_drop_behavior();
                    }
                    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 privileges(): PrivilegesContext {
        let localContext = new PrivilegesContext(this.context, this.state);
        this.enterRule(localContext, 590, PostgreSqlParser.RULE_privileges);
        try {
            this.state = 5804;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 529, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5788;
                this.privilege_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5789;
                this.match(PostgreSqlParser.KW_ALL);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5790;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5791;
                this.match(PostgreSqlParser.KW_PRIVILEGES);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5792;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5793;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 5794;
                this.column_list();
                this.state = 5795;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5797;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5798;
                this.match(PostgreSqlParser.KW_PRIVILEGES);
                this.state = 5799;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 5800;
                this.column_list();
                this.state = 5801;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5803;
                this.beforeprivilegeselectlist();
                }
                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 beforeprivilegeselectlist(): BeforeprivilegeselectlistContext {
        let localContext = new BeforeprivilegeselectlistContext(this.context, this.state);
        this.enterRule(localContext, 592, PostgreSqlParser.RULE_beforeprivilegeselectlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5806;
            this.beforeprivilegeselect();
            this.state = 5811;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 5807;
                this.match(PostgreSqlParser.COMMA);
                this.state = 5808;
                this.beforeprivilegeselect();
                }
                }
                this.state = 5813;
                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 beforeprivilegeselect(): BeforeprivilegeselectContext {
        let localContext = new BeforeprivilegeselectContext(this.context, this.state);
        this.enterRule(localContext, 594, PostgreSqlParser.RULE_beforeprivilegeselect);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5814;
            _la = this.tokenStream.LA(1);
            if(!(_la === 46 || _la === 88 || _la === 182 || _la === 202 || _la === 241 || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 131173) !== 0) || ((((_la - 521)) & ~0x1F) === 0 && ((1 << (_la - 521)) & 7) !== 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 privilege_list(): Privilege_listContext {
        let localContext = new Privilege_listContext(this.context, this.state);
        this.enterRule(localContext, 596, PostgreSqlParser.RULE_privilege_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5816;
            this.privilege();
            this.state = 5821;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 5817;
                this.match(PostgreSqlParser.COMMA);
                this.state = 5818;
                this.privilege();
                }
                }
                this.state = 5823;
                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 privilege(): PrivilegeContext {
        let localContext = new PrivilegeContext(this.context, this.state);
        this.enterRule(localContext, 598, PostgreSqlParser.RULE_privilege);
        let _la: number;
        try {
            this.state = 5840;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SELECT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5824;
                this.match(PostgreSqlParser.KW_SELECT);
                this.state = 5826;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 5825;
                    this.opt_column_list();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_REFERENCES:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5828;
                this.match(PostgreSqlParser.KW_REFERENCES);
                this.state = 5830;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 5829;
                    this.opt_column_list();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_CREATE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5832;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 5834;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 5833;
                    this.opt_column_list();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5836;
                this.colid();
                this.state = 5838;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 5837;
                    this.opt_column_list();
                    }
                }

                }
                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 privilege_target(): Privilege_targetContext {
        let localContext = new Privilege_targetContext(this.context, this.state);
        this.enterRule(localContext, 600, PostgreSqlParser.RULE_privilege_target);
        try {
            this.state = 5900;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 537, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5842;
                this.qualified_name_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5843;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 5844;
                this.table_name_list();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5845;
                this.match(PostgreSqlParser.KW_SEQUENCE);
                this.state = 5846;
                this.qualified_name_list();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5847;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 5848;
                this.match(PostgreSqlParser.KW_DATA);
                this.state = 5849;
                this.match(PostgreSqlParser.KW_WRAPPER);
                this.state = 5850;
                this.name_list();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5851;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 5852;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 5853;
                this.name_list();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5854;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 5855;
                this.function_with_argtypes_list();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 5856;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 5857;
                this.procedure_with_argtypes_list();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 5858;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 5859;
                this.routine_with_argtypes_list();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 5860;
                this.match(PostgreSqlParser.KW_DATABASE);
                this.state = 5861;
                this.database_nameList();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 5862;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 5863;
                this.any_name_list();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 5864;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 5865;
                this.name_list();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 5866;
                this.match(PostgreSqlParser.KW_LARGE);
                this.state = 5867;
                this.match(PostgreSqlParser.KW_OBJECT);
                this.state = 5868;
                this.numericonly_list();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 5869;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5870;
                this.schema_name_list();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 5871;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 5872;
                this.tablespace_name_list();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 5873;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 5874;
                this.any_name_list();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 5875;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5876;
                this.match(PostgreSqlParser.KW_TABLES);
                this.state = 5877;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 5878;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5879;
                this.schema_name_list();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 5880;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5881;
                this.match(PostgreSqlParser.KW_SEQUENCES);
                this.state = 5882;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 5883;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5884;
                this.schema_name_list();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 5885;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5886;
                this.match(PostgreSqlParser.KW_FUNCTIONS);
                this.state = 5887;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 5888;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5889;
                this.schema_name_list();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 5890;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5891;
                this.match(PostgreSqlParser.KW_PROCEDURES);
                this.state = 5892;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 5893;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5894;
                this.schema_name_list();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 5895;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 5896;
                this.match(PostgreSqlParser.KW_ROUTINES);
                this.state = 5897;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 5898;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5899;
                this.schema_name_list();
                }
                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 grantee_list(): Grantee_listContext {
        let localContext = new Grantee_listContext(this.context, this.state);
        this.enterRule(localContext, 602, PostgreSqlParser.RULE_grantee_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5902;
            this.grantee();
            this.state = 5907;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 5903;
                this.match(PostgreSqlParser.COMMA);
                this.state = 5904;
                this.grantee();
                }
                }
                this.state = 5909;
                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 grantee(): GranteeContext {
        let localContext = new GranteeContext(this.context, this.state);
        this.enterRule(localContext, 604, PostgreSqlParser.RULE_grantee);
        try {
            this.state = 5913;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_PUBLIC:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5910;
                this.rolespec();
                }
                break;
            case PostgreSqlParser.KW_GROUP:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5911;
                this.match(PostgreSqlParser.KW_GROUP);
                this.state = 5912;
                this.rolespec();
                }
                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 opt_grant_grant_option(): Opt_grant_grant_optionContext {
        let localContext = new Opt_grant_grant_optionContext(this.context, this.state);
        this.enterRule(localContext, 606, PostgreSqlParser.RULE_opt_grant_grant_option);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5915;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 5916;
            this.match(PostgreSqlParser.KW_GRANT);
            this.state = 5917;
            this.match(PostgreSqlParser.KW_OPTION);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public grantrolestmt(): GrantrolestmtContext {
        let localContext = new GrantrolestmtContext(this.context, this.state);
        this.enterRule(localContext, 608, PostgreSqlParser.RULE_grantrolestmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5919;
            this.match(PostgreSqlParser.KW_GRANT);
            this.state = 5920;
            this.privilege_list();
            this.state = 5921;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 5922;
            this.role_list();
            this.state = 5924;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 540, this.context) ) {
            case 1:
                {
                this.state = 5923;
                this.opt_grant_admin_option();
                }
                break;
            }
            this.state = 5927;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 541, this.context) ) {
            case 1:
                {
                this.state = 5926;
                this.opt_granted_by();
                }
                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 revokerolestmt(): RevokerolestmtContext {
        let localContext = new RevokerolestmtContext(this.context, this.state);
        this.enterRule(localContext, 610, PostgreSqlParser.RULE_revokerolestmt);
        try {
            this.state = 5952;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 546, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5929;
                this.match(PostgreSqlParser.KW_REVOKE);
                this.state = 5930;
                this.privilege_list();
                this.state = 5931;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 5932;
                this.role_list();
                this.state = 5934;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 542, this.context) ) {
                case 1:
                    {
                    this.state = 5933;
                    this.opt_granted_by();
                    }
                    break;
                }
                this.state = 5937;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 543, this.context) ) {
                case 1:
                    {
                    this.state = 5936;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5939;
                this.match(PostgreSqlParser.KW_REVOKE);
                this.state = 5940;
                this.match(PostgreSqlParser.KW_ADMIN);
                this.state = 5941;
                this.match(PostgreSqlParser.KW_OPTION);
                this.state = 5942;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 5943;
                this.privilege_list();
                this.state = 5944;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 5945;
                this.role_list();
                this.state = 5947;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 544, this.context) ) {
                case 1:
                    {
                    this.state = 5946;
                    this.opt_granted_by();
                    }
                    break;
                }
                this.state = 5950;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 545, this.context) ) {
                case 1:
                    {
                    this.state = 5949;
                    this.opt_drop_behavior();
                    }
                    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 opt_grant_admin_option(): Opt_grant_admin_optionContext {
        let localContext = new Opt_grant_admin_optionContext(this.context, this.state);
        this.enterRule(localContext, 612, PostgreSqlParser.RULE_opt_grant_admin_option);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5954;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 5955;
            this.match(PostgreSqlParser.KW_ADMIN);
            this.state = 5956;
            this.match(PostgreSqlParser.KW_OPTION);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_granted_by(): Opt_granted_byContext {
        let localContext = new Opt_granted_byContext(this.context, this.state);
        this.enterRule(localContext, 614, PostgreSqlParser.RULE_opt_granted_by);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5958;
            this.match(PostgreSqlParser.KW_GRANTED);
            this.state = 5959;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 5960;
            this.rolespec();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterdefaultprivilegesstmt(): AlterdefaultprivilegesstmtContext {
        let localContext = new AlterdefaultprivilegesstmtContext(this.context, this.state);
        this.enterRule(localContext, 616, PostgreSqlParser.RULE_alterdefaultprivilegesstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5962;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 5963;
            this.match(PostgreSqlParser.KW_DEFAULT);
            this.state = 5964;
            this.match(PostgreSqlParser.KW_PRIVILEGES);
            this.state = 5965;
            this.defacloptionlist();
            this.state = 5966;
            this.defaclaction();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public defacloptionlist(): DefacloptionlistContext {
        let localContext = new DefacloptionlistContext(this.context, this.state);
        this.enterRule(localContext, 618, PostgreSqlParser.RULE_defacloptionlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5971;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 62 || _la === 68) {
                {
                {
                this.state = 5968;
                this.defacloption();
                }
                }
                this.state = 5973;
                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 defacloption(): DefacloptionContext {
        let localContext = new DefacloptionContext(this.context, this.state);
        this.enterRule(localContext, 620, PostgreSqlParser.RULE_defacloption);
        try {
            this.state = 5983;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 548, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5974;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 5975;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 5976;
                this.schema_name_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5977;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 5978;
                this.match(PostgreSqlParser.KW_ROLE);
                this.state = 5979;
                this.role_list();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5980;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 5981;
                this.match(PostgreSqlParser.KW_USER);
                this.state = 5982;
                this.role_list();
                }
                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 defaclaction(): DefaclactionContext {
        let localContext = new DefaclactionContext(this.context, this.state);
        this.enterRule(localContext, 622, PostgreSqlParser.RULE_defaclaction);
        try {
            this.state = 6015;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 552, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5985;
                this.match(PostgreSqlParser.KW_GRANT);
                this.state = 5986;
                this.privileges();
                this.state = 5987;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5988;
                this.defacl_privilege_target();
                this.state = 5989;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 5990;
                this.grantee_list();
                this.state = 5992;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 549, this.context) ) {
                case 1:
                    {
                    this.state = 5991;
                    this.opt_grant_grant_option();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5994;
                this.match(PostgreSqlParser.KW_REVOKE);
                this.state = 5995;
                this.privileges();
                this.state = 5996;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 5997;
                this.defacl_privilege_target();
                this.state = 5998;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 5999;
                this.grantee_list();
                this.state = 6001;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 550, this.context) ) {
                case 1:
                    {
                    this.state = 6000;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6003;
                this.match(PostgreSqlParser.KW_REVOKE);
                this.state = 6004;
                this.match(PostgreSqlParser.KW_GRANT);
                this.state = 6005;
                this.match(PostgreSqlParser.KW_OPTION);
                this.state = 6006;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 6007;
                this.privileges();
                this.state = 6008;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 6009;
                this.defacl_privilege_target();
                this.state = 6010;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 6011;
                this.grantee_list();
                this.state = 6013;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 551, this.context) ) {
                case 1:
                    {
                    this.state = 6012;
                    this.opt_drop_behavior();
                    }
                    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 defacl_privilege_target(): Defacl_privilege_targetContext {
        let localContext = new Defacl_privilege_targetContext(this.context, this.state);
        this.enterRule(localContext, 624, PostgreSqlParser.RULE_defacl_privilege_target);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6017;
            _la = this.tokenStream.LA(1);
            if(!(_la === 212 || _la === 329 || _la === 350 || _la === 361 || _la === 455 || _la === 456)) {
            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 indexstmt(): IndexstmtContext {
        let localContext = new IndexstmtContext(this.context, this.state);
        this.enterRule(localContext, 626, PostgreSqlParser.RULE_indexstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6019;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 6021;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 98) {
                {
                this.state = 6020;
                this.opt_unique();
                }
            }

            this.state = 6023;
            this.match(PostgreSqlParser.KW_INDEX);
            this.state = 6025;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 109) {
                {
                this.state = 6024;
                this.opt_concurrently();
                }
            }

            this.state = 6028;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 555, this.context) ) {
            case 1:
                {
                this.state = 6027;
                this.opt_if_not_exists();
                }
                break;
            }
            this.state = 6031;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                {
                this.state = 6030;
                this.opt_index_name();
                }
            }

            this.state = 6033;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 6034;
            this.relation_expr();
            this.state = 6036;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 6035;
                this.access_method_clause();
                }
            }

            this.state = 6038;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 6039;
            this.index_params();
            this.state = 6040;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            this.state = 6042;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 558, this.context) ) {
            case 1:
                {
                this.state = 6041;
                this.opt_include();
                }
                break;
            }
            this.state = 6045;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 559, this.context) ) {
            case 1:
                {
                this.state = 6044;
                this.nulls_distinct();
                }
                break;
            }
            this.state = 6048;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 560, this.context) ) {
            case 1:
                {
                this.state = 6047;
                this.opt_reloptions();
                }
                break;
            }
            this.state = 6051;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 561, this.context) ) {
            case 1:
                {
                this.state = 6050;
                this.opttablespace();
                }
                break;
            }
            this.state = 6054;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 103) {
                {
                this.state = 6053;
                this.where_clause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_unique(): Opt_uniqueContext {
        let localContext = new Opt_uniqueContext(this.context, this.state);
        this.enterRule(localContext, 628, PostgreSqlParser.RULE_opt_unique);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6056;
            this.match(PostgreSqlParser.KW_UNIQUE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_concurrently(): Opt_concurrentlyContext {
        let localContext = new Opt_concurrentlyContext(this.context, this.state);
        this.enterRule(localContext, 630, PostgreSqlParser.RULE_opt_concurrently);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6058;
            this.match(PostgreSqlParser.KW_CONCURRENTLY);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_index_name(): Opt_index_nameContext {
        let localContext = new Opt_index_nameContext(this.context, this.state);
        this.enterRule(localContext, 632, PostgreSqlParser.RULE_opt_index_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6060;
            this.name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public access_method_clause(): Access_method_clauseContext {
        let localContext = new Access_method_clauseContext(this.context, this.state);
        this.enterRule(localContext, 634, PostgreSqlParser.RULE_access_method_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6062;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 6063;
            this.name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public index_params(): Index_paramsContext {
        let localContext = new Index_paramsContext(this.context, this.state);
        this.enterRule(localContext, 636, PostgreSqlParser.RULE_index_params);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6065;
            this.index_elem();
            this.state = 6070;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6066;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6067;
                this.index_elem();
                }
                }
                this.state = 6072;
                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 index_elem_options(): Index_elem_optionsContext {
        let localContext = new Index_elem_optionsContext(this.context, this.state);
        this.enterRule(localContext, 638, PostgreSqlParser.RULE_index_elem_options);
        let _la: number;
        try {
            this.state = 6096;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 571, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6074;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 564, this.context) ) {
                case 1:
                    {
                    this.state = 6073;
                    this.opt_collate();
                    }
                    break;
                }
                this.state = 6077;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 565, this.context) ) {
                case 1:
                    {
                    this.state = 6076;
                    this.opt_class();
                    }
                    break;
                }
                this.state = 6080;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 37 || _la === 55) {
                    {
                    this.state = 6079;
                    this.opt_asc_desc();
                    }
                }

                this.state = 6083;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 273) {
                    {
                    this.state = 6082;
                    this.opt_nulls_order();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6086;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 568, this.context) ) {
                case 1:
                    {
                    this.state = 6085;
                    this.opt_collate();
                    }
                    break;
                }
                this.state = 6088;
                this.any_name();
                this.state = 6089;
                this.reloptions();
                this.state = 6091;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 37 || _la === 55) {
                    {
                    this.state = 6090;
                    this.opt_asc_desc();
                    }
                }

                this.state = 6094;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 273) {
                    {
                    this.state = 6093;
                    this.opt_nulls_order();
                    }
                }

                }
                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 index_elem(): Index_elemContext {
        let localContext = new Index_elemContext(this.context, this.state);
        this.enterRule(localContext, 640, PostgreSqlParser.RULE_index_elem);
        try {
            this.state = 6109;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 572, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6098;
                this.column_name();
                this.state = 6099;
                this.index_elem_options();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6101;
                this.func_expr_windowless();
                this.state = 6102;
                this.index_elem_options();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6104;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6105;
                this.a_expr();
                this.state = 6106;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 6107;
                this.index_elem_options();
                }
                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 opt_include(): Opt_includeContext {
        let localContext = new Opt_includeContext(this.context, this.state);
        this.enterRule(localContext, 642, PostgreSqlParser.RULE_opt_include);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6111;
            this.match(PostgreSqlParser.KW_INCLUDE);
            this.state = 6112;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 6113;
            this.index_including_params();
            this.state = 6114;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public index_including_params(): Index_including_paramsContext {
        let localContext = new Index_including_paramsContext(this.context, this.state);
        this.enterRule(localContext, 644, PostgreSqlParser.RULE_index_including_params);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6116;
            this.index_elem();
            this.state = 6121;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6117;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6118;
                this.index_elem();
                }
                }
                this.state = 6123;
                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 opt_collate(): Opt_collateContext {
        let localContext = new Opt_collateContext(this.context, this.state);
        this.enterRule(localContext, 646, PostgreSqlParser.RULE_opt_collate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6124;
            this.match(PostgreSqlParser.KW_COLLATE);
            this.state = 6125;
            this.any_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_class(): Opt_classContext {
        let localContext = new Opt_classContext(this.context, this.state);
        this.enterRule(localContext, 648, PostgreSqlParser.RULE_opt_class);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6127;
            this.any_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_asc_desc(): Opt_asc_descContext {
        let localContext = new Opt_asc_descContext(this.context, this.state);
        this.enterRule(localContext, 650, PostgreSqlParser.RULE_opt_asc_desc);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6129;
            _la = this.tokenStream.LA(1);
            if(!(_la === 37 || _la === 55)) {
            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 opt_nulls_order(): Opt_nulls_orderContext {
        let localContext = new Opt_nulls_orderContext(this.context, this.state);
        this.enterRule(localContext, 652, PostgreSqlParser.RULE_opt_nulls_order);
        try {
            this.state = 6135;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 574, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6131;
                this.match(PostgreSqlParser.KW_NULLS);
                this.state = 6132;
                this.match(PostgreSqlParser.KW_FIRST);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6133;
                this.match(PostgreSqlParser.KW_NULLS);
                this.state = 6134;
                this.match(PostgreSqlParser.KW_LAST);
                }
                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 createfunctionstmt(): CreatefunctionstmtContext {
        let localContext = new CreatefunctionstmtContext(this.context, this.state);
        this.enterRule(localContext, 654, PostgreSqlParser.RULE_createfunctionstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6137;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 6139;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 82) {
                {
                this.state = 6138;
                this.opt_or_replace();
                }
            }

            this.state = 6145;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FUNCTION:
                {
                this.state = 6141;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6142;
                this.function_name_create();
                }
                break;
            case PostgreSqlParser.KW_PROCEDURE:
                {
                this.state = 6143;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 6144;
                this.procedure_name_create();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 6147;
            this.func_args_with_defaults();
            this.state = 6157;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 578, this.context) ) {
            case 1:
                {
                this.state = 6148;
                this.match(PostgreSqlParser.KW_RETURNS);
                this.state = 6155;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 577, this.context) ) {
                case 1:
                    {
                    this.state = 6149;
                    this.func_return();
                    }
                    break;
                case 2:
                    {
                    this.state = 6150;
                    this.match(PostgreSqlParser.KW_TABLE);
                    this.state = 6151;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 6152;
                    this.table_func_column_list();
                    this.state = 6153;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                }
                }
                break;
            }
            this.state = 6159;
            this.createfunc_opt_list();
            this.state = 6162;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 579, this.context) ) {
            case 1:
                {
                this.state = 6160;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6161;
                this.attrilist();
                }
                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 attrilist(): AttrilistContext {
        let localContext = new AttrilistContext(this.context, this.state);
        this.enterRule(localContext, 656, PostgreSqlParser.RULE_attrilist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6164;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 6165;
            this.colid();
            this.state = 6170;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6166;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6167;
                this.colid();
                }
                }
                this.state = 6172;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 6173;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_or_replace(): Opt_or_replaceContext {
        let localContext = new Opt_or_replaceContext(this.context, this.state);
        this.enterRule(localContext, 658, PostgreSqlParser.RULE_opt_or_replace);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6175;
            this.match(PostgreSqlParser.KW_OR);
            this.state = 6176;
            this.match(PostgreSqlParser.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 func_args(): Func_argsContext {
        let localContext = new Func_argsContext(this.context, this.state);
        this.enterRule(localContext, 660, PostgreSqlParser.RULE_func_args);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6178;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 6180;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || _la === 68 || _la === 92 || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4294967265) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 4294967295) !== 0) || ((((_la - 165)) & ~0x1F) === 0 && ((1 << (_la - 165)) & 4294967295) !== 0) || ((((_la - 197)) & ~0x1F) === 0 && ((1 << (_la - 197)) & 4294967295) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                {
                this.state = 6179;
                this.func_args_list();
                }
            }

            this.state = 6182;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public func_args_list(): Func_args_listContext {
        let localContext = new Func_args_listContext(this.context, this.state);
        this.enterRule(localContext, 662, PostgreSqlParser.RULE_func_args_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6184;
            this.func_arg();
            this.state = 6189;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6185;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6186;
                this.func_arg();
                }
                }
                this.state = 6191;
                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 routine_with_argtypes_list(): Routine_with_argtypes_listContext {
        let localContext = new Routine_with_argtypes_listContext(this.context, this.state);
        this.enterRule(localContext, 664, PostgreSqlParser.RULE_routine_with_argtypes_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6192;
            this.routine_with_argtypes();
            this.state = 6197;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6193;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6194;
                this.routine_with_argtypes();
                }
                }
                this.state = 6199;
                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 routine_with_argtypes(): Routine_with_argtypesContext {
        let localContext = new Routine_with_argtypesContext(this.context, this.state);
        this.enterRule(localContext, 666, PostgreSqlParser.RULE_routine_with_argtypes);
        let _la: number;
        try {
            this.state = 6208;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 585, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6200;
                this.routine_name();
                this.state = 6201;
                this.func_args();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6203;
                this.type_func_name_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6204;
                this.colid();
                this.state = 6206;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 4 || _la === 11) {
                    {
                    this.state = 6205;
                    this.indirection();
                    }
                }

                }
                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 procedure_with_argtypes_list(): Procedure_with_argtypes_listContext {
        let localContext = new Procedure_with_argtypes_listContext(this.context, this.state);
        this.enterRule(localContext, 668, PostgreSqlParser.RULE_procedure_with_argtypes_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6210;
            this.procedure_with_argtypes();
            this.state = 6215;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6211;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6212;
                this.procedure_with_argtypes();
                }
                }
                this.state = 6217;
                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 procedure_with_argtypes(): Procedure_with_argtypesContext {
        let localContext = new Procedure_with_argtypesContext(this.context, this.state);
        this.enterRule(localContext, 670, PostgreSqlParser.RULE_procedure_with_argtypes);
        let _la: number;
        try {
            this.state = 6226;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 588, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6218;
                this.procedure_name();
                this.state = 6219;
                this.func_args();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6221;
                this.type_func_name_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6222;
                this.colid();
                this.state = 6224;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 4 || _la === 11) {
                    {
                    this.state = 6223;
                    this.indirection();
                    }
                }

                }
                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 function_with_argtypes_list(): Function_with_argtypes_listContext {
        let localContext = new Function_with_argtypes_listContext(this.context, this.state);
        this.enterRule(localContext, 672, PostgreSqlParser.RULE_function_with_argtypes_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6228;
            this.function_with_argtypes();
            this.state = 6233;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6229;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6230;
                this.function_with_argtypes();
                }
                }
                this.state = 6235;
                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 function_with_argtypes(): Function_with_argtypesContext {
        let localContext = new Function_with_argtypesContext(this.context, this.state);
        this.enterRule(localContext, 674, PostgreSqlParser.RULE_function_with_argtypes);
        let _la: number;
        try {
            this.state = 6244;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 591, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6236;
                this.function_name();
                this.state = 6237;
                this.func_args();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6239;
                this.type_func_name_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6240;
                this.colid();
                this.state = 6242;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 4 || _la === 11) {
                    {
                    this.state = 6241;
                    this.indirection();
                    }
                }

                }
                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 func_args_with_defaults(): Func_args_with_defaultsContext {
        let localContext = new Func_args_with_defaultsContext(this.context, this.state);
        this.enterRule(localContext, 676, PostgreSqlParser.RULE_func_args_with_defaults);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6246;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 6248;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || _la === 68 || _la === 92 || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4294967265) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 4294967295) !== 0) || ((((_la - 165)) & ~0x1F) === 0 && ((1 << (_la - 165)) & 4294967295) !== 0) || ((((_la - 197)) & ~0x1F) === 0 && ((1 << (_la - 197)) & 4294967295) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                {
                this.state = 6247;
                this.func_args_with_defaults_list();
                }
            }

            this.state = 6250;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public func_args_with_defaults_list(): Func_args_with_defaults_listContext {
        let localContext = new Func_args_with_defaults_listContext(this.context, this.state);
        this.enterRule(localContext, 678, PostgreSqlParser.RULE_func_args_with_defaults_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6252;
            this.func_arg_with_default();
            this.state = 6257;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6253;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6254;
                this.func_arg_with_default();
                }
                }
                this.state = 6259;
                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 func_arg(): Func_argContext {
        let localContext = new Func_argContext(this.context, this.state);
        this.enterRule(localContext, 680, PostgreSqlParser.RULE_func_arg);
        try {
            this.state = 6273;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 596, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6260;
                this.arg_class();
                this.state = 6262;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 594, this.context) ) {
                case 1:
                    {
                    this.state = 6261;
                    this.param_name();
                    }
                    break;
                }
                this.state = 6264;
                this.func_type();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6266;
                this.param_name();
                this.state = 6268;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 595, this.context) ) {
                case 1:
                    {
                    this.state = 6267;
                    this.arg_class();
                    }
                    break;
                }
                this.state = 6270;
                this.func_type();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6272;
                this.func_type();
                }
                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 arg_class(): Arg_classContext {
        let localContext = new Arg_classContext(this.context, this.state);
        this.enterRule(localContext, 682, PostgreSqlParser.RULE_arg_class);
        try {
            this.state = 6282;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_IN:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6275;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 6277;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 597, this.context) ) {
                case 1:
                    {
                    this.state = 6276;
                    this.match(PostgreSqlParser.KW_OUT);
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_OUT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6279;
                this.match(PostgreSqlParser.KW_OUT);
                }
                break;
            case PostgreSqlParser.KW_INOUT:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6280;
                this.match(PostgreSqlParser.KW_INOUT);
                }
                break;
            case PostgreSqlParser.KW_VARIADIC:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6281;
                this.match(PostgreSqlParser.KW_VARIADIC);
                }
                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 param_name(): Param_nameContext {
        let localContext = new Param_nameContext(this.context, this.state);
        this.enterRule(localContext, 684, PostgreSqlParser.RULE_param_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6284;
            this.type_function_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public func_return(): Func_returnContext {
        let localContext = new Func_returnContext(this.context, this.state);
        this.enterRule(localContext, 686, PostgreSqlParser.RULE_func_return);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6286;
            this.func_type();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public func_type(): Func_typeContext {
        let localContext = new Func_typeContext(this.context, this.state);
        this.enterRule(localContext, 688, PostgreSqlParser.RULE_func_type);
        try {
            this.state = 6300;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 599, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6288;
                this.typename();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6289;
                this.type_function_name();
                this.state = 6290;
                this.attrs();
                this.state = 6291;
                this.match(PostgreSqlParser.PERCENT);
                this.state = 6292;
                this.match(PostgreSqlParser.KW_TYPE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6294;
                this.match(PostgreSqlParser.KW_SETOF);
                this.state = 6295;
                this.type_function_name();
                this.state = 6296;
                this.attrs();
                this.state = 6297;
                this.match(PostgreSqlParser.PERCENT);
                this.state = 6298;
                this.match(PostgreSqlParser.KW_TYPE);
                }
                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 func_arg_with_default(): Func_arg_with_defaultContext {
        let localContext = new Func_arg_with_defaultContext(this.context, this.state);
        this.enterRule(localContext, 690, PostgreSqlParser.RULE_func_arg_with_default);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6302;
            this.func_arg();
            this.state = 6305;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 10 || _la === 53) {
                {
                this.state = 6303;
                _la = this.tokenStream.LA(1);
                if(!(_la === 10 || _la === 53)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6304;
                this.a_expr();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public aggr_arg(): Aggr_argContext {
        let localContext = new Aggr_argContext(this.context, this.state);
        this.enterRule(localContext, 692, PostgreSqlParser.RULE_aggr_arg);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6307;
            this.func_arg();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public aggr_args(): Aggr_argsContext {
        let localContext = new Aggr_argsContext(this.context, this.state);
        this.enterRule(localContext, 694, PostgreSqlParser.RULE_aggr_args);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6309;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 6320;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 601, this.context) ) {
            case 1:
                {
                this.state = 6310;
                this.match(PostgreSqlParser.STAR);
                }
                break;
            case 2:
                {
                this.state = 6311;
                this.aggr_args_list();
                }
                break;
            case 3:
                {
                this.state = 6312;
                this.match(PostgreSqlParser.KW_ORDER);
                this.state = 6313;
                this.match(PostgreSqlParser.KW_BY);
                this.state = 6314;
                this.aggr_args_list();
                }
                break;
            case 4:
                {
                this.state = 6315;
                this.aggr_args_list();
                this.state = 6316;
                this.match(PostgreSqlParser.KW_ORDER);
                this.state = 6317;
                this.match(PostgreSqlParser.KW_BY);
                this.state = 6318;
                this.aggr_args_list();
                }
                break;
            }
            this.state = 6322;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public aggr_args_list(): Aggr_args_listContext {
        let localContext = new Aggr_args_listContext(this.context, this.state);
        this.enterRule(localContext, 696, PostgreSqlParser.RULE_aggr_args_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6324;
            this.aggr_arg();
            this.state = 6329;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6325;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6326;
                this.aggr_arg();
                }
                }
                this.state = 6331;
                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 aggregate_with_argtypes(): Aggregate_with_argtypesContext {
        let localContext = new Aggregate_with_argtypesContext(this.context, this.state);
        this.enterRule(localContext, 698, PostgreSqlParser.RULE_aggregate_with_argtypes);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6332;
            this.function_name();
            this.state = 6333;
            this.aggr_args();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public aggregate_with_argtypes_list(): Aggregate_with_argtypes_listContext {
        let localContext = new Aggregate_with_argtypes_listContext(this.context, this.state);
        this.enterRule(localContext, 700, PostgreSqlParser.RULE_aggregate_with_argtypes_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6335;
            this.aggregate_with_argtypes();
            this.state = 6340;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6336;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6337;
                this.aggregate_with_argtypes();
                }
                }
                this.state = 6342;
                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 createfunc_opt_list(): Createfunc_opt_listContext {
        let localContext = new Createfunc_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 702, PostgreSqlParser.RULE_createfunc_opt_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6344;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 6343;
                    this.createfunc_opt_item();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 6346;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 604, 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 common_func_opt_item(): Common_func_opt_itemContext {
        let localContext = new Common_func_opt_itemContext(this.context, this.state);
        this.enterRule(localContext, 704, PostgreSqlParser.RULE_common_func_opt_item);
        try {
            this.state = 6383;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 605, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6348;
                this.match(PostgreSqlParser.KW_CALLED);
                this.state = 6349;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 6350;
                this.match(PostgreSqlParser.KW_NULL);
                this.state = 6351;
                this.match(PostgreSqlParser.KW_INPUT);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6352;
                this.match(PostgreSqlParser.KW_RETURNS);
                this.state = 6353;
                this.match(PostgreSqlParser.KW_NULL);
                this.state = 6354;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 6355;
                this.match(PostgreSqlParser.KW_NULL);
                this.state = 6356;
                this.match(PostgreSqlParser.KW_INPUT);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6357;
                this.match(PostgreSqlParser.KW_STRICT);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6358;
                this.match(PostgreSqlParser.KW_IMMUTABLE);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6359;
                this.match(PostgreSqlParser.KW_STABLE);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6360;
                this.match(PostgreSqlParser.KW_VOLATILE);
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6361;
                this.match(PostgreSqlParser.KW_EXTERNAL);
                this.state = 6362;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 6363;
                this.match(PostgreSqlParser.KW_DEFINER);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6364;
                this.match(PostgreSqlParser.KW_EXTERNAL);
                this.state = 6365;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 6366;
                this.match(PostgreSqlParser.KW_INVOKER);
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 6367;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 6368;
                this.match(PostgreSqlParser.KW_DEFINER);
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 6369;
                this.match(PostgreSqlParser.KW_SECURITY);
                this.state = 6370;
                this.match(PostgreSqlParser.KW_INVOKER);
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 6371;
                this.match(PostgreSqlParser.KW_LEAKPROOF);
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 6372;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 6373;
                this.match(PostgreSqlParser.KW_LEAKPROOF);
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 6374;
                this.match(PostgreSqlParser.KW_COST);
                this.state = 6375;
                this.numericonly();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 6376;
                this.match(PostgreSqlParser.KW_ROWS);
                this.state = 6377;
                this.numericonly();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 6378;
                this.match(PostgreSqlParser.KW_SUPPORT);
                this.state = 6379;
                this.any_name();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 6380;
                this.functionsetresetclause();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 6381;
                this.match(PostgreSqlParser.KW_PARALLEL);
                this.state = 6382;
                this.colid();
                }
                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 createfunc_opt_item(): Createfunc_opt_itemContext {
        let localContext = new Createfunc_opt_itemContext(this.context, this.state);
        this.enterRule(localContext, 706, PostgreSqlParser.RULE_createfunc_opt_item);
        try {
            this.state = 6410;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 607, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6385;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 6386;
                this.sconst();
                this.state = 6387;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6388;
                this.sconst();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6390;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 6391;
                this.nonreservedword_or_sconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6392;
                this.match(PostgreSqlParser.KW_TRANSFORM);
                this.state = 6393;
                this.transform_type_list();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6394;
                this.match(PostgreSqlParser.KW_WINDOW);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6395;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 6396;
                this.colid();
                this.state = 6403;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_TO:
                    {
                    this.state = 6397;
                    this.match(PostgreSqlParser.KW_TO);
                    this.state = 6398;
                    this.colid();
                    }
                    break;
                case PostgreSqlParser.EQUAL:
                    {
                    this.state = 6399;
                    this.match(PostgreSqlParser.EQUAL);
                    this.state = 6400;
                    this.colid();
                    }
                    break;
                case PostgreSqlParser.KW_FROM:
                    {
                    this.state = 6401;
                    this.match(PostgreSqlParser.KW_FROM);
                    this.state = 6402;
                    this.match(PostgreSqlParser.KW_CURRENT);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6405;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 6406;
                this.colid();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6407;
                this.stmt();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6408;
                this.common_func_opt_item();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 6409;
                this.colid();
                }
                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 transform_type_list(): Transform_type_listContext {
        let localContext = new Transform_type_listContext(this.context, this.state);
        this.enterRule(localContext, 708, PostgreSqlParser.RULE_transform_type_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6412;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 6413;
            this.match(PostgreSqlParser.KW_TYPE);
            this.state = 6414;
            this.typename();
            this.state = 6421;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6415;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6416;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 6417;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 6418;
                this.typename();
                }
                }
                this.state = 6423;
                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 opt_definition(): Opt_definitionContext {
        let localContext = new Opt_definitionContext(this.context, this.state);
        this.enterRule(localContext, 710, PostgreSqlParser.RULE_opt_definition);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6424;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 6425;
            this.definition();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public table_func_column(): Table_func_columnContext {
        let localContext = new Table_func_columnContext(this.context, this.state);
        this.enterRule(localContext, 712, PostgreSqlParser.RULE_table_func_column);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6427;
            this.column_name();
            this.state = 6428;
            this.func_type();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public table_func_column_list(): Table_func_column_listContext {
        let localContext = new Table_func_column_listContext(this.context, this.state);
        this.enterRule(localContext, 714, PostgreSqlParser.RULE_table_func_column_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6430;
            this.table_func_column();
            this.state = 6435;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6431;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6432;
                this.table_func_column();
                }
                }
                this.state = 6437;
                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 alterfunctionstmt(): AlterfunctionstmtContext {
        let localContext = new AlterfunctionstmtContext(this.context, this.state);
        this.enterRule(localContext, 716, PostgreSqlParser.RULE_alterfunctionstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6438;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 6439;
            this.alterFunctionTypeClause();
            this.state = 6440;
            this.alterfunc_opt_list();
            this.state = 6442;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 610, this.context) ) {
            case 1:
                {
                this.state = 6441;
                this.opt_restrict();
                }
                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 alterFunctionTypeClause(): AlterFunctionTypeClauseContext {
        let localContext = new AlterFunctionTypeClauseContext(this.context, this.state);
        this.enterRule(localContext, 718, PostgreSqlParser.RULE_alterFunctionTypeClause);
        try {
            this.state = 6450;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FUNCTION:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6444;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6445;
                this.function_with_argtypes();
                }
                break;
            case PostgreSqlParser.KW_PROCEDURE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6446;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 6447;
                this.procedure_with_argtypes();
                }
                break;
            case PostgreSqlParser.KW_ROUTINE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6448;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 6449;
                this.routine_with_argtypes();
                }
                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 alterfunc_opt_list(): Alterfunc_opt_listContext {
        let localContext = new Alterfunc_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 720, PostgreSqlParser.RULE_alterfunc_opt_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6453;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 6452;
                    this.common_func_opt_item();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 6455;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 612, 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 opt_restrict(): Opt_restrictContext {
        let localContext = new Opt_restrictContext(this.context, this.state);
        this.enterRule(localContext, 722, PostgreSqlParser.RULE_opt_restrict);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6457;
            this.match(PostgreSqlParser.KW_RESTRICT);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public removefuncstmt(): RemovefuncstmtContext {
        let localContext = new RemovefuncstmtContext(this.context, this.state);
        this.enterRule(localContext, 724, PostgreSqlParser.RULE_removefuncstmt);
        try {
            this.state = 6486;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 619, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6459;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 6460;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6462;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 613, this.context) ) {
                case 1:
                    {
                    this.state = 6461;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6464;
                this.function_with_argtypes_list();
                this.state = 6466;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 614, this.context) ) {
                case 1:
                    {
                    this.state = 6465;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6468;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 6469;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 6471;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 615, this.context) ) {
                case 1:
                    {
                    this.state = 6470;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6473;
                this.procedure_with_argtypes_list();
                this.state = 6475;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 616, this.context) ) {
                case 1:
                    {
                    this.state = 6474;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6477;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 6478;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 6480;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 617, this.context) ) {
                case 1:
                    {
                    this.state = 6479;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6482;
                this.routine_with_argtypes_list();
                this.state = 6484;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 618, this.context) ) {
                case 1:
                    {
                    this.state = 6483;
                    this.opt_drop_behavior();
                    }
                    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 removeaggrstmt(): RemoveaggrstmtContext {
        let localContext = new RemoveaggrstmtContext(this.context, this.state);
        this.enterRule(localContext, 726, PostgreSqlParser.RULE_removeaggrstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6488;
            this.match(PostgreSqlParser.KW_DROP);
            this.state = 6489;
            this.match(PostgreSqlParser.KW_AGGREGATE);
            this.state = 6491;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 620, this.context) ) {
            case 1:
                {
                this.state = 6490;
                this.opt_if_exists();
                }
                break;
            }
            this.state = 6493;
            this.aggregate_with_argtypes_list();
            this.state = 6495;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 621, this.context) ) {
            case 1:
                {
                this.state = 6494;
                this.opt_drop_behavior();
                }
                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 removeoperstmt(): RemoveoperstmtContext {
        let localContext = new RemoveoperstmtContext(this.context, this.state);
        this.enterRule(localContext, 728, PostgreSqlParser.RULE_removeoperstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6497;
            this.match(PostgreSqlParser.KW_DROP);
            this.state = 6498;
            this.match(PostgreSqlParser.KW_OPERATOR);
            this.state = 6500;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 622, this.context) ) {
            case 1:
                {
                this.state = 6499;
                this.opt_if_exists();
                }
                break;
            }
            this.state = 6502;
            this.operator_with_argtypes_list();
            this.state = 6504;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 623, this.context) ) {
            case 1:
                {
                this.state = 6503;
                this.opt_drop_behavior();
                }
                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 oper_argtypes(): Oper_argtypesContext {
        let localContext = new Oper_argtypesContext(this.context, this.state);
        this.enterRule(localContext, 730, PostgreSqlParser.RULE_oper_argtypes);
        try {
            this.state = 6528;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 624, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6506;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6507;
                this.typename();
                this.state = 6508;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6510;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6511;
                this.typename();
                this.state = 6512;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6513;
                this.typename();
                this.state = 6514;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6516;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6517;
                this.match(PostgreSqlParser.KW_NONE);
                this.state = 6518;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6519;
                this.typename();
                this.state = 6520;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6522;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6523;
                this.typename();
                this.state = 6524;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6525;
                this.match(PostgreSqlParser.KW_NONE);
                this.state = 6526;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 any_operator(): Any_operatorContext {
        let localContext = new Any_operatorContext(this.context, this.state);
        this.enterRule(localContext, 732, PostgreSqlParser.RULE_any_operator);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6535;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                {
                {
                this.state = 6530;
                this.colid();
                this.state = 6531;
                this.match(PostgreSqlParser.DOT);
                }
                }
                this.state = 6537;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 6538;
            this.all_op();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public operator_with_argtypes_list(): Operator_with_argtypes_listContext {
        let localContext = new Operator_with_argtypes_listContext(this.context, this.state);
        this.enterRule(localContext, 734, PostgreSqlParser.RULE_operator_with_argtypes_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6540;
            this.operator_with_argtypes();
            this.state = 6545;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6541;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6542;
                this.operator_with_argtypes();
                }
                }
                this.state = 6547;
                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 operator_with_argtypes(): Operator_with_argtypesContext {
        let localContext = new Operator_with_argtypesContext(this.context, this.state);
        this.enterRule(localContext, 736, PostgreSqlParser.RULE_operator_with_argtypes);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6548;
            this.any_operator();
            this.state = 6549;
            this.oper_argtypes();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dostmt(): DostmtContext {
        let localContext = new DostmtContext(this.context, this.state);
        this.enterRule(localContext, 738, PostgreSqlParser.RULE_dostmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6551;
            this.match(PostgreSqlParser.KW_DO);
            this.state = 6552;
            this.dostmt_opt_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dostmt_opt_list(): Dostmt_opt_listContext {
        let localContext = new Dostmt_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 740, PostgreSqlParser.RULE_dostmt_opt_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6555;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 6554;
                    this.dostmt_opt_item();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 6557;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 627, 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 dostmt_opt_item(): Dostmt_opt_itemContext {
        let localContext = new Dostmt_opt_itemContext(this.context, this.state);
        this.enterRule(localContext, 742, PostgreSqlParser.RULE_dostmt_opt_item);
        try {
            this.state = 6562;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6559;
                this.sconst();
                }
                break;
            case PostgreSqlParser.KW_LANGUAGE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6560;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 6561;
                this.nonreservedword_or_sconst();
                }
                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 createcaststmt(): CreatecaststmtContext {
        let localContext = new CreatecaststmtContext(this.context, this.state);
        this.enterRule(localContext, 744, PostgreSqlParser.RULE_createcaststmt);
        try {
            this.state = 6601;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 632, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6564;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 6565;
                this.match(PostgreSqlParser.KW_CAST);
                this.state = 6566;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6567;
                this.typename();
                this.state = 6568;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 6569;
                this.typename();
                this.state = 6570;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 6571;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6572;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6573;
                this.function_with_argtypes();
                this.state = 6575;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 629, this.context) ) {
                case 1:
                    {
                    this.state = 6574;
                    this.cast_context();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6577;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 6578;
                this.match(PostgreSqlParser.KW_CAST);
                this.state = 6579;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6580;
                this.typename();
                this.state = 6581;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 6582;
                this.typename();
                this.state = 6583;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 6584;
                this.match(PostgreSqlParser.KW_WITHOUT);
                this.state = 6585;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6587;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 630, this.context) ) {
                case 1:
                    {
                    this.state = 6586;
                    this.cast_context();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6589;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 6590;
                this.match(PostgreSqlParser.KW_CAST);
                this.state = 6591;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6592;
                this.typename();
                this.state = 6593;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 6594;
                this.typename();
                this.state = 6595;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 6596;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6597;
                this.match(PostgreSqlParser.KW_INOUT);
                this.state = 6599;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 631, this.context) ) {
                case 1:
                    {
                    this.state = 6598;
                    this.cast_context();
                    }
                    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 cast_context(): Cast_contextContext {
        let localContext = new Cast_contextContext(this.context, this.state);
        this.enterRule(localContext, 746, PostgreSqlParser.RULE_cast_context);
        try {
            this.state = 6607;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 633, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6603;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 6604;
                this.match(PostgreSqlParser.KW_IMPLICIT);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6605;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 6606;
                this.match(PostgreSqlParser.KW_ASSIGNMENT);
                }
                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 opt_if_exists(): Opt_if_existsContext {
        let localContext = new Opt_if_existsContext(this.context, this.state);
        this.enterRule(localContext, 748, PostgreSqlParser.RULE_opt_if_exists);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6609;
            this.match(PostgreSqlParser.KW_IF);
            this.state = 6610;
            this.match(PostgreSqlParser.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 createtransformstmt(): CreatetransformstmtContext {
        let localContext = new CreatetransformstmtContext(this.context, this.state);
        this.enterRule(localContext, 750, PostgreSqlParser.RULE_createtransformstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6612;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 6614;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 82) {
                {
                this.state = 6613;
                this.opt_or_replace();
                }
            }

            this.state = 6616;
            this.match(PostgreSqlParser.KW_TRANSFORM);
            this.state = 6617;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 6618;
            this.typename();
            this.state = 6619;
            this.match(PostgreSqlParser.KW_LANGUAGE);
            this.state = 6620;
            this.name();
            this.state = 6621;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 6622;
            this.transform_element_list();
            this.state = 6623;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public transform_element_list(): Transform_element_listContext {
        let localContext = new Transform_element_listContext(this.context, this.state);
        this.enterRule(localContext, 752, PostgreSqlParser.RULE_transform_element_list);
        try {
            this.state = 6659;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 635, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6625;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 6626;
                this.match(PostgreSqlParser.KW_SQL);
                this.state = 6627;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6628;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6629;
                this.function_with_argtypes();
                this.state = 6630;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6631;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6632;
                this.match(PostgreSqlParser.KW_SQL);
                this.state = 6633;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6634;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6635;
                this.function_with_argtypes();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6637;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6638;
                this.match(PostgreSqlParser.KW_SQL);
                this.state = 6639;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6640;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6641;
                this.function_with_argtypes();
                this.state = 6642;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6643;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 6644;
                this.match(PostgreSqlParser.KW_SQL);
                this.state = 6645;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6646;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6647;
                this.function_with_argtypes();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6649;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 6650;
                this.match(PostgreSqlParser.KW_SQL);
                this.state = 6651;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6652;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6653;
                this.function_with_argtypes();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6654;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6655;
                this.match(PostgreSqlParser.KW_SQL);
                this.state = 6656;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 6657;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6658;
                this.function_with_argtypes();
                }
                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 reindexstmt(): ReindexstmtContext {
        let localContext = new ReindexstmtContext(this.context, this.state);
        this.enterRule(localContext, 754, PostgreSqlParser.RULE_reindexstmt);
        try {
            this.state = 6677;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 636, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6661;
                this.match(PostgreSqlParser.KW_REINDEX);
                this.state = 6662;
                this.reindex_target_type();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6663;
                this.match(PostgreSqlParser.KW_REINDEX);
                this.state = 6664;
                this.reindex_target_multitable();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6665;
                this.match(PostgreSqlParser.KW_REINDEX);
                this.state = 6666;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6667;
                this.reindex_option_list();
                this.state = 6668;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 6669;
                this.reindex_target_type();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6671;
                this.match(PostgreSqlParser.KW_REINDEX);
                this.state = 6672;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 6673;
                this.reindex_option_list();
                this.state = 6674;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 6675;
                this.reindex_target_multitable();
                }
                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 reindex_target_type(): Reindex_target_typeContext {
        let localContext = new Reindex_target_typeContext(this.context, this.state);
        this.enterRule(localContext, 756, PostgreSqlParser.RULE_reindex_target_type);
        let _la: number;
        try {
            this.state = 6689;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_INDEX:
                this.enterOuterAlt(localContext, 1);
                {
                {
                this.state = 6679;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 6681;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 109) {
                    {
                    this.state = 6680;
                    this.opt_concurrently();
                    }
                }

                this.state = 6683;
                this.qualified_name();
                }
                }
                break;
            case PostgreSqlParser.KW_TABLE:
                this.enterOuterAlt(localContext, 2);
                {
                {
                this.state = 6684;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 6686;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 109) {
                    {
                    this.state = 6685;
                    this.opt_concurrently();
                    }
                }

                this.state = 6688;
                this.table_name();
                }
                }
                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 reindex_target_multitable(): Reindex_target_multitableContext {
        let localContext = new Reindex_target_multitableContext(this.context, this.state);
        this.enterRule(localContext, 758, PostgreSqlParser.RULE_reindex_target_multitable);
        let _la: number;
        try {
            this.state = 6706;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SCHEMA:
                this.enterOuterAlt(localContext, 1);
                {
                {
                this.state = 6691;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 6693;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 109) {
                    {
                    this.state = 6692;
                    this.opt_concurrently();
                    }
                }

                this.state = 6695;
                this.schema_name();
                }
                }
                break;
            case PostgreSqlParser.KW_SYSTEM:
                this.enterOuterAlt(localContext, 2);
                {
                {
                this.state = 6696;
                this.match(PostgreSqlParser.KW_SYSTEM);
                this.state = 6698;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 109) {
                    {
                    this.state = 6697;
                    this.opt_concurrently();
                    }
                }

                this.state = 6700;
                this.name();
                }
                }
                break;
            case PostgreSqlParser.KW_DATABASE:
                this.enterOuterAlt(localContext, 3);
                {
                {
                this.state = 6701;
                this.match(PostgreSqlParser.KW_DATABASE);
                this.state = 6703;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 109) {
                    {
                    this.state = 6702;
                    this.opt_concurrently();
                    }
                }

                this.state = 6705;
                this.database_name();
                }
                }
                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 reindex_option_list(): Reindex_option_listContext {
        let localContext = new Reindex_option_listContext(this.context, this.state);
        this.enterRule(localContext, 760, PostgreSqlParser.RULE_reindex_option_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6708;
            this.reindex_option_elem();
            this.state = 6713;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 6709;
                this.match(PostgreSqlParser.COMMA);
                this.state = 6710;
                this.reindex_option_elem();
                }
                }
                this.state = 6715;
                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 reindex_option_elem(): Reindex_option_elemContext {
        let localContext = new Reindex_option_elemContext(this.context, this.state);
        this.enterRule(localContext, 762, PostgreSqlParser.RULE_reindex_option_elem);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6716;
            this.match(PostgreSqlParser.KW_VERBOSE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public altertblspcstmt(): AltertblspcstmtContext {
        let localContext = new AltertblspcstmtContext(this.context, this.state);
        this.enterRule(localContext, 764, PostgreSqlParser.RULE_altertblspcstmt);
        try {
            this.state = 6730;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 645, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6718;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6719;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 6720;
                this.tablespace_name();
                this.state = 6721;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 6722;
                this.reloptions();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6724;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6725;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 6726;
                this.tablespace_name();
                this.state = 6727;
                this.match(PostgreSqlParser.KW_RESET);
                this.state = 6728;
                this.reloptions();
                }
                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 renamestmt(): RenamestmtContext {
        let localContext = new RenamestmtContext(this.context, this.state);
        this.enterRule(localContext, 766, PostgreSqlParser.RULE_renamestmt);
        let _la: number;
        try {
            this.state = 7123;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 664, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6732;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6733;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 6734;
                this.aggregate_with_argtypes();
                this.state = 6735;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6736;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6737;
                this.name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6739;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6740;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 6741;
                this.any_name();
                this.state = 6742;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6743;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6744;
                this.name();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6746;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6747;
                this.match(PostgreSqlParser.KW_CONVERSION);
                this.state = 6748;
                this.any_name();
                this.state = 6749;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6750;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6751;
                this.name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6753;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6754;
                this.match(PostgreSqlParser.KW_DATABASE);
                this.state = 6755;
                this.database_name();
                this.state = 6756;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6757;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6758;
                this.database_name_create();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6760;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6761;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 6762;
                this.any_name();
                this.state = 6763;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6764;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6765;
                this.name();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6767;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6768;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 6769;
                this.any_name();
                this.state = 6770;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6771;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 6772;
                this.name();
                this.state = 6773;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6774;
                this.name();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6776;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6777;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 6778;
                this.match(PostgreSqlParser.KW_DATA);
                this.state = 6779;
                this.match(PostgreSqlParser.KW_WRAPPER);
                this.state = 6780;
                this.name();
                this.state = 6781;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6782;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6783;
                this.name();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6785;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6786;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 6787;
                this.function_with_argtypes();
                this.state = 6788;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6789;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6790;
                this.function_name_create();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 6792;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6793;
                this.match(PostgreSqlParser.KW_GROUP);
                this.state = 6794;
                this.roleid();
                this.state = 6795;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6796;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6797;
                this.roleid();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 6799;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6801;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 295) {
                    {
                    this.state = 6800;
                    this.opt_procedural();
                    }
                }

                this.state = 6803;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 6804;
                this.name();
                this.state = 6805;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6806;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6807;
                this.name();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 6809;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6810;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 6811;
                this.match(PostgreSqlParser.KW_CLASS);
                this.state = 6812;
                this.any_name();
                this.state = 6813;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 6814;
                this.name();
                this.state = 6815;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6816;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6817;
                this.name();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 6819;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6820;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 6821;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 6822;
                this.any_name();
                this.state = 6823;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 6824;
                this.name();
                this.state = 6825;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6826;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6827;
                this.name();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 6829;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6830;
                this.match(PostgreSqlParser.KW_POLICY);
                this.state = 6832;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 647, this.context) ) {
                case 1:
                    {
                    this.state = 6831;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6834;
                this.name();
                this.state = 6835;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 6836;
                this.qualified_name();
                this.state = 6837;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6838;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6839;
                this.name();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 6841;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6842;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 6843;
                this.procedure_with_argtypes();
                this.state = 6844;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6845;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6846;
                this.procedure_name_create();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 6848;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6849;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 6850;
                this.name();
                this.state = 6851;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6852;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6853;
                this.name();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 6855;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6856;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 6857;
                this.routine_with_argtypes();
                this.state = 6858;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6859;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6860;
                this.name();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 6862;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6863;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 6864;
                this.schema_name();
                this.state = 6865;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6866;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6867;
                this.schema_name_create();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 6869;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6870;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 6871;
                this.name();
                this.state = 6872;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6873;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6874;
                this.name();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 6876;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6877;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 6878;
                this.name();
                this.state = 6879;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6880;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6881;
                this.name();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 6883;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6884;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 6886;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 648, this.context) ) {
                case 1:
                    {
                    this.state = 6885;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6888;
                this.relation_expr();
                this.state = 6889;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6890;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6891;
                this.table_name_create();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 6893;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6894;
                this.match(PostgreSqlParser.KW_SEQUENCE);
                this.state = 6896;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 649, this.context) ) {
                case 1:
                    {
                    this.state = 6895;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6898;
                this.qualified_name();
                this.state = 6899;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6900;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6901;
                this.name();
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 6903;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6904;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 6906;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 650, this.context) ) {
                case 1:
                    {
                    this.state = 6905;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6908;
                this.view_name();
                this.state = 6909;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6910;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6911;
                this.view_name_create();
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 6913;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6914;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                this.state = 6915;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 6917;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 651, this.context) ) {
                case 1:
                    {
                    this.state = 6916;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6919;
                this.view_name();
                this.state = 6920;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6921;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6922;
                this.view_name_create();
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 6924;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6925;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 6927;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 652, this.context) ) {
                case 1:
                    {
                    this.state = 6926;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6929;
                this.qualified_name();
                this.state = 6930;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6931;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6932;
                this.name();
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 6934;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6935;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 6936;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 6938;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 653, this.context) ) {
                case 1:
                    {
                    this.state = 6937;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6940;
                this.relation_expr();
                this.state = 6941;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6942;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6943;
                this.table_name_create();
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 6945;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6946;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 6948;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 654, this.context) ) {
                case 1:
                    {
                    this.state = 6947;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6950;
                this.relation_expr();
                this.state = 6951;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6953;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 655, this.context) ) {
                case 1:
                    {
                    this.state = 6952;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 6955;
                this.column_name();
                this.state = 6956;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6957;
                this.column_name_create();
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 6959;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6960;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 6962;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 656, this.context) ) {
                case 1:
                    {
                    this.state = 6961;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6964;
                this.view_name();
                this.state = 6965;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6967;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 657, this.context) ) {
                case 1:
                    {
                    this.state = 6966;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 6969;
                this.column_name();
                this.state = 6970;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6971;
                this.column_name_create();
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 6973;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6974;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                this.state = 6975;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 6977;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 658, this.context) ) {
                case 1:
                    {
                    this.state = 6976;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6979;
                this.view_name();
                this.state = 6980;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6982;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 659, this.context) ) {
                case 1:
                    {
                    this.state = 6981;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 6984;
                this.column_name();
                this.state = 6985;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6986;
                this.column_name_create();
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 6988;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 6989;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 6991;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 660, this.context) ) {
                case 1:
                    {
                    this.state = 6990;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 6993;
                this.relation_expr();
                this.state = 6994;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 6995;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 6996;
                this.name();
                this.state = 6997;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 6998;
                this.name();
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 7000;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7001;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 7002;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 7004;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 661, this.context) ) {
                case 1:
                    {
                    this.state = 7003;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 7006;
                this.relation_expr();
                this.state = 7007;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7009;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 662, this.context) ) {
                case 1:
                    {
                    this.state = 7008;
                    this.match(PostgreSqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 7011;
                this.column_name();
                this.state = 7012;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7013;
                this.column_name_create();
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 7015;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7016;
                this.match(PostgreSqlParser.KW_RULE);
                this.state = 7017;
                this.name();
                this.state = 7018;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7019;
                this.qualified_name();
                this.state = 7020;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7021;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7022;
                this.name();
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 7024;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7025;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 7026;
                this.name();
                this.state = 7027;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7028;
                this.qualified_name();
                this.state = 7029;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7030;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7031;
                this.name();
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 7033;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7034;
                this.match(PostgreSqlParser.KW_EVENT);
                this.state = 7035;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 7036;
                this.name();
                this.state = 7037;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7038;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7039;
                this.name();
                }
                break;
            case 34:
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 7041;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7042;
                this.match(PostgreSqlParser.KW_ROLE);
                this.state = 7043;
                this.roleid();
                this.state = 7044;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7045;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7046;
                this.roleid();
                }
                break;
            case 35:
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 7048;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7049;
                this.match(PostgreSqlParser.KW_USER);
                this.state = 7050;
                this.roleid();
                this.state = 7051;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7052;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7053;
                this.roleid();
                }
                break;
            case 36:
                this.enterOuterAlt(localContext, 36);
                {
                this.state = 7055;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7056;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 7057;
                this.tablespace_name();
                this.state = 7058;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7059;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7060;
                this.tablespace_name_create();
                }
                break;
            case 37:
                this.enterOuterAlt(localContext, 37);
                {
                this.state = 7062;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7063;
                this.match(PostgreSqlParser.KW_STATISTICS);
                this.state = 7064;
                this.any_name();
                this.state = 7065;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7066;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7067;
                this.name();
                }
                break;
            case 38:
                this.enterOuterAlt(localContext, 38);
                {
                this.state = 7069;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7070;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7071;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7072;
                this.match(PostgreSqlParser.KW_PARSER);
                this.state = 7073;
                this.any_name();
                this.state = 7074;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7075;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7076;
                this.name();
                }
                break;
            case 39:
                this.enterOuterAlt(localContext, 39);
                {
                this.state = 7078;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7079;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7080;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7081;
                this.match(PostgreSqlParser.KW_DICTIONARY);
                this.state = 7082;
                this.any_name();
                this.state = 7083;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7084;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7085;
                this.name();
                }
                break;
            case 40:
                this.enterOuterAlt(localContext, 40);
                {
                this.state = 7087;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7088;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7089;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7090;
                this.match(PostgreSqlParser.KW_TEMPLATE);
                this.state = 7091;
                this.any_name();
                this.state = 7092;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7093;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7094;
                this.name();
                }
                break;
            case 41:
                this.enterOuterAlt(localContext, 41);
                {
                this.state = 7096;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7097;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7098;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7099;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 7100;
                this.any_name();
                this.state = 7101;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7102;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7103;
                this.name();
                }
                break;
            case 42:
                this.enterOuterAlt(localContext, 42);
                {
                this.state = 7105;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7106;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 7107;
                this.any_name();
                this.state = 7108;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7109;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7110;
                this.name();
                }
                break;
            case 43:
                this.enterOuterAlt(localContext, 43);
                {
                this.state = 7112;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7113;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 7114;
                this.any_name();
                this.state = 7115;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7116;
                this.match(PostgreSqlParser.KW_ATTRIBUTE);
                this.state = 7117;
                this.name();
                this.state = 7118;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7119;
                this.name();
                this.state = 7121;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 663, this.context) ) {
                case 1:
                    {
                    this.state = 7120;
                    this.opt_drop_behavior();
                    }
                    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 opt_set_data(): Opt_set_dataContext {
        let localContext = new Opt_set_dataContext(this.context, this.state);
        this.enterRule(localContext, 768, PostgreSqlParser.RULE_opt_set_data);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7125;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 7126;
            this.match(PostgreSqlParser.KW_DATA);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterobjectdependsstmt(): AlterobjectdependsstmtContext {
        let localContext = new AlterobjectdependsstmtContext(this.context, this.state);
        this.enterRule(localContext, 770, PostgreSqlParser.RULE_alterobjectdependsstmt);
        let _la: number;
        try {
            this.state = 7197;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 671, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7128;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7129;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 7130;
                this.function_with_argtypes();
                this.state = 7132;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 7131;
                    this.opt_no();
                    }
                }

                this.state = 7134;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 7135;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7136;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 7137;
                this.name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7139;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7140;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 7141;
                this.procedure_with_argtypes();
                this.state = 7143;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 7142;
                    this.opt_no();
                    }
                }

                this.state = 7145;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 7146;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7147;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 7148;
                this.name();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7150;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7151;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 7152;
                this.routine_with_argtypes();
                this.state = 7154;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 7153;
                    this.opt_no();
                    }
                }

                this.state = 7156;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 7157;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7158;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 7159;
                this.name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7161;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7162;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 7163;
                this.name();
                this.state = 7164;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7165;
                this.qualified_name();
                this.state = 7167;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 7166;
                    this.opt_no();
                    }
                }

                this.state = 7169;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 7170;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7171;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 7172;
                this.name();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7174;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7175;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                this.state = 7176;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 7177;
                this.view_name();
                this.state = 7179;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 7178;
                    this.opt_no();
                    }
                }

                this.state = 7181;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 7182;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7183;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 7184;
                this.name();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7186;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7187;
                this.match(PostgreSqlParser.KW_INDEX);
                this.state = 7188;
                this.qualified_name();
                this.state = 7190;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 7189;
                    this.opt_no();
                    }
                }

                this.state = 7192;
                this.match(PostgreSqlParser.KW_DEPENDS);
                this.state = 7193;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 7194;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 7195;
                this.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 opt_no(): Opt_noContext {
        let localContext = new Opt_noContext(this.context, this.state);
        this.enterRule(localContext, 772, PostgreSqlParser.RULE_opt_no);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7199;
            this.match(PostgreSqlParser.KW_NO);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterobjectschemastmt(): AlterobjectschemastmtContext {
        let localContext = new AlterobjectschemastmtContext(this.context, this.state);
        this.enterRule(localContext, 774, PostgreSqlParser.RULE_alterobjectschemastmt);
        try {
            this.state = 7386;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 677, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7201;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7202;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 7203;
                this.aggregate_with_argtypes();
                this.state = 7204;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7205;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7206;
                this.schema_name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7208;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7209;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 7210;
                this.any_name();
                this.state = 7211;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7212;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7213;
                this.schema_name();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7215;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7216;
                this.match(PostgreSqlParser.KW_CONVERSION);
                this.state = 7217;
                this.any_name();
                this.state = 7218;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7219;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7220;
                this.schema_name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7222;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7223;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 7224;
                this.any_name();
                this.state = 7225;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7226;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7227;
                this.schema_name();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7229;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7230;
                this.match(PostgreSqlParser.KW_EXTENSION);
                this.state = 7231;
                this.name();
                this.state = 7232;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7233;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7234;
                this.schema_name();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7236;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7237;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 7238;
                this.function_with_argtypes();
                this.state = 7239;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7240;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7241;
                this.schema_name();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7243;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7244;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 7245;
                this.operator_with_argtypes();
                this.state = 7246;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7247;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7248;
                this.schema_name();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7250;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7251;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 7252;
                this.match(PostgreSqlParser.KW_CLASS);
                this.state = 7253;
                this.any_name();
                this.state = 7254;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 7255;
                this.name();
                this.state = 7256;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7257;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7258;
                this.schema_name();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 7260;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7261;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 7262;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 7263;
                this.any_name();
                this.state = 7264;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 7265;
                this.name();
                this.state = 7266;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7267;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7268;
                this.schema_name();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 7270;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7271;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 7272;
                this.procedure_with_argtypes();
                this.state = 7273;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7274;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7275;
                this.schema_name();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 7277;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7278;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 7279;
                this.routine_with_argtypes();
                this.state = 7280;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7281;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7282;
                this.schema_name();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 7284;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7285;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 7287;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 672, this.context) ) {
                case 1:
                    {
                    this.state = 7286;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 7289;
                this.relation_expr();
                this.state = 7290;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7291;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7292;
                this.schema_name();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 7294;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7295;
                this.match(PostgreSqlParser.KW_STATISTICS);
                this.state = 7296;
                this.any_name();
                this.state = 7297;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7298;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7299;
                this.schema_name();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 7301;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7302;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7303;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7304;
                this.match(PostgreSqlParser.KW_PARSER);
                this.state = 7305;
                this.any_name();
                this.state = 7306;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7307;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7308;
                this.schema_name();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 7310;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7311;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7312;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7313;
                this.match(PostgreSqlParser.KW_DICTIONARY);
                this.state = 7314;
                this.any_name();
                this.state = 7315;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7316;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7317;
                this.schema_name();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 7319;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7320;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7321;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7322;
                this.match(PostgreSqlParser.KW_TEMPLATE);
                this.state = 7323;
                this.any_name();
                this.state = 7324;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7325;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7326;
                this.schema_name();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 7328;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7329;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7330;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7331;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 7332;
                this.any_name();
                this.state = 7333;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7334;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7335;
                this.schema_name();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 7337;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7338;
                this.match(PostgreSqlParser.KW_SEQUENCE);
                this.state = 7340;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 673, this.context) ) {
                case 1:
                    {
                    this.state = 7339;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 7342;
                this.qualified_name();
                this.state = 7343;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7344;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7345;
                this.schema_name();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 7347;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7348;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 7350;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 674, this.context) ) {
                case 1:
                    {
                    this.state = 7349;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 7352;
                this.view_name();
                this.state = 7353;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7354;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7355;
                this.schema_name();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 7357;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7358;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                this.state = 7359;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 7361;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 675, this.context) ) {
                case 1:
                    {
                    this.state = 7360;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 7363;
                this.view_name();
                this.state = 7364;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7365;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7366;
                this.schema_name();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 7368;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7369;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 7370;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 7372;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 676, this.context) ) {
                case 1:
                    {
                    this.state = 7371;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 7374;
                this.relation_expr();
                this.state = 7375;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7376;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7377;
                this.schema_name();
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 7379;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7380;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 7381;
                this.any_name();
                this.state = 7382;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7383;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7384;
                this.schema_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 alteroperatorstmt(): AlteroperatorstmtContext {
        let localContext = new AlteroperatorstmtContext(this.context, this.state);
        this.enterRule(localContext, 776, PostgreSqlParser.RULE_alteroperatorstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7388;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 7389;
            this.match(PostgreSqlParser.KW_OPERATOR);
            this.state = 7390;
            this.operator_with_argtypes();
            this.state = 7391;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 7392;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 7393;
            this.operator_def_list();
            this.state = 7394;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public operator_def_list(): Operator_def_listContext {
        let localContext = new Operator_def_listContext(this.context, this.state);
        this.enterRule(localContext, 778, PostgreSqlParser.RULE_operator_def_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7396;
            this.operator_def_elem();
            this.state = 7401;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 7397;
                this.match(PostgreSqlParser.COMMA);
                this.state = 7398;
                this.operator_def_elem();
                }
                }
                this.state = 7403;
                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 operator_def_elem(): Operator_def_elemContext {
        let localContext = new Operator_def_elemContext(this.context, this.state);
        this.enterRule(localContext, 780, PostgreSqlParser.RULE_operator_def_elem);
        try {
            this.state = 7412;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 679, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7404;
                this.collabel();
                this.state = 7405;
                this.match(PostgreSqlParser.EQUAL);
                this.state = 7406;
                this.match(PostgreSqlParser.KW_NONE);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7408;
                this.collabel();
                this.state = 7409;
                this.match(PostgreSqlParser.EQUAL);
                this.state = 7410;
                this.operator_def_arg();
                }
                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 operator_def_arg(): Operator_def_argContext {
        let localContext = new Operator_def_argContext(this.context, this.state);
        this.enterRule(localContext, 782, PostgreSqlParser.RULE_operator_def_arg);
        try {
            this.state = 7419;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 680, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7414;
                this.func_type();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7415;
                this.reserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7416;
                this.qual_all_op();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7417;
                this.numericonly();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7418;
                this.sconst();
                }
                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 altertypestmt(): AltertypestmtContext {
        let localContext = new AltertypestmtContext(this.context, this.state);
        this.enterRule(localContext, 784, PostgreSqlParser.RULE_altertypestmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7421;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 7422;
            this.match(PostgreSqlParser.KW_TYPE);
            this.state = 7423;
            this.any_name();
            this.state = 7424;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 7425;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 7426;
            this.operator_def_list();
            this.state = 7427;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterownerstmt(): AlterownerstmtContext {
        let localContext = new AlterownerstmtContext(this.context, this.state);
        this.enterRule(localContext, 786, PostgreSqlParser.RULE_alterownerstmt);
        let _la: number;
        try {
            this.state = 7614;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 682, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7429;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7430;
                this.match(PostgreSqlParser.KW_AGGREGATE);
                this.state = 7431;
                this.aggregate_with_argtypes();
                this.state = 7432;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7433;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7434;
                this.rolespec();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7436;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7437;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 7438;
                this.any_name();
                this.state = 7439;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7440;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7441;
                this.rolespec();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7443;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7444;
                this.match(PostgreSqlParser.KW_CONVERSION);
                this.state = 7445;
                this.any_name();
                this.state = 7446;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7447;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7448;
                this.rolespec();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7450;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7451;
                this.match(PostgreSqlParser.KW_DATABASE);
                this.state = 7452;
                this.database_name();
                this.state = 7453;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7454;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7455;
                this.rolespec();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7457;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7458;
                this.match(PostgreSqlParser.KW_DOMAIN);
                this.state = 7459;
                this.any_name();
                this.state = 7460;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7461;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7462;
                this.rolespec();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7464;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7465;
                this.match(PostgreSqlParser.KW_FUNCTION);
                this.state = 7466;
                this.function_with_argtypes();
                this.state = 7467;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7468;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7469;
                this.rolespec();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7471;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7473;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 295) {
                    {
                    this.state = 7472;
                    this.opt_procedural();
                    }
                }

                this.state = 7475;
                this.match(PostgreSqlParser.KW_LANGUAGE);
                this.state = 7476;
                this.name();
                this.state = 7477;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7478;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7479;
                this.rolespec();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7481;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7482;
                this.match(PostgreSqlParser.KW_LARGE);
                this.state = 7483;
                this.match(PostgreSqlParser.KW_OBJECT);
                this.state = 7484;
                this.numericonly();
                this.state = 7485;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7486;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7487;
                this.rolespec();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 7489;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7490;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 7491;
                this.operator_with_argtypes();
                this.state = 7492;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7493;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7494;
                this.rolespec();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 7496;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7497;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 7498;
                this.match(PostgreSqlParser.KW_CLASS);
                this.state = 7499;
                this.any_name();
                this.state = 7500;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 7501;
                this.name();
                this.state = 7502;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7503;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7504;
                this.rolespec();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 7506;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7507;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 7508;
                this.match(PostgreSqlParser.KW_FAMILY);
                this.state = 7509;
                this.any_name();
                this.state = 7510;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 7511;
                this.name();
                this.state = 7512;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7513;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7514;
                this.rolespec();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 7516;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7517;
                this.match(PostgreSqlParser.KW_PROCEDURE);
                this.state = 7518;
                this.procedure_with_argtypes();
                this.state = 7519;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7520;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7521;
                this.rolespec();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 7523;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7524;
                this.match(PostgreSqlParser.KW_ROUTINE);
                this.state = 7525;
                this.routine_with_argtypes();
                this.state = 7526;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7527;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7528;
                this.rolespec();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 7530;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7531;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 7532;
                this.schema_name();
                this.state = 7533;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7534;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7535;
                this.rolespec();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 7537;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7538;
                this.match(PostgreSqlParser.KW_TYPE);
                this.state = 7539;
                this.any_name();
                this.state = 7540;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7541;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7542;
                this.rolespec();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 7544;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7545;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                this.state = 7546;
                this.tablespace_name();
                this.state = 7547;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7548;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7549;
                this.rolespec();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 7551;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7552;
                this.match(PostgreSqlParser.KW_STATISTICS);
                this.state = 7553;
                this.any_name();
                this.state = 7554;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7555;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7556;
                this.rolespec();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 7558;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7559;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7560;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7561;
                this.match(PostgreSqlParser.KW_DICTIONARY);
                this.state = 7562;
                this.any_name();
                this.state = 7563;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7564;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7565;
                this.rolespec();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 7567;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7568;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 7569;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 7570;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 7571;
                this.any_name();
                this.state = 7572;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7573;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7574;
                this.rolespec();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 7576;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7577;
                this.match(PostgreSqlParser.KW_FOREIGN);
                this.state = 7578;
                this.match(PostgreSqlParser.KW_DATA);
                this.state = 7579;
                this.match(PostgreSqlParser.KW_WRAPPER);
                this.state = 7580;
                this.name();
                this.state = 7581;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7582;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7583;
                this.rolespec();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 7585;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7586;
                this.match(PostgreSqlParser.KW_SERVER);
                this.state = 7587;
                this.name();
                this.state = 7588;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7589;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7590;
                this.rolespec();
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 7592;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7593;
                this.match(PostgreSqlParser.KW_EVENT);
                this.state = 7594;
                this.match(PostgreSqlParser.KW_TRIGGER);
                this.state = 7595;
                this.name();
                this.state = 7596;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7597;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7598;
                this.rolespec();
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 7600;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7601;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7602;
                this.name();
                this.state = 7603;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7604;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7605;
                this.rolespec();
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 7607;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7608;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7609;
                this.name();
                this.state = 7610;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7611;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7612;
                this.rolespec();
                }
                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 createpublicationstmt(): CreatepublicationstmtContext {
        let localContext = new CreatepublicationstmtContext(this.context, this.state);
        this.enterRule(localContext, 788, PostgreSqlParser.RULE_createpublicationstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7616;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 7617;
            this.match(PostgreSqlParser.KW_PUBLICATION);
            this.state = 7618;
            this.name();
            this.state = 7620;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 62) {
                {
                this.state = 7619;
                this.opt_publication_for_tables();
                }
            }

            this.state = 7623;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 684, this.context) ) {
            case 1:
                {
                this.state = 7622;
                this.opt_definition();
                }
                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 opt_publication_for_tables(): Opt_publication_for_tablesContext {
        let localContext = new Opt_publication_for_tablesContext(this.context, this.state);
        this.enterRule(localContext, 790, PostgreSqlParser.RULE_opt_publication_for_tables);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7625;
            this.publication_for_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 publication_for_tables(): Publication_for_tablesContext {
        let localContext = new Publication_for_tablesContext(this.context, this.state);
        this.enterRule(localContext, 792, PostgreSqlParser.RULE_publication_for_tables);
        try {
            this.state = 7633;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 685, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7627;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 7628;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 7629;
                this.relation_expr_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7630;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 7631;
                this.match(PostgreSqlParser.KW_ALL);
                this.state = 7632;
                this.match(PostgreSqlParser.KW_TABLES);
                }
                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 alterpublicationstmt(): AlterpublicationstmtContext {
        let localContext = new AlterpublicationstmtContext(this.context, this.state);
        this.enterRule(localContext, 794, PostgreSqlParser.RULE_alterpublicationstmt);
        try {
            this.state = 7673;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 686, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7635;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7636;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7637;
                this.name();
                this.state = 7638;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7639;
                this.definition();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7641;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7642;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7643;
                this.name();
                this.state = 7644;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 7645;
                this.publication_relation_expr_list();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7647;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7648;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7649;
                this.name();
                this.state = 7650;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7651;
                this.publication_relation_expr_list();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7653;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7654;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7655;
                this.name();
                this.state = 7656;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 7657;
                this.publication_relation_expr_list();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7659;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7660;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7661;
                this.name();
                this.state = 7662;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7663;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7664;
                this.rolespec();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7666;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7667;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7668;
                this.name();
                this.state = 7669;
                this.match(PostgreSqlParser.KW_RENAME);
                this.state = 7670;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7671;
                this.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 createsubscriptionstmt(): CreatesubscriptionstmtContext {
        let localContext = new CreatesubscriptionstmtContext(this.context, this.state);
        this.enterRule(localContext, 796, PostgreSqlParser.RULE_createsubscriptionstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7675;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 7676;
            this.match(PostgreSqlParser.KW_SUBSCRIPTION);
            this.state = 7677;
            this.name();
            this.state = 7678;
            this.match(PostgreSqlParser.KW_CONNECTION);
            this.state = 7679;
            this.sconst();
            this.state = 7680;
            this.match(PostgreSqlParser.KW_PUBLICATION);
            this.state = 7681;
            this.publication_name_list();
            this.state = 7683;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 687, this.context) ) {
            case 1:
                {
                this.state = 7682;
                this.opt_definition();
                }
                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 publication_name_list(): Publication_name_listContext {
        let localContext = new Publication_name_listContext(this.context, this.state);
        this.enterRule(localContext, 798, PostgreSqlParser.RULE_publication_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7685;
            this.publication_name_item();
            this.state = 7690;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 7686;
                this.match(PostgreSqlParser.COMMA);
                this.state = 7687;
                this.publication_name_item();
                }
                }
                this.state = 7692;
                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 publication_name_item(): Publication_name_itemContext {
        let localContext = new Publication_name_itemContext(this.context, this.state);
        this.enterRule(localContext, 800, PostgreSqlParser.RULE_publication_name_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7693;
            this.collabel();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public altersubscriptionstmt(): AltersubscriptionstmtContext {
        let localContext = new AltersubscriptionstmtContext(this.context, this.state);
        this.enterRule(localContext, 802, PostgreSqlParser.RULE_altersubscriptionstmt);
        try {
            this.state = 7773;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 693, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7695;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7696;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7697;
                this.name();
                this.state = 7698;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7699;
                this.definition();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7701;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7702;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7703;
                this.name();
                this.state = 7704;
                this.match(PostgreSqlParser.KW_CONNECTION);
                this.state = 7705;
                this.sconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7707;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7708;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7709;
                this.name();
                this.state = 7710;
                this.match(PostgreSqlParser.KW_REFRESH);
                this.state = 7711;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7713;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 689, this.context) ) {
                case 1:
                    {
                    this.state = 7712;
                    this.opt_definition();
                    }
                    break;
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7715;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7716;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7717;
                this.name();
                this.state = 7718;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7719;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7720;
                this.publication_name_list();
                this.state = 7722;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 690, this.context) ) {
                case 1:
                    {
                    this.state = 7721;
                    this.opt_definition();
                    }
                    break;
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7724;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7725;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7726;
                this.name();
                this.state = 7727;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 7728;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7729;
                this.publication_name_list();
                this.state = 7731;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 691, this.context) ) {
                case 1:
                    {
                    this.state = 7730;
                    this.opt_definition();
                    }
                    break;
                }
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7733;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7734;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7735;
                this.name();
                this.state = 7736;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 7737;
                this.match(PostgreSqlParser.KW_PUBLICATION);
                this.state = 7738;
                this.publication_name_list();
                this.state = 7740;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 692, this.context) ) {
                case 1:
                    {
                    this.state = 7739;
                    this.opt_definition();
                    }
                    break;
                }
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7742;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7743;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7744;
                this.name();
                this.state = 7745;
                this.match(PostgreSqlParser.KW_ENABLE);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7747;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7748;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7749;
                this.name();
                this.state = 7750;
                this.match(PostgreSqlParser.KW_DISABLE);
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 7752;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7753;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7754;
                this.name();
                this.state = 7755;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 7756;
                this.definition();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 7758;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7759;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7760;
                this.name();
                this.state = 7761;
                this.match(PostgreSqlParser.KW_SKIP);
                this.state = 7762;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 7763;
                this.old_aggr_elem();
                this.state = 7764;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 7766;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 7767;
                this.match(PostgreSqlParser.KW_SUBSCRIPTION);
                this.state = 7768;
                this.name();
                this.state = 7769;
                this.match(PostgreSqlParser.KW_OWNER);
                this.state = 7770;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7771;
                this.rolespec();
                }
                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 rulestmt(): RulestmtContext {
        let localContext = new RulestmtContext(this.context, this.state);
        this.enterRule(localContext, 804, PostgreSqlParser.RULE_rulestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7775;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 7777;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 82) {
                {
                this.state = 7776;
                this.opt_or_replace();
                }
            }

            this.state = 7779;
            this.match(PostgreSqlParser.KW_RULE);
            this.state = 7780;
            this.name();
            this.state = 7781;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 7782;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 7783;
            this.event();
            this.state = 7784;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 7785;
            this.qualified_name();
            this.state = 7787;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 103) {
                {
                this.state = 7786;
                this.where_clause();
                }
            }

            this.state = 7789;
            this.match(PostgreSqlParser.KW_DO);
            this.state = 7791;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 137 || _la === 242) {
                {
                this.state = 7790;
                this.opt_instead();
                }
            }

            this.state = 7793;
            this.ruleactionlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public ruleactionlist(): RuleactionlistContext {
        let localContext = new RuleactionlistContext(this.context, this.state);
        this.enterRule(localContext, 806, PostgreSqlParser.RULE_ruleactionlist);
        try {
            this.state = 7801;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 697, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7795;
                this.match(PostgreSqlParser.KW_NOTHING);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7796;
                this.ruleactionstmt();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7797;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 7798;
                this.ruleactionmulti();
                this.state = 7799;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 ruleactionmulti(): RuleactionmultiContext {
        let localContext = new RuleactionmultiContext(this.context, this.state);
        this.enterRule(localContext, 808, PostgreSqlParser.RULE_ruleactionmulti);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7804;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2 || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 131089) !== 0) || _la === 182 || _la === 241 || _la === 271 || _la === 369 || _la === 422) {
                {
                this.state = 7803;
                this.ruleactionstmtOrEmpty();
                }
            }

            this.state = 7812;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 7) {
                {
                {
                this.state = 7806;
                this.match(PostgreSqlParser.SEMI);
                this.state = 7808;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2 || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 131089) !== 0) || _la === 182 || _la === 241 || _la === 271 || _la === 369 || _la === 422) {
                    {
                    this.state = 7807;
                    this.ruleactionstmtOrEmpty();
                    }
                }

                }
                }
                this.state = 7814;
                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 ruleactionstmt(): RuleactionstmtContext {
        let localContext = new RuleactionstmtContext(this.context, this.state);
        this.enterRule(localContext, 810, PostgreSqlParser.RULE_ruleactionstmt);
        try {
            this.state = 7820;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 701, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7815;
                this.selectstmt();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7816;
                this.insertstmt();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7817;
                this.updatestmt();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7818;
                this.deletestmt();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7819;
                this.notifystmt();
                }
                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 ruleactionstmtOrEmpty(): RuleactionstmtOrEmptyContext {
        let localContext = new RuleactionstmtOrEmptyContext(this.context, this.state);
        this.enterRule(localContext, 812, PostgreSqlParser.RULE_ruleactionstmtOrEmpty);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7822;
            this.ruleactionstmt();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public event(): EventContext {
        let localContext = new EventContext(this.context, this.state);
        this.enterRule(localContext, 814, PostgreSqlParser.RULE_event);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7824;
            _la = this.tokenStream.LA(1);
            if(!(_la === 88 || _la === 182 || _la === 241 || _la === 369)) {
            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 opt_instead(): Opt_insteadContext {
        let localContext = new Opt_insteadContext(this.context, this.state);
        this.enterRule(localContext, 816, PostgreSqlParser.RULE_opt_instead);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7826;
            _la = this.tokenStream.LA(1);
            if(!(_la === 137 || _la === 242)) {
            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 notifystmt(): NotifystmtContext {
        let localContext = new NotifystmtContext(this.context, this.state);
        this.enterRule(localContext, 818, PostgreSqlParser.RULE_notifystmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7828;
            this.match(PostgreSqlParser.KW_NOTIFY);
            this.state = 7829;
            this.colid();
            this.state = 7831;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 6) {
                {
                this.state = 7830;
                this.notify_payload();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public notify_payload(): Notify_payloadContext {
        let localContext = new Notify_payloadContext(this.context, this.state);
        this.enterRule(localContext, 820, PostgreSqlParser.RULE_notify_payload);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7833;
            this.match(PostgreSqlParser.COMMA);
            this.state = 7834;
            this.sconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public listenstmt(): ListenstmtContext {
        let localContext = new ListenstmtContext(this.context, this.state);
        this.enterRule(localContext, 822, PostgreSqlParser.RULE_listenstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7836;
            this.match(PostgreSqlParser.KW_LISTEN);
            this.state = 7837;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public unlistenstmt(): UnlistenstmtContext {
        let localContext = new UnlistenstmtContext(this.context, this.state);
        this.enterRule(localContext, 824, PostgreSqlParser.RULE_unlistenstmt);
        try {
            this.state = 7843;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 703, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7839;
                this.match(PostgreSqlParser.KW_UNLISTEN);
                this.state = 7840;
                this.colid();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7841;
                this.match(PostgreSqlParser.KW_UNLISTEN);
                this.state = 7842;
                this.match(PostgreSqlParser.STAR);
                }
                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 transactionstmt(): TransactionstmtContext {
        let localContext = new TransactionstmtContext(this.context, this.state);
        this.enterRule(localContext, 826, PostgreSqlParser.RULE_transactionstmt);
        let _la: number;
        try {
            this.state = 7910;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 718, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7845;
                this.match(PostgreSqlParser.KW_ABORT);
                this.state = 7847;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 704, this.context) ) {
                case 1:
                    {
                    this.state = 7846;
                    this.opt_transaction();
                    }
                    break;
                }
                this.state = 7850;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 705, this.context) ) {
                case 1:
                    {
                    this.state = 7849;
                    this.opt_transaction_chain();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7852;
                this.match(PostgreSqlParser.KW_BEGIN);
                this.state = 7854;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 706, this.context) ) {
                case 1:
                    {
                    this.state = 7853;
                    this.opt_transaction();
                    }
                    break;
                }
                this.state = 7857;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 707, this.context) ) {
                case 1:
                    {
                    this.state = 7856;
                    this.transaction_mode_list_or_empty();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7859;
                this.match(PostgreSqlParser.KW_START);
                this.state = 7860;
                this.match(PostgreSqlParser.KW_TRANSACTION);
                this.state = 7862;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 708, this.context) ) {
                case 1:
                    {
                    this.state = 7861;
                    this.transaction_mode_list_or_empty();
                    }
                    break;
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7864;
                this.match(PostgreSqlParser.KW_END);
                this.state = 7866;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 709, this.context) ) {
                case 1:
                    {
                    this.state = 7865;
                    this.opt_transaction();
                    }
                    break;
                }
                this.state = 7869;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 710, this.context) ) {
                case 1:
                    {
                    this.state = 7868;
                    this.opt_transaction_chain();
                    }
                    break;
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7871;
                this.match(PostgreSqlParser.KW_SAVEPOINT);
                this.state = 7872;
                this.colid();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7873;
                this.match(PostgreSqlParser.KW_RELEASE);
                this.state = 7875;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 711, this.context) ) {
                case 1:
                    {
                    this.state = 7874;
                    this.match(PostgreSqlParser.KW_SAVEPOINT);
                    }
                    break;
                }
                this.state = 7877;
                this.colid();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7878;
                this.match(PostgreSqlParser.KW_PREPARE);
                this.state = 7879;
                this.match(PostgreSqlParser.KW_TRANSACTION);
                this.state = 7880;
                this.sconst();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7881;
                this.match(PostgreSqlParser.KW_COMMIT);
                this.state = 7882;
                this.match(PostgreSqlParser.KW_PREPARED);
                this.state = 7883;
                this.sconst();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 7884;
                this.match(PostgreSqlParser.KW_COMMIT);
                this.state = 7886;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 712, this.context) ) {
                case 1:
                    {
                    this.state = 7885;
                    this.opt_transaction();
                    }
                    break;
                }
                this.state = 7889;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 713, this.context) ) {
                case 1:
                    {
                    this.state = 7888;
                    this.opt_transaction_chain();
                    }
                    break;
                }
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 7891;
                this.match(PostgreSqlParser.KW_ROLLBACK);
                this.state = 7892;
                this.match(PostgreSqlParser.KW_PREPARED);
                this.state = 7893;
                this.sconst();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 7894;
                this.match(PostgreSqlParser.KW_ROLLBACK);
                this.state = 7896;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 356 || _la === 380) {
                    {
                    this.state = 7895;
                    this.opt_transaction();
                    }
                }

                this.state = 7898;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 7900;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 715, this.context) ) {
                case 1:
                    {
                    this.state = 7899;
                    this.match(PostgreSqlParser.KW_SAVEPOINT);
                    }
                    break;
                }
                this.state = 7902;
                this.colid();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 7903;
                this.match(PostgreSqlParser.KW_ROLLBACK);
                this.state = 7905;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 716, this.context) ) {
                case 1:
                    {
                    this.state = 7904;
                    this.opt_transaction();
                    }
                    break;
                }
                this.state = 7908;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 717, this.context) ) {
                case 1:
                    {
                    this.state = 7907;
                    this.opt_transaction_chain();
                    }
                    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 opt_transaction(): Opt_transactionContext {
        let localContext = new Opt_transactionContext(this.context, this.state);
        this.enterRule(localContext, 828, PostgreSqlParser.RULE_opt_transaction);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7912;
            _la = this.tokenStream.LA(1);
            if(!(_la === 356 || _la === 380)) {
            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 transaction_mode_item(): Transaction_mode_itemContext {
        let localContext = new Transaction_mode_itemContext(this.context, this.state);
        this.enterRule(localContext, 830, PostgreSqlParser.RULE_transaction_mode_item);
        try {
            this.state = 7924;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 719, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7914;
                this.match(PostgreSqlParser.KW_ISOLATION);
                this.state = 7915;
                this.match(PostgreSqlParser.KW_LEVEL);
                this.state = 7916;
                this.iso_level();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7917;
                this.match(PostgreSqlParser.KW_READ);
                this.state = 7918;
                this.match(PostgreSqlParser.KW_ONLY);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7919;
                this.match(PostgreSqlParser.KW_READ);
                this.state = 7920;
                this.match(PostgreSqlParser.KW_WRITE);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7921;
                this.match(PostgreSqlParser.KW_DEFERRABLE);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7922;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 7923;
                this.match(PostgreSqlParser.KW_DEFERRABLE);
                }
                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 transaction_mode_list(): Transaction_mode_listContext {
        let localContext = new Transaction_mode_listContext(this.context, this.state);
        this.enterRule(localContext, 832, PostgreSqlParser.RULE_transaction_mode_list);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7926;
            this.transaction_mode_item();
            this.state = 7933;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 721, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 7928;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 6) {
                        {
                        this.state = 7927;
                        this.match(PostgreSqlParser.COMMA);
                        }
                    }

                    this.state = 7930;
                    this.transaction_mode_item();
                    }
                    }
                }
                this.state = 7935;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 721, 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 transaction_mode_list_or_empty(): Transaction_mode_list_or_emptyContext {
        let localContext = new Transaction_mode_list_or_emptyContext(this.context, this.state);
        this.enterRule(localContext, 834, PostgreSqlParser.RULE_transaction_mode_list_or_empty);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7936;
            this.transaction_mode_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_transaction_chain(): Opt_transaction_chainContext {
        let localContext = new Opt_transaction_chainContext(this.context, this.state);
        this.enterRule(localContext, 836, PostgreSqlParser.RULE_opt_transaction_chain);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7938;
            this.match(PostgreSqlParser.KW_AND);
            this.state = 7940;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 269) {
                {
                this.state = 7939;
                this.match(PostgreSqlParser.KW_NO);
                }
            }

            this.state = 7942;
            this.match(PostgreSqlParser.KW_CHAIN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public viewstmt(): ViewstmtContext {
        let localContext = new ViewstmtContext(this.context, this.state);
        this.enterRule(localContext, 838, PostgreSqlParser.RULE_viewstmt);
        let _la: number;
        try {
            localContext = new CreateViewContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7944;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 7947;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 82) {
                {
                this.state = 7945;
                this.match(PostgreSqlParser.KW_OR);
                this.state = 7946;
                this.match(PostgreSqlParser.KW_REPLACE);
                }
            }

            this.state = 7950;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 213 || _la === 254 || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 32773) !== 0)) {
                {
                this.state = 7949;
                this.opttemp();
                }
            }

            this.state = 7969;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_VIEW:
                {
                this.state = 7952;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 7953;
                this.view_name_create();
                this.state = 7955;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 7954;
                    this.opt_column_list_create();
                    }
                }

                this.state = 7958;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 105) {
                    {
                    this.state = 7957;
                    this.opt_reloptions();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_RECURSIVE:
                {
                this.state = 7960;
                this.match(PostgreSqlParser.KW_RECURSIVE);
                this.state = 7961;
                this.match(PostgreSqlParser.KW_VIEW);
                this.state = 7962;
                this.view_name_create();
                this.state = 7963;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 7964;
                this.column_list();
                this.state = 7965;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 7967;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 105) {
                    {
                    this.state = 7966;
                    this.opt_reloptions();
                    }
                }

                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 7971;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 7972;
            this.selectstmt();
            this.state = 7974;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 729, this.context) ) {
            case 1:
                {
                this.state = 7973;
                this.opt_check_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 opt_check_option(): Opt_check_optionContext {
        let localContext = new Opt_check_optionContext(this.context, this.state);
        this.enterRule(localContext, 840, PostgreSqlParser.RULE_opt_check_option);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7976;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 7978;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 151 || _la === 254) {
                {
                this.state = 7977;
                _la = this.tokenStream.LA(1);
                if(!(_la === 151 || _la === 254)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 7980;
            this.match(PostgreSqlParser.KW_CHECK);
            this.state = 7981;
            this.match(PostgreSqlParser.KW_OPTION);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public loadstmt(): LoadstmtContext {
        let localContext = new LoadstmtContext(this.context, this.state);
        this.enterRule(localContext, 842, PostgreSqlParser.RULE_loadstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7983;
            this.match(PostgreSqlParser.KW_LOAD);
            this.state = 7984;
            this.file_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createdbstmt(): CreatedbstmtContext {
        let localContext = new CreatedbstmtContext(this.context, this.state);
        this.enterRule(localContext, 844, PostgreSqlParser.RULE_createdbstmt);
        try {
            localContext = new CreateDatabaseContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7986;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 7987;
            this.match(PostgreSqlParser.KW_DATABASE);
            this.state = 7988;
            this.database_name_create();
            this.state = 7990;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 731, this.context) ) {
            case 1:
                {
                this.state = 7989;
                this.opt_with();
                }
                break;
            }
            this.state = 7993;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 732, this.context) ) {
            case 1:
                {
                this.state = 7992;
                this.createdb_opt_list();
                }
                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 createdb_opt_list(): Createdb_opt_listContext {
        let localContext = new Createdb_opt_listContext(this.context, this.state);
        this.enterRule(localContext, 846, PostgreSqlParser.RULE_createdb_opt_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7995;
            this.createdb_opt_items();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createdb_opt_items(): Createdb_opt_itemsContext {
        let localContext = new Createdb_opt_itemsContext(this.context, this.state);
        this.enterRule(localContext, 848, PostgreSqlParser.RULE_createdb_opt_items);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7998;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 7997;
                    this.createdb_opt_item();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 8000;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 733, 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 createdb_opt_item(): Createdb_opt_itemContext {
        let localContext = new Createdb_opt_itemContext(this.context, this.state);
        this.enterRule(localContext, 850, PostgreSqlParser.RULE_createdb_opt_item);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8002;
            this.createdb_opt_name();
            this.state = 8004;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 10) {
                {
                this.state = 8003;
                this.opt_equal();
                }
            }

            this.state = 8009;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 735, this.context) ) {
            case 1:
                {
                this.state = 8006;
                this.signediconst();
                }
                break;
            case 2:
                {
                this.state = 8007;
                this.opt_boolean_or_string();
                }
                break;
            case 3:
                {
                this.state = 8008;
                this.match(PostgreSqlParser.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 createdb_opt_name(): Createdb_opt_nameContext {
        let localContext = new Createdb_opt_nameContext(this.context, this.state);
        this.enterRule(localContext, 852, PostgreSqlParser.RULE_createdb_opt_name);
        try {
            this.state = 8019;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_CONNECTION:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8011;
                this.match(PostgreSqlParser.KW_CONNECTION);
                this.state = 8012;
                this.match(PostgreSqlParser.KW_LIMIT);
                }
                break;
            case PostgreSqlParser.KW_ENCODING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8013;
                this.match(PostgreSqlParser.KW_ENCODING);
                }
                break;
            case PostgreSqlParser.KW_LOCATION:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8014;
                this.match(PostgreSqlParser.KW_LOCATION);
                }
                break;
            case PostgreSqlParser.KW_OWNER:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8015;
                this.match(PostgreSqlParser.KW_OWNER);
                }
                break;
            case PostgreSqlParser.KW_TABLESPACE:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 8016;
                this.match(PostgreSqlParser.KW_TABLESPACE);
                }
                break;
            case PostgreSqlParser.KW_TEMPLATE:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 8017;
                this.match(PostgreSqlParser.KW_TEMPLATE);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 8018;
                this.identifier();
                }
                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 opt_equal(): Opt_equalContext {
        let localContext = new Opt_equalContext(this.context, this.state);
        this.enterRule(localContext, 854, PostgreSqlParser.RULE_opt_equal);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8021;
            this.match(PostgreSqlParser.EQUAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterdatabasestmt(): AlterdatabasestmtContext {
        let localContext = new AlterdatabasestmtContext(this.context, this.state);
        this.enterRule(localContext, 856, PostgreSqlParser.RULE_alterdatabasestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8023;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 8024;
            this.match(PostgreSqlParser.KW_DATABASE);
            this.state = 8025;
            this.database_name();
            this.state = 8037;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 740, this.context) ) {
            case 1:
                {
                this.state = 8029;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 737, this.context) ) {
                case 1:
                    {
                    this.state = 8026;
                    this.match(PostgreSqlParser.KW_SET);
                    this.state = 8027;
                    this.match(PostgreSqlParser.KW_TABLESPACE);
                    this.state = 8028;
                    this.tablespace_name_create();
                    }
                    break;
                }
                }
                break;
            case 2:
                {
                this.state = 8035;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 739, this.context) ) {
                case 1:
                    {
                    this.state = 8032;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 105) {
                        {
                        this.state = 8031;
                        this.match(PostgreSqlParser.KW_WITH);
                        }
                    }

                    this.state = 8034;
                    this.createdb_opt_list();
                    }
                    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 alterdatabasesetstmt(): AlterdatabasesetstmtContext {
        let localContext = new AlterdatabasesetstmtContext(this.context, this.state);
        this.enterRule(localContext, 858, PostgreSqlParser.RULE_alterdatabasesetstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8039;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 8040;
            this.match(PostgreSqlParser.KW_DATABASE);
            this.state = 8041;
            this.database_name();
            this.state = 8043;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 741, this.context) ) {
            case 1:
                {
                this.state = 8042;
                this.setresetclause();
                }
                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 drop_option_list(): Drop_option_listContext {
        let localContext = new Drop_option_listContext(this.context, this.state);
        this.enterRule(localContext, 860, PostgreSqlParser.RULE_drop_option_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8045;
            this.drop_option();
            this.state = 8050;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8046;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8047;
                this.drop_option();
                }
                }
                this.state = 8052;
                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 drop_option(): Drop_optionContext {
        let localContext = new Drop_optionContext(this.context, this.state);
        this.enterRule(localContext, 862, PostgreSqlParser.RULE_drop_option);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8053;
            this.match(PostgreSqlParser.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 altercollationstmt(): AltercollationstmtContext {
        let localContext = new AltercollationstmtContext(this.context, this.state);
        this.enterRule(localContext, 864, PostgreSqlParser.RULE_altercollationstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8055;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 8056;
            this.match(PostgreSqlParser.KW_COLLATION);
            this.state = 8057;
            this.any_name();
            this.state = 8058;
            this.match(PostgreSqlParser.KW_REFRESH);
            this.state = 8059;
            this.match(PostgreSqlParser.KW_VERSION);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public altersystemstmt(): AltersystemstmtContext {
        let localContext = new AltersystemstmtContext(this.context, this.state);
        this.enterRule(localContext, 866, PostgreSqlParser.RULE_altersystemstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8061;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 8062;
            this.match(PostgreSqlParser.KW_SYSTEM);
            this.state = 8063;
            _la = this.tokenStream.LA(1);
            if(!(_la === 313 || _la === 333)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 8064;
            this.generic_set();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createdomainstmt(): CreatedomainstmtContext {
        let localContext = new CreatedomainstmtContext(this.context, this.state);
        this.enterRule(localContext, 868, PostgreSqlParser.RULE_createdomainstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8066;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 8067;
            this.match(PostgreSqlParser.KW_DOMAIN);
            this.state = 8068;
            this.any_name();
            this.state = 8070;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 36) {
                {
                this.state = 8069;
                this.opt_as();
                }
            }

            this.state = 8072;
            this.typename();
            this.state = 8073;
            this.colquallist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterdomainstmt(): AlterdomainstmtContext {
        let localContext = new AlterdomainstmtContext(this.context, this.state);
        this.enterRule(localContext, 870, PostgreSqlParser.RULE_alterdomainstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8075;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 8076;
            this.match(PostgreSqlParser.KW_DOMAIN);
            this.state = 8077;
            this.any_name();
            this.state = 8099;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 746, this.context) ) {
            case 1:
                {
                this.state = 8078;
                this.alter_column_default();
                }
                break;
            case 2:
                {
                this.state = 8079;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 8080;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 8081;
                this.match(PostgreSqlParser.KW_NULL);
                }
                break;
            case 3:
                {
                this.state = 8082;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 8083;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 8084;
                this.match(PostgreSqlParser.KW_NULL);
                }
                break;
            case 4:
                {
                this.state = 8085;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 8086;
                this.tableconstraint();
                }
                break;
            case 5:
                {
                this.state = 8087;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 8088;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 8090;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 744, this.context) ) {
                case 1:
                    {
                    this.state = 8089;
                    this.opt_if_exists();
                    }
                    break;
                }
                this.state = 8092;
                this.name();
                this.state = 8094;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 745, this.context) ) {
                case 1:
                    {
                    this.state = 8093;
                    this.opt_drop_behavior();
                    }
                    break;
                }
                }
                break;
            case 6:
                {
                this.state = 8096;
                this.match(PostgreSqlParser.KW_VALIDATE);
                this.state = 8097;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 8098;
                this.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 opt_as(): Opt_asContext {
        let localContext = new Opt_asContext(this.context, this.state);
        this.enterRule(localContext, 872, PostgreSqlParser.RULE_opt_as);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8101;
            this.match(PostgreSqlParser.KW_AS);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public altertsdictionarystmt(): AltertsdictionarystmtContext {
        let localContext = new AltertsdictionarystmtContext(this.context, this.state);
        this.enterRule(localContext, 874, PostgreSqlParser.RULE_altertsdictionarystmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8103;
            this.match(PostgreSqlParser.KW_ALTER);
            this.state = 8104;
            this.match(PostgreSqlParser.KW_TEXT);
            this.state = 8105;
            this.match(PostgreSqlParser.KW_SEARCH);
            this.state = 8106;
            this.match(PostgreSqlParser.KW_DICTIONARY);
            this.state = 8107;
            this.any_name();
            this.state = 8108;
            this.definition();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public altertsconfigurationstmt(): AltertsconfigurationstmtContext {
        let localContext = new AltertsconfigurationstmtContext(this.context, this.state);
        this.enterRule(localContext, 876, PostgreSqlParser.RULE_altertsconfigurationstmt);
        let _la: number;
        try {
            this.state = 8173;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 748, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8110;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8111;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 8112;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 8113;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 8114;
                this.any_name();
                this.state = 8115;
                this.match(PostgreSqlParser.KW_ADD);
                this.state = 8116;
                this.match(PostgreSqlParser.KW_MAPPING);
                this.state = 8117;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 8118;
                this.name_list();
                this.state = 8119;
                this.any_with();
                this.state = 8120;
                this.any_name_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8122;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8123;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 8124;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 8125;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 8126;
                this.any_name();
                this.state = 8127;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8128;
                this.match(PostgreSqlParser.KW_MAPPING);
                this.state = 8129;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 8130;
                this.name_list();
                this.state = 8131;
                this.any_with();
                this.state = 8132;
                this.any_name_list();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8134;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8135;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 8136;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 8137;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 8138;
                this.any_name();
                this.state = 8139;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8140;
                this.match(PostgreSqlParser.KW_MAPPING);
                this.state = 8141;
                this.match(PostgreSqlParser.KW_REPLACE);
                this.state = 8142;
                this.any_name();
                this.state = 8143;
                this.any_with();
                this.state = 8144;
                this.any_name();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8146;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8147;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 8148;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 8149;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 8150;
                this.any_name();
                this.state = 8151;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8152;
                this.match(PostgreSqlParser.KW_MAPPING);
                this.state = 8153;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 8154;
                this.name_list();
                this.state = 8155;
                this.match(PostgreSqlParser.KW_REPLACE);
                this.state = 8156;
                this.any_name();
                this.state = 8157;
                this.any_with();
                this.state = 8158;
                this.any_name();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 8160;
                this.match(PostgreSqlParser.KW_ALTER);
                this.state = 8161;
                this.match(PostgreSqlParser.KW_TEXT);
                this.state = 8162;
                this.match(PostgreSqlParser.KW_SEARCH);
                this.state = 8163;
                this.match(PostgreSqlParser.KW_CONFIGURATION);
                this.state = 8164;
                this.any_name();
                this.state = 8165;
                this.match(PostgreSqlParser.KW_DROP);
                this.state = 8166;
                this.match(PostgreSqlParser.KW_MAPPING);
                this.state = 8168;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 220) {
                    {
                    this.state = 8167;
                    this.opt_if_exists();
                    }
                }

                this.state = 8170;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 8171;
                this.name_list();
                }
                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 any_with(): Any_withContext {
        let localContext = new Any_withContext(this.context, this.state);
        this.enterRule(localContext, 878, PostgreSqlParser.RULE_any_with);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8175;
            this.match(PostgreSqlParser.KW_WITH);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createconversionstmt(): CreateconversionstmtContext {
        let localContext = new CreateconversionstmtContext(this.context, this.state);
        this.enterRule(localContext, 880, PostgreSqlParser.RULE_createconversionstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8177;
            this.match(PostgreSqlParser.KW_CREATE);
            this.state = 8179;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 53) {
                {
                this.state = 8178;
                this.opt_default();
                }
            }

            this.state = 8181;
            this.match(PostgreSqlParser.KW_CONVERSION);
            this.state = 8182;
            this.any_name();
            this.state = 8183;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 8184;
            this.sconst();
            this.state = 8185;
            this.match(PostgreSqlParser.KW_TO);
            this.state = 8186;
            this.sconst();
            this.state = 8187;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 8188;
            this.any_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public clusterstmt(): ClusterstmtContext {
        let localContext = new ClusterstmtContext(this.context, this.state);
        this.enterRule(localContext, 882, PostgreSqlParser.RULE_clusterstmt);
        let _la: number;
        try {
            this.state = 8208;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 754, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8190;
                this.match(PostgreSqlParser.KW_CLUSTER);
                this.state = 8192;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 128) {
                    {
                    this.state = 8191;
                    this.opt_verbose();
                    }
                }

                this.state = 8194;
                this.table_name();
                this.state = 8196;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 8195;
                    this.cluster_index_specification();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8198;
                this.match(PostgreSqlParser.KW_CLUSTER);
                this.state = 8200;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 128) {
                    {
                    this.state = 8199;
                    this.opt_verbose();
                    }
                }

                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8202;
                this.match(PostgreSqlParser.KW_CLUSTER);
                this.state = 8203;
                this.opt_verbose_list();
                this.state = 8204;
                this.table_name();
                this.state = 8206;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 8205;
                    this.cluster_index_specification();
                    }
                }

                }
                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 opt_verbose_list(): Opt_verbose_listContext {
        let localContext = new Opt_verbose_listContext(this.context, this.state);
        this.enterRule(localContext, 884, PostgreSqlParser.RULE_opt_verbose_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8210;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 8211;
            this.opt_verbose();
            this.state = 8216;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8212;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8213;
                this.opt_verbose();
                }
                }
                this.state = 8218;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 8219;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cluster_index_specification(): Cluster_index_specificationContext {
        let localContext = new Cluster_index_specificationContext(this.context, this.state);
        this.enterRule(localContext, 886, PostgreSqlParser.RULE_cluster_index_specification);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8221;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 8222;
            this.name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public vacuumstmt(): VacuumstmtContext {
        let localContext = new VacuumstmtContext(this.context, this.state);
        this.enterRule(localContext, 888, PostgreSqlParser.RULE_vacuumstmt);
        let _la: number;
        try {
            this.state = 8250;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 763, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8224;
                this.match(PostgreSqlParser.KW_VACUUM);
                this.state = 8226;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 113) {
                    {
                    this.state = 8225;
                    this.opt_full();
                    }
                }

                this.state = 8229;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 112) {
                    {
                    this.state = 8228;
                    this.opt_freeze();
                    }
                }

                this.state = 8232;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 128) {
                    {
                    this.state = 8231;
                    this.opt_verbose();
                    }
                }

                this.state = 8235;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 759, this.context) ) {
                case 1:
                    {
                    this.state = 8234;
                    this.opt_analyze();
                    }
                    break;
                }
                this.state = 8238;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 760, this.context) ) {
                case 1:
                    {
                    this.state = 8237;
                    this.opt_vacuum_relation_list();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8240;
                this.match(PostgreSqlParser.KW_VACUUM);
                this.state = 8245;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 761, this.context) ) {
                case 1:
                    {
                    this.state = 8241;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 8242;
                    this.vac_analyze_option_list();
                    this.state = 8243;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                }
                this.state = 8248;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 762, this.context) ) {
                case 1:
                    {
                    this.state = 8247;
                    this.opt_vacuum_relation_list();
                    }
                    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 analyzestmt(): AnalyzestmtContext {
        let localContext = new AnalyzestmtContext(this.context, this.state);
        this.enterRule(localContext, 890, PostgreSqlParser.RULE_analyzestmt);
        let _la: number;
        try {
            this.state = 8266;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 767, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8252;
                this.analyze_keyword();
                this.state = 8254;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 128) {
                    {
                    this.state = 8253;
                    this.opt_verbose();
                    }
                }

                this.state = 8257;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 765, this.context) ) {
                case 1:
                    {
                    this.state = 8256;
                    this.opt_vacuum_relation_list();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8259;
                this.analyze_keyword();
                this.state = 8260;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8261;
                this.analyze_options_list();
                this.state = 8262;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 8264;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 766, this.context) ) {
                case 1:
                    {
                    this.state = 8263;
                    this.opt_vacuum_relation_list();
                    }
                    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 vac_analyze_option_list(): Vac_analyze_option_listContext {
        let localContext = new Vac_analyze_option_listContext(this.context, this.state);
        this.enterRule(localContext, 892, PostgreSqlParser.RULE_vac_analyze_option_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8268;
            this.vac_analyze_option_elem();
            this.state = 8273;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8269;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8270;
                this.vac_analyze_option_elem();
                }
                }
                this.state = 8275;
                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 analyze_keyword(): Analyze_keywordContext {
        let localContext = new Analyze_keywordContext(this.context, this.state);
        this.enterRule(localContext, 894, PostgreSqlParser.RULE_analyze_keyword);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8276;
            _la = this.tokenStream.LA(1);
            if(!(_la === 31 || _la === 32)) {
            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 vac_analyze_option_elem(): Vac_analyze_option_elemContext {
        let localContext = new Vac_analyze_option_elemContext(this.context, this.state);
        this.enterRule(localContext, 896, PostgreSqlParser.RULE_vac_analyze_option_elem);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8278;
            this.vac_analyze_option_name();
            this.state = 8280;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 12 || _la === 13 || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 420484101) !== 0) || ((((_la - 80)) & ~0x1F) === 0 && ((1 << (_la - 80)) & 4227928065) !== 0) || ((((_la - 112)) & ~0x1F) === 0 && ((1 << (_la - 112)) & 4294967295) !== 0) || ((((_la - 144)) & ~0x1F) === 0 && ((1 << (_la - 144)) & 4294967295) !== 0) || ((((_la - 176)) & ~0x1F) === 0 && ((1 << (_la - 176)) & 4294967295) !== 0) || ((((_la - 208)) & ~0x1F) === 0 && ((1 << (_la - 208)) & 3223322623) !== 0) || ((((_la - 240)) & ~0x1F) === 0 && ((1 << (_la - 240)) & 4294967295) !== 0) || ((((_la - 272)) & ~0x1F) === 0 && ((1 << (_la - 272)) & 4294967295) !== 0) || ((((_la - 304)) & ~0x1F) === 0 && ((1 << (_la - 304)) & 4294967295) !== 0) || ((((_la - 336)) & ~0x1F) === 0 && ((1 << (_la - 336)) & 4294967295) !== 0) || ((((_la - 368)) & ~0x1F) === 0 && ((1 << (_la - 368)) & 4294967295) !== 0) || ((((_la - 400)) & ~0x1F) === 0 && ((1 << (_la - 400)) & 4294967295) !== 0) || ((((_la - 432)) & ~0x1F) === 0 && ((1 << (_la - 432)) & 4290772991) !== 0) || ((((_la - 464)) & ~0x1F) === 0 && ((1 << (_la - 464)) & 4294967295) !== 0) || ((((_la - 496)) & ~0x1F) === 0 && ((1 << (_la - 496)) & 25165183) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 486582415) !== 0) || _la === 584) {
                {
                this.state = 8279;
                this.vac_analyze_option_arg();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public vac_analyze_option_name(): Vac_analyze_option_nameContext {
        let localContext = new Vac_analyze_option_nameContext(this.context, this.state);
        this.enterRule(localContext, 898, PostgreSqlParser.RULE_vac_analyze_option_name);
        try {
            this.state = 8284;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8282;
                this.nonreservedword();
                }
                break;
            case PostgreSqlParser.KW_ANALYSE:
            case PostgreSqlParser.KW_ANALYZE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8283;
                this.analyze_keyword();
                }
                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 vac_analyze_option_arg(): Vac_analyze_option_argContext {
        let localContext = new Vac_analyze_option_argContext(this.context, this.state);
        this.enterRule(localContext, 900, PostgreSqlParser.RULE_vac_analyze_option_arg);
        try {
            this.state = 8288;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_ON:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8286;
                this.opt_boolean_or_string();
                }
                break;
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8287;
                this.numericonly();
                }
                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 opt_analyze(): Opt_analyzeContext {
        let localContext = new Opt_analyzeContext(this.context, this.state);
        this.enterRule(localContext, 902, PostgreSqlParser.RULE_opt_analyze);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8290;
            this.analyze_keyword();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public analyze_options_list(): Analyze_options_listContext {
        let localContext = new Analyze_options_listContext(this.context, this.state);
        this.enterRule(localContext, 904, PostgreSqlParser.RULE_analyze_options_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8292;
            this.analyze_option_elem();
            this.state = 8297;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8293;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8294;
                this.analyze_option_elem();
                }
                }
                this.state = 8299;
                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 analyze_option_elem(): Analyze_option_elemContext {
        let localContext = new Analyze_option_elemContext(this.context, this.state);
        this.enterRule(localContext, 906, PostgreSqlParser.RULE_analyze_option_elem);
        try {
            this.state = 8303;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_VERBOSE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8300;
                this.opt_verbose();
                }
                break;
            case PostgreSqlParser.KW_SKIP_LOCKED:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8301;
                this.opt_skiplock();
                }
                break;
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8302;
                this.opt_buffer_usage_limit();
                }
                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 opt_verbose(): Opt_verboseContext {
        let localContext = new Opt_verboseContext(this.context, this.state);
        this.enterRule(localContext, 908, PostgreSqlParser.RULE_opt_verbose);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8305;
            this.match(PostgreSqlParser.KW_VERBOSE);
            this.state = 8307;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 60 || _la === 96) {
                {
                this.state = 8306;
                _la = this.tokenStream.LA(1);
                if(!(_la === 60 || _la === 96)) {
                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 opt_skiplock(): Opt_skiplockContext {
        let localContext = new Opt_skiplockContext(this.context, this.state);
        this.enterRule(localContext, 910, PostgreSqlParser.RULE_opt_skiplock);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8309;
            this.match(PostgreSqlParser.KW_SKIP_LOCKED);
            this.state = 8311;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 60 || _la === 96) {
                {
                this.state = 8310;
                _la = this.tokenStream.LA(1);
                if(!(_la === 60 || _la === 96)) {
                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 opt_buffer_usage_limit(): Opt_buffer_usage_limitContext {
        let localContext = new Opt_buffer_usage_limitContext(this.context, this.state);
        this.enterRule(localContext, 912, PostgreSqlParser.RULE_opt_buffer_usage_limit);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8313;
            this.match(PostgreSqlParser.KW_BUFFER_USAGE_LIMIT);
            this.state = 8316;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
                {
                this.state = 8314;
                this.numericonly();
                }
                break;
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 8315;
                this.sconst();
                }
                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 opt_full(): Opt_fullContext {
        let localContext = new Opt_fullContext(this.context, this.state);
        this.enterRule(localContext, 914, PostgreSqlParser.RULE_opt_full);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8318;
            this.match(PostgreSqlParser.KW_FULL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_freeze(): Opt_freezeContext {
        let localContext = new Opt_freezeContext(this.context, this.state);
        this.enterRule(localContext, 916, PostgreSqlParser.RULE_opt_freeze);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8320;
            this.match(PostgreSqlParser.KW_FREEZE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_name_list(): Opt_name_listContext {
        let localContext = new Opt_name_listContext(this.context, this.state);
        this.enterRule(localContext, 918, PostgreSqlParser.RULE_opt_name_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8322;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 8323;
            this.column_list();
            this.state = 8324;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public vacuum_relation(): Vacuum_relationContext {
        let localContext = new Vacuum_relationContext(this.context, this.state);
        this.enterRule(localContext, 920, PostgreSqlParser.RULE_vacuum_relation);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8326;
            this.table_name();
            this.state = 8328;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 777, this.context) ) {
            case 1:
                {
                this.state = 8327;
                this.opt_name_list();
                }
                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 vacuum_relation_list(): Vacuum_relation_listContext {
        let localContext = new Vacuum_relation_listContext(this.context, this.state);
        this.enterRule(localContext, 922, PostgreSqlParser.RULE_vacuum_relation_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8330;
            this.vacuum_relation();
            this.state = 8335;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8331;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8332;
                this.vacuum_relation();
                }
                }
                this.state = 8337;
                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 opt_vacuum_relation_list(): Opt_vacuum_relation_listContext {
        let localContext = new Opt_vacuum_relation_listContext(this.context, this.state);
        this.enterRule(localContext, 924, PostgreSqlParser.RULE_opt_vacuum_relation_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8338;
            this.vacuum_relation_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public explainstmt(): ExplainstmtContext {
        let localContext = new ExplainstmtContext(this.context, this.state);
        this.enterRule(localContext, 926, PostgreSqlParser.RULE_explainstmt);
        let _la: number;
        try {
            this.state = 8358;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 780, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8340;
                this.match(PostgreSqlParser.KW_EXPLAIN);
                this.state = 8341;
                this.explainablestmt();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8342;
                this.match(PostgreSqlParser.KW_EXPLAIN);
                this.state = 8343;
                this.analyze_keyword();
                this.state = 8345;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 128) {
                    {
                    this.state = 8344;
                    this.opt_verbose();
                    }
                }

                this.state = 8347;
                this.explainablestmt();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8349;
                this.match(PostgreSqlParser.KW_EXPLAIN);
                this.state = 8350;
                this.match(PostgreSqlParser.KW_VERBOSE);
                this.state = 8351;
                this.explainablestmt();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8352;
                this.match(PostgreSqlParser.KW_EXPLAIN);
                this.state = 8353;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8354;
                this.explain_option_list();
                this.state = 8355;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 8356;
                this.explainablestmt();
                }
                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 explainablestmt(): ExplainablestmtContext {
        let localContext = new ExplainablestmtContext(this.context, this.state);
        this.enterRule(localContext, 928, PostgreSqlParser.RULE_explainablestmt);
        try {
            this.state = 8369;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 781, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8360;
                this.selectstmt();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8361;
                this.insertstmt();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8362;
                this.updatestmt();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8363;
                this.deletestmt();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 8364;
                this.declarecursorstmt();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 8365;
                this.createasstmt();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 8366;
                this.creatematviewstmt();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 8367;
                this.refreshmatviewstmt();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 8368;
                this.executestmt();
                }
                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 explain_option_list(): Explain_option_listContext {
        let localContext = new Explain_option_listContext(this.context, this.state);
        this.enterRule(localContext, 930, PostgreSqlParser.RULE_explain_option_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8371;
            this.explain_option_elem();
            this.state = 8376;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8372;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8373;
                this.explain_option_elem();
                }
                }
                this.state = 8378;
                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 explain_option_elem(): Explain_option_elemContext {
        let localContext = new Explain_option_elemContext(this.context, this.state);
        this.enterRule(localContext, 932, PostgreSqlParser.RULE_explain_option_elem);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8379;
            this.explain_option_name();
            this.state = 8381;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 12 || _la === 13 || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 420484101) !== 0) || ((((_la - 80)) & ~0x1F) === 0 && ((1 << (_la - 80)) & 4227928065) !== 0) || ((((_la - 112)) & ~0x1F) === 0 && ((1 << (_la - 112)) & 4294967295) !== 0) || ((((_la - 144)) & ~0x1F) === 0 && ((1 << (_la - 144)) & 4294967295) !== 0) || ((((_la - 176)) & ~0x1F) === 0 && ((1 << (_la - 176)) & 4294967295) !== 0) || ((((_la - 208)) & ~0x1F) === 0 && ((1 << (_la - 208)) & 3223322623) !== 0) || ((((_la - 240)) & ~0x1F) === 0 && ((1 << (_la - 240)) & 4294967295) !== 0) || ((((_la - 272)) & ~0x1F) === 0 && ((1 << (_la - 272)) & 4294967295) !== 0) || ((((_la - 304)) & ~0x1F) === 0 && ((1 << (_la - 304)) & 4294967295) !== 0) || ((((_la - 336)) & ~0x1F) === 0 && ((1 << (_la - 336)) & 4294967295) !== 0) || ((((_la - 368)) & ~0x1F) === 0 && ((1 << (_la - 368)) & 4294967295) !== 0) || ((((_la - 400)) & ~0x1F) === 0 && ((1 << (_la - 400)) & 4294967295) !== 0) || ((((_la - 432)) & ~0x1F) === 0 && ((1 << (_la - 432)) & 4290772991) !== 0) || ((((_la - 464)) & ~0x1F) === 0 && ((1 << (_la - 464)) & 4294967295) !== 0) || ((((_la - 496)) & ~0x1F) === 0 && ((1 << (_la - 496)) & 25165183) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 486582415) !== 0) || _la === 584) {
                {
                this.state = 8380;
                this.explain_option_arg();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public explain_option_name(): Explain_option_nameContext {
        let localContext = new Explain_option_nameContext(this.context, this.state);
        this.enterRule(localContext, 934, PostgreSqlParser.RULE_explain_option_name);
        try {
            this.state = 8385;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8383;
                this.nonreservedword();
                }
                break;
            case PostgreSqlParser.KW_ANALYSE:
            case PostgreSqlParser.KW_ANALYZE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8384;
                this.analyze_keyword();
                }
                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 explain_option_arg(): Explain_option_argContext {
        let localContext = new Explain_option_argContext(this.context, this.state);
        this.enterRule(localContext, 936, PostgreSqlParser.RULE_explain_option_arg);
        try {
            this.state = 8389;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_ON:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8387;
                this.opt_boolean_or_string();
                }
                break;
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8388;
                this.numericonly();
                }
                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 preparestmt(): PreparestmtContext {
        let localContext = new PreparestmtContext(this.context, this.state);
        this.enterRule(localContext, 938, PostgreSqlParser.RULE_preparestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8391;
            this.match(PostgreSqlParser.KW_PREPARE);
            this.state = 8392;
            this.name();
            this.state = 8394;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 8393;
                this.prep_type_clause();
                }
            }

            this.state = 8396;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 8397;
            this.preparablestmt();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public prep_type_clause(): Prep_type_clauseContext {
        let localContext = new Prep_type_clauseContext(this.context, this.state);
        this.enterRule(localContext, 940, PostgreSqlParser.RULE_prep_type_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8399;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 8400;
            this.type_list();
            this.state = 8401;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public preparablestmt(): PreparablestmtContext {
        let localContext = new PreparablestmtContext(this.context, this.state);
        this.enterRule(localContext, 942, PostgreSqlParser.RULE_preparablestmt);
        try {
            this.state = 8407;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 787, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8403;
                this.selectstmt();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8404;
                this.insertstmt();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8405;
                this.updatestmt();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8406;
                this.deletestmt();
                }
                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 executestmt(): ExecutestmtContext {
        let localContext = new ExecutestmtContext(this.context, this.state);
        this.enterRule(localContext, 944, PostgreSqlParser.RULE_executestmt);
        let _la: number;
        try {
            this.state = 8432;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_EXECUTE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8409;
                this.match(PostgreSqlParser.KW_EXECUTE);
                this.state = 8410;
                this.name();
                this.state = 8412;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 788, this.context) ) {
                case 1:
                    {
                    this.state = 8411;
                    this.execute_param_clause();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_CREATE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8414;
                this.match(PostgreSqlParser.KW_CREATE);
                this.state = 8416;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 213 || _la === 254 || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 32773) !== 0)) {
                    {
                    this.state = 8415;
                    this.opttemp();
                    }
                }

                this.state = 8418;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 8420;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 790, this.context) ) {
                case 1:
                    {
                    this.state = 8419;
                    this.opt_if_not_exists();
                    }
                    break;
                }
                this.state = 8422;
                this.create_as_target();
                this.state = 8423;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 8424;
                this.match(PostgreSqlParser.KW_EXECUTE);
                this.state = 8425;
                this.name();
                this.state = 8427;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 791, this.context) ) {
                case 1:
                    {
                    this.state = 8426;
                    this.execute_param_clause();
                    }
                    break;
                }
                this.state = 8430;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 792, this.context) ) {
                case 1:
                    {
                    this.state = 8429;
                    this.opt_with_data();
                    }
                    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 execute_param_clause(): Execute_param_clauseContext {
        let localContext = new Execute_param_clauseContext(this.context, this.state);
        this.enterRule(localContext, 946, PostgreSqlParser.RULE_execute_param_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8434;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 8435;
            this.expr_list();
            this.state = 8436;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public deallocatestmt(): DeallocatestmtContext {
        let localContext = new DeallocatestmtContext(this.context, this.state);
        this.enterRule(localContext, 948, PostgreSqlParser.RULE_deallocatestmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8438;
            this.match(PostgreSqlParser.KW_DEALLOCATE);
            this.state = 8440;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 794, this.context) ) {
            case 1:
                {
                this.state = 8439;
                this.match(PostgreSqlParser.KW_PREPARE);
                }
                break;
            }
            this.state = 8444;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 8442;
                this.name();
                }
                break;
            case PostgreSqlParser.KW_ALL:
                {
                this.state = 8443;
                this.match(PostgreSqlParser.KW_ALL);
                }
                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 insertstmt(): InsertstmtContext {
        let localContext = new InsertstmtContext(this.context, this.state);
        this.enterRule(localContext, 950, PostgreSqlParser.RULE_insertstmt);
        let _la: number;
        try {
            localContext = new InsertStatementContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8447;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105) {
                {
                this.state = 8446;
                this.opt_with_clause();
                }
            }

            this.state = 8449;
            this.match(PostgreSqlParser.KW_INSERT);
            this.state = 8450;
            this.match(PostgreSqlParser.KW_INTO);
            this.state = 8451;
            this.insert_target();
            this.state = 8452;
            this.insert_rest();
            this.state = 8454;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 80) {
                {
                this.state = 8453;
                this.opt_on_conflict();
                }
            }

            this.state = 8457;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 87) {
                {
                this.state = 8456;
                this.returning_clause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public insert_target(): Insert_targetContext {
        let localContext = new Insert_targetContext(this.context, this.state);
        this.enterRule(localContext, 952, PostgreSqlParser.RULE_insert_target);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8459;
            this.table_name();
            this.state = 8462;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 36) {
                {
                this.state = 8460;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 8461;
                this.colid();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public insert_rest(): Insert_restContext {
        let localContext = new Insert_restContext(this.context, this.state);
        this.enterRule(localContext, 954, PostgreSqlParser.RULE_insert_rest);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8468;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 800, this.context) ) {
            case 1:
                {
                this.state = 8464;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8465;
                this.insert_column_list();
                this.state = 8466;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            }
            this.state = 8474;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 463) {
                {
                this.state = 8470;
                this.match(PostgreSqlParser.KW_OVERRIDING);
                this.state = 8471;
                this.override_kind();
                this.state = 8472;
                this.match(PostgreSqlParser.KW_VALUE);
                }
            }

            this.state = 8478;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 802, this.context) ) {
            case 1:
                {
                this.state = 8476;
                this.default_values_or_values();
                }
                break;
            case 2:
                {
                this.state = 8477;
                this.selectstmt();
                }
                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 override_kind(): Override_kindContext {
        let localContext = new Override_kindContext(this.context, this.state);
        this.enterRule(localContext, 956, PostgreSqlParser.RULE_override_kind);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8480;
            _la = this.tokenStream.LA(1);
            if(!(_la === 99 || _la === 349)) {
            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 insert_column_list(): Insert_column_listContext {
        let localContext = new Insert_column_listContext(this.context, this.state);
        this.enterRule(localContext, 958, PostgreSqlParser.RULE_insert_column_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8482;
            this.insert_column_item();
            this.state = 8487;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8483;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8484;
                this.insert_column_item();
                }
                }
                this.state = 8489;
                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 insert_column_item(): Insert_column_itemContext {
        let localContext = new Insert_column_itemContext(this.context, this.state);
        this.enterRule(localContext, 960, PostgreSqlParser.RULE_insert_column_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8490;
            this.column_name();
            this.state = 8491;
            this.opt_indirection();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_on_conflict(): Opt_on_conflictContext {
        let localContext = new Opt_on_conflictContext(this.context, this.state);
        this.enterRule(localContext, 962, PostgreSqlParser.RULE_opt_on_conflict);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8493;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 8494;
            this.match(PostgreSqlParser.KW_CONFLICT);
            this.state = 8496;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2 || _la === 80) {
                {
                this.state = 8495;
                this.opt_conf_expr();
                }
            }

            this.state = 8498;
            this.match(PostgreSqlParser.KW_DO);
            this.state = 8506;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_UPDATE:
                {
                this.state = 8499;
                this.match(PostgreSqlParser.KW_UPDATE);
                this.state = 8500;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 8501;
                this.set_clause_list();
                this.state = 8503;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 103) {
                    {
                    this.state = 8502;
                    this.where_clause();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_NOTHING:
                {
                this.state = 8505;
                this.match(PostgreSqlParser.KW_NOTHING);
                }
                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 opt_conf_expr(): Opt_conf_exprContext {
        let localContext = new Opt_conf_exprContext(this.context, this.state);
        this.enterRule(localContext, 964, PostgreSqlParser.RULE_opt_conf_expr);
        let _la: number;
        try {
            this.state = 8517;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.OPEN_PAREN:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8508;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8509;
                this.index_params();
                this.state = 8510;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 8512;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 103) {
                    {
                    this.state = 8511;
                    this.where_clause();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_ON:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8514;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 8515;
                this.match(PostgreSqlParser.KW_CONSTRAINT);
                this.state = 8516;
                this.name();
                }
                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 returning_clause(): Returning_clauseContext {
        let localContext = new Returning_clauseContext(this.context, this.state);
        this.enterRule(localContext, 966, PostgreSqlParser.RULE_returning_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8519;
            this.match(PostgreSqlParser.KW_RETURNING);
            this.state = 8520;
            this.target_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public deletestmt(): DeletestmtContext {
        let localContext = new DeletestmtContext(this.context, this.state);
        this.enterRule(localContext, 968, PostgreSqlParser.RULE_deletestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8523;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105) {
                {
                this.state = 8522;
                this.opt_with_clause();
                }
            }

            this.state = 8525;
            this.match(PostgreSqlParser.KW_DELETE);
            this.state = 8526;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 8527;
            this.relation_expr_opt_alias();
            this.state = 8529;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 8528;
                this.using_clause();
                }
            }

            this.state = 8532;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 103) {
                {
                this.state = 8531;
                this.where_or_current_clause();
                }
            }

            this.state = 8535;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 87) {
                {
                this.state = 8534;
                this.returning_clause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public using_clause(): Using_clauseContext {
        let localContext = new Using_clauseContext(this.context, this.state);
        this.enterRule(localContext, 970, PostgreSqlParser.RULE_using_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8537;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 8538;
            this.from_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lockstmt(): LockstmtContext {
        let localContext = new LockstmtContext(this.context, this.state);
        this.enterRule(localContext, 972, PostgreSqlParser.RULE_lockstmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8540;
            this.match(PostgreSqlParser.KW_LOCK);
            this.state = 8542;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 813, this.context) ) {
            case 1:
                {
                this.state = 8541;
                this.opt_table();
                }
                break;
            }
            this.state = 8544;
            this.relation_expr_list();
            this.state = 8546;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 68) {
                {
                this.state = 8545;
                this.opt_lock();
                }
            }

            this.state = 8549;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 815, this.context) ) {
            case 1:
                {
                this.state = 8548;
                this.opt_nowait();
                }
                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 opt_lock(): Opt_lockContext {
        let localContext = new Opt_lockContext(this.context, this.state);
        this.enterRule(localContext, 974, PostgreSqlParser.RULE_opt_lock);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8551;
            this.match(PostgreSqlParser.KW_IN);
            this.state = 8552;
            this.lock_type();
            this.state = 8553;
            this.match(PostgreSqlParser.KW_MODE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lock_type(): Lock_typeContext {
        let localContext = new Lock_typeContext(this.context, this.state);
        this.enterRule(localContext, 976, PostgreSqlParser.RULE_lock_type);
        let _la: number;
        try {
            this.state = 8567;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ACCESS:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8555;
                this.match(PostgreSqlParser.KW_ACCESS);
                this.state = 8556;
                _la = this.tokenStream.LA(1);
                if(!(_la === 201 || _la === 334)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case PostgreSqlParser.KW_ROW:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8557;
                this.match(PostgreSqlParser.KW_ROW);
                this.state = 8558;
                _la = this.tokenStream.LA(1);
                if(!(_la === 201 || _la === 334)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case PostgreSqlParser.KW_SHARE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8559;
                this.match(PostgreSqlParser.KW_SHARE);
                this.state = 8564;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_UPDATE:
                    {
                    this.state = 8560;
                    this.match(PostgreSqlParser.KW_UPDATE);
                    this.state = 8561;
                    this.match(PostgreSqlParser.KW_EXCLUSIVE);
                    }
                    break;
                case PostgreSqlParser.KW_ROW:
                    {
                    this.state = 8562;
                    this.match(PostgreSqlParser.KW_ROW);
                    this.state = 8563;
                    this.match(PostgreSqlParser.KW_EXCLUSIVE);
                    }
                    break;
                case PostgreSqlParser.KW_MODE:
                    break;
                default:
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_EXCLUSIVE:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8566;
                this.match(PostgreSqlParser.KW_EXCLUSIVE);
                }
                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 opt_nowait(): Opt_nowaitContext {
        let localContext = new Opt_nowaitContext(this.context, this.state);
        this.enterRule(localContext, 978, PostgreSqlParser.RULE_opt_nowait);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8569;
            this.match(PostgreSqlParser.KW_NOWAIT);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_nowait_or_skip(): Opt_nowait_or_skipContext {
        let localContext = new Opt_nowait_or_skipContext(this.context, this.state);
        this.enterRule(localContext, 980, PostgreSqlParser.RULE_opt_nowait_or_skip);
        try {
            this.state = 8574;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_NOWAIT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8571;
                this.match(PostgreSqlParser.KW_NOWAIT);
                }
                break;
            case PostgreSqlParser.KW_SKIP:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8572;
                this.match(PostgreSqlParser.KW_SKIP);
                this.state = 8573;
                this.match(PostgreSqlParser.KW_LOCKED);
                }
                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 updatestmt(): UpdatestmtContext {
        let localContext = new UpdatestmtContext(this.context, this.state);
        this.enterRule(localContext, 982, PostgreSqlParser.RULE_updatestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8577;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105) {
                {
                this.state = 8576;
                this.opt_with_clause();
                }
            }

            this.state = 8579;
            this.match(PostgreSqlParser.KW_UPDATE);
            this.state = 8580;
            this.relation_expr_opt_alias();
            this.state = 8581;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 8582;
            this.set_clause_list();
            this.state = 8584;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 64) {
                {
                this.state = 8583;
                this.from_clause();
                }
            }

            this.state = 8587;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 103) {
                {
                this.state = 8586;
                this.where_or_current_clause();
                }
            }

            this.state = 8590;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 87) {
                {
                this.state = 8589;
                this.returning_clause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public set_clause_list(): Set_clause_listContext {
        let localContext = new Set_clause_listContext(this.context, this.state);
        this.enterRule(localContext, 984, PostgreSqlParser.RULE_set_clause_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8592;
            this.set_clause();
            this.state = 8597;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8593;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8594;
                this.set_clause();
                }
                }
                this.state = 8599;
                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 set_clause(): Set_clauseContext {
        let localContext = new Set_clauseContext(this.context, this.state);
        this.enterRule(localContext, 986, PostgreSqlParser.RULE_set_clause);
        try {
            this.state = 8618;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 826, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8600;
                this.set_target();
                this.state = 8601;
                this.match(PostgreSqlParser.EQUAL);
                this.state = 8602;
                this.a_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8604;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8605;
                this.set_target_list();
                this.state = 8606;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 8607;
                this.match(PostgreSqlParser.EQUAL);
                this.state = 8616;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 825, this.context) ) {
                case 1:
                    {
                    this.state = 8609;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 824, this.context) ) {
                    case 1:
                        {
                        this.state = 8608;
                        this.match(PostgreSqlParser.KW_ROW);
                        }
                        break;
                    }
                    this.state = 8611;
                    this.a_expr();
                    }
                    break;
                case 2:
                    {
                    this.state = 8612;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 8613;
                    this.select_clause();
                    this.state = 8614;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    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 set_target(): Set_targetContext {
        let localContext = new Set_targetContext(this.context, this.state);
        this.enterRule(localContext, 988, PostgreSqlParser.RULE_set_target);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8620;
            this.column_name();
            this.state = 8621;
            this.opt_indirection();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public set_target_list(): Set_target_listContext {
        let localContext = new Set_target_listContext(this.context, this.state);
        this.enterRule(localContext, 990, PostgreSqlParser.RULE_set_target_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8623;
            this.set_target();
            this.state = 8628;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8624;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8625;
                this.set_target();
                }
                }
                this.state = 8630;
                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 declarecursorstmt(): DeclarecursorstmtContext {
        let localContext = new DeclarecursorstmtContext(this.context, this.state);
        this.enterRule(localContext, 992, PostgreSqlParser.RULE_declarecursorstmt);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8631;
            this.match(PostgreSqlParser.KW_DECLARE);
            this.state = 8632;
            this.cursor_name();
            this.state = 8633;
            this.cursor_options();
            this.state = 8634;
            this.match(PostgreSqlParser.KW_CURSOR);
            this.state = 8635;
            this.opt_hold();
            this.state = 8636;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 8637;
            this.selectstmt();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cursor_name(): Cursor_nameContext {
        let localContext = new Cursor_nameContext(this.context, this.state);
        this.enterRule(localContext, 994, PostgreSqlParser.RULE_cursor_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8639;
            this.name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cursor_options(): Cursor_optionsContext {
        let localContext = new Cursor_optionsContext(this.context, this.state);
        this.enterRule(localContext, 996, PostgreSqlParser.RULE_cursor_options);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8648;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 107 || _la === 240 || _la === 269 || _la === 324) {
                {
                this.state = 8646;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_NO:
                    {
                    this.state = 8641;
                    this.match(PostgreSqlParser.KW_NO);
                    this.state = 8642;
                    this.match(PostgreSqlParser.KW_SCROLL);
                    }
                    break;
                case PostgreSqlParser.KW_SCROLL:
                    {
                    this.state = 8643;
                    this.match(PostgreSqlParser.KW_SCROLL);
                    }
                    break;
                case PostgreSqlParser.KW_BINARY:
                    {
                    this.state = 8644;
                    this.match(PostgreSqlParser.KW_BINARY);
                    }
                    break;
                case PostgreSqlParser.KW_INSENSITIVE:
                    {
                    this.state = 8645;
                    this.match(PostgreSqlParser.KW_INSENSITIVE);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                this.state = 8650;
                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 opt_hold(): Opt_holdContext {
        let localContext = new Opt_holdContext(this.context, this.state);
        this.enterRule(localContext, 998, PostgreSqlParser.RULE_opt_hold);
        try {
            this.state = 8656;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FOR:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_WITH:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8652;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 8653;
                this.match(PostgreSqlParser.KW_HOLD);
                }
                break;
            case PostgreSqlParser.KW_WITHOUT:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8654;
                this.match(PostgreSqlParser.KW_WITHOUT);
                this.state = 8655;
                this.match(PostgreSqlParser.KW_HOLD);
                }
                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 selectstmt(): SelectstmtContext {
        let localContext = new SelectstmtContext(this.context, this.state);
        this.enterRule(localContext, 1000, PostgreSqlParser.RULE_selectstmt);
        try {
            this.state = 8660;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 831, this.context) ) {
            case 1:
                localContext = new SelectStatementContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8658;
                this.select_no_parens();
                }
                break;
            case 2:
                localContext = new SelectStatementContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8659;
                this.select_with_parens();
                }
                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 select_with_parens(): Select_with_parensContext {
        let localContext = new Select_with_parensContext(this.context, this.state);
        this.enterRule(localContext, 1002, PostgreSqlParser.RULE_select_with_parens);
        try {
            this.state = 8670;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 832, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8662;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8663;
                this.select_no_parens();
                this.state = 8664;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8666;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8667;
                this.select_with_parens();
                this.state = 8668;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 select_no_parens(): Select_no_parensContext {
        let localContext = new Select_no_parensContext(this.context, this.state);
        this.enterRule(localContext, 1004, PostgreSqlParser.RULE_select_no_parens);
        let _la: number;
        try {
            this.state = 8701;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.OPEN_PAREN:
            case PostgreSqlParser.KW_SELECT:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_VALUES:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8672;
                this.select_clause();
                this.state = 8674;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 83) {
                    {
                    this.state = 8673;
                    this.opt_sort_clause();
                    }
                }

                this.state = 8684;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 836, this.context) ) {
                case 1:
                    {
                    this.state = 8676;
                    this.for_locking_clause();
                    this.state = 8678;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 834, this.context) ) {
                    case 1:
                        {
                        this.state = 8677;
                        this.opt_select_limit();
                        }
                        break;
                    }
                    }
                    break;
                case 2:
                    {
                    this.state = 8680;
                    this.select_limit();
                    this.state = 8682;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 62) {
                        {
                        this.state = 8681;
                        this.opt_for_locking_clause();
                        }
                    }

                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_WITH:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8686;
                this.with_clause();
                this.state = 8687;
                this.select_clause();
                this.state = 8689;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 83) {
                    {
                    this.state = 8688;
                    this.opt_sort_clause();
                    }
                }

                this.state = 8699;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 840, this.context) ) {
                case 1:
                    {
                    this.state = 8691;
                    this.for_locking_clause();
                    this.state = 8693;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 838, this.context) ) {
                    case 1:
                        {
                        this.state = 8692;
                        this.opt_select_limit();
                        }
                        break;
                    }
                    }
                    break;
                case 2:
                    {
                    this.state = 8695;
                    this.select_limit();
                    this.state = 8697;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 62) {
                        {
                        this.state = 8696;
                        this.opt_for_locking_clause();
                        }
                    }

                    }
                    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 select_clause(): Select_clauseContext {
        let localContext = new Select_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1006, PostgreSqlParser.RULE_select_clause);
        try {
            this.state = 8705;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 842, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8703;
                this.simple_select();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8704;
                this.select_with_parens();
                }
                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 simple_select(): Simple_selectContext {
        let localContext = new Simple_selectContext(this.context, this.state);
        this.enterRule(localContext, 1008, PostgreSqlParser.RULE_simple_select);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8752;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SELECT:
                {
                this.state = 8707;
                this.match(PostgreSqlParser.KW_SELECT);
                this.state = 8723;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 848, this.context) ) {
                case 1:
                    {
                    this.state = 8709;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 843, this.context) ) {
                    case 1:
                        {
                        this.state = 8708;
                        this.opt_all_clause();
                        }
                        break;
                    }
                    this.state = 8712;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 844, this.context) ) {
                    case 1:
                        {
                        this.state = 8711;
                        this.into_clause();
                        }
                        break;
                    }
                    this.state = 8715;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 845, this.context) ) {
                    case 1:
                        {
                        this.state = 8714;
                        this.opt_target_list();
                        }
                        break;
                    }
                    }
                    break;
                case 2:
                    {
                    this.state = 8718;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 846, this.context) ) {
                    case 1:
                        {
                        this.state = 8717;
                        this.distinct_clause();
                        }
                        break;
                    }
                    this.state = 8721;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 847, this.context) ) {
                    case 1:
                        {
                        this.state = 8720;
                        this.target_list();
                        }
                        break;
                    }
                    }
                    break;
                }
                this.state = 8726;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 849, this.context) ) {
                case 1:
                    {
                    this.state = 8725;
                    this.into_clause();
                    }
                    break;
                }
                this.state = 8729;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 64) {
                    {
                    this.state = 8728;
                    this.from_clause();
                    }
                }

                this.state = 8732;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 103) {
                    {
                    this.state = 8731;
                    this.where_clause();
                    }
                }

                this.state = 8735;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 66) {
                    {
                    this.state = 8734;
                    this.group_clause();
                    }
                }

                this.state = 8738;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 67) {
                    {
                    this.state = 8737;
                    this.having_clause();
                    }
                }

                this.state = 8741;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 854, this.context) ) {
                case 1:
                    {
                    this.state = 8740;
                    this.window_clause();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_VALUES:
                {
                this.state = 8743;
                this.values_clause();
                }
                break;
            case PostgreSqlParser.KW_TABLE:
                {
                this.state = 8744;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 8745;
                this.relation_expr();
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
                {
                this.state = 8746;
                this.select_with_parens();
                this.state = 8747;
                this.set_operator_with_all_or_distinct();
                this.state = 8750;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 855, this.context) ) {
                case 1:
                    {
                    this.state = 8748;
                    this.simple_select();
                    }
                    break;
                case 2:
                    {
                    this.state = 8749;
                    this.select_with_parens();
                    }
                    break;
                }
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 8761;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 858, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 8754;
                    this.set_operator_with_all_or_distinct();
                    this.state = 8757;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 857, this.context) ) {
                    case 1:
                        {
                        this.state = 8755;
                        this.simple_select();
                        }
                        break;
                    case 2:
                        {
                        this.state = 8756;
                        this.select_with_parens();
                        }
                        break;
                    }
                    }
                    }
                }
                this.state = 8763;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 858, 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 set_operator(): Set_operatorContext {
        let localContext = new Set_operatorContext(this.context, this.state);
        this.enterRule(localContext, 1010, PostgreSqlParser.RULE_set_operator);
        try {
            this.state = 8767;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_UNION:
                localContext = new UnionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8764;
                this.match(PostgreSqlParser.KW_UNION);
                }
                break;
            case PostgreSqlParser.KW_INTERSECT:
                localContext = new IntersectContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8765;
                this.match(PostgreSqlParser.KW_INTERSECT);
                }
                break;
            case PostgreSqlParser.KW_EXCEPT:
                localContext = new ExceptContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8766;
                this.match(PostgreSqlParser.KW_EXCEPT);
                }
                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 set_operator_with_all_or_distinct(): Set_operator_with_all_or_distinctContext {
        let localContext = new Set_operator_with_all_or_distinctContext(this.context, this.state);
        this.enterRule(localContext, 1012, PostgreSqlParser.RULE_set_operator_with_all_or_distinct);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8769;
            this.set_operator();
            this.state = 8771;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 30 || _la === 56) {
                {
                this.state = 8770;
                this.all_or_distinct();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public with_clause(): With_clauseContext {
        let localContext = new With_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1014, PostgreSqlParser.RULE_with_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8773;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 8775;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 861, this.context) ) {
            case 1:
                {
                this.state = 8774;
                this.match(PostgreSqlParser.KW_RECURSIVE);
                }
                break;
            }
            this.state = 8777;
            this.cte_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cte_list(): Cte_listContext {
        let localContext = new Cte_listContext(this.context, this.state);
        this.enterRule(localContext, 1016, PostgreSqlParser.RULE_cte_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8779;
            this.common_table_expr();
            this.state = 8784;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 862, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 8780;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 8781;
                    this.common_table_expr();
                    }
                    }
                }
                this.state = 8786;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 862, 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 common_table_expr(): Common_table_exprContext {
        let localContext = new Common_table_exprContext(this.context, this.state);
        this.enterRule(localContext, 1018, PostgreSqlParser.RULE_common_table_expr);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8787;
            this.name();
            this.state = 8789;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 8788;
                this.opt_name_list();
                }
            }

            this.state = 8791;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 8793;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 77 || _la === 259) {
                {
                this.state = 8792;
                this.opt_materialized();
                }
            }

            this.state = 8795;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 8796;
            this.preparablestmt();
            this.state = 8797;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            this.state = 8799;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 865, this.context) ) {
            case 1:
                {
                this.state = 8798;
                this.search_cluase();
                }
                break;
            }
            this.state = 8802;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 866, this.context) ) {
            case 1:
                {
                this.state = 8801;
                this.cycle_cluase();
                }
                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 search_cluase(): Search_cluaseContext {
        let localContext = new Search_cluaseContext(this.context, this.state);
        this.enterRule(localContext, 1020, PostgreSqlParser.RULE_search_cluase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8804;
            this.match(PostgreSqlParser.KW_SEARCH);
            this.state = 8805;
            _la = this.tokenStream.LA(1);
            if(!(_la === 527 || _la === 528)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 8806;
            this.match(PostgreSqlParser.KW_FIRST);
            this.state = 8807;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 8808;
            this.column_list();
            this.state = 8809;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 8810;
            this.column_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cycle_cluase(): Cycle_cluaseContext {
        let localContext = new Cycle_cluaseContext(this.context, this.state);
        this.enterRule(localContext, 1022, PostgreSqlParser.RULE_cycle_cluase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8812;
            this.match(PostgreSqlParser.KW_CYCLE);
            this.state = 8813;
            this.column_list();
            this.state = 8814;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 8815;
            this.column_name();
            this.state = 8821;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 94) {
                {
                this.state = 8816;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 8817;
                this.name();
                this.state = 8818;
                this.match(PostgreSqlParser.KW_DEFAULT);
                this.state = 8819;
                this.name();
                }
            }

            this.state = 8823;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 8824;
            this.column_name();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_materialized(): Opt_materializedContext {
        let localContext = new Opt_materializedContext(this.context, this.state);
        this.enterRule(localContext, 1024, PostgreSqlParser.RULE_opt_materialized);
        try {
            this.state = 8829;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_MATERIALIZED:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8826;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                }
                break;
            case PostgreSqlParser.KW_NOT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8827;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 8828;
                this.match(PostgreSqlParser.KW_MATERIALIZED);
                }
                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 opt_with_clause(): Opt_with_clauseContext {
        let localContext = new Opt_with_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1026, PostgreSqlParser.RULE_opt_with_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8831;
            this.with_clause();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public into_clause(): Into_clauseContext {
        let localContext = new Into_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1028, PostgreSqlParser.RULE_into_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8833;
            this.match(PostgreSqlParser.KW_INTO);
            this.state = 8838;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 869, this.context) ) {
            case 1:
                {
                this.state = 8834;
                this.opt_strict();
                this.state = 8835;
                this.opttempTableName();
                }
                break;
            case 2:
                {
                this.state = 8837;
                this.into_target();
                }
                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 opt_strict(): Opt_strictContext {
        let localContext = new Opt_strictContext(this.context, this.state);
        this.enterRule(localContext, 1030, PostgreSqlParser.RULE_opt_strict);
        try {
            this.state = 8842;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 870, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8841;
                this.match(PostgreSqlParser.KW_STRICT);
                }
                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 opttempTableName(): OpttempTableNameContext {
        let localContext = new OpttempTableNameContext(this.context, this.state);
        this.enterRule(localContext, 1032, PostgreSqlParser.RULE_opttempTableName);
        let _la: number;
        try {
            this.state = 8860;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 874, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8845;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 213 || _la === 254) {
                    {
                    this.state = 8844;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 213 || _la === 254)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 8847;
                _la = this.tokenStream.LA(1);
                if(!(_la === 352 || _la === 354)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 8849;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 872, this.context) ) {
                case 1:
                    {
                    this.state = 8848;
                    this.opt_table();
                    }
                    break;
                }
                this.state = 8851;
                this.table_name_create();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8852;
                this.match(PostgreSqlParser.KW_UNLOGGED);
                this.state = 8854;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 873, this.context) ) {
                case 1:
                    {
                    this.state = 8853;
                    this.opt_table();
                    }
                    break;
                }
                this.state = 8856;
                this.table_name_create();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8857;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 8858;
                this.table_name_create();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8859;
                this.table_name_create();
                }
                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 opt_table(): Opt_tableContext {
        let localContext = new Opt_tableContext(this.context, this.state);
        this.enterRule(localContext, 1034, PostgreSqlParser.RULE_opt_table);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8862;
            this.match(PostgreSqlParser.KW_TABLE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public all_or_distinct(): All_or_distinctContext {
        let localContext = new All_or_distinctContext(this.context, this.state);
        this.enterRule(localContext, 1036, PostgreSqlParser.RULE_all_or_distinct);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8864;
            _la = this.tokenStream.LA(1);
            if(!(_la === 30 || _la === 56)) {
            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 distinct_clause(): Distinct_clauseContext {
        let localContext = new Distinct_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1038, PostgreSqlParser.RULE_distinct_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8866;
            this.match(PostgreSqlParser.KW_DISTINCT);
            this.state = 8872;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 875, this.context) ) {
            case 1:
                {
                this.state = 8867;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 8868;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8869;
                this.expr_list();
                this.state = 8870;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 opt_all_clause(): Opt_all_clauseContext {
        let localContext = new Opt_all_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1040, PostgreSqlParser.RULE_opt_all_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8874;
            this.match(PostgreSqlParser.KW_ALL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_sort_clause(): Opt_sort_clauseContext {
        let localContext = new Opt_sort_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1042, PostgreSqlParser.RULE_opt_sort_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8876;
            this.sort_clause();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public sort_clause(): Sort_clauseContext {
        let localContext = new Sort_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1044, PostgreSqlParser.RULE_sort_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8878;
            this.match(PostgreSqlParser.KW_ORDER);
            this.state = 8879;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 8880;
            this.sortby_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public sortby_list(): Sortby_listContext {
        let localContext = new Sortby_listContext(this.context, this.state);
        this.enterRule(localContext, 1046, PostgreSqlParser.RULE_sortby_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8882;
            this.sortby();
            this.state = 8887;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 8883;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8884;
                this.sortby();
                }
                }
                this.state = 8889;
                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 sortby(): SortbyContext {
        let localContext = new SortbyContext(this.context, this.state);
        this.enterRule(localContext, 1048, PostgreSqlParser.RULE_sortby);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8890;
            this.column_expr_noparen();
            this.state = 8894;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 877, this.context) ) {
            case 1:
                {
                this.state = 8891;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 8892;
                this.qual_all_op();
                }
                break;
            case 2:
                {
                this.state = 8893;
                this.opt_asc_desc();
                }
                break;
            }
            this.state = 8897;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 878, this.context) ) {
            case 1:
                {
                this.state = 8896;
                this.opt_nulls_order();
                }
                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 select_limit(): Select_limitContext {
        let localContext = new Select_limitContext(this.context, this.state);
        this.enterRule(localContext, 1050, PostgreSqlParser.RULE_select_limit);
        let _la: number;
        try {
            this.state = 8911;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_LIMIT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8899;
                this.limit_clause();
                this.state = 8901;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 79) {
                    {
                    this.state = 8900;
                    this.offset_clause();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_OFFSET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8903;
                this.offset_clause();
                this.state = 8905;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 880, this.context) ) {
                case 1:
                    {
                    this.state = 8904;
                    this.fetch_clause();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_FETCH:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8907;
                this.fetch_clause();
                this.state = 8909;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 79) {
                    {
                    this.state = 8908;
                    this.offset_clause();
                    }
                }

                }
                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 opt_select_limit(): Opt_select_limitContext {
        let localContext = new Opt_select_limitContext(this.context, this.state);
        this.enterRule(localContext, 1052, PostgreSqlParser.RULE_opt_select_limit);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8913;
            this.select_limit();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public limit_clause(): Limit_clauseContext {
        let localContext = new Limit_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1054, PostgreSqlParser.RULE_limit_clause);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8915;
            this.match(PostgreSqlParser.KW_LIMIT);
            this.state = 8916;
            this.select_limit_value();
            this.state = 8919;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 6) {
                {
                this.state = 8917;
                this.match(PostgreSqlParser.COMMA);
                this.state = 8918;
                this.select_offset_value();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public fetch_clause(): Fetch_clauseContext {
        let localContext = new Fetch_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1056, PostgreSqlParser.RULE_fetch_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8921;
            this.match(PostgreSqlParser.KW_FETCH);
            this.state = 8922;
            this.first_or_next();
            this.state = 8936;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 886, this.context) ) {
            case 1:
                {
                this.state = 8923;
                this.select_fetch_first_value();
                this.state = 8924;
                this.row_or_rows();
                this.state = 8928;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_ONLY:
                    {
                    this.state = 8925;
                    this.match(PostgreSqlParser.KW_ONLY);
                    }
                    break;
                case PostgreSqlParser.KW_WITH:
                    {
                    this.state = 8926;
                    this.match(PostgreSqlParser.KW_WITH);
                    this.state = 8927;
                    this.match(PostgreSqlParser.KW_TIES);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                {
                this.state = 8930;
                this.row_or_rows();
                this.state = 8934;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_ONLY:
                    {
                    this.state = 8931;
                    this.match(PostgreSqlParser.KW_ONLY);
                    }
                    break;
                case PostgreSqlParser.KW_WITH:
                    {
                    this.state = 8932;
                    this.match(PostgreSqlParser.KW_WITH);
                    this.state = 8933;
                    this.match(PostgreSqlParser.KW_TIES);
                    }
                    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 offset_clause(): Offset_clauseContext {
        let localContext = new Offset_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1058, PostgreSqlParser.RULE_offset_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8938;
            this.match(PostgreSqlParser.KW_OFFSET);
            this.state = 8943;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 887, this.context) ) {
            case 1:
                {
                this.state = 8939;
                this.select_fetch_first_value();
                this.state = 8940;
                this.row_or_rows();
                }
                break;
            case 2:
                {
                this.state = 8942;
                this.select_offset_value();
                }
                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 select_limit_value(): Select_limit_valueContext {
        let localContext = new Select_limit_valueContext(this.context, this.state);
        this.enterRule(localContext, 1060, PostgreSqlParser.RULE_select_limit_value);
        try {
            this.state = 8947;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.OPEN_PAREN:
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.PARAM:
            case PostgreSqlParser.Operator:
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_CASE:
            case PostgreSqlParser.KW_CAST:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CURRENT_CATALOG:
            case PostgreSqlParser.KW_CURRENT_DATE:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_TIME:
            case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_LOCALTIME:
            case PostgreSqlParser.KW_LOCALTIMESTAMP:
            case PostgreSqlParser.KW_NOT:
            case PostgreSqlParser.KW_NULL:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_UNIQUE:
            case PostgreSqlParser.KW_USER:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.BinaryStringConstant:
            case PostgreSqlParser.HexadecimalStringConstant:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8945;
                this.a_expr();
                }
                break;
            case PostgreSqlParser.KW_ALL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8946;
                this.match(PostgreSqlParser.KW_ALL);
                }
                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 select_offset_value(): Select_offset_valueContext {
        let localContext = new Select_offset_valueContext(this.context, this.state);
        this.enterRule(localContext, 1062, PostgreSqlParser.RULE_select_offset_value);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8949;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public select_fetch_first_value(): Select_fetch_first_valueContext {
        let localContext = new Select_fetch_first_valueContext(this.context, this.state);
        this.enterRule(localContext, 1064, PostgreSqlParser.RULE_select_fetch_first_value);
        try {
            this.state = 8956;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.PLUS:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8951;
                this.match(PostgreSqlParser.PLUS);
                this.state = 8952;
                this.i_or_f_const();
                }
                break;
            case PostgreSqlParser.MINUS:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8953;
                this.match(PostgreSqlParser.MINUS);
                this.state = 8954;
                this.i_or_f_const();
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
            case PostgreSqlParser.PARAM:
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_CASE:
            case PostgreSqlParser.KW_CAST:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CURRENT_CATALOG:
            case PostgreSqlParser.KW_CURRENT_DATE:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_TIME:
            case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_LOCALTIME:
            case PostgreSqlParser.KW_LOCALTIMESTAMP:
            case PostgreSqlParser.KW_NULL:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_UNIQUE:
            case PostgreSqlParser.KW_USER:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.BinaryStringConstant:
            case PostgreSqlParser.HexadecimalStringConstant:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8955;
                this.c_expr();
                }
                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 i_or_f_const(): I_or_f_constContext {
        let localContext = new I_or_f_constContext(this.context, this.state);
        this.enterRule(localContext, 1066, PostgreSqlParser.RULE_i_or_f_const);
        try {
            this.state = 8960;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.Integral:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8958;
                this.iconst();
                }
                break;
            case PostgreSqlParser.Numeric:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8959;
                this.fconst();
                }
                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 row_or_rows(): Row_or_rowsContext {
        let localContext = new Row_or_rowsContext(this.context, this.state);
        this.enterRule(localContext, 1068, PostgreSqlParser.RULE_row_or_rows);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8962;
            _la = this.tokenStream.LA(1);
            if(!(_la === 320 || _la === 414)) {
            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 first_or_next(): First_or_nextContext {
        let localContext = new First_or_nextContext(this.context, this.state);
        this.enterRule(localContext, 1070, PostgreSqlParser.RULE_first_or_next);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8964;
            _la = this.tokenStream.LA(1);
            if(!(_la === 207 || _la === 268)) {
            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 group_clause(): Group_clauseContext {
        let localContext = new Group_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1072, PostgreSqlParser.RULE_group_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8966;
            this.match(PostgreSqlParser.KW_GROUP);
            this.state = 8967;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 8969;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 891, this.context) ) {
            case 1:
                {
                this.state = 8968;
                this.all_or_distinct();
                }
                break;
            }
            this.state = 8971;
            this.group_by_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public group_by_list(): Group_by_listContext {
        let localContext = new Group_by_listContext(this.context, this.state);
        this.enterRule(localContext, 1074, PostgreSqlParser.RULE_group_by_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8973;
            this.group_by_item();
            this.state = 8978;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 892, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 8974;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 8975;
                    this.group_by_item();
                    }
                    }
                }
                this.state = 8980;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 892, 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 group_by_item(): Group_by_itemContext {
        let localContext = new Group_by_itemContext(this.context, this.state);
        this.enterRule(localContext, 1076, PostgreSqlParser.RULE_group_by_item);
        try {
            this.state = 8990;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 893, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8981;
                this.column_expr_noparen();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8982;
                this.empty_grouping_set();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 8983;
                this.cube_clause();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 8984;
                this.rollup_clause();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 8985;
                this.grouping_sets_clause();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 8986;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 8987;
                this.column_expr_list_noparen();
                this.state = 8988;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 empty_grouping_set(): Empty_grouping_setContext {
        let localContext = new Empty_grouping_setContext(this.context, this.state);
        this.enterRule(localContext, 1078, PostgreSqlParser.RULE_empty_grouping_set);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8992;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 8993;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rollup_clause(): Rollup_clauseContext {
        let localContext = new Rollup_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1080, PostgreSqlParser.RULE_rollup_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8995;
            this.match(PostgreSqlParser.KW_ROLLUP);
            this.state = 8996;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 8997;
            this.column_expr_list_noparen();
            this.state = 8998;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cube_clause(): Cube_clauseContext {
        let localContext = new Cube_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1082, PostgreSqlParser.RULE_cube_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9000;
            this.match(PostgreSqlParser.KW_CUBE);
            this.state = 9001;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9002;
            this.column_expr_list_noparen();
            this.state = 9003;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public grouping_sets_clause(): Grouping_sets_clauseContext {
        let localContext = new Grouping_sets_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1084, PostgreSqlParser.RULE_grouping_sets_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9005;
            this.match(PostgreSqlParser.KW_GROUPING);
            this.state = 9006;
            this.match(PostgreSqlParser.KW_SETS);
            this.state = 9007;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9008;
            this.group_by_list();
            this.state = 9009;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public having_clause(): Having_clauseContext {
        let localContext = new Having_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1086, PostgreSqlParser.RULE_having_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9011;
            this.match(PostgreSqlParser.KW_HAVING);
            this.state = 9012;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public for_locking_clause(): For_locking_clauseContext {
        let localContext = new For_locking_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1088, PostgreSqlParser.RULE_for_locking_clause);
        try {
            this.state = 9018;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 894, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9014;
                this.for_locking_items();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9015;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 9016;
                this.match(PostgreSqlParser.KW_READ);
                this.state = 9017;
                this.match(PostgreSqlParser.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 opt_for_locking_clause(): Opt_for_locking_clauseContext {
        let localContext = new Opt_for_locking_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1090, PostgreSqlParser.RULE_opt_for_locking_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9020;
            this.for_locking_clause();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public for_locking_items(): For_locking_itemsContext {
        let localContext = new For_locking_itemsContext(this.context, this.state);
        this.enterRule(localContext, 1092, PostgreSqlParser.RULE_for_locking_items);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9023;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 9022;
                this.for_locking_item();
                }
                }
                this.state = 9025;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 62);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public for_locking_item(): For_locking_itemContext {
        let localContext = new For_locking_itemContext(this.context, this.state);
        this.enterRule(localContext, 1094, PostgreSqlParser.RULE_for_locking_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9027;
            this.for_locking_strength();
            this.state = 9029;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 896, this.context) ) {
            case 1:
                {
                this.state = 9028;
                this.locked_rels_list();
                }
                break;
            }
            this.state = 9032;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 897, this.context) ) {
            case 1:
                {
                this.state = 9031;
                this.opt_nowait_or_skip();
                }
                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 for_locking_strength(): For_locking_strengthContext {
        let localContext = new For_locking_strengthContext(this.context, this.state);
        this.enterRule(localContext, 1096, PostgreSqlParser.RULE_for_locking_strength);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9034;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 9044;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_UPDATE:
                {
                this.state = 9037;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 269) {
                    {
                    this.state = 9035;
                    this.match(PostgreSqlParser.KW_NO);
                    this.state = 9036;
                    this.match(PostgreSqlParser.KW_KEY);
                    }
                }

                this.state = 9039;
                this.match(PostgreSqlParser.KW_UPDATE);
                }
                break;
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_SHARE:
                {
                this.state = 9041;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 245) {
                    {
                    this.state = 9040;
                    this.match(PostgreSqlParser.KW_KEY);
                    }
                }

                this.state = 9043;
                this.match(PostgreSqlParser.KW_SHARE);
                }
                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 locked_rels_list(): Locked_rels_listContext {
        let localContext = new Locked_rels_listContext(this.context, this.state);
        this.enterRule(localContext, 1098, PostgreSqlParser.RULE_locked_rels_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9046;
            this.match(PostgreSqlParser.KW_OF);
            this.state = 9047;
            this.qualified_name_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public values_clause(): Values_clauseContext {
        let localContext = new Values_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1100, PostgreSqlParser.RULE_values_clause);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9049;
            this.match(PostgreSqlParser.KW_VALUES);
            this.state = 9050;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9051;
            this.expr_list();
            this.state = 9052;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            this.state = 9060;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 9053;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9054;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9055;
                this.expr_list();
                this.state = 9056;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                }
                this.state = 9062;
                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 from_clause(): From_clauseContext {
        let localContext = new From_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1102, PostgreSqlParser.RULE_from_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9063;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 9064;
            this.from_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public from_list(): From_listContext {
        let localContext = new From_listContext(this.context, this.state);
        this.enterRule(localContext, 1104, PostgreSqlParser.RULE_from_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9066;
            this.table_ref();
            this.state = 9071;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 902, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9067;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 9068;
                    this.table_ref();
                    }
                    }
                }
                this.state = 9073;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 902, 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 table_ref(): Table_refContext {
        let localContext = new Table_refContext(this.context, this.state);
        this.enterRule(localContext, 1106, PostgreSqlParser.RULE_table_ref);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9135;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 917, this.context) ) {
            case 1:
                {
                this.state = 9076;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 903, this.context) ) {
                case 1:
                    {
                    this.state = 9074;
                    this.relation_expr();
                    }
                    break;
                case 2:
                    {
                    this.state = 9075;
                    this.view_relation_expr();
                    }
                    break;
                }
                this.state = 9079;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 904, this.context) ) {
                case 1:
                    {
                    this.state = 9078;
                    this.opt_alias_clause();
                    }
                    break;
                }
                this.state = 9082;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 472) {
                    {
                    this.state = 9081;
                    this.tablesample_clause();
                    }
                }

                }
                break;
            case 2:
                {
                this.state = 9084;
                this.func_table();
                this.state = 9086;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 906, this.context) ) {
                case 1:
                    {
                    this.state = 9085;
                    this.func_alias_clause();
                    }
                    break;
                }
                }
                break;
            case 3:
                {
                this.state = 9088;
                this.xmltable();
                this.state = 9090;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 907, this.context) ) {
                case 1:
                    {
                    this.state = 9089;
                    this.opt_alias_clause();
                    }
                    break;
                }
                }
                break;
            case 4:
                {
                this.state = 9092;
                this.select_with_parens();
                this.state = 9094;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 908, this.context) ) {
                case 1:
                    {
                    this.state = 9093;
                    this.opt_alias_clause();
                    }
                    break;
                }
                }
                break;
            case 5:
                {
                this.state = 9096;
                this.match(PostgreSqlParser.KW_LATERAL);
                this.state = 9109;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 912, this.context) ) {
                case 1:
                    {
                    this.state = 9097;
                    this.xmltable();
                    this.state = 9099;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 909, this.context) ) {
                    case 1:
                        {
                        this.state = 9098;
                        this.opt_alias_clause();
                        }
                        break;
                    }
                    }
                    break;
                case 2:
                    {
                    this.state = 9101;
                    this.func_table();
                    this.state = 9103;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 910, this.context) ) {
                    case 1:
                        {
                        this.state = 9102;
                        this.func_alias_clause();
                        }
                        break;
                    }
                    }
                    break;
                case 3:
                    {
                    this.state = 9105;
                    this.select_with_parens();
                    this.state = 9107;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 911, this.context) ) {
                    case 1:
                        {
                        this.state = 9106;
                        this.opt_alias_clause();
                        }
                        break;
                    }
                    }
                    break;
                }
                }
                break;
            case 6:
                {
                this.state = 9111;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9112;
                this.table_ref();
                this.state = 9129;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_CROSS:
                    {
                    this.state = 9113;
                    this.match(PostgreSqlParser.KW_CROSS);
                    this.state = 9114;
                    this.match(PostgreSqlParser.KW_JOIN);
                    this.state = 9115;
                    this.table_ref();
                    }
                    break;
                case PostgreSqlParser.KW_NATURAL:
                    {
                    this.state = 9116;
                    this.match(PostgreSqlParser.KW_NATURAL);
                    this.state = 9118;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
                        {
                        this.state = 9117;
                        this.join_type();
                        }
                    }

                    this.state = 9120;
                    this.match(PostgreSqlParser.KW_JOIN);
                    this.state = 9121;
                    this.table_ref();
                    }
                    break;
                case PostgreSqlParser.KW_FULL:
                case PostgreSqlParser.KW_INNER:
                case PostgreSqlParser.KW_JOIN:
                case PostgreSqlParser.KW_LEFT:
                case PostgreSqlParser.KW_RIGHT:
                    {
                    this.state = 9123;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
                        {
                        this.state = 9122;
                        this.join_type();
                        }
                    }

                    this.state = 9125;
                    this.match(PostgreSqlParser.KW_JOIN);
                    this.state = 9126;
                    this.table_ref();
                    this.state = 9127;
                    this.join_qual();
                    }
                    break;
                case PostgreSqlParser.CLOSE_PAREN:
                    break;
                default:
                    break;
                }
                this.state = 9131;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 9133;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 916, this.context) ) {
                case 1:
                    {
                    this.state = 9132;
                    this.opt_alias_clause();
                    }
                    break;
                }
                }
                break;
            }
            this.state = 9155;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 921, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    this.state = 9153;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case PostgreSqlParser.KW_CROSS:
                        {
                        this.state = 9137;
                        this.match(PostgreSqlParser.KW_CROSS);
                        this.state = 9138;
                        this.match(PostgreSqlParser.KW_JOIN);
                        this.state = 9139;
                        this.table_ref();
                        }
                        break;
                    case PostgreSqlParser.KW_NATURAL:
                        {
                        this.state = 9140;
                        this.match(PostgreSqlParser.KW_NATURAL);
                        this.state = 9142;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
                            {
                            this.state = 9141;
                            this.join_type();
                            }
                        }

                        this.state = 9144;
                        this.match(PostgreSqlParser.KW_JOIN);
                        this.state = 9145;
                        this.table_ref();
                        }
                        break;
                    case PostgreSqlParser.KW_FULL:
                    case PostgreSqlParser.KW_INNER:
                    case PostgreSqlParser.KW_JOIN:
                    case PostgreSqlParser.KW_LEFT:
                    case PostgreSqlParser.KW_RIGHT:
                        {
                        this.state = 9147;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
                            {
                            this.state = 9146;
                            this.join_type();
                            }
                        }

                        this.state = 9149;
                        this.match(PostgreSqlParser.KW_JOIN);
                        this.state = 9150;
                        this.table_ref();
                        this.state = 9151;
                        this.join_qual();
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                }
                this.state = 9157;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 921, 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 alias_clause(): Alias_clauseContext {
        let localContext = new Alias_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1108, PostgreSqlParser.RULE_alias_clause);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9159;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 36) {
                {
                this.state = 9158;
                this.match(PostgreSqlParser.KW_AS);
                }
            }

            this.state = 9161;
            this.colid();
            this.state = 9166;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 923, this.context) ) {
            case 1:
                {
                this.state = 9162;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9163;
                this.name_list();
                this.state = 9164;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 opt_alias_clause(): Opt_alias_clauseContext {
        let localContext = new Opt_alias_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1110, PostgreSqlParser.RULE_opt_alias_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9168;
            this.alias_clause();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public func_alias_clause(): Func_alias_clauseContext {
        let localContext = new Func_alias_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1112, PostgreSqlParser.RULE_func_alias_clause);
        let _la: number;
        try {
            this.state = 9182;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 926, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9170;
                this.alias_clause();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9176;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_AS:
                    {
                    this.state = 9171;
                    this.match(PostgreSqlParser.KW_AS);
                    this.state = 9173;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                        {
                        this.state = 9172;
                        this.colid();
                        }
                    }

                    }
                    break;
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 9175;
                    this.colid();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 9178;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9179;
                this.tablefuncelementlist();
                this.state = 9180;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 join_type(): Join_typeContext {
        let localContext = new Join_typeContext(this.context, this.state);
        this.enterRule(localContext, 1114, PostgreSqlParser.RULE_join_type);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9184;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 9186;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 123) {
                {
                this.state = 9185;
                this.match(PostgreSqlParser.KW_OUTER);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public join_qual(): Join_qualContext {
        let localContext = new Join_qualContext(this.context, this.state);
        this.enterRule(localContext, 1116, PostgreSqlParser.RULE_join_qual);
        try {
            this.state = 9195;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9188;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 9189;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9190;
                this.column_list();
                this.state = 9191;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_ON:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9193;
                this.match(PostgreSqlParser.KW_ON);
                this.state = 9194;
                this.a_expr();
                }
                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 relation_expr(): Relation_exprContext {
        let localContext = new Relation_exprContext(this.context, this.state);
        this.enterRule(localContext, 1118, PostgreSqlParser.RULE_relation_expr);
        let _la: number;
        try {
            this.state = 9218;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 933, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9198;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 81) {
                    {
                    this.state = 9197;
                    this.match(PostgreSqlParser.KW_ONLY);
                    }
                }

                this.state = 9200;
                this.table_name();
                this.state = 9202;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 9) {
                    {
                    this.state = 9201;
                    this.match(PostgreSqlParser.STAR);
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9204;
                this.match(PostgreSqlParser.KW_ONLY);
                this.state = 9210;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 9205;
                    this.table_name();
                    }
                    break;
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 9206;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9207;
                    this.table_name();
                    this.state = 9208;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9212;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 9213;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 9216;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 9214;
                    this.schema_name();
                    }
                    break;
                case PostgreSqlParser.KW_CURRENT_SCHEMA:
                    {
                    this.state = 9215;
                    this.match(PostgreSqlParser.KW_CURRENT_SCHEMA);
                    }
                    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 view_relation_expr(): View_relation_exprContext {
        let localContext = new View_relation_exprContext(this.context, this.state);
        this.enterRule(localContext, 1120, PostgreSqlParser.RULE_view_relation_expr);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9221;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 81) {
                {
                this.state = 9220;
                this.match(PostgreSqlParser.KW_ONLY);
                }
            }

            this.state = 9223;
            this.view_name();
            this.state = 9225;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 935, this.context) ) {
            case 1:
                {
                this.state = 9224;
                this.match(PostgreSqlParser.STAR);
                }
                break;
            }
            this.state = 9228;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 936, this.context) ) {
            case 1:
                {
                this.state = 9227;
                this.column_list();
                }
                break;
            }
            this.state = 9231;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 937, this.context) ) {
            case 1:
                {
                this.state = 9230;
                this.where_clause();
                }
                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 publication_relation_expr(): Publication_relation_exprContext {
        let localContext = new Publication_relation_exprContext(this.context, this.state);
        this.enterRule(localContext, 1122, PostgreSqlParser.RULE_publication_relation_expr);
        let _la: number;
        try {
            this.state = 9266;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 944, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9233;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 9235;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 81) {
                    {
                    this.state = 9234;
                    this.match(PostgreSqlParser.KW_ONLY);
                    }
                }

                this.state = 9237;
                this.table_name();
                this.state = 9239;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 9) {
                    {
                    this.state = 9238;
                    this.match(PostgreSqlParser.STAR);
                    }
                }

                this.state = 9245;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 940, this.context) ) {
                case 1:
                    {
                    this.state = 9241;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9242;
                    this.column_list();
                    this.state = 9243;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                }
                this.state = 9248;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 103) {
                    {
                    this.state = 9247;
                    this.where_clause();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9250;
                this.match(PostgreSqlParser.KW_TABLE);
                this.state = 9251;
                this.match(PostgreSqlParser.KW_ONLY);
                this.state = 9257;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 9252;
                    this.table_name();
                    }
                    break;
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 9253;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9254;
                    this.table_name();
                    this.state = 9255;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9259;
                this.match(PostgreSqlParser.KW_TABLES);
                this.state = 9260;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 9261;
                this.match(PostgreSqlParser.KW_SCHEMA);
                this.state = 9264;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 9262;
                    this.schema_name();
                    }
                    break;
                case PostgreSqlParser.KW_CURRENT_SCHEMA:
                    {
                    this.state = 9263;
                    this.match(PostgreSqlParser.KW_CURRENT_SCHEMA);
                    }
                    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 relation_expr_list(): Relation_expr_listContext {
        let localContext = new Relation_expr_listContext(this.context, this.state);
        this.enterRule(localContext, 1124, PostgreSqlParser.RULE_relation_expr_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9268;
            this.relation_expr();
            this.state = 9273;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 9269;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9270;
                this.relation_expr();
                }
                }
                this.state = 9275;
                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 publication_relation_expr_list(): Publication_relation_expr_listContext {
        let localContext = new Publication_relation_expr_listContext(this.context, this.state);
        this.enterRule(localContext, 1126, PostgreSqlParser.RULE_publication_relation_expr_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9276;
            this.publication_relation_expr();
            this.state = 9281;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 9277;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9278;
                this.publication_relation_expr();
                }
                }
                this.state = 9283;
                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 relation_expr_opt_alias(): Relation_expr_opt_aliasContext {
        let localContext = new Relation_expr_opt_aliasContext(this.context, this.state);
        this.enterRule(localContext, 1128, PostgreSqlParser.RULE_relation_expr_opt_alias);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9284;
            this.relation_expr();
            this.state = 9289;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 948, this.context) ) {
            case 1:
                {
                this.state = 9286;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 36) {
                    {
                    this.state = 9285;
                    this.match(PostgreSqlParser.KW_AS);
                    }
                }

                this.state = 9288;
                this.colid();
                }
                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 tablesample_clause(): Tablesample_clauseContext {
        let localContext = new Tablesample_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1130, PostgreSqlParser.RULE_tablesample_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9291;
            this.match(PostgreSqlParser.KW_TABLESAMPLE);
            this.state = 9292;
            this.function_name();
            this.state = 9293;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9294;
            this.expr_list();
            this.state = 9295;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            this.state = 9297;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 949, this.context) ) {
            case 1:
                {
                this.state = 9296;
                this.opt_repeatable_clause();
                }
                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 opt_repeatable_clause(): Opt_repeatable_clauseContext {
        let localContext = new Opt_repeatable_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1132, PostgreSqlParser.RULE_opt_repeatable_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9299;
            this.match(PostgreSqlParser.KW_REPEATABLE);
            this.state = 9300;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9301;
            this.a_expr();
            this.state = 9302;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public func_table(): Func_tableContext {
        let localContext = new Func_tableContext(this.context, this.state);
        this.enterRule(localContext, 1134, PostgreSqlParser.RULE_func_table);
        try {
            this.state = 9316;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 952, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9304;
                this.func_expr_windowless();
                this.state = 9306;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 950, this.context) ) {
                case 1:
                    {
                    this.state = 9305;
                    this.opt_ordinality();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9308;
                this.match(PostgreSqlParser.KW_ROWS);
                this.state = 9309;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 9310;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9311;
                this.rowsfrom_list();
                this.state = 9312;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 9314;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 951, this.context) ) {
                case 1:
                    {
                    this.state = 9313;
                    this.opt_ordinality();
                    }
                    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 rowsfrom_item(): Rowsfrom_itemContext {
        let localContext = new Rowsfrom_itemContext(this.context, this.state);
        this.enterRule(localContext, 1136, PostgreSqlParser.RULE_rowsfrom_item);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9318;
            this.func_expr_windowless();
            this.state = 9320;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 36) {
                {
                this.state = 9319;
                this.opt_col_def_list();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rowsfrom_list(): Rowsfrom_listContext {
        let localContext = new Rowsfrom_listContext(this.context, this.state);
        this.enterRule(localContext, 1138, PostgreSqlParser.RULE_rowsfrom_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9322;
            this.rowsfrom_item();
            this.state = 9327;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 9323;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9324;
                this.rowsfrom_item();
                }
                }
                this.state = 9329;
                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 opt_col_def_list(): Opt_col_def_listContext {
        let localContext = new Opt_col_def_listContext(this.context, this.state);
        this.enterRule(localContext, 1140, PostgreSqlParser.RULE_opt_col_def_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9330;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 9331;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9332;
            this.tablefuncelementlist();
            this.state = 9333;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_ordinality(): Opt_ordinalityContext {
        let localContext = new Opt_ordinalityContext(this.context, this.state);
        this.enterRule(localContext, 1142, PostgreSqlParser.RULE_opt_ordinality);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9335;
            this.match(PostgreSqlParser.KW_WITH);
            this.state = 9336;
            this.match(PostgreSqlParser.KW_ORDINALITY);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public where_clause(): Where_clauseContext {
        let localContext = new Where_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1144, PostgreSqlParser.RULE_where_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9338;
            this.match(PostgreSqlParser.KW_WHERE);
            this.state = 9339;
            this.column_expr_noparen();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public where_or_current_clause(): Where_or_current_clauseContext {
        let localContext = new Where_or_current_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1146, PostgreSqlParser.RULE_where_or_current_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9341;
            this.match(PostgreSqlParser.KW_WHERE);
            this.state = 9346;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 955, this.context) ) {
            case 1:
                {
                this.state = 9342;
                this.match(PostgreSqlParser.KW_CURRENT);
                this.state = 9343;
                this.match(PostgreSqlParser.KW_OF);
                this.state = 9344;
                this.cursor_name();
                }
                break;
            case 2:
                {
                this.state = 9345;
                this.a_expr();
                }
                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 opttablefuncelementlist(): OpttablefuncelementlistContext {
        let localContext = new OpttablefuncelementlistContext(this.context, this.state);
        this.enterRule(localContext, 1148, PostgreSqlParser.RULE_opttablefuncelementlist);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9348;
            this.tablefuncelementlist();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablefuncelementlist(): TablefuncelementlistContext {
        let localContext = new TablefuncelementlistContext(this.context, this.state);
        this.enterRule(localContext, 1150, PostgreSqlParser.RULE_tablefuncelementlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9350;
            this.tablefuncelement();
            this.state = 9355;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 9351;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9352;
                this.tablefuncelement();
                }
                }
                this.state = 9357;
                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 tablefuncelement(): TablefuncelementContext {
        let localContext = new TablefuncelementContext(this.context, this.state);
        this.enterRule(localContext, 1152, PostgreSqlParser.RULE_tablefuncelement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9358;
            this.colid();
            this.state = 9359;
            this.typename();
            this.state = 9361;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 957, this.context) ) {
            case 1:
                {
                this.state = 9360;
                this.opt_collate_clause();
                }
                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 xmltable(): XmltableContext {
        let localContext = new XmltableContext(this.context, this.state);
        this.enterRule(localContext, 1154, PostgreSqlParser.RULE_xmltable);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9363;
            this.match(PostgreSqlParser.KW_XMLTABLE);
            this.state = 9364;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9380;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 958, this.context) ) {
            case 1:
                {
                this.state = 9365;
                this.c_expr();
                this.state = 9366;
                this.xmlexists_argument();
                this.state = 9367;
                this.match(PostgreSqlParser.KW_COLUMNS);
                this.state = 9368;
                this.xmltable_column_list();
                }
                break;
            case 2:
                {
                this.state = 9370;
                this.match(PostgreSqlParser.KW_XMLNAMESPACES);
                this.state = 9371;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9372;
                this.xml_namespace_list();
                this.state = 9373;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 9374;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9375;
                this.c_expr();
                this.state = 9376;
                this.xmlexists_argument();
                this.state = 9377;
                this.match(PostgreSqlParser.KW_COLUMNS);
                this.state = 9378;
                this.xmltable_column_list();
                }
                break;
            }
            this.state = 9382;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xmltable_column_list(): Xmltable_column_listContext {
        let localContext = new Xmltable_column_listContext(this.context, this.state);
        this.enterRule(localContext, 1156, PostgreSqlParser.RULE_xmltable_column_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9384;
            this.xmltable_column_el();
            this.state = 9389;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 9385;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9386;
                this.xmltable_column_el();
                }
                }
                this.state = 9391;
                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 xmltable_column_el(): Xmltable_column_elContext {
        let localContext = new Xmltable_column_elContext(this.context, this.state);
        this.enterRule(localContext, 1158, PostgreSqlParser.RULE_xmltable_column_el);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9392;
            this.colid();
            this.state = 9399;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 9393;
                this.typename();
                this.state = 9395;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & 32771) !== 0) || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 268451969) !== 0) || ((((_la - 153)) & ~0x1F) === 0 && ((1 << (_la - 153)) & 540945) !== 0) || _la === 207 || _la === 210 || ((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 419430657) !== 0) || ((((_la - 279)) & ~0x1F) === 0 && ((1 << (_la - 279)) & 268451841) !== 0) || ((((_la - 313)) & ~0x1F) === 0 && ((1 << (_la - 313)) & 1051713) !== 0) || _la === 360 || _la === 433 || _la === 434 || ((((_la - 477)) & ~0x1F) === 0 && ((1 << (_la - 477)) & 3959414785) !== 0) || ((((_la - 509)) & ~0x1F) === 0 && ((1 << (_la - 509)) & 3071) !== 0) || ((((_la - 549)) & ~0x1F) === 0 && ((1 << (_la - 549)) & 100674083) !== 0) || _la === 584) {
                    {
                    this.state = 9394;
                    this.xmltable_column_option_list();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_FOR:
                {
                this.state = 9397;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 9398;
                this.match(PostgreSqlParser.KW_ORDINALITY);
                }
                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 xmltable_column_option_list(): Xmltable_column_option_listContext {
        let localContext = new Xmltable_column_option_listContext(this.context, this.state);
        this.enterRule(localContext, 1160, PostgreSqlParser.RULE_xmltable_column_option_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9402;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 9401;
                this.xmltable_column_option_el();
                }
                }
                this.state = 9404;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & 32771) !== 0) || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 268451969) !== 0) || ((((_la - 153)) & ~0x1F) === 0 && ((1 << (_la - 153)) & 540945) !== 0) || _la === 207 || _la === 210 || ((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 419430657) !== 0) || ((((_la - 279)) & ~0x1F) === 0 && ((1 << (_la - 279)) & 268451841) !== 0) || ((((_la - 313)) & ~0x1F) === 0 && ((1 << (_la - 313)) & 1051713) !== 0) || _la === 360 || _la === 433 || _la === 434 || ((((_la - 477)) & ~0x1F) === 0 && ((1 << (_la - 477)) & 3959414785) !== 0) || ((((_la - 509)) & ~0x1F) === 0 && ((1 << (_la - 509)) & 3071) !== 0) || ((((_la - 549)) & ~0x1F) === 0 && ((1 << (_la - 549)) & 100674083) !== 0) || _la === 584);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xmltable_column_option_el(): Xmltable_column_option_elContext {
        let localContext = new Xmltable_column_option_elContext(this.context, this.state);
        this.enterRule(localContext, 1162, PostgreSqlParser.RULE_xmltable_column_option_el);
        try {
            this.state = 9414;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 963, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9406;
                this.match(PostgreSqlParser.KW_DEFAULT);
                this.state = 9407;
                this.a_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9408;
                this.identifier();
                this.state = 9409;
                this.a_expr();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9411;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 9412;
                this.match(PostgreSqlParser.KW_NULL);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 9413;
                this.match(PostgreSqlParser.KW_NULL);
                }
                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 xml_namespace_list(): Xml_namespace_listContext {
        let localContext = new Xml_namespace_listContext(this.context, this.state);
        this.enterRule(localContext, 1164, PostgreSqlParser.RULE_xml_namespace_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9416;
            this.xml_namespace_el();
            this.state = 9421;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 9417;
                this.match(PostgreSqlParser.COMMA);
                this.state = 9418;
                this.xml_namespace_el();
                }
                }
                this.state = 9423;
                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 xml_namespace_el(): Xml_namespace_elContext {
        let localContext = new Xml_namespace_elContext(this.context, this.state);
        this.enterRule(localContext, 1166, PostgreSqlParser.RULE_xml_namespace_el);
        try {
            this.state = 9430;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 965, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9424;
                this.b_expr(0);
                this.state = 9425;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 9426;
                this.collabel();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9428;
                this.match(PostgreSqlParser.KW_DEFAULT);
                this.state = 9429;
                this.b_expr(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 typename(): TypenameContext {
        let localContext = new TypenameContext(this.context, this.state);
        this.enterRule(localContext, 1168, PostgreSqlParser.RULE_typename);
        let _la: number;
        try {
            this.state = 9450;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 969, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9433;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 415) {
                    {
                    this.state = 9432;
                    this.match(PostgreSqlParser.KW_SETOF);
                    }
                }

                this.state = 9435;
                this.simpletypename();
                this.state = 9444;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 968, this.context) ) {
                case 1:
                    {
                    this.state = 9436;
                    this.opt_array_bounds();
                    }
                    break;
                case 2:
                    {
                    this.state = 9437;
                    this.match(PostgreSqlParser.KW_ARRAY);
                    this.state = 9442;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 967, this.context) ) {
                    case 1:
                        {
                        this.state = 9438;
                        this.match(PostgreSqlParser.OPEN_BRACKET);
                        this.state = 9439;
                        this.iconst();
                        this.state = 9440;
                        this.match(PostgreSqlParser.CLOSE_BRACKET);
                        }
                        break;
                    }
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9446;
                this.qualified_name();
                this.state = 9447;
                this.match(PostgreSqlParser.PERCENT);
                this.state = 9448;
                _la = this.tokenStream.LA(1);
                if(!(_la === 360 || _la === 477)) {
                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 opt_array_bounds(): Opt_array_boundsContext {
        let localContext = new Opt_array_boundsContext(this.context, this.state);
        this.enterRule(localContext, 1170, PostgreSqlParser.RULE_opt_array_bounds);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9459;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 971, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9452;
                    this.match(PostgreSqlParser.OPEN_BRACKET);
                    this.state = 9454;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 571) {
                        {
                        this.state = 9453;
                        this.iconst();
                        }
                    }

                    this.state = 9456;
                    this.match(PostgreSqlParser.CLOSE_BRACKET);
                    }
                    }
                }
                this.state = 9461;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 971, 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 simpletypename(): SimpletypenameContext {
        let localContext = new SimpletypenameContext(this.context, this.state);
        this.enterRule(localContext, 1172, PostgreSqlParser.RULE_simpletypename);
        try {
            this.state = 9477;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 974, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9462;
                this.generictype();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9463;
                this.numeric();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9464;
                this.bit();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 9465;
                this.character();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 9466;
                this.constdatetime();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 9467;
                this.constinterval();
                this.state = 9475;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 973, this.context) ) {
                case 1:
                    {
                    this.state = 9469;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 972, this.context) ) {
                    case 1:
                        {
                        this.state = 9468;
                        this.opt_interval();
                        }
                        break;
                    }
                    }
                    break;
                case 2:
                    {
                    this.state = 9471;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9472;
                    this.iconst();
                    this.state = 9473;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    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 consttypename(): ConsttypenameContext {
        let localContext = new ConsttypenameContext(this.context, this.state);
        this.enterRule(localContext, 1174, PostgreSqlParser.RULE_consttypename);
        try {
            this.state = 9483;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_SMALLINT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9479;
                this.numeric();
                }
                break;
            case PostgreSqlParser.KW_BIT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9480;
                this.constbit();
                }
                break;
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_VARCHAR:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9481;
                this.constcharacter();
                }
                break;
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 9482;
                this.constdatetime();
                }
                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 generictype(): GenerictypeContext {
        let localContext = new GenerictypeContext(this.context, this.state);
        this.enterRule(localContext, 1176, PostgreSqlParser.RULE_generictype);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9485;
            this.type_function_name();
            this.state = 9487;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 976, this.context) ) {
            case 1:
                {
                this.state = 9486;
                this.attrs();
                }
                break;
            }
            this.state = 9490;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 977, this.context) ) {
            case 1:
                {
                this.state = 9489;
                this.opt_type_modifiers();
                }
                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 opt_type_modifiers(): Opt_type_modifiersContext {
        let localContext = new Opt_type_modifiersContext(this.context, this.state);
        this.enterRule(localContext, 1178, PostgreSqlParser.RULE_opt_type_modifiers);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9492;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9493;
            this.expr_list();
            this.state = 9494;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public numeric(): NumericContext {
        let localContext = new NumericContext(this.context, this.state);
        this.enterRule(localContext, 1180, PostgreSqlParser.RULE_numeric);
        try {
            this.state = 9520;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_INT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9496;
                this.match(PostgreSqlParser.KW_INT);
                }
                break;
            case PostgreSqlParser.KW_INTEGER:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9497;
                this.match(PostgreSqlParser.KW_INTEGER);
                }
                break;
            case PostgreSqlParser.KW_SMALLINT:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9498;
                this.match(PostgreSqlParser.KW_SMALLINT);
                }
                break;
            case PostgreSqlParser.KW_BIGINT:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 9499;
                this.match(PostgreSqlParser.KW_BIGINT);
                }
                break;
            case PostgreSqlParser.KW_REAL:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 9500;
                this.match(PostgreSqlParser.KW_REAL);
                }
                break;
            case PostgreSqlParser.KW_FLOAT:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 9501;
                this.match(PostgreSqlParser.KW_FLOAT);
                this.state = 9503;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 978, this.context) ) {
                case 1:
                    {
                    this.state = 9502;
                    this.opt_float();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_DOUBLE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 9505;
                this.match(PostgreSqlParser.KW_DOUBLE);
                this.state = 9506;
                this.match(PostgreSqlParser.KW_PRECISION);
                }
                break;
            case PostgreSqlParser.KW_DECIMAL:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 9507;
                this.match(PostgreSqlParser.KW_DECIMAL);
                this.state = 9509;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 979, this.context) ) {
                case 1:
                    {
                    this.state = 9508;
                    this.opt_type_modifiers();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_DEC:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 9511;
                this.match(PostgreSqlParser.KW_DEC);
                this.state = 9513;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 980, this.context) ) {
                case 1:
                    {
                    this.state = 9512;
                    this.opt_type_modifiers();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_NUMERIC:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 9515;
                this.match(PostgreSqlParser.KW_NUMERIC);
                this.state = 9517;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 981, this.context) ) {
                case 1:
                    {
                    this.state = 9516;
                    this.opt_type_modifiers();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_BOOLEAN:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 9519;
                this.match(PostgreSqlParser.KW_BOOLEAN);
                }
                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 opt_float(): Opt_floatContext {
        let localContext = new Opt_floatContext(this.context, this.state);
        this.enterRule(localContext, 1182, PostgreSqlParser.RULE_opt_float);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9522;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9523;
            this.iconst();
            this.state = 9524;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public bit(): BitContext {
        let localContext = new BitContext(this.context, this.state);
        this.enterRule(localContext, 1184, PostgreSqlParser.RULE_bit);
        try {
            this.state = 9528;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 983, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9526;
                this.bitwithlength();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9527;
                this.bitwithoutlength();
                }
                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 constbit(): ConstbitContext {
        let localContext = new ConstbitContext(this.context, this.state);
        this.enterRule(localContext, 1186, PostgreSqlParser.RULE_constbit);
        try {
            this.state = 9532;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 984, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9530;
                this.bitwithlength();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9531;
                this.bitwithoutlength();
                }
                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 bitwithlength(): BitwithlengthContext {
        let localContext = new BitwithlengthContext(this.context, this.state);
        this.enterRule(localContext, 1188, PostgreSqlParser.RULE_bitwithlength);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9534;
            this.match(PostgreSqlParser.KW_BIT);
            this.state = 9536;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 374) {
                {
                this.state = 9535;
                this.opt_varying();
                }
            }

            this.state = 9538;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 9539;
            this.expr_list();
            this.state = 9540;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public bitwithoutlength(): BitwithoutlengthContext {
        let localContext = new BitwithoutlengthContext(this.context, this.state);
        this.enterRule(localContext, 1190, PostgreSqlParser.RULE_bitwithoutlength);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9542;
            this.match(PostgreSqlParser.KW_BIT);
            this.state = 9544;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 986, this.context) ) {
            case 1:
                {
                this.state = 9543;
                this.opt_varying();
                }
                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 character(): CharacterContext {
        let localContext = new CharacterContext(this.context, this.state);
        this.enterRule(localContext, 1192, PostgreSqlParser.RULE_character);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9546;
            this.character_c();
            this.state = 9551;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 987, this.context) ) {
            case 1:
                {
                this.state = 9547;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9548;
                this.iconst();
                this.state = 9549;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 constcharacter(): ConstcharacterContext {
        let localContext = new ConstcharacterContext(this.context, this.state);
        this.enterRule(localContext, 1194, PostgreSqlParser.RULE_constcharacter);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9553;
            this.character_c();
            this.state = 9558;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 9554;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9555;
                this.iconst();
                this.state = 9556;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public character_c(): Character_cContext {
        let localContext = new Character_cContext(this.context, this.state);
        this.enterRule(localContext, 1196, PostgreSqlParser.RULE_character_c);
        let _la: number;
        try {
            this.state = 9570;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_NCHAR:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9560;
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 391)) & ~0x1F) === 0 && ((1 << (_la - 391)) & 32771) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 9562;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 989, this.context) ) {
                case 1:
                    {
                    this.state = 9561;
                    this.opt_varying();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_VARCHAR:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9564;
                this.match(PostgreSqlParser.KW_VARCHAR);
                }
                break;
            case PostgreSqlParser.KW_NATIONAL:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9565;
                this.match(PostgreSqlParser.KW_NATIONAL);
                this.state = 9566;
                _la = this.tokenStream.LA(1);
                if(!(_la === 391 || _la === 392)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 9568;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 990, this.context) ) {
                case 1:
                    {
                    this.state = 9567;
                    this.opt_varying();
                    }
                    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 opt_varying(): Opt_varyingContext {
        let localContext = new Opt_varyingContext(this.context, this.state);
        this.enterRule(localContext, 1198, PostgreSqlParser.RULE_opt_varying);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9572;
            this.match(PostgreSqlParser.KW_VARYING);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public constdatetime(): ConstdatetimeContext {
        let localContext = new ConstdatetimeContext(this.context, this.state);
        this.enterRule(localContext, 1200, PostgreSqlParser.RULE_constdatetime);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9574;
            _la = this.tokenStream.LA(1);
            if(!(_la === 418 || _la === 419)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 9579;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 992, this.context) ) {
            case 1:
                {
                this.state = 9575;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9576;
                this.iconst();
                this.state = 9577;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            }
            this.state = 9582;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 993, this.context) ) {
            case 1:
                {
                this.state = 9581;
                this.opt_timezone();
                }
                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 constinterval(): ConstintervalContext {
        let localContext = new ConstintervalContext(this.context, this.state);
        this.enterRule(localContext, 1202, PostgreSqlParser.RULE_constinterval);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9584;
            this.match(PostgreSqlParser.KW_INTERVAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_timezone(): Opt_timezoneContext {
        let localContext = new Opt_timezoneContext(this.context, this.state);
        this.enterRule(localContext, 1204, PostgreSqlParser.RULE_opt_timezone);
        try {
            this.state = 9592;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_WITH:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9586;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 9587;
                this.match(PostgreSqlParser.KW_TIME);
                this.state = 9588;
                this.match(PostgreSqlParser.KW_ZONE);
                }
                break;
            case PostgreSqlParser.KW_WITHOUT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9589;
                this.match(PostgreSqlParser.KW_WITHOUT);
                this.state = 9590;
                this.match(PostgreSqlParser.KW_TIME);
                this.state = 9591;
                this.match(PostgreSqlParser.KW_ZONE);
                }
                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 opt_interval(): Opt_intervalContext {
        let localContext = new Opt_intervalContext(this.context, this.state);
        this.enterRule(localContext, 1206, PostgreSqlParser.RULE_opt_interval);
        try {
            this.state = 9619;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 997, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9594;
                this.match(PostgreSqlParser.KW_YEAR);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9595;
                this.match(PostgreSqlParser.KW_MONTH);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9596;
                this.match(PostgreSqlParser.KW_DAY);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 9597;
                this.match(PostgreSqlParser.KW_HOUR);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 9598;
                this.match(PostgreSqlParser.KW_MINUTE);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 9599;
                this.interval_second();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 9600;
                this.match(PostgreSqlParser.KW_YEAR);
                this.state = 9601;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 9602;
                this.match(PostgreSqlParser.KW_MONTH);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 9603;
                this.match(PostgreSqlParser.KW_DAY);
                this.state = 9604;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 9608;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_HOUR:
                    {
                    this.state = 9605;
                    this.match(PostgreSqlParser.KW_HOUR);
                    }
                    break;
                case PostgreSqlParser.KW_MINUTE:
                    {
                    this.state = 9606;
                    this.match(PostgreSqlParser.KW_MINUTE);
                    }
                    break;
                case PostgreSqlParser.KW_SECOND:
                    {
                    this.state = 9607;
                    this.interval_second();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 9610;
                this.match(PostgreSqlParser.KW_HOUR);
                this.state = 9611;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 9614;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_MINUTE:
                    {
                    this.state = 9612;
                    this.match(PostgreSqlParser.KW_MINUTE);
                    }
                    break;
                case PostgreSqlParser.KW_SECOND:
                    {
                    this.state = 9613;
                    this.interval_second();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 9616;
                this.match(PostgreSqlParser.KW_MINUTE);
                this.state = 9617;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 9618;
                this.interval_second();
                }
                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 interval_second(): Interval_secondContext {
        let localContext = new Interval_secondContext(this.context, this.state);
        this.enterRule(localContext, 1208, PostgreSqlParser.RULE_interval_second);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9621;
            this.match(PostgreSqlParser.KW_SECOND);
            this.state = 9626;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 998, this.context) ) {
            case 1:
                {
                this.state = 9622;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9623;
                this.iconst();
                this.state = 9624;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 opt_escape(): Opt_escapeContext {
        let localContext = new Opt_escapeContext(this.context, this.state);
        this.enterRule(localContext, 1210, PostgreSqlParser.RULE_opt_escape);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9628;
            this.match(PostgreSqlParser.KW_ESCAPE);
            this.state = 9629;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public a_expr(): A_exprContext {
        let localContext = new A_exprContext(this.context, this.state);
        this.enterRule(localContext, 1212, PostgreSqlParser.RULE_a_expr);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9631;
            this.a_expr_qual();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public a_expr_qual(): A_expr_qualContext {
        let localContext = new A_expr_qualContext(this.context, this.state);
        this.enterRule(localContext, 1214, PostgreSqlParser.RULE_a_expr_qual);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9633;
            this.a_expr_lessless();
            this.state = 9635;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 999, this.context) ) {
            case 1:
                {
                this.state = 9634;
                this.qual_op();
                }
                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 a_expr_lessless(): A_expr_lesslessContext {
        let localContext = new A_expr_lesslessContext(this.context, this.state);
        this.enterRule(localContext, 1216, PostgreSqlParser.RULE_a_expr_lessless);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9637;
            this.a_expr_or();
            this.state = 9642;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1000, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9638;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 18 || _la === 19)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 9639;
                    this.a_expr_or();
                    }
                    }
                }
                this.state = 9644;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1000, 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 a_expr_or(): A_expr_orContext {
        let localContext = new A_expr_orContext(this.context, this.state);
        this.enterRule(localContext, 1218, PostgreSqlParser.RULE_a_expr_or);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9645;
            this.a_expr_and();
            this.state = 9650;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1001, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9646;
                    this.match(PostgreSqlParser.KW_OR);
                    this.state = 9647;
                    this.a_expr_and();
                    }
                    }
                }
                this.state = 9652;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1001, 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 a_expr_and(): A_expr_andContext {
        let localContext = new A_expr_andContext(this.context, this.state);
        this.enterRule(localContext, 1220, PostgreSqlParser.RULE_a_expr_and);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9653;
            this.a_expr_in();
            this.state = 9658;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1002, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9654;
                    this.match(PostgreSqlParser.KW_AND);
                    this.state = 9655;
                    this.a_expr_in();
                    }
                    }
                }
                this.state = 9660;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1002, 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 a_expr_in(): A_expr_inContext {
        let localContext = new A_expr_inContext(this.context, this.state);
        this.enterRule(localContext, 1222, PostgreSqlParser.RULE_a_expr_in);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9661;
            this.a_expr_unary_not();
            this.state = 9667;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1004, this.context) ) {
            case 1:
                {
                this.state = 9663;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 77) {
                    {
                    this.state = 9662;
                    this.match(PostgreSqlParser.KW_NOT);
                    }
                }

                this.state = 9665;
                this.match(PostgreSqlParser.KW_IN);
                this.state = 9666;
                this.in_expr();
                }
                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 a_expr_unary_not(): A_expr_unary_notContext {
        let localContext = new A_expr_unary_notContext(this.context, this.state);
        this.enterRule(localContext, 1224, PostgreSqlParser.RULE_a_expr_unary_not);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9670;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 77) {
                {
                this.state = 9669;
                this.match(PostgreSqlParser.KW_NOT);
                }
            }

            this.state = 9672;
            this.a_expr_isnull();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public a_expr_isnull(): A_expr_isnullContext {
        let localContext = new A_expr_isnullContext(this.context, this.state);
        this.enterRule(localContext, 1226, PostgreSqlParser.RULE_a_expr_isnull);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9674;
            this.a_expr_is_not();
            this.state = 9676;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1006, this.context) ) {
            case 1:
                {
                this.state = 9675;
                _la = this.tokenStream.LA(1);
                if(!(_la === 117 || _la === 122)) {
                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 a_expr_is_not(): A_expr_is_notContext {
        let localContext = new A_expr_is_notContext(this.context, this.state);
        this.enterRule(localContext, 1228, PostgreSqlParser.RULE_a_expr_is_not);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9678;
            this.a_expr_compare();
            this.state = 9702;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1010, this.context) ) {
            case 1:
                {
                this.state = 9679;
                this.match(PostgreSqlParser.KW_IS);
                this.state = 9681;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 77) {
                    {
                    this.state = 9680;
                    this.match(PostgreSqlParser.KW_NOT);
                    }
                }

                this.state = 9700;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_NULL:
                    {
                    this.state = 9683;
                    this.match(PostgreSqlParser.KW_NULL);
                    }
                    break;
                case PostgreSqlParser.KW_TRUE:
                    {
                    this.state = 9684;
                    this.match(PostgreSqlParser.KW_TRUE);
                    }
                    break;
                case PostgreSqlParser.KW_FALSE:
                    {
                    this.state = 9685;
                    this.match(PostgreSqlParser.KW_FALSE);
                    }
                    break;
                case PostgreSqlParser.KW_UNKNOWN:
                    {
                    this.state = 9686;
                    this.match(PostgreSqlParser.KW_UNKNOWN);
                    }
                    break;
                case PostgreSqlParser.KW_DISTINCT:
                    {
                    this.state = 9687;
                    this.match(PostgreSqlParser.KW_DISTINCT);
                    this.state = 9688;
                    this.match(PostgreSqlParser.KW_FROM);
                    this.state = 9689;
                    this.a_expr();
                    }
                    break;
                case PostgreSqlParser.KW_OF:
                    {
                    this.state = 9690;
                    this.match(PostgreSqlParser.KW_OF);
                    this.state = 9691;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9692;
                    this.type_list();
                    this.state = 9693;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                case PostgreSqlParser.KW_DOCUMENT:
                    {
                    this.state = 9695;
                    this.match(PostgreSqlParser.KW_DOCUMENT);
                    }
                    break;
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                    {
                    this.state = 9697;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (((((_la - 483)) & ~0x1F) === 0 && ((1 << (_la - 483)) & 15) !== 0)) {
                        {
                        this.state = 9696;
                        this.unicode_normal_form();
                        }
                    }

                    this.state = 9699;
                    this.match(PostgreSqlParser.KW_NORMALIZED);
                    }
                    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 a_expr_compare(): A_expr_compareContext {
        let localContext = new A_expr_compareContext(this.context, this.state);
        this.enterRule(localContext, 1230, PostgreSqlParser.RULE_a_expr_compare);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9704;
            this.a_expr_like();
            this.state = 9716;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1012, this.context) ) {
            case 1:
                {
                this.state = 9705;
                _la = this.tokenStream.LA(1);
                if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 44237824) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 9706;
                this.a_expr_like();
                }
                break;
            case 2:
                {
                this.state = 9707;
                this.subquery_Op();
                this.state = 9708;
                this.sub_type();
                this.state = 9714;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1011, this.context) ) {
                case 1:
                    {
                    this.state = 9709;
                    this.select_with_parens();
                    }
                    break;
                case 2:
                    {
                    this.state = 9710;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9711;
                    this.a_expr();
                    this.state = 9712;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    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 a_expr_like(): A_expr_likeContext {
        let localContext = new A_expr_likeContext(this.context, this.state);
        this.enterRule(localContext, 1232, PostgreSqlParser.RULE_a_expr_like);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9718;
            this.a_expr_qual_op();
            this.state = 9736;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1017, this.context) ) {
            case 1:
                {
                this.state = 9720;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 77) {
                    {
                    this.state = 9719;
                    this.match(PostgreSqlParser.KW_NOT);
                    }
                }

                this.state = 9730;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_LIKE:
                    {
                    this.state = 9722;
                    this.match(PostgreSqlParser.KW_LIKE);
                    }
                    break;
                case PostgreSqlParser.KW_ILIKE:
                    {
                    this.state = 9723;
                    this.match(PostgreSqlParser.KW_ILIKE);
                    }
                    break;
                case PostgreSqlParser.KW_SIMILAR:
                    {
                    this.state = 9724;
                    this.match(PostgreSqlParser.KW_SIMILAR);
                    this.state = 9725;
                    this.match(PostgreSqlParser.KW_TO);
                    }
                    break;
                case PostgreSqlParser.KW_BETWEEN:
                    {
                    this.state = 9726;
                    this.match(PostgreSqlParser.KW_BETWEEN);
                    this.state = 9728;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 91) {
                        {
                        this.state = 9727;
                        this.match(PostgreSqlParser.KW_SYMMETRIC);
                        }
                    }

                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 9732;
                this.a_expr_qual_op();
                this.state = 9734;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1016, this.context) ) {
                case 1:
                    {
                    this.state = 9733;
                    this.opt_escape();
                    }
                    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 a_expr_qual_op(): A_expr_qual_opContext {
        let localContext = new A_expr_qual_opContext(this.context, this.state);
        this.enterRule(localContext, 1234, PostgreSqlParser.RULE_a_expr_qual_op);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9738;
            this.a_expr_unary_qualop();
            this.state = 9744;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1018, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9739;
                    this.qual_op();
                    this.state = 9740;
                    this.a_expr_unary_qualop();
                    }
                    }
                }
                this.state = 9746;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1018, 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 a_expr_unary_qualop(): A_expr_unary_qualopContext {
        let localContext = new A_expr_unary_qualopContext(this.context, this.state);
        this.enterRule(localContext, 1236, PostgreSqlParser.RULE_a_expr_unary_qualop);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9748;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1019, this.context) ) {
            case 1:
                {
                this.state = 9747;
                this.qual_op();
                }
                break;
            }
            this.state = 9750;
            this.a_expr_add();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public a_expr_add(): A_expr_addContext {
        let localContext = new A_expr_addContext(this.context, this.state);
        this.enterRule(localContext, 1238, PostgreSqlParser.RULE_a_expr_add);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9752;
            this.a_expr_mul();
            this.state = 9757;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1020, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9753;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 12 || _la === 13)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 9754;
                    this.a_expr_mul();
                    }
                    }
                }
                this.state = 9759;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1020, 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 a_expr_mul(): A_expr_mulContext {
        let localContext = new A_expr_mulContext(this.context, this.state);
        this.enterRule(localContext, 1240, PostgreSqlParser.RULE_a_expr_mul);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9760;
            this.a_expr_caret();
            this.state = 9765;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1021, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9761;
                    _la = this.tokenStream.LA(1);
                    if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 134234624) !== 0))) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 9762;
                    this.a_expr_caret();
                    }
                    }
                }
                this.state = 9767;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1021, 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 a_expr_caret(): A_expr_caretContext {
        let localContext = new A_expr_caretContext(this.context, this.state);
        this.enterRule(localContext, 1242, PostgreSqlParser.RULE_a_expr_caret);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9768;
            this.a_expr_unary_sign();
            this.state = 9771;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1022, this.context) ) {
            case 1:
                {
                this.state = 9769;
                this.match(PostgreSqlParser.CARET);
                this.state = 9770;
                this.a_expr();
                }
                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 a_expr_unary_sign(): A_expr_unary_signContext {
        let localContext = new A_expr_unary_signContext(this.context, this.state);
        this.enterRule(localContext, 1244, PostgreSqlParser.RULE_a_expr_unary_sign);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9774;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 12 || _la === 13) {
                {
                this.state = 9773;
                _la = this.tokenStream.LA(1);
                if(!(_la === 12 || _la === 13)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 9776;
            this.a_expr_at_time_zone();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public a_expr_at_time_zone(): A_expr_at_time_zoneContext {
        let localContext = new A_expr_at_time_zoneContext(this.context, this.state);
        this.enterRule(localContext, 1246, PostgreSqlParser.RULE_a_expr_at_time_zone);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9778;
            this.a_expr_collate();
            this.state = 9783;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1024, this.context) ) {
            case 1:
                {
                this.state = 9779;
                this.match(PostgreSqlParser.KW_AT);
                this.state = 9780;
                this.match(PostgreSqlParser.KW_TIME);
                this.state = 9781;
                this.match(PostgreSqlParser.KW_ZONE);
                this.state = 9782;
                this.a_expr();
                }
                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 a_expr_collate(): A_expr_collateContext {
        let localContext = new A_expr_collateContext(this.context, this.state);
        this.enterRule(localContext, 1248, PostgreSqlParser.RULE_a_expr_collate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9785;
            this.a_expr_typecast();
            this.state = 9788;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1025, this.context) ) {
            case 1:
                {
                this.state = 9786;
                this.match(PostgreSqlParser.KW_COLLATE);
                this.state = 9787;
                this.any_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 a_expr_typecast(): A_expr_typecastContext {
        let localContext = new A_expr_typecastContext(this.context, this.state);
        this.enterRule(localContext, 1250, PostgreSqlParser.RULE_a_expr_typecast);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9790;
            this.c_expr();
            this.state = 9795;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1026, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 9791;
                    this.match(PostgreSqlParser.TYPECAST);
                    this.state = 9792;
                    this.typename();
                    }
                    }
                }
                this.state = 9797;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1026, 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 b_expr(): B_exprContext;
    public b_expr(_p: number): B_exprContext;
    public b_expr(_p?: number): B_exprContext {
        if (_p === undefined) {
            _p = 0;
        }

        let parentContext = this.context;
        let parentState = this.state;
        let localContext = new B_exprContext(this.context, parentState);
        let previousContext = localContext;
        let _startState = 1252;
        this.enterRecursionRule(localContext, 1252, PostgreSqlParser.RULE_b_expr, _p);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9805;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1027, this.context) ) {
            case 1:
                {
                this.state = 9799;
                this.c_expr();
                }
                break;
            case 2:
                {
                this.state = 9800;
                _la = this.tokenStream.LA(1);
                if(!(_la === 12 || _la === 13)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 9801;
                this.b_expr(9);
                }
                break;
            case 3:
                {
                this.state = 9802;
                this.qual_op();
                this.state = 9803;
                this.b_expr(3);
                }
                break;
            }
            this.context!.stop = this.tokenStream.LT(-1);
            this.state = 9846;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1031, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    if (this._parseListeners != null) {
                        this.triggerExitRuleEvent();
                    }
                    previousContext = localContext;
                    {
                    this.state = 9844;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1030, this.context) ) {
                    case 1:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9807;
                        if (!(this.precpred(this.context, 8))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 8)");
                        }
                        this.state = 9808;
                        this.match(PostgreSqlParser.CARET);
                        this.state = 9809;
                        this.b_expr(9);
                        }
                        break;
                    case 2:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9810;
                        if (!(this.precpred(this.context, 7))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 7)");
                        }
                        this.state = 9811;
                        _la = this.tokenStream.LA(1);
                        if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 134234624) !== 0))) {
                        this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        this.state = 9812;
                        this.b_expr(8);
                        }
                        break;
                    case 3:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9813;
                        if (!(this.precpred(this.context, 6))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 6)");
                        }
                        this.state = 9814;
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 12 || _la === 13)) {
                        this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        this.state = 9815;
                        this.b_expr(7);
                        }
                        break;
                    case 4:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9816;
                        if (!(this.precpred(this.context, 5))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 5)");
                        }
                        this.state = 9817;
                        this.qual_op();
                        this.state = 9818;
                        this.b_expr(6);
                        }
                        break;
                    case 5:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9820;
                        if (!(this.precpred(this.context, 4))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 4)");
                        }
                        this.state = 9821;
                        _la = this.tokenStream.LA(1);
                        if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 44237824) !== 0))) {
                        this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        this.state = 9822;
                        this.b_expr(5);
                        }
                        break;
                    case 6:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9823;
                        if (!(this.precpred(this.context, 10))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 10)");
                        }
                        this.state = 9824;
                        this.match(PostgreSqlParser.TYPECAST);
                        this.state = 9825;
                        this.typename();
                        }
                        break;
                    case 7:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9826;
                        if (!(this.precpred(this.context, 2))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 2)");
                        }
                        this.state = 9827;
                        this.qual_op();
                        }
                        break;
                    case 8:
                        {
                        localContext = new B_exprContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, PostgreSqlParser.RULE_b_expr);
                        this.state = 9828;
                        if (!(this.precpred(this.context, 1))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 1)");
                        }
                        this.state = 9829;
                        this.match(PostgreSqlParser.KW_IS);
                        this.state = 9831;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 77) {
                            {
                            this.state = 9830;
                            this.match(PostgreSqlParser.KW_NOT);
                            }
                        }

                        this.state = 9842;
                        this.errorHandler.sync(this);
                        switch (this.tokenStream.LA(1)) {
                        case PostgreSqlParser.KW_DISTINCT:
                            {
                            this.state = 9833;
                            this.match(PostgreSqlParser.KW_DISTINCT);
                            this.state = 9834;
                            this.match(PostgreSqlParser.KW_FROM);
                            this.state = 9835;
                            this.b_expr(0);
                            }
                            break;
                        case PostgreSqlParser.KW_OF:
                            {
                            this.state = 9836;
                            this.match(PostgreSqlParser.KW_OF);
                            this.state = 9837;
                            this.match(PostgreSqlParser.OPEN_PAREN);
                            this.state = 9838;
                            this.type_list();
                            this.state = 9839;
                            this.match(PostgreSqlParser.CLOSE_PAREN);
                            }
                            break;
                        case PostgreSqlParser.KW_DOCUMENT:
                            {
                            this.state = 9841;
                            this.match(PostgreSqlParser.KW_DOCUMENT);
                            }
                            break;
                        default:
                            throw new antlr.NoViableAltException(this);
                        }
                        }
                        break;
                    }
                    }
                }
                this.state = 9848;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1031, 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 c_expr(): C_exprContext {
        let localContext = new C_exprContext(this.context, this.state);
        this.enterRule(localContext, 1254, PostgreSqlParser.RULE_c_expr);
        try {
            this.state = 9885;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1034, this.context) ) {
            case 1:
                localContext = new C_expr_existsContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9849;
                this.match(PostgreSqlParser.KW_EXISTS);
                this.state = 9850;
                this.select_with_parens();
                }
                break;
            case 2:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9851;
                this.match(PostgreSqlParser.KW_ARRAY);
                this.state = 9854;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 9852;
                    this.select_with_parens();
                    }
                    break;
                case PostgreSqlParser.OPEN_BRACKET:
                    {
                    this.state = 9853;
                    this.array_expr();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 3:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9856;
                this.match(PostgreSqlParser.PARAM);
                this.state = 9857;
                this.opt_indirection();
                }
                break;
            case 4:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 9858;
                this.match(PostgreSqlParser.KW_GROUPING);
                this.state = 9859;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9860;
                this.expr_list();
                this.state = 9861;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 5:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 9863;
                this.match(PostgreSqlParser.KW_UNIQUE);
                this.state = 9864;
                this.select_with_parens();
                }
                break;
            case 6:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 9865;
                this.aexprconst();
                }
                break;
            case 7:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 9866;
                this.plsqlvariablename();
                }
                break;
            case 8:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 9867;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9868;
                (localContext as C_expr_exprContext)._a_expr_in_parens = this.a_expr();
                this.state = 9869;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 9870;
                this.opt_indirection();
                }
                break;
            case 9:
                localContext = new C_expr_caseContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 9872;
                this.case_expr();
                }
                break;
            case 10:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 9873;
                this.func_expr();
                }
                break;
            case 11:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 9874;
                this.select_with_parens();
                this.state = 9876;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1033, this.context) ) {
                case 1:
                    {
                    this.state = 9875;
                    this.indirection();
                    }
                    break;
                }
                }
                break;
            case 12:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 9878;
                this.explicit_row();
                }
                break;
            case 13:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 9879;
                this.implicit_row();
                }
                break;
            case 14:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 9880;
                this.row();
                this.state = 9881;
                this.match(PostgreSqlParser.KW_OVERLAPS);
                this.state = 9882;
                this.row();
                }
                break;
            case 15:
                localContext = new C_expr_exprContext(localContext);
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 9884;
                this.columnref();
                }
                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 plsqlvariablename(): PlsqlvariablenameContext {
        let localContext = new PlsqlvariablenameContext(this.context, this.state);
        this.enterRule(localContext, 1256, PostgreSqlParser.RULE_plsqlvariablename);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9887;
            this.match(PostgreSqlParser.PLSQLVARIABLENAME);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public func_application(): Func_applicationContext {
        let localContext = new Func_applicationContext(this.context, this.state);
        this.enterRule(localContext, 1258, PostgreSqlParser.RULE_func_application);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 9889;
            this.function_name();
            this.state = 9915;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1040, this.context) ) {
            case 1:
                {
                this.state = 9890;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9912;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.OPEN_PAREN:
                case PostgreSqlParser.PLUS:
                case PostgreSqlParser.MINUS:
                case PostgreSqlParser.PARAM:
                case PostgreSqlParser.Operator:
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_CASE:
                case PostgreSqlParser.KW_CAST:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_CURRENT_CATALOG:
                case PostgreSqlParser.KW_CURRENT_DATE:
                case PostgreSqlParser.KW_CURRENT_ROLE:
                case PostgreSqlParser.KW_CURRENT_TIME:
                case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
                case PostgreSqlParser.KW_CURRENT_USER:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FALSE:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_LOCALTIME:
                case PostgreSqlParser.KW_LOCALTIMESTAMP:
                case PostgreSqlParser.KW_NOT:
                case PostgreSqlParser.KW_NULL:
                case PostgreSqlParser.KW_SESSION_USER:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_TRUE:
                case PostgreSqlParser.KW_UNIQUE:
                case PostgreSqlParser.KW_USER:
                case PostgreSqlParser.KW_AUTHORIZATION:
                case PostgreSqlParser.KW_BINARY:
                case PostgreSqlParser.KW_COLLATION:
                case PostgreSqlParser.KW_CONCURRENTLY:
                case PostgreSqlParser.KW_CROSS:
                case PostgreSqlParser.KW_CURRENT_SCHEMA:
                case PostgreSqlParser.KW_FREEZE:
                case PostgreSqlParser.KW_FULL:
                case PostgreSqlParser.KW_ILIKE:
                case PostgreSqlParser.KW_INNER:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_ISNULL:
                case PostgreSqlParser.KW_JOIN:
                case PostgreSqlParser.KW_LEFT:
                case PostgreSqlParser.KW_LIKE:
                case PostgreSqlParser.KW_NATURAL:
                case PostgreSqlParser.KW_NOTNULL:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_OVERLAPS:
                case PostgreSqlParser.KW_RIGHT:
                case PostgreSqlParser.KW_SIMILAR:
                case PostgreSqlParser.KW_VERBOSE:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_TABLESAMPLE:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.BinaryStringConstant:
                case PostgreSqlParser.HexadecimalStringConstant:
                case PostgreSqlParser.Integral:
                case PostgreSqlParser.Numeric:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 9891;
                    this.func_arg_list();
                    this.state = 9895;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 6) {
                        {
                        this.state = 9892;
                        this.match(PostgreSqlParser.COMMA);
                        this.state = 9893;
                        this.match(PostgreSqlParser.KW_VARIADIC);
                        this.state = 9894;
                        this.func_arg_expr();
                        }
                    }

                    this.state = 9898;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 83) {
                        {
                        this.state = 9897;
                        this.opt_sort_clause();
                        }
                    }

                    }
                    break;
                case PostgreSqlParser.KW_VARIADIC:
                    {
                    this.state = 9900;
                    this.match(PostgreSqlParser.KW_VARIADIC);
                    this.state = 9901;
                    this.func_arg_expr();
                    this.state = 9903;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 83) {
                        {
                        this.state = 9902;
                        this.opt_sort_clause();
                        }
                    }

                    }
                    break;
                case PostgreSqlParser.KW_ALL:
                case PostgreSqlParser.KW_DISTINCT:
                    {
                    this.state = 9905;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 30 || _la === 56)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 9906;
                    this.func_arg_list();
                    this.state = 9908;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 83) {
                        {
                        this.state = 9907;
                        this.opt_sort_clause();
                        }
                    }

                    }
                    break;
                case PostgreSqlParser.STAR:
                    {
                    this.state = 9910;
                    this.match(PostgreSqlParser.STAR);
                    }
                    break;
                case PostgreSqlParser.CLOSE_PAREN:
                    // tslint:disable-next-line:no-empty
                    {
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 9914;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 func_expr(): Func_exprContext {
        let localContext = new Func_exprContext(this.context, this.state);
        this.enterRule(localContext, 1260, PostgreSqlParser.RULE_func_expr);
        try {
            this.state = 9928;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1044, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9917;
                this.func_application();
                this.state = 9919;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1041, this.context) ) {
                case 1:
                    {
                    this.state = 9918;
                    this.within_group_clause();
                    }
                    break;
                }
                this.state = 9922;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1042, this.context) ) {
                case 1:
                    {
                    this.state = 9921;
                    this.filter_clause();
                    }
                    break;
                }
                this.state = 9925;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1043, this.context) ) {
                case 1:
                    {
                    this.state = 9924;
                    this.over_clause();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9927;
                this.func_expr_common_subexpr();
                }
                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 func_expr_windowless(): Func_expr_windowlessContext {
        let localContext = new Func_expr_windowlessContext(this.context, this.state);
        this.enterRule(localContext, 1262, PostgreSqlParser.RULE_func_expr_windowless);
        try {
            this.state = 9932;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1045, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9930;
                this.func_application();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9931;
                this.func_expr_common_subexpr();
                }
                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 func_expr_common_subexpr(): Func_expr_common_subexprContext {
        let localContext = new Func_expr_common_subexprContext(this.context, this.state);
        this.enterRule(localContext, 1264, PostgreSqlParser.RULE_func_expr_common_subexpr);
        let _la: number;
        try {
            this.state = 10118;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_COLLATION:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 9934;
                this.match(PostgreSqlParser.KW_COLLATION);
                this.state = 9935;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 9936;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9937;
                this.a_expr();
                this.state = 9938;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_CURRENT_DATE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 9940;
                this.match(PostgreSqlParser.KW_CURRENT_DATE);
                }
                break;
            case PostgreSqlParser.KW_CURRENT_TIME:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 9941;
                this.match(PostgreSqlParser.KW_CURRENT_TIME);
                this.state = 9946;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1046, this.context) ) {
                case 1:
                    {
                    this.state = 9942;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9943;
                    this.iconst();
                    this.state = 9944;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 9948;
                this.match(PostgreSqlParser.KW_CURRENT_TIMESTAMP);
                this.state = 9953;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1047, this.context) ) {
                case 1:
                    {
                    this.state = 9949;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9950;
                    this.iconst();
                    this.state = 9951;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_LOCALTIME:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 9955;
                this.match(PostgreSqlParser.KW_LOCALTIME);
                this.state = 9960;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1048, this.context) ) {
                case 1:
                    {
                    this.state = 9956;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9957;
                    this.iconst();
                    this.state = 9958;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_LOCALTIMESTAMP:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 9962;
                this.match(PostgreSqlParser.KW_LOCALTIMESTAMP);
                this.state = 9967;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1049, this.context) ) {
                case 1:
                    {
                    this.state = 9963;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 9964;
                    this.iconst();
                    this.state = 9965;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_CURRENT_ROLE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 9969;
                this.match(PostgreSqlParser.KW_CURRENT_ROLE);
                }
                break;
            case PostgreSqlParser.KW_CURRENT_USER:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 9970;
                this.match(PostgreSqlParser.KW_CURRENT_USER);
                }
                break;
            case PostgreSqlParser.KW_SESSION_USER:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 9971;
                this.match(PostgreSqlParser.KW_SESSION_USER);
                }
                break;
            case PostgreSqlParser.KW_USER:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 9972;
                this.match(PostgreSqlParser.KW_USER);
                }
                break;
            case PostgreSqlParser.KW_CURRENT_CATALOG:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 9973;
                this.match(PostgreSqlParser.KW_CURRENT_CATALOG);
                }
                break;
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 9974;
                this.match(PostgreSqlParser.KW_CURRENT_SCHEMA);
                }
                break;
            case PostgreSqlParser.KW_CAST:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 9975;
                this.match(PostgreSqlParser.KW_CAST);
                this.state = 9976;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9977;
                this.a_expr();
                this.state = 9978;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 9979;
                this.typename();
                this.state = 9980;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_EXTRACT:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 9982;
                this.match(PostgreSqlParser.KW_EXTRACT);
                this.state = 9983;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9985;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 130)) & ~0x1F) === 0 && ((1 << (_la - 130)) & 2290106369) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 545) !== 0) || ((((_la - 207)) & ~0x1F) === 0 && ((1 << (_la - 207)) & 2057) !== 0) || ((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 428867841) !== 0) || ((((_la - 279)) & ~0x1F) === 0 && ((1 << (_la - 279)) & 268451841) !== 0) || ((((_la - 313)) & ~0x1F) === 0 && ((1 << (_la - 313)) & 1059905) !== 0) || _la === 360 || _la === 384 || _la === 433 || _la === 434 || ((((_la - 477)) & ~0x1F) === 0 && ((1 << (_la - 477)) & 3959414785) !== 0) || ((((_la - 509)) & ~0x1F) === 0 && ((1 << (_la - 509)) & 3071) !== 0) || ((((_la - 549)) & ~0x1F) === 0 && ((1 << (_la - 549)) & 100674083) !== 0) || _la === 584) {
                    {
                    this.state = 9984;
                    this.extract_list();
                    }
                }

                this.state = 9987;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_NORMALIZE:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 9988;
                this.match(PostgreSqlParser.KW_NORMALIZE);
                this.state = 9989;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9990;
                this.a_expr();
                this.state = 9993;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 6) {
                    {
                    this.state = 9991;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 9992;
                    this.unicode_normal_form();
                    }
                }

                this.state = 9995;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_OVERLAY:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 9997;
                this.match(PostgreSqlParser.KW_OVERLAY);
                this.state = 9998;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 9999;
                this.overlay_list();
                this.state = 10000;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_POSITION:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 10002;
                this.match(PostgreSqlParser.KW_POSITION);
                this.state = 10003;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10005;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421516677) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894091) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) {
                    {
                    this.state = 10004;
                    this.position_list();
                    }
                }

                this.state = 10007;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_SUBSTRING:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 10008;
                this.match(PostgreSqlParser.KW_SUBSTRING);
                this.state = 10009;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10011;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421516677) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) {
                    {
                    this.state = 10010;
                    this.substr_list();
                    }
                }

                this.state = 10013;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_TREAT:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 10014;
                this.match(PostgreSqlParser.KW_TREAT);
                this.state = 10015;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10016;
                this.a_expr();
                this.state = 10017;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 10018;
                this.typename();
                this.state = 10019;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_TRIM:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 10021;
                this.match(PostgreSqlParser.KW_TRIM);
                this.state = 10022;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10024;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 39 || _la === 73 || _la === 95) {
                    {
                    this.state = 10023;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 39 || _la === 73 || _la === 95)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 10026;
                this.trim_list();
                this.state = 10027;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_NULLIF:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 10029;
                this.match(PostgreSqlParser.KW_NULLIF);
                this.state = 10030;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10031;
                this.a_expr();
                this.state = 10032;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10033;
                this.a_expr();
                this.state = 10034;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_COALESCE:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 10036;
                this.match(PostgreSqlParser.KW_COALESCE);
                this.state = 10037;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10038;
                this.expr_list();
                this.state = 10039;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_GREATEST:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 10041;
                this.match(PostgreSqlParser.KW_GREATEST);
                this.state = 10042;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10043;
                this.expr_list();
                this.state = 10044;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_LEAST:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 10046;
                this.match(PostgreSqlParser.KW_LEAST);
                this.state = 10047;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10048;
                this.expr_list();
                this.state = 10049;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLCONCAT:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 10051;
                this.match(PostgreSqlParser.KW_XMLCONCAT);
                this.state = 10052;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10053;
                this.expr_list();
                this.state = 10054;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLELEMENT:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 10056;
                this.match(PostgreSqlParser.KW_XMLELEMENT);
                this.state = 10057;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10058;
                this.match(PostgreSqlParser.KW_NAME);
                this.state = 10059;
                this.collabel();
                this.state = 10065;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 6) {
                    {
                    this.state = 10060;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 10063;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1055, this.context) ) {
                    case 1:
                        {
                        this.state = 10061;
                        this.xml_attributes();
                        }
                        break;
                    case 2:
                        {
                        this.state = 10062;
                        this.expr_list();
                        }
                        break;
                    }
                    }
                }

                this.state = 10067;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLEXISTS:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 10069;
                this.match(PostgreSqlParser.KW_XMLEXISTS);
                this.state = 10070;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10071;
                this.c_expr();
                this.state = 10072;
                this.xmlexists_argument();
                this.state = 10073;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLFOREST:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 10075;
                this.match(PostgreSqlParser.KW_XMLFOREST);
                this.state = 10076;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10077;
                this.xml_attribute_list();
                this.state = 10078;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLPARSE:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 10080;
                this.match(PostgreSqlParser.KW_XMLPARSE);
                this.state = 10081;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10082;
                this.document_or_content();
                this.state = 10083;
                this.a_expr();
                this.state = 10085;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 292 || _la === 347) {
                    {
                    this.state = 10084;
                    this.xml_whitespace_option();
                    }
                }

                this.state = 10087;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLPI:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 10089;
                this.match(PostgreSqlParser.KW_XMLPI);
                this.state = 10090;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10091;
                this.match(PostgreSqlParser.KW_NAME);
                this.state = 10092;
                this.collabel();
                this.state = 10095;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 6) {
                    {
                    this.state = 10093;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 10094;
                    this.a_expr();
                    }
                }

                this.state = 10097;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLROOT:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 10099;
                this.match(PostgreSqlParser.KW_XMLROOT);
                this.state = 10100;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10101;
                this.match(PostgreSqlParser.KW_XML);
                this.state = 10102;
                this.a_expr();
                this.state = 10103;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10104;
                this.xml_root_version();
                this.state = 10106;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 6) {
                    {
                    this.state = 10105;
                    this.opt_xml_root_standalone();
                    }
                }

                this.state = 10108;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.KW_XMLSERIALIZE:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 10110;
                this.match(PostgreSqlParser.KW_XMLSERIALIZE);
                this.state = 10111;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10112;
                this.document_or_content();
                this.state = 10113;
                this.a_expr();
                this.state = 10114;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 10115;
                this.simpletypename();
                this.state = 10116;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 xml_root_version(): Xml_root_versionContext {
        let localContext = new Xml_root_versionContext(this.context, this.state);
        this.enterRule(localContext, 1266, PostgreSqlParser.RULE_xml_root_version);
        try {
            this.state = 10125;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1061, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10120;
                this.match(PostgreSqlParser.KW_VERSION);
                this.state = 10121;
                this.a_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10122;
                this.match(PostgreSqlParser.KW_VERSION);
                this.state = 10123;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 10124;
                this.match(PostgreSqlParser.KW_VALUE);
                }
                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 opt_xml_root_standalone(): Opt_xml_root_standaloneContext {
        let localContext = new Opt_xml_root_standaloneContext(this.context, this.state);
        this.enterRule(localContext, 1268, PostgreSqlParser.RULE_opt_xml_root_standalone);
        try {
            this.state = 10137;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1062, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10127;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10128;
                this.match(PostgreSqlParser.KW_STANDALONE);
                this.state = 10129;
                this.match(PostgreSqlParser.KW_YES);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10130;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10131;
                this.match(PostgreSqlParser.KW_STANDALONE);
                this.state = 10132;
                this.match(PostgreSqlParser.KW_NO);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10133;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10134;
                this.match(PostgreSqlParser.KW_STANDALONE);
                this.state = 10135;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 10136;
                this.match(PostgreSqlParser.KW_VALUE);
                }
                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 xml_attributes(): Xml_attributesContext {
        let localContext = new Xml_attributesContext(this.context, this.state);
        this.enterRule(localContext, 1270, PostgreSqlParser.RULE_xml_attributes);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10139;
            this.match(PostgreSqlParser.KW_XMLATTRIBUTES);
            this.state = 10140;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 10141;
            this.xml_attribute_list();
            this.state = 10142;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xml_attribute_list(): Xml_attribute_listContext {
        let localContext = new Xml_attribute_listContext(this.context, this.state);
        this.enterRule(localContext, 1272, PostgreSqlParser.RULE_xml_attribute_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10144;
            this.xml_attribute_el();
            this.state = 10149;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10145;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10146;
                this.xml_attribute_el();
                }
                }
                this.state = 10151;
                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 xml_attribute_el(): Xml_attribute_elContext {
        let localContext = new Xml_attribute_elContext(this.context, this.state);
        this.enterRule(localContext, 1274, PostgreSqlParser.RULE_xml_attribute_el);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10152;
            this.a_expr();
            this.state = 10155;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 36) {
                {
                this.state = 10153;
                this.match(PostgreSqlParser.KW_AS);
                this.state = 10154;
                this.collabel();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public document_or_content(): Document_or_contentContext {
        let localContext = new Document_or_contentContext(this.context, this.state);
        this.enterRule(localContext, 1276, PostgreSqlParser.RULE_document_or_content);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10157;
            _la = this.tokenStream.LA(1);
            if(!(_la === 166 || _la === 188)) {
            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 xml_whitespace_option(): Xml_whitespace_optionContext {
        let localContext = new Xml_whitespace_optionContext(this.context, this.state);
        this.enterRule(localContext, 1278, PostgreSqlParser.RULE_xml_whitespace_option);
        try {
            this.state = 10163;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_PRESERVE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10159;
                this.match(PostgreSqlParser.KW_PRESERVE);
                this.state = 10160;
                this.match(PostgreSqlParser.KW_WHITESPACE);
                }
                break;
            case PostgreSqlParser.KW_STRIP:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10161;
                this.match(PostgreSqlParser.KW_STRIP);
                this.state = 10162;
                this.match(PostgreSqlParser.KW_WHITESPACE);
                }
                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 xmlexists_argument(): Xmlexists_argumentContext {
        let localContext = new Xmlexists_argumentContext(this.context, this.state);
        this.enterRule(localContext, 1280, PostgreSqlParser.RULE_xmlexists_argument);
        try {
            this.state = 10180;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1066, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10165;
                this.match(PostgreSqlParser.KW_PASSING);
                this.state = 10166;
                this.c_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10167;
                this.match(PostgreSqlParser.KW_PASSING);
                this.state = 10168;
                this.c_expr();
                this.state = 10169;
                this.xml_passing_mech();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10171;
                this.match(PostgreSqlParser.KW_PASSING);
                this.state = 10172;
                this.xml_passing_mech();
                this.state = 10173;
                this.c_expr();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10175;
                this.match(PostgreSqlParser.KW_PASSING);
                this.state = 10176;
                this.xml_passing_mech();
                this.state = 10177;
                this.c_expr();
                this.state = 10178;
                this.xml_passing_mech();
                }
                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 xml_passing_mech(): Xml_passing_mechContext {
        let localContext = new Xml_passing_mechContext(this.context, this.state);
        this.enterRule(localContext, 1282, PostgreSqlParser.RULE_xml_passing_mech);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10182;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 10183;
            _la = this.tokenStream.LA(1);
            if(!(_la === 304 || _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 within_group_clause(): Within_group_clauseContext {
        let localContext = new Within_group_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1284, PostgreSqlParser.RULE_within_group_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10185;
            this.match(PostgreSqlParser.KW_WITHIN);
            this.state = 10186;
            this.match(PostgreSqlParser.KW_GROUP);
            this.state = 10187;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 10188;
            this.sort_clause();
            this.state = 10189;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public filter_clause(): Filter_clauseContext {
        let localContext = new Filter_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1286, PostgreSqlParser.RULE_filter_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10191;
            this.match(PostgreSqlParser.KW_FILTER);
            this.state = 10192;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 10193;
            this.match(PostgreSqlParser.KW_WHERE);
            this.state = 10194;
            this.a_expr();
            this.state = 10195;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public window_clause(): Window_clauseContext {
        let localContext = new Window_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1288, PostgreSqlParser.RULE_window_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10197;
            this.match(PostgreSqlParser.KW_WINDOW);
            this.state = 10198;
            this.window_definition_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public window_definition_list(): Window_definition_listContext {
        let localContext = new Window_definition_listContext(this.context, this.state);
        this.enterRule(localContext, 1290, PostgreSqlParser.RULE_window_definition_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10200;
            this.window_definition();
            this.state = 10205;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1067, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 10201;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 10202;
                    this.window_definition();
                    }
                    }
                }
                this.state = 10207;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1067, 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 window_definition(): Window_definitionContext {
        let localContext = new Window_definitionContext(this.context, this.state);
        this.enterRule(localContext, 1292, PostgreSqlParser.RULE_window_definition);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10208;
            this.colid();
            this.state = 10209;
            this.match(PostgreSqlParser.KW_AS);
            this.state = 10210;
            this.window_specification();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public over_clause(): Over_clauseContext {
        let localContext = new Over_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1294, PostgreSqlParser.RULE_over_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10212;
            this.match(PostgreSqlParser.KW_OVER);
            this.state = 10215;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.OPEN_PAREN:
                {
                this.state = 10213;
                this.window_specification();
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 10214;
                this.colid();
                }
                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 window_specification(): Window_specificationContext {
        let localContext = new Window_specificationContext(this.context, this.state);
        this.enterRule(localContext, 1296, PostgreSqlParser.RULE_window_specification);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10217;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 10219;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1069, this.context) ) {
            case 1:
                {
                this.state = 10218;
                this.opt_existing_window_name();
                }
                break;
            }
            this.state = 10222;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 285) {
                {
                this.state = 10221;
                this.opt_partition_clause();
                }
            }

            this.state = 10225;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 83) {
                {
                this.state = 10224;
                this.opt_sort_clause();
                }
            }

            this.state = 10228;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 299 || _la === 320 || _la === 481) {
                {
                this.state = 10227;
                this.opt_frame_clause();
                }
            }

            this.state = 10230;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_existing_window_name(): Opt_existing_window_nameContext {
        let localContext = new Opt_existing_window_nameContext(this.context, this.state);
        this.enterRule(localContext, 1298, PostgreSqlParser.RULE_opt_existing_window_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10232;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_partition_clause(): Opt_partition_clauseContext {
        let localContext = new Opt_partition_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1300, PostgreSqlParser.RULE_opt_partition_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10234;
            this.match(PostgreSqlParser.KW_PARTITION);
            this.state = 10235;
            this.match(PostgreSqlParser.KW_BY);
            this.state = 10236;
            this.expr_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_frame_clause(): Opt_frame_clauseContext {
        let localContext = new Opt_frame_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1302, PostgreSqlParser.RULE_opt_frame_clause);
        let _la: number;
        try {
            this.state = 10253;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_RANGE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10238;
                this.match(PostgreSqlParser.KW_RANGE);
                this.state = 10239;
                this.frame_extent();
                this.state = 10241;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 199) {
                    {
                    this.state = 10240;
                    this.opt_window_exclusion_clause();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_ROWS:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10243;
                this.match(PostgreSqlParser.KW_ROWS);
                this.state = 10244;
                this.frame_extent();
                this.state = 10246;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 199) {
                    {
                    this.state = 10245;
                    this.opt_window_exclusion_clause();
                    }
                }

                }
                break;
            case PostgreSqlParser.KW_GROUPS:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10248;
                this.match(PostgreSqlParser.KW_GROUPS);
                this.state = 10249;
                this.frame_extent();
                this.state = 10251;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 199) {
                    {
                    this.state = 10250;
                    this.opt_window_exclusion_clause();
                    }
                }

                }
                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 frame_extent(): Frame_extentContext {
        let localContext = new Frame_extentContext(this.context, this.state);
        this.enterRule(localContext, 1304, PostgreSqlParser.RULE_frame_extent);
        try {
            this.state = 10261;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1077, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10255;
                this.frame_bound();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10256;
                this.match(PostgreSqlParser.KW_BETWEEN);
                this.state = 10257;
                this.frame_bound();
                this.state = 10258;
                this.match(PostgreSqlParser.KW_AND);
                this.state = 10259;
                this.frame_bound();
                }
                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 frame_bound(): Frame_boundContext {
        let localContext = new Frame_boundContext(this.context, this.state);
        this.enterRule(localContext, 1306, PostgreSqlParser.RULE_frame_bound);
        let _la: number;
        try {
            this.state = 10270;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1078, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10263;
                this.match(PostgreSqlParser.KW_UNBOUNDED);
                this.state = 10264;
                _la = this.tokenStream.LA(1);
                if(!(_la === 208 || _la === 289)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10265;
                this.match(PostgreSqlParser.KW_CURRENT);
                this.state = 10266;
                this.match(PostgreSqlParser.KW_ROW);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10267;
                this.a_expr();
                this.state = 10268;
                _la = this.tokenStream.LA(1);
                if(!(_la === 208 || _la === 289)) {
                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 opt_window_exclusion_clause(): Opt_window_exclusion_clauseContext {
        let localContext = new Opt_window_exclusion_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1308, PostgreSqlParser.RULE_opt_window_exclusion_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10272;
            this.match(PostgreSqlParser.KW_EXCLUDE);
            this.state = 10279;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_CURRENT:
                {
                this.state = 10273;
                this.match(PostgreSqlParser.KW_CURRENT);
                this.state = 10274;
                this.match(PostgreSqlParser.KW_ROW);
                }
                break;
            case PostgreSqlParser.KW_GROUP:
                {
                this.state = 10275;
                this.match(PostgreSqlParser.KW_GROUP);
                }
                break;
            case PostgreSqlParser.KW_TIES:
                {
                this.state = 10276;
                this.match(PostgreSqlParser.KW_TIES);
                }
                break;
            case PostgreSqlParser.KW_NO:
                {
                this.state = 10277;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 10278;
                this.match(PostgreSqlParser.KW_OTHERS);
                }
                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 row(): RowContext {
        let localContext = new RowContext(this.context, this.state);
        this.enterRule(localContext, 1310, PostgreSqlParser.RULE_row);
        let _la: number;
        try {
            this.state = 10293;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_ROW:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10281;
                this.match(PostgreSqlParser.KW_ROW);
                this.state = 10282;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10284;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421516677) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) {
                    {
                    this.state = 10283;
                    this.expr_list();
                    }
                }

                this.state = 10286;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10287;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10288;
                this.expr_list();
                this.state = 10289;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10290;
                this.a_expr();
                this.state = 10291;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 explicit_row(): Explicit_rowContext {
        let localContext = new Explicit_rowContext(this.context, this.state);
        this.enterRule(localContext, 1312, PostgreSqlParser.RULE_explicit_row);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10295;
            this.match(PostgreSqlParser.KW_ROW);
            this.state = 10296;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 10298;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421516677) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) {
                {
                this.state = 10297;
                this.expr_list();
                }
            }

            this.state = 10300;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public implicit_row(): Implicit_rowContext {
        let localContext = new Implicit_rowContext(this.context, this.state);
        this.enterRule(localContext, 1314, PostgreSqlParser.RULE_implicit_row);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10302;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 10303;
            this.a_expr();
            this.state = 10304;
            this.match(PostgreSqlParser.COMMA);
            this.state = 10305;
            this.expr_list();
            this.state = 10306;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public sub_type(): Sub_typeContext {
        let localContext = new Sub_typeContext(this.context, this.state);
        this.enterRule(localContext, 1316, PostgreSqlParser.RULE_sub_type);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10308;
            _la = this.tokenStream.LA(1);
            if(!(_la === 30 || _la === 34 || _la === 90)) {
            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 all_op(): All_opContext {
        let localContext = new All_opContext(this.context, this.state);
        this.enterRule(localContext, 1318, PostgreSqlParser.RULE_all_op);
        try {
            this.state = 10312;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.Operator:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10310;
                this.match(PostgreSqlParser.Operator);
                }
                break;
            case PostgreSqlParser.STAR:
            case PostgreSqlParser.EQUAL:
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.SLASH:
            case PostgreSqlParser.CARET:
            case PostgreSqlParser.LT:
            case PostgreSqlParser.GT:
            case PostgreSqlParser.LESS_EQUALS:
            case PostgreSqlParser.GREATER_EQUALS:
            case PostgreSqlParser.NOT_EQUALS:
            case PostgreSqlParser.PERCENT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10311;
                this.mathop();
                }
                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 mathop(): MathopContext {
        let localContext = new MathopContext(this.context, this.state);
        this.enterRule(localContext, 1320, PostgreSqlParser.RULE_mathop);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10314;
            _la = this.tokenStream.LA(1);
            if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 178517504) !== 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 qual_op(): Qual_opContext {
        let localContext = new Qual_opContext(this.context, this.state);
        this.enterRule(localContext, 1322, PostgreSqlParser.RULE_qual_op);
        try {
            this.state = 10322;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.Operator:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10316;
                this.match(PostgreSqlParser.Operator);
                }
                break;
            case PostgreSqlParser.KW_OPERATOR:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10317;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 10318;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10319;
                this.any_operator();
                this.state = 10320;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 qual_all_op(): Qual_all_opContext {
        let localContext = new Qual_all_opContext(this.context, this.state);
        this.enterRule(localContext, 1324, PostgreSqlParser.RULE_qual_all_op);
        try {
            this.state = 10330;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.STAR:
            case PostgreSqlParser.EQUAL:
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.SLASH:
            case PostgreSqlParser.CARET:
            case PostgreSqlParser.LT:
            case PostgreSqlParser.GT:
            case PostgreSqlParser.LESS_EQUALS:
            case PostgreSqlParser.GREATER_EQUALS:
            case PostgreSqlParser.NOT_EQUALS:
            case PostgreSqlParser.PERCENT:
            case PostgreSqlParser.Operator:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10324;
                this.all_op();
                }
                break;
            case PostgreSqlParser.KW_OPERATOR:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10325;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 10326;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10327;
                this.any_operator();
                this.state = 10328;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 subquery_Op(): Subquery_OpContext {
        let localContext = new Subquery_OpContext(this.context, this.state);
        this.enterRule(localContext, 1326, PostgreSqlParser.RULE_subquery_Op);
        try {
            this.state = 10344;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1086, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10332;
                this.all_op();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10333;
                this.match(PostgreSqlParser.KW_OPERATOR);
                this.state = 10334;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10335;
                this.any_operator();
                this.state = 10336;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10338;
                this.match(PostgreSqlParser.KW_LIKE);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10339;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 10340;
                this.match(PostgreSqlParser.KW_LIKE);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10341;
                this.match(PostgreSqlParser.KW_ILIKE);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 10342;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 10343;
                this.match(PostgreSqlParser.KW_ILIKE);
                }
                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 expr_list(): Expr_listContext {
        let localContext = new Expr_listContext(this.context, this.state);
        this.enterRule(localContext, 1328, PostgreSqlParser.RULE_expr_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10346;
            this.a_expr();
            this.state = 10351;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1087, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 10347;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 10348;
                    this.a_expr();
                    }
                    }
                }
                this.state = 10353;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1087, 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 column_expr_list_noparen(): Column_expr_list_noparenContext {
        let localContext = new Column_expr_list_noparenContext(this.context, this.state);
        this.enterRule(localContext, 1330, PostgreSqlParser.RULE_column_expr_list_noparen);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10354;
            this.column_expr_noparen();
            this.state = 10359;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10355;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10356;
                this.column_expr_noparen();
                }
                }
                this.state = 10361;
                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 column_expr_list(): Column_expr_listContext {
        let localContext = new Column_expr_listContext(this.context, this.state);
        this.enterRule(localContext, 1332, PostgreSqlParser.RULE_column_expr_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10362;
            this.column_expr();
            this.state = 10367;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10363;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10364;
                this.column_expr();
                }
                }
                this.state = 10369;
                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 column_expr(): Column_exprContext {
        let localContext = new Column_exprContext(this.context, this.state);
        this.enterRule(localContext, 1334, PostgreSqlParser.RULE_column_expr);
        try {
            this.state = 10375;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1090, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                {
                this.state = 10370;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10371;
                this.a_expr();
                this.state = 10372;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10374;
                this.column_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 column_expr_noparen(): Column_expr_noparenContext {
        let localContext = new Column_expr_noparenContext(this.context, this.state);
        this.enterRule(localContext, 1336, PostgreSqlParser.RULE_column_expr_noparen);
        try {
            this.state = 10379;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1091, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10377;
                this.a_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10378;
                this.column_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 func_arg_list(): Func_arg_listContext {
        let localContext = new Func_arg_listContext(this.context, this.state);
        this.enterRule(localContext, 1338, PostgreSqlParser.RULE_func_arg_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10381;
            this.func_arg_expr();
            this.state = 10386;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1092, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 10382;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 10383;
                    this.func_arg_expr();
                    }
                    }
                }
                this.state = 10388;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1092, 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 func_arg_expr(): Func_arg_exprContext {
        let localContext = new Func_arg_exprContext(this.context, this.state);
        this.enterRule(localContext, 1340, PostgreSqlParser.RULE_func_arg_expr);
        let _la: number;
        try {
            this.state = 10394;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1093, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10389;
                this.a_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10390;
                this.param_name();
                this.state = 10391;
                _la = this.tokenStream.LA(1);
                if(!(_la === 20 || _la === 22)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 10392;
                this.a_expr();
                }
                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 type_list(): Type_listContext {
        let localContext = new Type_listContext(this.context, this.state);
        this.enterRule(localContext, 1342, PostgreSqlParser.RULE_type_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10396;
            this.typename();
            this.state = 10401;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10397;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10398;
                this.typename();
                }
                }
                this.state = 10403;
                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 array_expr(): Array_exprContext {
        let localContext = new Array_exprContext(this.context, this.state);
        this.enterRule(localContext, 1344, PostgreSqlParser.RULE_array_expr);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10404;
            this.match(PostgreSqlParser.OPEN_BRACKET);
            this.state = 10407;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.OPEN_PAREN:
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.PARAM:
            case PostgreSqlParser.Operator:
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_CASE:
            case PostgreSqlParser.KW_CAST:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CURRENT_CATALOG:
            case PostgreSqlParser.KW_CURRENT_DATE:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_TIME:
            case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_LOCALTIME:
            case PostgreSqlParser.KW_LOCALTIMESTAMP:
            case PostgreSqlParser.KW_NOT:
            case PostgreSqlParser.KW_NULL:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_UNIQUE:
            case PostgreSqlParser.KW_USER:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.BinaryStringConstant:
            case PostgreSqlParser.HexadecimalStringConstant:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 10405;
                this.expr_list();
                }
                break;
            case PostgreSqlParser.OPEN_BRACKET:
                {
                this.state = 10406;
                this.array_expr_list();
                }
                break;
            case PostgreSqlParser.CLOSE_BRACKET:
                break;
            default:
                break;
            }
            this.state = 10409;
            this.match(PostgreSqlParser.CLOSE_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 array_expr_list(): Array_expr_listContext {
        let localContext = new Array_expr_listContext(this.context, this.state);
        this.enterRule(localContext, 1346, PostgreSqlParser.RULE_array_expr_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10411;
            this.array_expr();
            this.state = 10416;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10412;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10413;
                this.array_expr();
                }
                }
                this.state = 10418;
                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 extract_list(): Extract_listContext {
        let localContext = new Extract_listContext(this.context, this.state);
        this.enterRule(localContext, 1348, PostgreSqlParser.RULE_extract_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10419;
            this.extract_arg();
            this.state = 10420;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 10421;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public extract_arg(): Extract_argContext {
        let localContext = new Extract_argContext(this.context, this.state);
        this.enterRule(localContext, 1350, PostgreSqlParser.RULE_extract_arg);
        try {
            this.state = 10431;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1097, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10423;
                this.identifier();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10424;
                this.match(PostgreSqlParser.KW_YEAR);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10425;
                this.match(PostgreSqlParser.KW_MONTH);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10426;
                this.match(PostgreSqlParser.KW_DAY);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10427;
                this.match(PostgreSqlParser.KW_HOUR);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 10428;
                this.match(PostgreSqlParser.KW_MINUTE);
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 10429;
                this.match(PostgreSqlParser.KW_SECOND);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 10430;
                this.sconst();
                }
                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 unicode_normal_form(): Unicode_normal_formContext {
        let localContext = new Unicode_normal_formContext(this.context, this.state);
        this.enterRule(localContext, 1352, PostgreSqlParser.RULE_unicode_normal_form);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10433;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 483)) & ~0x1F) === 0 && ((1 << (_la - 483)) & 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 overlay_list(): Overlay_listContext {
        let localContext = new Overlay_listContext(this.context, this.state);
        this.enterRule(localContext, 1354, PostgreSqlParser.RULE_overlay_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10435;
            this.a_expr();
            this.state = 10436;
            this.match(PostgreSqlParser.KW_PLACING);
            this.state = 10437;
            this.a_expr();
            this.state = 10438;
            this.match(PostgreSqlParser.KW_FROM);
            this.state = 10439;
            this.a_expr();
            this.state = 10442;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 62) {
                {
                this.state = 10440;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 10441;
                this.a_expr();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public position_list(): Position_listContext {
        let localContext = new Position_listContext(this.context, this.state);
        this.enterRule(localContext, 1356, PostgreSqlParser.RULE_position_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10444;
            this.b_expr(0);
            this.state = 10445;
            this.match(PostgreSqlParser.KW_IN);
            this.state = 10446;
            this.b_expr(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 substr_list(): Substr_listContext {
        let localContext = new Substr_listContext(this.context, this.state);
        this.enterRule(localContext, 1358, PostgreSqlParser.RULE_substr_list);
        try {
            this.state = 10475;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1099, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10448;
                this.a_expr();
                this.state = 10449;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 10450;
                this.a_expr();
                this.state = 10451;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 10452;
                this.a_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10454;
                this.a_expr();
                this.state = 10455;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 10456;
                this.a_expr();
                this.state = 10457;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 10458;
                this.a_expr();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10460;
                this.a_expr();
                this.state = 10461;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 10462;
                this.a_expr();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10464;
                this.a_expr();
                this.state = 10465;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 10466;
                this.a_expr();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10468;
                this.a_expr();
                this.state = 10469;
                this.match(PostgreSqlParser.KW_SIMILAR);
                this.state = 10470;
                this.a_expr();
                this.state = 10471;
                this.match(PostgreSqlParser.KW_ESCAPE);
                this.state = 10472;
                this.a_expr();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 10474;
                this.expr_list();
                }
                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 trim_list(): Trim_listContext {
        let localContext = new Trim_listContext(this.context, this.state);
        this.enterRule(localContext, 1360, PostgreSqlParser.RULE_trim_list);
        try {
            this.state = 10484;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1100, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10477;
                this.a_expr();
                this.state = 10478;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 10479;
                this.expr_list();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10481;
                this.match(PostgreSqlParser.KW_FROM);
                this.state = 10482;
                this.expr_list();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10483;
                this.expr_list();
                }
                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 in_expr(): In_exprContext {
        let localContext = new In_exprContext(this.context, this.state);
        this.enterRule(localContext, 1362, PostgreSqlParser.RULE_in_expr);
        try {
            this.state = 10491;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1101, this.context) ) {
            case 1:
                localContext = new In_expr_selectContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10486;
                this.select_with_parens();
                }
                break;
            case 2:
                localContext = new In_expr_listContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10487;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10488;
                this.expr_list();
                this.state = 10489;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 case_expr(): Case_exprContext {
        let localContext = new Case_exprContext(this.context, this.state);
        this.enterRule(localContext, 1364, PostgreSqlParser.RULE_case_expr);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10493;
            this.match(PostgreSqlParser.KW_CASE);
            this.state = 10495;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421516677) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) {
                {
                this.state = 10494;
                this.case_arg();
                }
            }

            this.state = 10497;
            this.when_clause_list();
            this.state = 10499;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 58) {
                {
                this.state = 10498;
                this.case_default();
                }
            }

            this.state = 10501;
            this.match(PostgreSqlParser.KW_END);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public when_clause_list(): When_clause_listContext {
        let localContext = new When_clause_listContext(this.context, this.state);
        this.enterRule(localContext, 1366, PostgreSqlParser.RULE_when_clause_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10504;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 10503;
                this.when_clause();
                }
                }
                this.state = 10506;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 102);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public when_clause(): When_clauseContext {
        let localContext = new When_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1368, PostgreSqlParser.RULE_when_clause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10508;
            this.match(PostgreSqlParser.KW_WHEN);
            this.state = 10509;
            this.a_expr();
            this.state = 10510;
            this.match(PostgreSqlParser.KW_THEN);
            this.state = 10511;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public case_default(): Case_defaultContext {
        let localContext = new Case_defaultContext(this.context, this.state);
        this.enterRule(localContext, 1370, PostgreSqlParser.RULE_case_default);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10513;
            this.match(PostgreSqlParser.KW_ELSE);
            this.state = 10514;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public case_arg(): Case_argContext {
        let localContext = new Case_argContext(this.context, this.state);
        this.enterRule(localContext, 1372, PostgreSqlParser.RULE_case_arg);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10516;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public columnref(): ColumnrefContext {
        let localContext = new ColumnrefContext(this.context, this.state);
        this.enterRule(localContext, 1374, PostgreSqlParser.RULE_columnref);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10518;
            this.colid();
            this.state = 10520;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1105, this.context) ) {
            case 1:
                {
                this.state = 10519;
                this.indirection();
                }
                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 indirection_el(): Indirection_elContext {
        let localContext = new Indirection_elContext(this.context, this.state);
        this.enterRule(localContext, 1376, PostgreSqlParser.RULE_indirection_el);
        let _la: number;
        try {
            this.state = 10539;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.DOT:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10522;
                this.match(PostgreSqlParser.DOT);
                this.state = 10525;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_ALL:
                case PostgreSqlParser.KW_ANALYSE:
                case PostgreSqlParser.KW_ANALYZE:
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ANY:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_AS:
                case PostgreSqlParser.KW_ASC:
                case PostgreSqlParser.KW_ASYMMETRIC:
                case PostgreSqlParser.KW_BOTH:
                case PostgreSqlParser.KW_CASE:
                case PostgreSqlParser.KW_CAST:
                case PostgreSqlParser.KW_CHECK:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_COLUMN:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_CREATE:
                case PostgreSqlParser.KW_CURRENT_CATALOG:
                case PostgreSqlParser.KW_CURRENT_DATE:
                case PostgreSqlParser.KW_CURRENT_ROLE:
                case PostgreSqlParser.KW_CURRENT_TIME:
                case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
                case PostgreSqlParser.KW_CURRENT_USER:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DEFERRABLE:
                case PostgreSqlParser.KW_DESC:
                case PostgreSqlParser.KW_DISTINCT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_ELSE:
                case PostgreSqlParser.KW_EXCEPT:
                case PostgreSqlParser.KW_FALSE:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_FOR:
                case PostgreSqlParser.KW_FOREIGN:
                case PostgreSqlParser.KW_FROM:
                case PostgreSqlParser.KW_GRANT:
                case PostgreSqlParser.KW_GROUP:
                case PostgreSqlParser.KW_HAVING:
                case PostgreSqlParser.KW_IN:
                case PostgreSqlParser.KW_INITIALLY:
                case PostgreSqlParser.KW_INTERSECT:
                case PostgreSqlParser.KW_LATERAL:
                case PostgreSqlParser.KW_LEADING:
                case PostgreSqlParser.KW_LIMIT:
                case PostgreSqlParser.KW_LOCALTIME:
                case PostgreSqlParser.KW_LOCALTIMESTAMP:
                case PostgreSqlParser.KW_NOT:
                case PostgreSqlParser.KW_NULL:
                case PostgreSqlParser.KW_OFFSET:
                case PostgreSqlParser.KW_ON:
                case PostgreSqlParser.KW_ONLY:
                case PostgreSqlParser.KW_OR:
                case PostgreSqlParser.KW_ORDER:
                case PostgreSqlParser.KW_PLACING:
                case PostgreSqlParser.KW_PRIMARY:
                case PostgreSqlParser.KW_REFERENCES:
                case PostgreSqlParser.KW_RETURNING:
                case PostgreSqlParser.KW_SELECT:
                case PostgreSqlParser.KW_SESSION_USER:
                case PostgreSqlParser.KW_SOME:
                case PostgreSqlParser.KW_SYMMETRIC:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_THEN:
                case PostgreSqlParser.KW_TO:
                case PostgreSqlParser.KW_TRAILING:
                case PostgreSqlParser.KW_TRUE:
                case PostgreSqlParser.KW_UNION:
                case PostgreSqlParser.KW_UNIQUE:
                case PostgreSqlParser.KW_USER:
                case PostgreSqlParser.KW_USING:
                case PostgreSqlParser.KW_VARIADIC:
                case PostgreSqlParser.KW_WHEN:
                case PostgreSqlParser.KW_WHERE:
                case PostgreSqlParser.KW_WINDOW:
                case PostgreSqlParser.KW_WITH:
                case PostgreSqlParser.KW_AUTHORIZATION:
                case PostgreSqlParser.KW_BINARY:
                case PostgreSqlParser.KW_COLLATION:
                case PostgreSqlParser.KW_CONCURRENTLY:
                case PostgreSqlParser.KW_CROSS:
                case PostgreSqlParser.KW_CURRENT_SCHEMA:
                case PostgreSqlParser.KW_FREEZE:
                case PostgreSqlParser.KW_FULL:
                case PostgreSqlParser.KW_ILIKE:
                case PostgreSqlParser.KW_INNER:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_ISNULL:
                case PostgreSqlParser.KW_JOIN:
                case PostgreSqlParser.KW_LEFT:
                case PostgreSqlParser.KW_LIKE:
                case PostgreSqlParser.KW_NATURAL:
                case PostgreSqlParser.KW_NOTNULL:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_OVERLAPS:
                case PostgreSqlParser.KW_RIGHT:
                case PostgreSqlParser.KW_SIMILAR:
                case PostgreSqlParser.KW_VERBOSE:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_END:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_TABLESAMPLE:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 10523;
                    this.attr_name();
                    }
                    break;
                case PostgreSqlParser.STAR:
                    {
                    this.state = 10524;
                    this.match(PostgreSqlParser.STAR);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case PostgreSqlParser.OPEN_BRACKET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10527;
                this.match(PostgreSqlParser.OPEN_BRACKET);
                this.state = 10536;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1109, this.context) ) {
                case 1:
                    {
                    this.state = 10528;
                    this.a_expr();
                    }
                    break;
                case 2:
                    {
                    this.state = 10530;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421516677) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) {
                        {
                        this.state = 10529;
                        this.opt_slice_bound();
                        }
                    }

                    this.state = 10532;
                    this.match(PostgreSqlParser.COLON);
                    this.state = 10534;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421516677) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 100660735) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) {
                        {
                        this.state = 10533;
                        this.opt_slice_bound();
                        }
                    }

                    }
                    break;
                }
                this.state = 10538;
                this.match(PostgreSqlParser.CLOSE_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 opt_slice_bound(): Opt_slice_boundContext {
        let localContext = new Opt_slice_boundContext(this.context, this.state);
        this.enterRule(localContext, 1378, PostgreSqlParser.RULE_opt_slice_bound);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10541;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indirection(): IndirectionContext {
        let localContext = new IndirectionContext(this.context, this.state);
        this.enterRule(localContext, 1380, PostgreSqlParser.RULE_indirection);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10544;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 10543;
                    this.indirection_el();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 10546;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1111, 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 opt_indirection(): Opt_indirectionContext {
        let localContext = new Opt_indirectionContext(this.context, this.state);
        this.enterRule(localContext, 1382, PostgreSqlParser.RULE_opt_indirection);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10551;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1112, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 10548;
                    this.indirection_el();
                    }
                    }
                }
                this.state = 10553;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1112, 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 opt_target_list(): Opt_target_listContext {
        let localContext = new Opt_target_listContext(this.context, this.state);
        this.enterRule(localContext, 1384, PostgreSqlParser.RULE_opt_target_list);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10554;
            this.target_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public target_list(): Target_listContext {
        let localContext = new Target_listContext(this.context, this.state);
        this.enterRule(localContext, 1386, PostgreSqlParser.RULE_target_list);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10556;
            this.target_el();
            this.state = 10561;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1113, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 10557;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 10558;
                    this.target_el();
                    }
                    }
                }
                this.state = 10563;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1113, 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 target_el(): Target_elContext {
        let localContext = new Target_elContext(this.context, this.state);
        this.enterRule(localContext, 1388, PostgreSqlParser.RULE_target_el);
        try {
            this.state = 10572;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1115, this.context) ) {
            case 1:
                localContext = new Target_labelContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10564;
                this.column_expr_noparen();
                this.state = 10569;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1114, this.context) ) {
                case 1:
                    {
                    this.state = 10565;
                    this.match(PostgreSqlParser.KW_AS);
                    this.state = 10566;
                    this.collabel();
                    }
                    break;
                case 2:
                    {
                    this.state = 10567;
                    this.identifier();
                    }
                    break;
                case 3:
                    // tslint:disable-next-line:no-empty
                    {
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new Target_starContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10571;
                this.match(PostgreSqlParser.STAR);
                }
                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 qualified_name_list(): Qualified_name_listContext {
        let localContext = new Qualified_name_listContext(this.context, this.state);
        this.enterRule(localContext, 1390, PostgreSqlParser.RULE_qualified_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10574;
            this.qualified_name();
            this.state = 10579;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10575;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10576;
                this.qualified_name();
                }
                }
                this.state = 10581;
                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 table_name_list(): Table_name_listContext {
        let localContext = new Table_name_listContext(this.context, this.state);
        this.enterRule(localContext, 1392, PostgreSqlParser.RULE_table_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10582;
            this.table_name();
            this.state = 10587;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10583;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10584;
                this.table_name();
                }
                }
                this.state = 10589;
                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 schema_name_list(): Schema_name_listContext {
        let localContext = new Schema_name_listContext(this.context, this.state);
        this.enterRule(localContext, 1394, PostgreSqlParser.RULE_schema_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10590;
            this.schema_name();
            this.state = 10595;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10591;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10592;
                this.schema_name();
                }
                }
                this.state = 10597;
                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 database_nameList(): Database_nameListContext {
        let localContext = new Database_nameListContext(this.context, this.state);
        this.enterRule(localContext, 1396, PostgreSqlParser.RULE_database_nameList);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10598;
            this.database_name();
            this.state = 10603;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10599;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10600;
                this.database_name();
                }
                }
                this.state = 10605;
                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 procedure_name_list(): Procedure_name_listContext {
        let localContext = new Procedure_name_listContext(this.context, this.state);
        this.enterRule(localContext, 1398, PostgreSqlParser.RULE_procedure_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10606;
            this.procedure_name();
            this.state = 10611;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10607;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10608;
                this.procedure_name();
                }
                }
                this.state = 10613;
                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 tablespace_name_create(): Tablespace_name_createContext {
        let localContext = new Tablespace_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1400, PostgreSqlParser.RULE_tablespace_name_create);
        let _la: number;
        try {
            localContext = new TablespaceNameCreateContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10614;
            this.colid();
            this.state = 10616;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 4 || _la === 11) {
                {
                this.state = 10615;
                this.indirection();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablespace_name(): Tablespace_nameContext {
        let localContext = new Tablespace_nameContext(this.context, this.state);
        this.enterRule(localContext, 1402, PostgreSqlParser.RULE_tablespace_name);
        let _la: number;
        try {
            localContext = new TablespaceNameContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10618;
            this.colid();
            this.state = 10620;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 4 || _la === 11) {
                {
                this.state = 10619;
                this.indirection();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public table_name_create(): Table_name_createContext {
        let localContext = new Table_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1404, PostgreSqlParser.RULE_table_name_create);
        try {
            localContext = new TableNameCreateContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10622;
            this.colid();
            this.state = 10624;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1123, this.context) ) {
            case 1:
                {
                this.state = 10623;
                this.indirection();
                }
                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 table_name(): Table_nameContext {
        let localContext = new Table_nameContext(this.context, this.state);
        this.enterRule(localContext, 1406, PostgreSqlParser.RULE_table_name);
        let _la: number;
        try {
            localContext = new TableNameContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10626;
            this.colid();
            this.state = 10628;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 4 || _la === 11) {
                {
                this.state = 10627;
                this.indirection();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public view_name_create(): View_name_createContext {
        let localContext = new View_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1408, PostgreSqlParser.RULE_view_name_create);
        let _la: number;
        try {
            localContext = new ViewNameCreateContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10630;
            this.colid();
            this.state = 10632;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 4 || _la === 11) {
                {
                this.state = 10631;
                this.indirection();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public view_name(): View_nameContext {
        let localContext = new View_nameContext(this.context, this.state);
        this.enterRule(localContext, 1410, PostgreSqlParser.RULE_view_name);
        try {
            localContext = new ViewNameContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10634;
            this.colid();
            this.state = 10636;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1126, this.context) ) {
            case 1:
                {
                this.state = 10635;
                this.attrs();
                }
                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 qualified_name(): Qualified_nameContext {
        let localContext = new Qualified_nameContext(this.context, this.state);
        this.enterRule(localContext, 1412, PostgreSqlParser.RULE_qualified_name);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10638;
            this.colid();
            this.state = 10640;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 4 || _la === 11) {
                {
                this.state = 10639;
                this.indirection();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablespace_name_list(): Tablespace_name_listContext {
        let localContext = new Tablespace_name_listContext(this.context, this.state);
        this.enterRule(localContext, 1414, PostgreSqlParser.RULE_tablespace_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10642;
            this.tablespace_name();
            this.state = 10647;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10643;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10644;
                this.tablespace_name();
                }
                }
                this.state = 10649;
                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 name_list(): Name_listContext {
        let localContext = new Name_listContext(this.context, this.state);
        this.enterRule(localContext, 1416, PostgreSqlParser.RULE_name_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10650;
            this.name();
            this.state = 10655;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10651;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10652;
                this.name();
                }
                }
                this.state = 10657;
                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 database_name_create(): Database_name_createContext {
        let localContext = new Database_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1418, PostgreSqlParser.RULE_database_name_create);
        let _la: number;
        try {
            localContext = new DatabaseNameCreateContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10658;
            this.colid();
            this.state = 10660;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 11) {
                {
                this.state = 10659;
                this.attrs();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public database_name(): Database_nameContext {
        let localContext = new Database_nameContext(this.context, this.state);
        this.enterRule(localContext, 1420, PostgreSqlParser.RULE_database_name);
        let _la: number;
        try {
            localContext = new DatabaseNameContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10662;
            this.colid();
            this.state = 10664;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 11) {
                {
                this.state = 10663;
                this.attrs();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public schema_name(): Schema_nameContext {
        let localContext = new Schema_nameContext(this.context, this.state);
        this.enterRule(localContext, 1422, PostgreSqlParser.RULE_schema_name);
        let _la: number;
        try {
            localContext = new SchemaNameContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10666;
            this.colid();
            this.state = 10668;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 11) {
                {
                this.state = 10667;
                this.attrs();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public routine_name_create(): Routine_name_createContext {
        let localContext = new Routine_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1424, PostgreSqlParser.RULE_routine_name_create);
        try {
            localContext = new RoutineNameCreateContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10670;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public routine_name(): Routine_nameContext {
        let localContext = new Routine_nameContext(this.context, this.state);
        this.enterRule(localContext, 1426, PostgreSqlParser.RULE_routine_name);
        try {
            localContext = new RoutineNameContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10672;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public procedure_name(): Procedure_nameContext {
        let localContext = new Procedure_nameContext(this.context, this.state);
        this.enterRule(localContext, 1428, PostgreSqlParser.RULE_procedure_name);
        try {
            this.state = 10678;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1133, this.context) ) {
            case 1:
                localContext = new ProcedureNameContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10674;
                this.type_function_name();
                }
                break;
            case 2:
                localContext = new ProcedureNameContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10675;
                this.colid();
                this.state = 10676;
                this.indirection();
                }
                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 procedure_name_create(): Procedure_name_createContext {
        let localContext = new Procedure_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1430, PostgreSqlParser.RULE_procedure_name_create);
        try {
            this.state = 10684;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1134, this.context) ) {
            case 1:
                localContext = new ProcedureNameCreateContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10680;
                this.type_function_name();
                }
                break;
            case 2:
                localContext = new ProcedureNameCreateContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10681;
                this.colid();
                this.state = 10682;
                this.indirection();
                }
                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 column_name(): Column_nameContext {
        let localContext = new Column_nameContext(this.context, this.state);
        this.enterRule(localContext, 1432, PostgreSqlParser.RULE_column_name);
        try {
            let alternative: number;
            this.state = 10694;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1136, this.context) ) {
            case 1:
                localContext = new ColumnNameContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10686;
                this.colid();
                this.state = 10690;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1135, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 10687;
                        this.indirection_el();
                        }
                        }
                    }
                    this.state = 10692;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 1135, this.context);
                }
                }
                break;
            case 2:
                localContext = new ColumnNameMatchContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10693;
                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 column_name_create(): Column_name_createContext {
        let localContext = new Column_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1434, PostgreSqlParser.RULE_column_name_create);
        try {
            localContext = new ColumnNameCreateContext(localContext);
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10696;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public name(): NameContext {
        let localContext = new NameContext(this.context, this.state);
        this.enterRule(localContext, 1436, PostgreSqlParser.RULE_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10698;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public attr_name(): Attr_nameContext {
        let localContext = new Attr_nameContext(this.context, this.state);
        this.enterRule(localContext, 1438, PostgreSqlParser.RULE_attr_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10700;
            this.collabel();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public file_name(): File_nameContext {
        let localContext = new File_nameContext(this.context, this.state);
        this.enterRule(localContext, 1440, PostgreSqlParser.RULE_file_name);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10702;
            this.sconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public function_name_create(): Function_name_createContext {
        let localContext = new Function_name_createContext(this.context, this.state);
        this.enterRule(localContext, 1442, PostgreSqlParser.RULE_function_name_create);
        try {
            this.state = 10708;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1137, this.context) ) {
            case 1:
                localContext = new FunctionNameCreateContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10704;
                this.type_function_name();
                }
                break;
            case 2:
                localContext = new FunctionNameCreateContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10705;
                this.colid();
                this.state = 10706;
                this.indirection();
                }
                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 function_name(): Function_nameContext {
        let localContext = new Function_nameContext(this.context, this.state);
        this.enterRule(localContext, 1444, PostgreSqlParser.RULE_function_name);
        try {
            this.state = 10714;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1138, this.context) ) {
            case 1:
                localContext = new FunctionNameContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10710;
                this.type_function_name();
                }
                break;
            case 2:
                localContext = new FunctionNameContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10711;
                this.colid();
                this.state = 10712;
                this.indirection();
                }
                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 usual_name(): Usual_nameContext {
        let localContext = new Usual_nameContext(this.context, this.state);
        this.enterRule(localContext, 1446, PostgreSqlParser.RULE_usual_name);
        try {
            this.state = 10720;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1139, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10716;
                this.type_usual_name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10717;
                this.colid();
                this.state = 10718;
                this.indirection();
                }
                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 aexprconst(): AexprconstContext {
        let localContext = new AexprconstContext(this.context, this.state);
        this.enterRule(localContext, 1448, PostgreSqlParser.RULE_aexprconst);
        let _la: number;
        try {
            this.state = 10757;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1144, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10722;
                this.iconst();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10723;
                this.fconst();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10724;
                this.sconst();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10725;
                this.bconst();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10726;
                this.xconst();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 10727;
                this.function_name();
                this.state = 10737;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 10728;
                    this.sconst();
                    }
                    break;
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 10729;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 10730;
                    this.func_arg_list();
                    this.state = 10732;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 83) {
                        {
                        this.state = 10731;
                        this.opt_sort_clause();
                        }
                    }

                    this.state = 10734;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    this.state = 10735;
                    this.sconst();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 10739;
                this.consttypename();
                this.state = 10740;
                this.sconst();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 10742;
                this.constinterval();
                this.state = 10752;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 10743;
                    this.sconst();
                    this.state = 10745;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1142, this.context) ) {
                    case 1:
                        {
                        this.state = 10744;
                        this.opt_interval();
                        }
                        break;
                    }
                    }
                    break;
                case PostgreSqlParser.OPEN_PAREN:
                    {
                    this.state = 10747;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 10748;
                    this.iconst();
                    this.state = 10749;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    this.state = 10750;
                    this.sconst();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 10754;
                this.match(PostgreSqlParser.KW_TRUE);
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 10755;
                this.match(PostgreSqlParser.KW_FALSE);
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 10756;
                this.match(PostgreSqlParser.KW_NULL);
                }
                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 xconst(): XconstContext {
        let localContext = new XconstContext(this.context, this.state);
        this.enterRule(localContext, 1450, PostgreSqlParser.RULE_xconst);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10759;
            this.match(PostgreSqlParser.HexadecimalStringConstant);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public bconst(): BconstContext {
        let localContext = new BconstContext(this.context, this.state);
        this.enterRule(localContext, 1452, PostgreSqlParser.RULE_bconst);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10761;
            this.match(PostgreSqlParser.BinaryStringConstant);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public fconst(): FconstContext {
        let localContext = new FconstContext(this.context, this.state);
        this.enterRule(localContext, 1454, PostgreSqlParser.RULE_fconst);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10763;
            this.match(PostgreSqlParser.Numeric);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public iconst(): IconstContext {
        let localContext = new IconstContext(this.context, this.state);
        this.enterRule(localContext, 1456, PostgreSqlParser.RULE_iconst);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10765;
            this.match(PostgreSqlParser.Integral);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public sconst(): SconstContext {
        let localContext = new SconstContext(this.context, this.state);
        this.enterRule(localContext, 1458, PostgreSqlParser.RULE_sconst);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10767;
            this.anysconst();
            this.state = 10769;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1145, this.context) ) {
            case 1:
                {
                this.state = 10768;
                this.opt_uescape();
                }
                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 anysconst(): AnysconstContext {
        let localContext = new AnysconstContext(this.context, this.state);
        this.enterRule(localContext, 1460, PostgreSqlParser.RULE_anysconst);
        let _la: number;
        try {
            this.state = 10782;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.StringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10771;
                this.match(PostgreSqlParser.StringConstant);
                }
                break;
            case PostgreSqlParser.UnicodeEscapeStringConstant:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10772;
                this.match(PostgreSqlParser.UnicodeEscapeStringConstant);
                }
                break;
            case PostgreSqlParser.BeginDollarStringConstant:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10773;
                this.match(PostgreSqlParser.BeginDollarStringConstant);
                this.state = 10777;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 588) {
                    {
                    {
                    this.state = 10774;
                    this.match(PostgreSqlParser.DollarText);
                    }
                    }
                    this.state = 10779;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 10780;
                this.match(PostgreSqlParser.EndDollarStringConstant);
                }
                break;
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10781;
                this.match(PostgreSqlParser.EscapeStringConstant);
                }
                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 opt_uescape(): Opt_uescapeContext {
        let localContext = new Opt_uescapeContext(this.context, this.state);
        this.enterRule(localContext, 1462, PostgreSqlParser.RULE_opt_uescape);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10784;
            this.match(PostgreSqlParser.KW_UESCAPE);
            this.state = 10785;
            this.anysconst();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public signediconst(): SignediconstContext {
        let localContext = new SignediconstContext(this.context, this.state);
        this.enterRule(localContext, 1464, PostgreSqlParser.RULE_signediconst);
        try {
            this.state = 10792;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.Integral:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10787;
                this.iconst();
                }
                break;
            case PostgreSqlParser.PLUS:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10788;
                this.match(PostgreSqlParser.PLUS);
                this.state = 10789;
                this.iconst();
                }
                break;
            case PostgreSqlParser.MINUS:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10790;
                this.match(PostgreSqlParser.MINUS);
                this.state = 10791;
                this.iconst();
                }
                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 groupname(): GroupnameContext {
        let localContext = new GroupnameContext(this.context, this.state);
        this.enterRule(localContext, 1466, PostgreSqlParser.RULE_groupname);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10794;
            this.rolespec();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public roleid(): RoleidContext {
        let localContext = new RoleidContext(this.context, this.state);
        this.enterRule(localContext, 1468, PostgreSqlParser.RULE_roleid);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10796;
            this.rolespec();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rolespec(): RolespecContext {
        let localContext = new RolespecContext(this.context, this.state);
        this.enterRule(localContext, 1470, PostgreSqlParser.RULE_rolespec);
        try {
            this.state = 10803;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10798;
                this.nonreservedword();
                }
                break;
            case PostgreSqlParser.KW_CURRENT_USER:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10799;
                this.match(PostgreSqlParser.KW_CURRENT_USER);
                }
                break;
            case PostgreSqlParser.KW_CURRENT_ROLE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10800;
                this.match(PostgreSqlParser.KW_CURRENT_ROLE);
                }
                break;
            case PostgreSqlParser.KW_SESSION_USER:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10801;
                this.match(PostgreSqlParser.KW_SESSION_USER);
                }
                break;
            case PostgreSqlParser.KW_PUBLIC:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10802;
                this.match(PostgreSqlParser.KW_PUBLIC);
                }
                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 role_list(): Role_listContext {
        let localContext = new Role_listContext(this.context, this.state);
        this.enterRule(localContext, 1472, PostgreSqlParser.RULE_role_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10805;
            this.rolespec();
            this.state = 10810;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 10806;
                this.match(PostgreSqlParser.COMMA);
                this.state = 10807;
                this.rolespec();
                }
                }
                this.state = 10812;
                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 colid(): ColidContext {
        let localContext = new ColidContext(this.context, this.state);
        this.enterRule(localContext, 1474, PostgreSqlParser.RULE_colid);
        try {
            this.state = 10817;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1151, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10813;
                this.identifier();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10814;
                this.unreserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10815;
                this.col_name_keyword();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10816;
                this.plsql_unreserved_keyword();
                }
                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 index_method_choices(): Index_method_choicesContext {
        let localContext = new Index_method_choicesContext(this.context, this.state);
        this.enterRule(localContext, 1476, PostgreSqlParser.RULE_index_method_choices);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10819;
            this.identifier();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public exclude_element(): Exclude_elementContext {
        let localContext = new Exclude_elementContext(this.context, this.state);
        this.enterRule(localContext, 1478, PostgreSqlParser.RULE_exclude_element);
        let _la: number;
        try {
            this.state = 10833;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_WITH:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10821;
                this.opt_definition();
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
                this.enterOuterAlt(localContext, 2);
                {
                {
                this.state = 10822;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 10823;
                this.a_expr();
                this.state = 10824;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                this.state = 10826;
                this.identifier();
                this.state = 10828;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 37 || _la === 55) {
                    {
                    this.state = 10827;
                    this.opt_asc_desc();
                    }
                }

                this.state = 10831;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 273) {
                    {
                    this.state = 10830;
                    this.opt_nulls_order();
                    }
                }

                }
                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 index_paramenters(): Index_paramentersContext {
        let localContext = new Index_paramentersContext(this.context, this.state);
        this.enterRule(localContext, 1480, PostgreSqlParser.RULE_index_paramenters);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10837;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105) {
                {
                this.state = 10835;
                this.match(PostgreSqlParser.KW_WITH);
                this.state = 10836;
                this.reloptions();
                }
            }

            this.state = 10840;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 10839;
                this.optconstablespace();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public type_function_name(): Type_function_nameContext {
        let localContext = new Type_function_nameContext(this.context, this.state);
        this.enterRule(localContext, 1482, PostgreSqlParser.RULE_type_function_name);
        try {
            this.state = 10846;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1157, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10842;
                this.identifier();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10843;
                this.unreserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10844;
                this.plsql_unreserved_keyword();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10845;
                this.type_func_name_keyword();
                }
                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 type_usual_name(): Type_usual_nameContext {
        let localContext = new Type_usual_nameContext(this.context, this.state);
        this.enterRule(localContext, 1484, PostgreSqlParser.RULE_type_usual_name);
        try {
            this.state = 10852;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1158, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10848;
                this.identifier();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10849;
                this.unreserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10850;
                this.plsql_unreserved_keyword();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10851;
                this.type_func_name_keyword();
                }
                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 nonreservedword_column(): Nonreservedword_columnContext {
        let localContext = new Nonreservedword_columnContext(this.context, this.state);
        this.enterRule(localContext, 1486, PostgreSqlParser.RULE_nonreservedword_column);
        try {
            this.state = 10856;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1159, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10854;
                this.column_name();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10855;
                this.type_func_name_keyword();
                }
                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 nonreservedword(): NonreservedwordContext {
        let localContext = new NonreservedwordContext(this.context, this.state);
        this.enterRule(localContext, 1488, PostgreSqlParser.RULE_nonreservedword);
        try {
            this.state = 10862;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1160, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10858;
                this.identifier();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10859;
                this.unreserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10860;
                this.col_name_keyword();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10861;
                this.type_func_name_keyword();
                }
                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 collabel(): CollabelContext {
        let localContext = new CollabelContext(this.context, this.state);
        this.enterRule(localContext, 1490, PostgreSqlParser.RULE_collabel);
        try {
            this.state = 10870;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1161, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10864;
                this.identifier();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10865;
                this.plsql_unreserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10866;
                this.unreserved_keyword();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10867;
                this.col_name_keyword();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10868;
                this.type_func_name_keyword();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 10869;
                this.reserved_keyword();
                }
                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 identifier(): IdentifierContext {
        let localContext = new IdentifierContext(this.context, this.state);
        this.enterRule(localContext, 1492, PostgreSqlParser.RULE_identifier);
        try {
            this.state = 10882;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.Identifier:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10872;
                this.match(PostgreSqlParser.Identifier);
                this.state = 10874;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1162, this.context) ) {
                case 1:
                    {
                    this.state = 10873;
                    this.opt_uescape();
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10876;
                this.sconst();
                }
                break;
            case PostgreSqlParser.QuotedIdentifier:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10877;
                this.match(PostgreSqlParser.QuotedIdentifier);
                }
                break;
            case PostgreSqlParser.UnicodeQuotedIdentifier:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10878;
                this.match(PostgreSqlParser.UnicodeQuotedIdentifier);
                }
                break;
            case PostgreSqlParser.PLSQLVARIABLENAME:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10879;
                this.plsqlvariablename();
                }
                break;
            case PostgreSqlParser.PLSQLIDENTIFIER:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 10880;
                this.plsqlidentifier();
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 10881;
                this.plsql_unreserved_keyword();
                }
                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 plsqlidentifier(): PlsqlidentifierContext {
        let localContext = new PlsqlidentifierContext(this.context, this.state);
        this.enterRule(localContext, 1494, PostgreSqlParser.RULE_plsqlidentifier);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10884;
            this.match(PostgreSqlParser.PLSQLIDENTIFIER);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public unreserved_keyword(): Unreserved_keywordContext {
        let localContext = new Unreserved_keywordContext(this.context, this.state);
        this.enterRule(localContext, 1496, PostgreSqlParser.RULE_unreserved_keyword);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10886;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 127) !== 0) || ((((_la - 433)) & ~0x1F) === 0 && ((1 << (_la - 433)) & 4291821567) !== 0) || ((((_la - 465)) & ~0x1F) === 0 && ((1 << (_la - 465)) & 16770399) !== 0) || _la === 547 || _la === 548)) {
            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 col_name_keyword(): Col_name_keywordContext {
        let localContext = new Col_name_keywordContext(this.context, this.state);
        this.enterRule(localContext, 1498, PostgreSqlParser.RULE_col_name_keyword);
        try {
            this.state = 10939;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1164, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10888;
                this.match(PostgreSqlParser.KW_BETWEEN);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10889;
                this.match(PostgreSqlParser.KW_BIGINT);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10890;
                this.bit();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10891;
                this.match(PostgreSqlParser.KW_BOOLEAN);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10892;
                this.match(PostgreSqlParser.KW_CHAR);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 10893;
                this.character();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 10894;
                this.match(PostgreSqlParser.KW_COALESCE);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 10895;
                this.match(PostgreSqlParser.KW_DEC);
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 10896;
                this.match(PostgreSqlParser.KW_DECIMAL);
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 10897;
                this.match(PostgreSqlParser.KW_EXISTS);
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 10898;
                this.match(PostgreSqlParser.KW_EXTRACT);
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 10899;
                this.match(PostgreSqlParser.KW_FLOAT);
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 10900;
                this.match(PostgreSqlParser.KW_GREATEST);
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 10901;
                this.match(PostgreSqlParser.KW_GROUPING);
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 10902;
                this.match(PostgreSqlParser.KW_INOUT);
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 10903;
                this.match(PostgreSqlParser.KW_INT);
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 10904;
                this.match(PostgreSqlParser.KW_INTEGER);
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 10905;
                this.match(PostgreSqlParser.KW_INTERVAL);
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 10906;
                this.match(PostgreSqlParser.KW_LEAST);
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 10907;
                this.match(PostgreSqlParser.KW_NATIONAL);
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 10908;
                this.match(PostgreSqlParser.KW_NCHAR);
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 10909;
                this.match(PostgreSqlParser.KW_NONE);
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 10910;
                this.match(PostgreSqlParser.KW_NORMALIZE);
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 10911;
                this.match(PostgreSqlParser.KW_NULLIF);
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 10912;
                this.numeric();
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 10913;
                this.match(PostgreSqlParser.KW_OUT);
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 10914;
                this.match(PostgreSqlParser.KW_OVERLAY);
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 10915;
                this.match(PostgreSqlParser.KW_POSITION);
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 10916;
                this.match(PostgreSqlParser.KW_PRECISION);
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 10917;
                this.match(PostgreSqlParser.KW_REAL);
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 10918;
                this.match(PostgreSqlParser.KW_ROW);
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 10919;
                this.match(PostgreSqlParser.KW_SETOF);
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 10920;
                this.match(PostgreSqlParser.KW_SMALLINT);
                }
                break;
            case 34:
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 10921;
                this.match(PostgreSqlParser.KW_SUBSTRING);
                }
                break;
            case 35:
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 10922;
                this.match(PostgreSqlParser.KW_TIME);
                }
                break;
            case 36:
                this.enterOuterAlt(localContext, 36);
                {
                this.state = 10923;
                this.match(PostgreSqlParser.KW_TIMESTAMP);
                }
                break;
            case 37:
                this.enterOuterAlt(localContext, 37);
                {
                this.state = 10924;
                this.match(PostgreSqlParser.KW_TREAT);
                }
                break;
            case 38:
                this.enterOuterAlt(localContext, 38);
                {
                this.state = 10925;
                this.match(PostgreSqlParser.KW_TRIM);
                }
                break;
            case 39:
                this.enterOuterAlt(localContext, 39);
                {
                this.state = 10926;
                this.match(PostgreSqlParser.KW_VALUES);
                }
                break;
            case 40:
                this.enterOuterAlt(localContext, 40);
                {
                this.state = 10927;
                this.match(PostgreSqlParser.KW_VARCHAR);
                }
                break;
            case 41:
                this.enterOuterAlt(localContext, 41);
                {
                this.state = 10928;
                this.match(PostgreSqlParser.KW_XMLATTRIBUTES);
                }
                break;
            case 42:
                this.enterOuterAlt(localContext, 42);
                {
                this.state = 10929;
                this.match(PostgreSqlParser.KW_XMLCONCAT);
                }
                break;
            case 43:
                this.enterOuterAlt(localContext, 43);
                {
                this.state = 10930;
                this.match(PostgreSqlParser.KW_XMLELEMENT);
                }
                break;
            case 44:
                this.enterOuterAlt(localContext, 44);
                {
                this.state = 10931;
                this.match(PostgreSqlParser.KW_XMLEXISTS);
                }
                break;
            case 45:
                this.enterOuterAlt(localContext, 45);
                {
                this.state = 10932;
                this.match(PostgreSqlParser.KW_XMLFOREST);
                }
                break;
            case 46:
                this.enterOuterAlt(localContext, 46);
                {
                this.state = 10933;
                this.match(PostgreSqlParser.KW_XMLNAMESPACES);
                }
                break;
            case 47:
                this.enterOuterAlt(localContext, 47);
                {
                this.state = 10934;
                this.match(PostgreSqlParser.KW_XMLPARSE);
                }
                break;
            case 48:
                this.enterOuterAlt(localContext, 48);
                {
                this.state = 10935;
                this.match(PostgreSqlParser.KW_XMLPI);
                }
                break;
            case 49:
                this.enterOuterAlt(localContext, 49);
                {
                this.state = 10936;
                this.match(PostgreSqlParser.KW_XMLROOT);
                }
                break;
            case 50:
                this.enterOuterAlt(localContext, 50);
                {
                this.state = 10937;
                this.match(PostgreSqlParser.KW_XMLSERIALIZE);
                }
                break;
            case 51:
                this.enterOuterAlt(localContext, 51);
                {
                this.state = 10938;
                this.match(PostgreSqlParser.KW_XMLTABLE);
                }
                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 type_func_name_keyword(): Type_func_name_keywordContext {
        let localContext = new Type_func_name_keywordContext(this.context, this.state);
        this.enterRule(localContext, 1500, PostgreSqlParser.RULE_type_func_name_keyword);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10941;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 106)) & ~0x1F) === 0 && ((1 << (_la - 106)) & 8126463) !== 0) || _la === 472)) {
            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 reserved_keyword(): Reserved_keywordContext {
        let localContext = new Reserved_keywordContext(this.context, this.state);
        this.enterRule(localContext, 1502, PostgreSqlParser.RULE_reserved_keyword);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10943;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 30)) & ~0x1F) === 0 && ((1 << (_la - 30)) & 4286578687) !== 0) || ((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & 4294966783) !== 0) || ((((_la - 94)) & ~0x1F) === 0 && ((1 << (_la - 94)) & 4095) !== 0) || _la === 454)) {
            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 pl_function(): Pl_functionContext {
        let localContext = new Pl_functionContext(this.context, this.state);
        this.enterRule(localContext, 1504, PostgreSqlParser.RULE_pl_function);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10945;
            this.comp_options();
            this.state = 10946;
            this.pl_block();
            this.state = 10947;
            this.opt_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 comp_options(): Comp_optionsContext {
        let localContext = new Comp_optionsContext(this.context, this.state);
        this.enterRule(localContext, 1506, PostgreSqlParser.RULE_comp_options);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10952;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 29) {
                {
                {
                this.state = 10949;
                this.comp_option();
                }
                }
                this.state = 10954;
                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 comp_option(): Comp_optionContext {
        let localContext = new Comp_optionContext(this.context, this.state);
        this.enterRule(localContext, 1508, PostgreSqlParser.RULE_comp_option);
        try {
            this.state = 10975;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1166, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10955;
                this.sharp();
                this.state = 10956;
                this.match(PostgreSqlParser.KW_OPTION);
                this.state = 10957;
                this.match(PostgreSqlParser.KW_DUMP);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10959;
                this.sharp();
                this.state = 10960;
                this.match(PostgreSqlParser.KW_PRINT_STRICT_PARAMS);
                this.state = 10961;
                this.option_value();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10963;
                this.sharp();
                this.state = 10964;
                this.match(PostgreSqlParser.KW_VARIABLE_CONFLICT);
                this.state = 10965;
                this.match(PostgreSqlParser.KW_ERROR);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10967;
                this.sharp();
                this.state = 10968;
                this.match(PostgreSqlParser.KW_VARIABLE_CONFLICT);
                this.state = 10969;
                this.match(PostgreSqlParser.KW_USE_VARIABLE);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 10971;
                this.sharp();
                this.state = 10972;
                this.match(PostgreSqlParser.KW_VARIABLE_CONFLICT);
                this.state = 10973;
                this.match(PostgreSqlParser.KW_USE_COLUMN);
                }
                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 sharp(): SharpContext {
        let localContext = new SharpContext(this.context, this.state);
        this.enterRule(localContext, 1510, PostgreSqlParser.RULE_sharp);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10977;
            this.match(PostgreSqlParser.Operator);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public option_value(): Option_valueContext {
        let localContext = new Option_valueContext(this.context, this.state);
        this.enterRule(localContext, 1512, PostgreSqlParser.RULE_option_value);
        try {
            this.state = 10983;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1167, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 10979;
                this.sconst();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10980;
                this.reserved_keyword();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 10981;
                this.plsql_unreserved_keyword();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 10982;
                this.unreserved_keyword();
                }
                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 opt_semi(): Opt_semiContext {
        let localContext = new Opt_semiContext(this.context, this.state);
        this.enterRule(localContext, 1514, PostgreSqlParser.RULE_opt_semi);
        try {
            this.state = 10987;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.EOF:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.SEMI:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 10986;
                this.match(PostgreSqlParser.SEMI);
                }
                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 pl_block(): Pl_blockContext {
        let localContext = new Pl_blockContext(this.context, this.state);
        this.enterRule(localContext, 1516, PostgreSqlParser.RULE_pl_block);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10989;
            this.decl_sect();
            this.state = 10990;
            this.match(PostgreSqlParser.KW_BEGIN);
            this.state = 10991;
            this.proc_sect();
            this.state = 10992;
            this.exception_sect();
            this.state = 10993;
            this.match(PostgreSqlParser.KW_END);
            this.state = 10994;
            this.opt_label();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decl_sect(): Decl_sectContext {
        let localContext = new Decl_sectContext(this.context, this.state);
        this.enterRule(localContext, 1518, PostgreSqlParser.RULE_decl_sect);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 10996;
            this.opt_block_label();
            this.state = 11001;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 178) {
                {
                this.state = 10997;
                this.decl_start();
                this.state = 10999;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1169, this.context) ) {
                case 1:
                    {
                    this.state = 10998;
                    this.decl_stmts();
                    }
                    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 decl_start(): Decl_startContext {
        let localContext = new Decl_startContext(this.context, this.state);
        this.enterRule(localContext, 1520, PostgreSqlParser.RULE_decl_start);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11003;
            this.match(PostgreSqlParser.KW_DECLARE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decl_stmts(): Decl_stmtsContext {
        let localContext = new Decl_stmtsContext(this.context, this.state);
        this.enterRule(localContext, 1522, PostgreSqlParser.RULE_decl_stmts);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11006;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 11005;
                    this.decl_stmt();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 11008;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1171, 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 label_decl(): Label_declContext {
        let localContext = new Label_declContext(this.context, this.state);
        this.enterRule(localContext, 1524, PostgreSqlParser.RULE_label_decl);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11010;
            this.match(PostgreSqlParser.LESS_LESS);
            this.state = 11011;
            this.any_identifier();
            this.state = 11012;
            this.match(PostgreSqlParser.GREATER_GREATER);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decl_stmt(): Decl_stmtContext {
        let localContext = new Decl_stmtContext(this.context, this.state);
        this.enterRule(localContext, 1526, PostgreSqlParser.RULE_decl_stmt);
        try {
            this.state = 11017;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1172, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11014;
                this.decl_statement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11015;
                this.match(PostgreSqlParser.KW_DECLARE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 11016;
                this.label_decl();
                }
                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 decl_statement(): Decl_statementContext {
        let localContext = new Decl_statementContext(this.context, this.state);
        this.enterRule(localContext, 1528, PostgreSqlParser.RULE_decl_statement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11019;
            this.decl_varname();
            this.state = 11035;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1173, this.context) ) {
            case 1:
                {
                this.state = 11020;
                this.match(PostgreSqlParser.KW_ALIAS);
                this.state = 11021;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 11022;
                this.decl_aliasitem();
                }
                break;
            case 2:
                {
                this.state = 11023;
                this.decl_const();
                this.state = 11024;
                this.decl_datatype();
                this.state = 11025;
                this.decl_collate();
                this.state = 11026;
                this.decl_notnull();
                this.state = 11027;
                this.decl_defval();
                }
                break;
            case 3:
                {
                this.state = 11029;
                this.opt_scrollable();
                this.state = 11030;
                this.match(PostgreSqlParser.KW_CURSOR);
                this.state = 11031;
                this.decl_cursor_args();
                this.state = 11032;
                this.decl_is_for();
                this.state = 11033;
                this.decl_cursor_query();
                }
                break;
            }
            this.state = 11037;
            this.match(PostgreSqlParser.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 opt_scrollable(): Opt_scrollableContext {
        let localContext = new Opt_scrollableContext(this.context, this.state);
        this.enterRule(localContext, 1530, PostgreSqlParser.RULE_opt_scrollable);
        try {
            this.state = 11043;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_CURSOR:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_NO:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11040;
                this.match(PostgreSqlParser.KW_NO);
                this.state = 11041;
                this.match(PostgreSqlParser.KW_SCROLL);
                }
                break;
            case PostgreSqlParser.KW_SCROLL:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 11042;
                this.match(PostgreSqlParser.KW_SCROLL);
                }
                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 decl_cursor_query(): Decl_cursor_queryContext {
        let localContext = new Decl_cursor_queryContext(this.context, this.state);
        this.enterRule(localContext, 1532, PostgreSqlParser.RULE_decl_cursor_query);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11045;
            this.selectstmt();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decl_cursor_args(): Decl_cursor_argsContext {
        let localContext = new Decl_cursor_argsContext(this.context, this.state);
        this.enterRule(localContext, 1534, PostgreSqlParser.RULE_decl_cursor_args);
        try {
            this.state = 11052;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FOR:
            case PostgreSqlParser.KW_IS:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11048;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 11049;
                this.decl_cursor_arglist();
                this.state = 11050;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 decl_cursor_arglist(): Decl_cursor_arglistContext {
        let localContext = new Decl_cursor_arglistContext(this.context, this.state);
        this.enterRule(localContext, 1536, PostgreSqlParser.RULE_decl_cursor_arglist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11054;
            this.decl_cursor_arg();
            this.state = 11059;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 11055;
                this.match(PostgreSqlParser.COMMA);
                this.state = 11056;
                this.decl_cursor_arg();
                }
                }
                this.state = 11061;
                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 decl_cursor_arg(): Decl_cursor_argContext {
        let localContext = new Decl_cursor_argContext(this.context, this.state);
        this.enterRule(localContext, 1538, PostgreSqlParser.RULE_decl_cursor_arg);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11062;
            this.decl_varname();
            this.state = 11063;
            this.decl_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 decl_is_for(): Decl_is_forContext {
        let localContext = new Decl_is_forContext(this.context, this.state);
        this.enterRule(localContext, 1540, PostgreSqlParser.RULE_decl_is_for);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11065;
            _la = this.tokenStream.LA(1);
            if(!(_la === 62 || _la === 116)) {
            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 decl_aliasitem(): Decl_aliasitemContext {
        let localContext = new Decl_aliasitemContext(this.context, this.state);
        this.enterRule(localContext, 1542, PostgreSqlParser.RULE_decl_aliasitem);
        try {
            this.state = 11069;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.PARAM:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11067;
                this.match(PostgreSqlParser.PARAM);
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11068;
                this.colid();
                }
                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 decl_varname(): Decl_varnameContext {
        let localContext = new Decl_varnameContext(this.context, this.state);
        this.enterRule(localContext, 1544, PostgreSqlParser.RULE_decl_varname);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11071;
            this.any_identifier();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decl_const(): Decl_constContext {
        let localContext = new Decl_constContext(this.context, this.state);
        this.enterRule(localContext, 1546, PostgreSqlParser.RULE_decl_const);
        try {
            this.state = 11075;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1178, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11074;
                this.match(PostgreSqlParser.KW_CONSTANT);
                }
                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 decl_datatype(): Decl_datatypeContext {
        let localContext = new Decl_datatypeContext(this.context, this.state);
        this.enterRule(localContext, 1548, PostgreSqlParser.RULE_decl_datatype);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11077;
            this.typename();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decl_collate(): Decl_collateContext {
        let localContext = new Decl_collateContext(this.context, this.state);
        this.enterRule(localContext, 1550, PostgreSqlParser.RULE_decl_collate);
        try {
            this.state = 11082;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
            case PostgreSqlParser.EQUAL:
            case PostgreSqlParser.COLON_EQUALS:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_NOT:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_COLLATE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11080;
                this.match(PostgreSqlParser.KW_COLLATE);
                this.state = 11081;
                this.any_name();
                }
                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 decl_notnull(): Decl_notnullContext {
        let localContext = new Decl_notnullContext(this.context, this.state);
        this.enterRule(localContext, 1552, PostgreSqlParser.RULE_decl_notnull);
        try {
            this.state = 11087;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
            case PostgreSqlParser.EQUAL:
            case PostgreSqlParser.COLON_EQUALS:
            case PostgreSqlParser.KW_DEFAULT:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_NOT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11085;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 11086;
                this.match(PostgreSqlParser.KW_NULL);
                }
                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 decl_defval(): Decl_defvalContext {
        let localContext = new Decl_defvalContext(this.context, this.state);
        this.enterRule(localContext, 1554, PostgreSqlParser.RULE_decl_defval);
        try {
            this.state = 11093;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.EQUAL:
            case PostgreSqlParser.COLON_EQUALS:
            case PostgreSqlParser.KW_DEFAULT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11090;
                this.decl_defkey();
                this.state = 11091;
                this.sql_expression();
                }
                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 decl_defkey(): Decl_defkeyContext {
        let localContext = new Decl_defkeyContext(this.context, this.state);
        this.enterRule(localContext, 1556, PostgreSqlParser.RULE_decl_defkey);
        try {
            this.state = 11097;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.EQUAL:
            case PostgreSqlParser.COLON_EQUALS:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11095;
                this.assign_operator();
                }
                break;
            case PostgreSqlParser.KW_DEFAULT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11096;
                this.match(PostgreSqlParser.KW_DEFAULT);
                }
                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 assign_operator(): Assign_operatorContext {
        let localContext = new Assign_operatorContext(this.context, this.state);
        this.enterRule(localContext, 1558, PostgreSqlParser.RULE_assign_operator);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11099;
            _la = this.tokenStream.LA(1);
            if(!(_la === 10 || _la === 20)) {
            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 proc_sect(): Proc_sectContext {
        let localContext = new Proc_sectContext(this.context, this.state);
        this.enterRule(localContext, 1560, PostgreSqlParser.RULE_proc_sect);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11104;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1183, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 11101;
                    this.proc_stmt();
                    }
                    }
                }
                this.state = 11106;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1183, 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 proc_stmt(): Proc_stmtContext {
        let localContext = new Proc_stmtContext(this.context, this.state);
        this.enterRule(localContext, 1562, PostgreSqlParser.RULE_proc_stmt);
        try {
            this.state = 11134;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1184, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11107;
                this.pl_block();
                this.state = 11108;
                this.match(PostgreSqlParser.SEMI);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11110;
                this.stmt_return();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 11111;
                this.stmt_raise();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 11112;
                this.stmt_assign();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 11113;
                this.stmt_if();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 11114;
                this.stmt_case();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 11115;
                this.stmt_loop();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 11116;
                this.stmt_while();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 11117;
                this.stmt_for();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 11118;
                this.stmt_foreach_a();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 11119;
                this.stmt_exit();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 11120;
                this.stmt_assert();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 11121;
                this.stmt_execsql();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 11122;
                this.stmt_dynexecute();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 11123;
                this.stmt_perform();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 11124;
                this.stmt_call();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 11125;
                this.stmt_getdiag();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 11126;
                this.stmt_open();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 11127;
                this.stmt_fetch();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 11128;
                this.stmt_move();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 11129;
                this.stmt_close();
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 11130;
                this.stmt_null();
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 11131;
                this.stmt_commit();
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 11132;
                this.stmt_rollback();
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 11133;
                this.stmt_set();
                }
                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 stmt_perform(): Stmt_performContext {
        let localContext = new Stmt_performContext(this.context, this.state);
        this.enterRule(localContext, 1564, PostgreSqlParser.RULE_stmt_perform);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11136;
            this.match(PostgreSqlParser.KW_PERFORM);
            this.state = 11137;
            this.expr_until_semi();
            this.state = 11138;
            this.match(PostgreSqlParser.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 stmt_call(): Stmt_callContext {
        let localContext = new Stmt_callContext(this.context, this.state);
        this.enterRule(localContext, 1566, PostgreSqlParser.RULE_stmt_call);
        try {
            this.state = 11156;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_CALL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11140;
                this.match(PostgreSqlParser.KW_CALL);
                this.state = 11141;
                this.any_identifier();
                this.state = 11147;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1185, this.context) ) {
                case 1:
                    {
                    this.state = 11142;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 11143;
                    this.opt_expr_list();
                    this.state = 11144;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    this.state = 11145;
                    this.match(PostgreSqlParser.SEMI);
                    }
                    break;
                }
                }
                break;
            case PostgreSqlParser.KW_DO:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11149;
                this.match(PostgreSqlParser.KW_DO);
                this.state = 11150;
                this.any_identifier();
                this.state = 11151;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 11152;
                this.opt_expr_list();
                this.state = 11153;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                this.state = 11154;
                this.match(PostgreSqlParser.SEMI);
                }
                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 opt_expr_list(): Opt_expr_listContext {
        let localContext = new Opt_expr_listContext(this.context, this.state);
        this.enterRule(localContext, 1568, PostgreSqlParser.RULE_opt_expr_list);
        try {
            this.state = 11160;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.CLOSE_PAREN:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
            case PostgreSqlParser.PLUS:
            case PostgreSqlParser.MINUS:
            case PostgreSqlParser.PARAM:
            case PostgreSqlParser.Operator:
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_CASE:
            case PostgreSqlParser.KW_CAST:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_CURRENT_CATALOG:
            case PostgreSqlParser.KW_CURRENT_DATE:
            case PostgreSqlParser.KW_CURRENT_ROLE:
            case PostgreSqlParser.KW_CURRENT_TIME:
            case PostgreSqlParser.KW_CURRENT_TIMESTAMP:
            case PostgreSqlParser.KW_CURRENT_USER:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FALSE:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_LOCALTIME:
            case PostgreSqlParser.KW_LOCALTIMESTAMP:
            case PostgreSqlParser.KW_NOT:
            case PostgreSqlParser.KW_NULL:
            case PostgreSqlParser.KW_SESSION_USER:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_TRUE:
            case PostgreSqlParser.KW_UNIQUE:
            case PostgreSqlParser.KW_USER:
            case PostgreSqlParser.KW_AUTHORIZATION:
            case PostgreSqlParser.KW_BINARY:
            case PostgreSqlParser.KW_COLLATION:
            case PostgreSqlParser.KW_CONCURRENTLY:
            case PostgreSqlParser.KW_CROSS:
            case PostgreSqlParser.KW_CURRENT_SCHEMA:
            case PostgreSqlParser.KW_FREEZE:
            case PostgreSqlParser.KW_FULL:
            case PostgreSqlParser.KW_ILIKE:
            case PostgreSqlParser.KW_INNER:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_ISNULL:
            case PostgreSqlParser.KW_JOIN:
            case PostgreSqlParser.KW_LEFT:
            case PostgreSqlParser.KW_LIKE:
            case PostgreSqlParser.KW_NATURAL:
            case PostgreSqlParser.KW_NOTNULL:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_OVERLAPS:
            case PostgreSqlParser.KW_RIGHT:
            case PostgreSqlParser.KW_SIMILAR:
            case PostgreSqlParser.KW_VERBOSE:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_TABLESAMPLE:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.BinaryStringConstant:
            case PostgreSqlParser.HexadecimalStringConstant:
            case PostgreSqlParser.Integral:
            case PostgreSqlParser.Numeric:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11159;
                this.expr_list();
                }
                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 stmt_assign(): Stmt_assignContext {
        let localContext = new Stmt_assignContext(this.context, this.state);
        this.enterRule(localContext, 1570, PostgreSqlParser.RULE_stmt_assign);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11162;
            this.assign_var();
            this.state = 11163;
            this.assign_operator();
            this.state = 11164;
            this.sql_expression();
            this.state = 11165;
            this.match(PostgreSqlParser.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 stmt_getdiag(): Stmt_getdiagContext {
        let localContext = new Stmt_getdiagContext(this.context, this.state);
        this.enterRule(localContext, 1572, PostgreSqlParser.RULE_stmt_getdiag);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11167;
            this.match(PostgreSqlParser.KW_GET);
            this.state = 11168;
            this.getdiag_area_opt();
            this.state = 11169;
            this.match(PostgreSqlParser.KW_DIAGNOSTICS);
            this.state = 11170;
            this.getdiag_list();
            this.state = 11171;
            this.match(PostgreSqlParser.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 getdiag_area_opt(): Getdiag_area_optContext {
        let localContext = new Getdiag_area_optContext(this.context, this.state);
        this.enterRule(localContext, 1574, PostgreSqlParser.RULE_getdiag_area_opt);
        try {
            this.state = 11176;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_DIAGNOSTICS:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_CURRENT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11174;
                this.match(PostgreSqlParser.KW_CURRENT);
                }
                break;
            case PostgreSqlParser.KW_STACKED:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 11175;
                this.match(PostgreSqlParser.KW_STACKED);
                }
                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 getdiag_list(): Getdiag_listContext {
        let localContext = new Getdiag_listContext(this.context, this.state);
        this.enterRule(localContext, 1576, PostgreSqlParser.RULE_getdiag_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11178;
            this.getdiag_list_item();
            this.state = 11183;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 11179;
                this.match(PostgreSqlParser.COMMA);
                this.state = 11180;
                this.getdiag_list_item();
                }
                }
                this.state = 11185;
                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 getdiag_list_item(): Getdiag_list_itemContext {
        let localContext = new Getdiag_list_itemContext(this.context, this.state);
        this.enterRule(localContext, 1578, PostgreSqlParser.RULE_getdiag_list_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11186;
            this.getdiag_target();
            this.state = 11187;
            this.assign_operator();
            this.state = 11188;
            this.getdiag_item();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public getdiag_item(): Getdiag_itemContext {
        let localContext = new Getdiag_itemContext(this.context, this.state);
        this.enterRule(localContext, 1580, PostgreSqlParser.RULE_getdiag_item);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11190;
            this.colid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public getdiag_target(): Getdiag_targetContext {
        let localContext = new Getdiag_targetContext(this.context, this.state);
        this.enterRule(localContext, 1582, PostgreSqlParser.RULE_getdiag_target);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11192;
            this.assign_var();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public assign_var(): Assign_varContext {
        let localContext = new Assign_varContext(this.context, this.state);
        this.enterRule(localContext, 1584, PostgreSqlParser.RULE_assign_var);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11196;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                {
                this.state = 11194;
                this.any_name();
                }
                break;
            case PostgreSqlParser.PARAM:
                {
                this.state = 11195;
                this.match(PostgreSqlParser.PARAM);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 11204;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 4) {
                {
                {
                this.state = 11198;
                this.match(PostgreSqlParser.OPEN_BRACKET);
                this.state = 11199;
                this.expr_until_rightbracket();
                this.state = 11200;
                this.match(PostgreSqlParser.CLOSE_BRACKET);
                }
                }
                this.state = 11206;
                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 stmt_if(): Stmt_ifContext {
        let localContext = new Stmt_ifContext(this.context, this.state);
        this.enterRule(localContext, 1586, PostgreSqlParser.RULE_stmt_if);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11207;
            this.match(PostgreSqlParser.KW_IF);
            this.state = 11208;
            this.expr_until_then();
            this.state = 11209;
            this.match(PostgreSqlParser.KW_THEN);
            this.state = 11210;
            this.proc_sect();
            this.state = 11211;
            this.stmt_elsifs();
            this.state = 11212;
            this.stmt_else();
            this.state = 11213;
            this.match(PostgreSqlParser.KW_END);
            this.state = 11214;
            this.match(PostgreSqlParser.KW_IF);
            this.state = 11215;
            this.match(PostgreSqlParser.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 stmt_elsifs(): Stmt_elsifsContext {
        let localContext = new Stmt_elsifsContext(this.context, this.state);
        this.enterRule(localContext, 1588, PostgreSqlParser.RULE_stmt_elsifs);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11224;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 502) {
                {
                {
                this.state = 11217;
                this.match(PostgreSqlParser.KW_ELSIF);
                this.state = 11218;
                this.a_expr();
                this.state = 11219;
                this.match(PostgreSqlParser.KW_THEN);
                this.state = 11220;
                this.proc_sect();
                }
                }
                this.state = 11226;
                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 stmt_else(): Stmt_elseContext {
        let localContext = new Stmt_elseContext(this.context, this.state);
        this.enterRule(localContext, 1590, PostgreSqlParser.RULE_stmt_else);
        try {
            this.state = 11230;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_END:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_ELSE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11228;
                this.match(PostgreSqlParser.KW_ELSE);
                this.state = 11229;
                this.proc_sect();
                }
                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 stmt_case(): Stmt_caseContext {
        let localContext = new Stmt_caseContext(this.context, this.state);
        this.enterRule(localContext, 1592, PostgreSqlParser.RULE_stmt_case);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11232;
            this.match(PostgreSqlParser.KW_CASE);
            this.state = 11233;
            this.opt_expr_until_when();
            this.state = 11234;
            this.case_when_list();
            this.state = 11235;
            this.opt_case_else();
            this.state = 11236;
            this.match(PostgreSqlParser.KW_END);
            this.state = 11237;
            this.match(PostgreSqlParser.KW_CASE);
            this.state = 11238;
            this.match(PostgreSqlParser.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 opt_expr_until_when(): Opt_expr_until_whenContext {
        let localContext = new Opt_expr_until_whenContext(this.context, this.state);
        this.enterRule(localContext, 1594, PostgreSqlParser.RULE_opt_expr_until_when);
        try {
            this.state = 11242;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1194, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11241;
                this.sql_expression();
                }
                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 case_when_list(): Case_when_listContext {
        let localContext = new Case_when_listContext(this.context, this.state);
        this.enterRule(localContext, 1596, PostgreSqlParser.RULE_case_when_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11245;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 11244;
                this.case_when();
                }
                }
                this.state = 11247;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 102);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public case_when(): Case_whenContext {
        let localContext = new Case_whenContext(this.context, this.state);
        this.enterRule(localContext, 1598, PostgreSqlParser.RULE_case_when);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11249;
            this.match(PostgreSqlParser.KW_WHEN);
            this.state = 11250;
            this.expr_list();
            this.state = 11251;
            this.match(PostgreSqlParser.KW_THEN);
            this.state = 11252;
            this.proc_sect();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_case_else(): Opt_case_elseContext {
        let localContext = new Opt_case_elseContext(this.context, this.state);
        this.enterRule(localContext, 1600, PostgreSqlParser.RULE_opt_case_else);
        try {
            this.state = 11257;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_END:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_ELSE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11255;
                this.match(PostgreSqlParser.KW_ELSE);
                this.state = 11256;
                this.proc_sect();
                }
                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 stmt_loop(): Stmt_loopContext {
        let localContext = new Stmt_loopContext(this.context, this.state);
        this.enterRule(localContext, 1602, PostgreSqlParser.RULE_stmt_loop);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11259;
            this.opt_loop_label();
            this.state = 11260;
            this.loop_body();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stmt_while(): Stmt_whileContext {
        let localContext = new Stmt_whileContext(this.context, this.state);
        this.enterRule(localContext, 1604, PostgreSqlParser.RULE_stmt_while);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11262;
            this.opt_loop_label();
            this.state = 11263;
            this.match(PostgreSqlParser.KW_WHILE);
            this.state = 11264;
            this.expr_until_loop();
            this.state = 11265;
            this.loop_body();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stmt_for(): Stmt_forContext {
        let localContext = new Stmt_forContext(this.context, this.state);
        this.enterRule(localContext, 1606, PostgreSqlParser.RULE_stmt_for);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11267;
            this.opt_loop_label();
            this.state = 11268;
            this.match(PostgreSqlParser.KW_FOR);
            this.state = 11269;
            this.for_control();
            this.state = 11270;
            this.loop_body();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public for_control(): For_controlContext {
        let localContext = new For_controlContext(this.context, this.state);
        this.enterRule(localContext, 1608, PostgreSqlParser.RULE_for_control);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11272;
            this.for_variable();
            this.state = 11273;
            this.match(PostgreSqlParser.KW_IN);
            this.state = 11289;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1197, this.context) ) {
            case 1:
                {
                this.state = 11274;
                this.cursor_name();
                this.state = 11275;
                this.opt_cursor_parameters();
                }
                break;
            case 2:
                {
                this.state = 11277;
                this.selectstmt();
                }
                break;
            case 3:
                {
                this.state = 11278;
                this.explainstmt();
                }
                break;
            case 4:
                {
                this.state = 11279;
                this.match(PostgreSqlParser.KW_EXECUTE);
                this.state = 11280;
                this.a_expr();
                this.state = 11281;
                this.opt_for_using_expression();
                }
                break;
            case 5:
                {
                this.state = 11283;
                this.opt_reverse();
                this.state = 11284;
                this.a_expr();
                this.state = 11285;
                this.match(PostgreSqlParser.DOT_DOT);
                this.state = 11286;
                this.a_expr();
                this.state = 11287;
                this.opt_by_expression();
                }
                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 opt_for_using_expression(): Opt_for_using_expressionContext {
        let localContext = new Opt_for_using_expressionContext(this.context, this.state);
        this.enterRule(localContext, 1610, PostgreSqlParser.RULE_opt_for_using_expression);
        try {
            this.state = 11294;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
            case PostgreSqlParser.KW_LOOP:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11292;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 11293;
                this.expr_list();
                }
                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 opt_cursor_parameters(): Opt_cursor_parametersContext {
        let localContext = new Opt_cursor_parametersContext(this.context, this.state);
        this.enterRule(localContext, 1612, PostgreSqlParser.RULE_opt_cursor_parameters);
        let _la: number;
        try {
            this.state = 11308;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_LOOP:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.OPEN_PAREN:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11297;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 11298;
                this.a_expr();
                this.state = 11303;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 6) {
                    {
                    {
                    this.state = 11299;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 11300;
                    this.a_expr();
                    }
                    }
                    this.state = 11305;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 11306;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
                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 opt_reverse(): Opt_reverseContext {
        let localContext = new Opt_reverseContext(this.context, this.state);
        this.enterRule(localContext, 1614, PostgreSqlParser.RULE_opt_reverse);
        try {
            this.state = 11312;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1201, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11311;
                this.match(PostgreSqlParser.KW_REVERSE);
                }
                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 opt_by_expression(): Opt_by_expressionContext {
        let localContext = new Opt_by_expressionContext(this.context, this.state);
        this.enterRule(localContext, 1616, PostgreSqlParser.RULE_opt_by_expression);
        try {
            this.state = 11317;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_LOOP:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_BY:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11315;
                this.match(PostgreSqlParser.KW_BY);
                this.state = 11316;
                this.a_expr();
                }
                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 for_variable(): For_variableContext {
        let localContext = new For_variableContext(this.context, this.state);
        this.enterRule(localContext, 1618, PostgreSqlParser.RULE_for_variable);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11319;
            this.any_name_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stmt_foreach_a(): Stmt_foreach_aContext {
        let localContext = new Stmt_foreach_aContext(this.context, this.state);
        this.enterRule(localContext, 1620, PostgreSqlParser.RULE_stmt_foreach_a);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11321;
            this.opt_loop_label();
            this.state = 11322;
            this.match(PostgreSqlParser.KW_FOREACH);
            this.state = 11323;
            this.for_variable();
            this.state = 11324;
            this.foreach_slice();
            this.state = 11325;
            this.match(PostgreSqlParser.KW_IN);
            this.state = 11326;
            this.match(PostgreSqlParser.KW_ARRAY);
            this.state = 11327;
            this.a_expr();
            this.state = 11328;
            this.loop_body();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public foreach_slice(): Foreach_sliceContext {
        let localContext = new Foreach_sliceContext(this.context, this.state);
        this.enterRule(localContext, 1622, PostgreSqlParser.RULE_foreach_slice);
        try {
            this.state = 11333;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_IN:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_SLICE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11331;
                this.match(PostgreSqlParser.KW_SLICE);
                this.state = 11332;
                this.iconst();
                }
                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 stmt_exit(): Stmt_exitContext {
        let localContext = new Stmt_exitContext(this.context, this.state);
        this.enterRule(localContext, 1624, PostgreSqlParser.RULE_stmt_exit);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11335;
            this.exit_type();
            this.state = 11336;
            this.opt_label();
            this.state = 11338;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 102) {
                {
                this.state = 11337;
                this.opt_exitcond();
                }
            }

            this.state = 11340;
            this.match(PostgreSqlParser.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 exit_type(): Exit_typeContext {
        let localContext = new Exit_typeContext(this.context, this.state);
        this.enterRule(localContext, 1626, PostgreSqlParser.RULE_exit_type);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11342;
            _la = this.tokenStream.LA(1);
            if(!(_la === 167 || _la === 507)) {
            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 stmt_return(): Stmt_returnContext {
        let localContext = new Stmt_returnContext(this.context, this.state);
        this.enterRule(localContext, 1628, PostgreSqlParser.RULE_stmt_return);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11344;
            this.match(PostgreSqlParser.KW_RETURN);
            this.state = 11356;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1206, this.context) ) {
            case 1:
                {
                this.state = 11345;
                this.match(PostgreSqlParser.KW_NEXT);
                this.state = 11346;
                this.sql_expression();
                }
                break;
            case 2:
                {
                this.state = 11347;
                this.match(PostgreSqlParser.KW_QUERY);
                this.state = 11353;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_EXECUTE:
                    {
                    this.state = 11348;
                    this.match(PostgreSqlParser.KW_EXECUTE);
                    this.state = 11349;
                    this.a_expr();
                    this.state = 11350;
                    this.opt_for_using_expression();
                    }
                    break;
                case PostgreSqlParser.OPEN_PAREN:
                case PostgreSqlParser.KW_SELECT:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_WITH:
                case PostgreSqlParser.KW_VALUES:
                    {
                    this.state = 11352;
                    this.selectstmt();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 3:
                {
                this.state = 11355;
                this.opt_return_result();
                }
                break;
            }
            this.state = 11358;
            this.match(PostgreSqlParser.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 opt_return_result(): Opt_return_resultContext {
        let localContext = new Opt_return_resultContext(this.context, this.state);
        this.enterRule(localContext, 1630, PostgreSqlParser.RULE_opt_return_result);
        try {
            this.state = 11362;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1207, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11361;
                this.sql_expression();
                }
                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 stmt_raise(): Stmt_raiseContext {
        let localContext = new Stmt_raiseContext(this.context, this.state);
        this.enterRule(localContext, 1632, PostgreSqlParser.RULE_stmt_raise);
        let _la: number;
        try {
            this.state = 11398;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1212, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11364;
                this.match(PostgreSqlParser.KW_RAISE);
                this.state = 11366;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 512)) & ~0x1F) === 0 && ((1 << (_la - 512)) & 63) !== 0)) {
                    {
                    this.state = 11365;
                    this.opt_stmt_raise_level();
                    }
                }

                this.state = 11368;
                this.sconst();
                this.state = 11369;
                this.opt_raise_list();
                this.state = 11370;
                this.opt_raise_using();
                this.state = 11371;
                this.match(PostgreSqlParser.SEMI);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11373;
                this.match(PostgreSqlParser.KW_RAISE);
                this.state = 11375;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1209, this.context) ) {
                case 1:
                    {
                    this.state = 11374;
                    this.opt_stmt_raise_level();
                    }
                    break;
                }
                this.state = 11377;
                this.identifier();
                this.state = 11378;
                this.opt_raise_using();
                this.state = 11379;
                this.match(PostgreSqlParser.SEMI);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 11381;
                this.match(PostgreSqlParser.KW_RAISE);
                this.state = 11383;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 512)) & ~0x1F) === 0 && ((1 << (_la - 512)) & 63) !== 0)) {
                    {
                    this.state = 11382;
                    this.opt_stmt_raise_level();
                    }
                }

                this.state = 11385;
                this.match(PostgreSqlParser.KW_SQLSTATE);
                this.state = 11386;
                this.sconst();
                this.state = 11387;
                this.opt_raise_using();
                this.state = 11388;
                this.match(PostgreSqlParser.SEMI);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 11390;
                this.match(PostgreSqlParser.KW_RAISE);
                this.state = 11392;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 512)) & ~0x1F) === 0 && ((1 << (_la - 512)) & 63) !== 0)) {
                    {
                    this.state = 11391;
                    this.opt_stmt_raise_level();
                    }
                }

                this.state = 11394;
                this.opt_raise_using();
                this.state = 11395;
                this.match(PostgreSqlParser.SEMI);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 11397;
                this.match(PostgreSqlParser.KW_RAISE);
                }
                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 opt_stmt_raise_level(): Opt_stmt_raise_levelContext {
        let localContext = new Opt_stmt_raise_levelContext(this.context, this.state);
        this.enterRule(localContext, 1634, PostgreSqlParser.RULE_opt_stmt_raise_level);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11400;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 512)) & ~0x1F) === 0 && ((1 << (_la - 512)) & 63) !== 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 opt_raise_list(): Opt_raise_listContext {
        let localContext = new Opt_raise_listContext(this.context, this.state);
        this.enterRule(localContext, 1636, PostgreSqlParser.RULE_opt_raise_list);
        let _la: number;
        try {
            this.state = 11409;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.COMMA:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11405;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 11403;
                    this.match(PostgreSqlParser.COMMA);
                    this.state = 11404;
                    this.a_expr();
                    }
                    }
                    this.state = 11407;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (_la === 6);
                }
                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 opt_raise_using(): Opt_raise_usingContext {
        let localContext = new Opt_raise_usingContext(this.context, this.state);
        this.enterRule(localContext, 1638, PostgreSqlParser.RULE_opt_raise_using);
        try {
            this.state = 11414;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11412;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 11413;
                this.opt_raise_using_elem_list();
                }
                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 opt_raise_using_elem(): Opt_raise_using_elemContext {
        let localContext = new Opt_raise_using_elemContext(this.context, this.state);
        this.enterRule(localContext, 1640, PostgreSqlParser.RULE_opt_raise_using_elem);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11416;
            this.identifier();
            this.state = 11417;
            this.match(PostgreSqlParser.EQUAL);
            this.state = 11418;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_raise_using_elem_list(): Opt_raise_using_elem_listContext {
        let localContext = new Opt_raise_using_elem_listContext(this.context, this.state);
        this.enterRule(localContext, 1642, PostgreSqlParser.RULE_opt_raise_using_elem_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11420;
            this.opt_raise_using_elem();
            this.state = 11425;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 11421;
                this.match(PostgreSqlParser.COMMA);
                this.state = 11422;
                this.opt_raise_using_elem();
                }
                }
                this.state = 11427;
                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 stmt_assert(): Stmt_assertContext {
        let localContext = new Stmt_assertContext(this.context, this.state);
        this.enterRule(localContext, 1644, PostgreSqlParser.RULE_stmt_assert);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11428;
            this.match(PostgreSqlParser.KW_ASSERT);
            this.state = 11429;
            this.sql_expression();
            this.state = 11430;
            this.opt_stmt_assert_message();
            this.state = 11431;
            this.match(PostgreSqlParser.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 opt_stmt_assert_message(): Opt_stmt_assert_messageContext {
        let localContext = new Opt_stmt_assert_messageContext(this.context, this.state);
        this.enterRule(localContext, 1646, PostgreSqlParser.RULE_opt_stmt_assert_message);
        try {
            this.state = 11436;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.COMMA:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11434;
                this.match(PostgreSqlParser.COMMA);
                this.state = 11435;
                this.sql_expression();
                }
                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 loop_body(): Loop_bodyContext {
        let localContext = new Loop_bodyContext(this.context, this.state);
        this.enterRule(localContext, 1648, PostgreSqlParser.RULE_loop_body);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11438;
            this.match(PostgreSqlParser.KW_LOOP);
            this.state = 11439;
            this.proc_sect();
            this.state = 11440;
            this.match(PostgreSqlParser.KW_END);
            this.state = 11441;
            this.match(PostgreSqlParser.KW_LOOP);
            this.state = 11442;
            this.opt_label();
            this.state = 11443;
            this.match(PostgreSqlParser.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 stmt_execsql(): Stmt_execsqlContext {
        let localContext = new Stmt_execsqlContext(this.context, this.state);
        this.enterRule(localContext, 1650, PostgreSqlParser.RULE_stmt_execsql);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11445;
            this.make_execsql_stmt();
            this.state = 11446;
            this.match(PostgreSqlParser.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 stmt_dynexecute(): Stmt_dynexecuteContext {
        let localContext = new Stmt_dynexecuteContext(this.context, this.state);
        this.enterRule(localContext, 1652, PostgreSqlParser.RULE_stmt_dynexecute);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11448;
            this.match(PostgreSqlParser.KW_EXECUTE);
            this.state = 11449;
            this.a_expr();
            this.state = 11457;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1218, this.context) ) {
            case 1:
                {
                this.state = 11450;
                this.opt_execute_into();
                this.state = 11451;
                this.opt_execute_using();
                }
                break;
            case 2:
                {
                this.state = 11453;
                this.opt_execute_using();
                this.state = 11454;
                this.opt_execute_into();
                }
                break;
            case 3:
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            }
            this.state = 11459;
            this.match(PostgreSqlParser.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 opt_execute_using(): Opt_execute_usingContext {
        let localContext = new Opt_execute_usingContext(this.context, this.state);
        this.enterRule(localContext, 1654, PostgreSqlParser.RULE_opt_execute_using);
        try {
            this.state = 11464;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
            case PostgreSqlParser.KW_INTO:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11462;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 11463;
                this.opt_execute_using_list();
                }
                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 opt_execute_using_list(): Opt_execute_using_listContext {
        let localContext = new Opt_execute_using_listContext(this.context, this.state);
        this.enterRule(localContext, 1656, PostgreSqlParser.RULE_opt_execute_using_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11466;
            this.a_expr();
            this.state = 11471;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 11467;
                this.match(PostgreSqlParser.COMMA);
                this.state = 11468;
                this.a_expr();
                }
                }
                this.state = 11473;
                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 opt_execute_into(): Opt_execute_intoContext {
        let localContext = new Opt_execute_intoContext(this.context, this.state);
        this.enterRule(localContext, 1658, PostgreSqlParser.RULE_opt_execute_into);
        try {
            this.state = 11480;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_INTO:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11475;
                this.match(PostgreSqlParser.KW_INTO);
                this.state = 11477;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1221, this.context) ) {
                case 1:
                    {
                    this.state = 11476;
                    this.match(PostgreSqlParser.KW_STRICT);
                    }
                    break;
                }
                this.state = 11479;
                this.into_target();
                }
                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 stmt_open(): Stmt_openContext {
        let localContext = new Stmt_openContext(this.context, this.state);
        this.enterRule(localContext, 1660, PostgreSqlParser.RULE_stmt_open);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11482;
            this.match(PostgreSqlParser.KW_OPEN);
            this.state = 11500;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1225, this.context) ) {
            case 1:
                {
                this.state = 11483;
                this.cursor_variable();
                this.state = 11484;
                this.opt_scroll_option();
                this.state = 11485;
                this.match(PostgreSqlParser.KW_FOR);
                this.state = 11491;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.OPEN_PAREN:
                case PostgreSqlParser.KW_SELECT:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_WITH:
                case PostgreSqlParser.KW_VALUES:
                    {
                    this.state = 11486;
                    this.selectstmt();
                    }
                    break;
                case PostgreSqlParser.KW_EXECUTE:
                    {
                    this.state = 11487;
                    this.match(PostgreSqlParser.KW_EXECUTE);
                    this.state = 11488;
                    this.sql_expression();
                    this.state = 11489;
                    this.opt_open_using();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                {
                this.state = 11493;
                this.colid();
                this.state = 11498;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 2) {
                    {
                    this.state = 11494;
                    this.match(PostgreSqlParser.OPEN_PAREN);
                    this.state = 11495;
                    this.opt_open_bound_list();
                    this.state = 11496;
                    this.match(PostgreSqlParser.CLOSE_PAREN);
                    }
                }

                }
                break;
            }
            this.state = 11502;
            this.match(PostgreSqlParser.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 opt_open_bound_list_item(): Opt_open_bound_list_itemContext {
        let localContext = new Opt_open_bound_list_itemContext(this.context, this.state);
        this.enterRule(localContext, 1662, PostgreSqlParser.RULE_opt_open_bound_list_item);
        try {
            this.state = 11509;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1226, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11504;
                this.colid();
                this.state = 11505;
                this.match(PostgreSqlParser.COLON_EQUALS);
                this.state = 11506;
                this.a_expr();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11508;
                this.a_expr();
                }
                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 opt_open_bound_list(): Opt_open_bound_listContext {
        let localContext = new Opt_open_bound_listContext(this.context, this.state);
        this.enterRule(localContext, 1664, PostgreSqlParser.RULE_opt_open_bound_list);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11511;
            this.opt_open_bound_list_item();
            this.state = 11516;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 11512;
                this.match(PostgreSqlParser.COMMA);
                this.state = 11513;
                this.opt_open_bound_list_item();
                }
                }
                this.state = 11518;
                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 opt_open_using(): Opt_open_usingContext {
        let localContext = new Opt_open_usingContext(this.context, this.state);
        this.enterRule(localContext, 1666, PostgreSqlParser.RULE_opt_open_using);
        try {
            this.state = 11522;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.SEMI:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_USING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11520;
                this.match(PostgreSqlParser.KW_USING);
                this.state = 11521;
                this.expr_list();
                }
                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 opt_scroll_option(): Opt_scroll_optionContext {
        let localContext = new Opt_scroll_optionContext(this.context, this.state);
        this.enterRule(localContext, 1668, PostgreSqlParser.RULE_opt_scroll_option);
        try {
            this.state = 11528;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FOR:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_SCROLL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11525;
                this.opt_scroll_option_no();
                this.state = 11526;
                this.match(PostgreSqlParser.KW_SCROLL);
                }
                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 opt_scroll_option_no(): Opt_scroll_option_noContext {
        let localContext = new Opt_scroll_option_noContext(this.context, this.state);
        this.enterRule(localContext, 1670, PostgreSqlParser.RULE_opt_scroll_option_no);
        try {
            this.state = 11532;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SCROLL:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_NO:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11531;
                this.match(PostgreSqlParser.KW_NO);
                }
                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 stmt_fetch(): Stmt_fetchContext {
        let localContext = new Stmt_fetchContext(this.context, this.state);
        this.enterRule(localContext, 1672, PostgreSqlParser.RULE_stmt_fetch);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11534;
            this.match(PostgreSqlParser.KW_FETCH);
            this.state = 11536;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1231, this.context) ) {
            case 1:
                {
                this.state = 11535;
                localContext._direction = this.opt_fetch_direction();
                }
                break;
            }
            this.state = 11538;
            this.opt_cursor_from();
            this.state = 11539;
            this.cursor_variable();
            this.state = 11540;
            this.match(PostgreSqlParser.KW_INTO);
            this.state = 11541;
            this.into_target();
            this.state = 11542;
            this.match(PostgreSqlParser.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 into_target(): Into_targetContext {
        let localContext = new Into_targetContext(this.context, this.state);
        this.enterRule(localContext, 1674, PostgreSqlParser.RULE_into_target);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11544;
            this.expr_list();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_cursor_from(): Opt_cursor_fromContext {
        let localContext = new Opt_cursor_fromContext(this.context, this.state);
        this.enterRule(localContext, 1676, PostgreSqlParser.RULE_opt_cursor_from);
        try {
            this.state = 11549;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.PARAM:
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_FROM:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11547;
                this.match(PostgreSqlParser.KW_FROM);
                }
                break;
            case PostgreSqlParser.KW_IN:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 11548;
                this.match(PostgreSqlParser.KW_IN);
                }
                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 opt_fetch_direction(): Opt_fetch_directionContext {
        let localContext = new Opt_fetch_directionContext(this.context, this.state);
        this.enterRule(localContext, 1678, PostgreSqlParser.RULE_opt_fetch_direction);
        let _la: number;
        try {
            this.state = 11566;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1234, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11551;
                this.match(PostgreSqlParser.KW_NEXT);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11552;
                this.match(PostgreSqlParser.KW_PRIOR);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 11553;
                this.match(PostgreSqlParser.KW_FIRST);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 11554;
                this.match(PostgreSqlParser.KW_LAST);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 11555;
                this.match(PostgreSqlParser.KW_ABSOLUTE);
                this.state = 11556;
                this.a_expr();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 11557;
                this.match(PostgreSqlParser.KW_RELATIVE);
                this.state = 11558;
                this.a_expr();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 11559;
                this.a_expr();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 11560;
                this.match(PostgreSqlParser.KW_ALL);
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 11561;
                _la = this.tokenStream.LA(1);
                if(!(_la === 144 || _la === 210)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 11564;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1233, this.context) ) {
                case 1:
                    {
                    this.state = 11562;
                    this.a_expr();
                    }
                    break;
                case 2:
                    {
                    this.state = 11563;
                    this.match(PostgreSqlParser.KW_ALL);
                    }
                    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 stmt_move(): Stmt_moveContext {
        let localContext = new Stmt_moveContext(this.context, this.state);
        this.enterRule(localContext, 1680, PostgreSqlParser.RULE_stmt_move);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11568;
            this.match(PostgreSqlParser.KW_MOVE);
            this.state = 11570;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1235, this.context) ) {
            case 1:
                {
                this.state = 11569;
                this.opt_fetch_direction();
                }
                break;
            }
            this.state = 11572;
            this.cursor_variable();
            this.state = 11573;
            this.match(PostgreSqlParser.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 mergestmt(): MergestmtContext {
        let localContext = new MergestmtContext(this.context, this.state);
        this.enterRule(localContext, 1682, PostgreSqlParser.RULE_mergestmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11576;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 105) {
                {
                this.state = 11575;
                this.with_clause();
                }
            }

            this.state = 11578;
            this.match(PostgreSqlParser.KW_MERGE);
            this.state = 11579;
            this.match(PostgreSqlParser.KW_INTO);
            this.state = 11581;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 81) {
                {
                this.state = 11580;
                this.match(PostgreSqlParser.KW_ONLY);
                }
            }

            this.state = 11583;
            this.table_name();
            this.state = 11585;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 9) {
                {
                this.state = 11584;
                this.match(PostgreSqlParser.STAR);
                }
            }

            this.state = 11591;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266381) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                {
                this.state = 11588;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 36) {
                    {
                    this.state = 11587;
                    this.match(PostgreSqlParser.KW_AS);
                    }
                }

                this.state = 11590;
                this.colid();
                }
            }

            this.state = 11593;
            this.match(PostgreSqlParser.KW_USING);
            this.state = 11594;
            this.data_source();
            this.state = 11595;
            this.match(PostgreSqlParser.KW_ON);
            this.state = 11596;
            this.join_condition();
            this.state = 11598;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 11597;
                this.merge_when_clause();
                }
                }
                this.state = 11600;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 102);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public data_source(): Data_sourceContext {
        let localContext = new Data_sourceContext(this.context, this.state);
        this.enterRule(localContext, 1684, PostgreSqlParser.RULE_data_source);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11613;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1245, this.context) ) {
            case 1:
                {
                this.state = 11603;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 81) {
                    {
                    this.state = 11602;
                    this.match(PostgreSqlParser.KW_ONLY);
                    }
                }

                this.state = 11605;
                this.table_name();
                this.state = 11607;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 9) {
                    {
                    this.state = 11606;
                    this.match(PostgreSqlParser.STAR);
                    }
                }

                }
                break;
            case 2:
                {
                this.state = 11611;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1244, this.context) ) {
                case 1:
                    {
                    this.state = 11609;
                    this.select_no_parens();
                    }
                    break;
                case 2:
                    {
                    this.state = 11610;
                    this.values_clause();
                    }
                    break;
                }
                }
                break;
            }
            this.state = 11619;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266381) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294705663) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4026530815) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 3623878655) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6143) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) {
                {
                this.state = 11616;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 36) {
                    {
                    this.state = 11615;
                    this.match(PostgreSqlParser.KW_AS);
                    }
                }

                this.state = 11618;
                this.colid();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public join_condition(): Join_conditionContext {
        let localContext = new Join_conditionContext(this.context, this.state);
        this.enterRule(localContext, 1686, PostgreSqlParser.RULE_join_condition);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11621;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public merge_when_clause(): Merge_when_clauseContext {
        let localContext = new Merge_when_clauseContext(this.context, this.state);
        this.enterRule(localContext, 1688, PostgreSqlParser.RULE_merge_when_clause);
        let _la: number;
        try {
            this.state = 11649;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1252, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11623;
                this.match(PostgreSqlParser.KW_WHEN);
                this.state = 11624;
                this.match(PostgreSqlParser.KW_MATCHED);
                this.state = 11627;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 33) {
                    {
                    this.state = 11625;
                    this.match(PostgreSqlParser.KW_AND);
                    this.state = 11626;
                    this.a_expr();
                    }
                }

                this.state = 11629;
                this.match(PostgreSqlParser.KW_THEN);
                this.state = 11634;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_UPDATE:
                    {
                    this.state = 11630;
                    this.merge_update();
                    }
                    break;
                case PostgreSqlParser.KW_DELETE:
                    {
                    this.state = 11631;
                    this.match(PostgreSqlParser.KW_DELETE);
                    }
                    break;
                case PostgreSqlParser.KW_DO:
                    {
                    this.state = 11632;
                    this.match(PostgreSqlParser.KW_DO);
                    this.state = 11633;
                    this.match(PostgreSqlParser.KW_NOTHING);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11636;
                this.match(PostgreSqlParser.KW_WHEN);
                this.state = 11637;
                this.match(PostgreSqlParser.KW_NOT);
                this.state = 11638;
                this.match(PostgreSqlParser.KW_MATCHED);
                this.state = 11641;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 33) {
                    {
                    this.state = 11639;
                    this.match(PostgreSqlParser.KW_AND);
                    this.state = 11640;
                    this.a_expr();
                    }
                }

                this.state = 11643;
                this.match(PostgreSqlParser.KW_THEN);
                this.state = 11647;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_INSERT:
                    {
                    this.state = 11644;
                    this.merge_insert();
                    }
                    break;
                case PostgreSqlParser.KW_DO:
                    {
                    this.state = 11645;
                    this.match(PostgreSqlParser.KW_DO);
                    this.state = 11646;
                    this.match(PostgreSqlParser.KW_NOTHING);
                    }
                    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 merge_insert(): Merge_insertContext {
        let localContext = new Merge_insertContext(this.context, this.state);
        this.enterRule(localContext, 1690, PostgreSqlParser.RULE_merge_insert);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11651;
            this.match(PostgreSqlParser.KW_INSERT);
            this.state = 11656;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 2) {
                {
                this.state = 11652;
                this.match(PostgreSqlParser.OPEN_PAREN);
                this.state = 11653;
                this.column_list();
                this.state = 11654;
                this.match(PostgreSqlParser.CLOSE_PAREN);
                }
            }

            this.state = 11661;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 463) {
                {
                this.state = 11658;
                this.match(PostgreSqlParser.KW_OVERRIDING);
                this.state = 11659;
                _la = this.tokenStream.LA(1);
                if(!(_la === 99 || _la === 349)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 11660;
                this.match(PostgreSqlParser.KW_VALUE);
                }
            }

            this.state = 11663;
            this.default_values_or_values();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public merge_update(): Merge_updateContext {
        let localContext = new Merge_updateContext(this.context, this.state);
        this.enterRule(localContext, 1692, PostgreSqlParser.RULE_merge_update);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11665;
            this.match(PostgreSqlParser.KW_UPDATE);
            this.state = 11666;
            this.match(PostgreSqlParser.KW_SET);
            this.state = 11679;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    this.state = 11679;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1255, this.context) ) {
                    case 1:
                        {
                        this.state = 11667;
                        this.column_name();
                        this.state = 11668;
                        this.match(PostgreSqlParser.EQUAL);
                        this.state = 11669;
                        this.exprofdefault();
                        }
                        break;
                    case 2:
                        {
                        this.state = 11671;
                        this.match(PostgreSqlParser.OPEN_PAREN);
                        this.state = 11672;
                        this.column_list();
                        this.state = 11673;
                        this.match(PostgreSqlParser.CLOSE_PAREN);
                        this.state = 11674;
                        this.match(PostgreSqlParser.EQUAL);
                        this.state = 11675;
                        this.match(PostgreSqlParser.OPEN_PAREN);
                        this.state = 11676;
                        this.exprofdefaultlist();
                        this.state = 11677;
                        this.match(PostgreSqlParser.CLOSE_PAREN);
                        }
                        break;
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 11681;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1256, 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 default_values_or_values(): Default_values_or_valuesContext {
        let localContext = new Default_values_or_valuesContext(this.context, this.state);
        this.enterRule(localContext, 1694, PostgreSqlParser.RULE_default_values_or_values);
        try {
            this.state = 11687;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_VALUES:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11683;
                this.match(PostgreSqlParser.KW_VALUES);
                this.state = 11684;
                this.exprofdefaultlist();
                }
                break;
            case PostgreSqlParser.KW_DEFAULT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11685;
                this.match(PostgreSqlParser.KW_DEFAULT);
                this.state = 11686;
                this.match(PostgreSqlParser.KW_VALUES);
                }
                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 exprofdefaultlist(): ExprofdefaultlistContext {
        let localContext = new ExprofdefaultlistContext(this.context, this.state);
        this.enterRule(localContext, 1696, PostgreSqlParser.RULE_exprofdefaultlist);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11689;
            this.match(PostgreSqlParser.OPEN_PAREN);
            this.state = 11690;
            this.exprofdefault();
            this.state = 11695;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 6) {
                {
                {
                this.state = 11691;
                this.match(PostgreSqlParser.COMMA);
                this.state = 11692;
                this.exprofdefault();
                }
                }
                this.state = 11697;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 11698;
            this.match(PostgreSqlParser.CLOSE_PAREN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public exprofdefault(): ExprofdefaultContext {
        let localContext = new ExprofdefaultContext(this.context, this.state);
        this.enterRule(localContext, 1698, PostgreSqlParser.RULE_exprofdefault);
        try {
            this.state = 11702;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1259, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11700;
                this.sortby();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11701;
                this.match(PostgreSqlParser.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 stmt_close(): Stmt_closeContext {
        let localContext = new Stmt_closeContext(this.context, this.state);
        this.enterRule(localContext, 1700, PostgreSqlParser.RULE_stmt_close);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11704;
            this.match(PostgreSqlParser.KW_CLOSE);
            this.state = 11705;
            this.cursor_variable();
            this.state = 11706;
            this.match(PostgreSqlParser.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 stmt_null(): Stmt_nullContext {
        let localContext = new Stmt_nullContext(this.context, this.state);
        this.enterRule(localContext, 1702, PostgreSqlParser.RULE_stmt_null);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11708;
            this.match(PostgreSqlParser.KW_NULL);
            this.state = 11709;
            this.match(PostgreSqlParser.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 stmt_commit(): Stmt_commitContext {
        let localContext = new Stmt_commitContext(this.context, this.state);
        this.enterRule(localContext, 1704, PostgreSqlParser.RULE_stmt_commit);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11711;
            this.match(PostgreSqlParser.KW_COMMIT);
            this.state = 11713;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 33) {
                {
                this.state = 11712;
                this.plsql_opt_transaction_chain();
                }
            }

            this.state = 11715;
            this.match(PostgreSqlParser.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 stmt_rollback(): Stmt_rollbackContext {
        let localContext = new Stmt_rollbackContext(this.context, this.state);
        this.enterRule(localContext, 1706, PostgreSqlParser.RULE_stmt_rollback);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11717;
            this.match(PostgreSqlParser.KW_ROLLBACK);
            this.state = 11719;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 33) {
                {
                this.state = 11718;
                this.plsql_opt_transaction_chain();
                }
            }

            this.state = 11721;
            this.match(PostgreSqlParser.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 plsql_opt_transaction_chain(): Plsql_opt_transaction_chainContext {
        let localContext = new Plsql_opt_transaction_chainContext(this.context, this.state);
        this.enterRule(localContext, 1708, PostgreSqlParser.RULE_plsql_opt_transaction_chain);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11723;
            this.match(PostgreSqlParser.KW_AND);
            this.state = 11725;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 269) {
                {
                this.state = 11724;
                this.match(PostgreSqlParser.KW_NO);
                }
            }

            this.state = 11727;
            this.match(PostgreSqlParser.KW_CHAIN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stmt_set(): Stmt_setContext {
        let localContext = new Stmt_setContext(this.context, this.state);
        this.enterRule(localContext, 1710, PostgreSqlParser.RULE_stmt_set);
        try {
            this.state = 11741;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_SET:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11729;
                this.match(PostgreSqlParser.KW_SET);
                this.state = 11730;
                this.any_name();
                this.state = 11731;
                this.match(PostgreSqlParser.KW_TO);
                this.state = 11732;
                this.match(PostgreSqlParser.KW_DEFAULT);
                this.state = 11733;
                this.match(PostgreSqlParser.SEMI);
                }
                break;
            case PostgreSqlParser.KW_RESET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11735;
                this.match(PostgreSqlParser.KW_RESET);
                this.state = 11738;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case PostgreSqlParser.KW_AND:
                case PostgreSqlParser.KW_ARRAY:
                case PostgreSqlParser.KW_COLLATE:
                case PostgreSqlParser.KW_CONSTRAINT:
                case PostgreSqlParser.KW_DEFAULT:
                case PostgreSqlParser.KW_DO:
                case PostgreSqlParser.KW_FETCH:
                case PostgreSqlParser.KW_TABLE:
                case PostgreSqlParser.KW_IS:
                case PostgreSqlParser.KW_OUTER:
                case PostgreSqlParser.KW_OVER:
                case PostgreSqlParser.KW_ABORT:
                case PostgreSqlParser.KW_ABSOLUTE:
                case PostgreSqlParser.KW_ACCESS:
                case PostgreSqlParser.KW_ACTION:
                case PostgreSqlParser.KW_ADD:
                case PostgreSqlParser.KW_ADMIN:
                case PostgreSqlParser.KW_AFTER:
                case PostgreSqlParser.KW_AGGREGATE:
                case PostgreSqlParser.KW_ALSO:
                case PostgreSqlParser.KW_ALTER:
                case PostgreSqlParser.KW_ALWAYS:
                case PostgreSqlParser.KW_ASSERTION:
                case PostgreSqlParser.KW_ASSIGNMENT:
                case PostgreSqlParser.KW_AT:
                case PostgreSqlParser.KW_ATTRIBUTE:
                case PostgreSqlParser.KW_BACKWARD:
                case PostgreSqlParser.KW_BEFORE:
                case PostgreSqlParser.KW_BEGIN:
                case PostgreSqlParser.KW_BY:
                case PostgreSqlParser.KW_CACHE:
                case PostgreSqlParser.KW_CALLED:
                case PostgreSqlParser.KW_CASCADE:
                case PostgreSqlParser.KW_CASCADED:
                case PostgreSqlParser.KW_CATALOG:
                case PostgreSqlParser.KW_CHAIN:
                case PostgreSqlParser.KW_CHARACTERISTICS:
                case PostgreSqlParser.KW_CHECKPOINT:
                case PostgreSqlParser.KW_CLASS:
                case PostgreSqlParser.KW_CLOSE:
                case PostgreSqlParser.KW_CLUSTER:
                case PostgreSqlParser.KW_COMMENT:
                case PostgreSqlParser.KW_COMMENTS:
                case PostgreSqlParser.KW_COMMIT:
                case PostgreSqlParser.KW_COMMITTED:
                case PostgreSqlParser.KW_CONFIGURATION:
                case PostgreSqlParser.KW_CONNECTION:
                case PostgreSqlParser.KW_CONSTRAINTS:
                case PostgreSqlParser.KW_CONTENT:
                case PostgreSqlParser.KW_CONTINUE:
                case PostgreSqlParser.KW_CONVERSION:
                case PostgreSqlParser.KW_COPY:
                case PostgreSqlParser.KW_COST:
                case PostgreSqlParser.KW_CSV:
                case PostgreSqlParser.KW_CURSOR:
                case PostgreSqlParser.KW_CYCLE:
                case PostgreSqlParser.KW_DATA:
                case PostgreSqlParser.KW_DATABASE:
                case PostgreSqlParser.KW_DAY:
                case PostgreSqlParser.KW_DEALLOCATE:
                case PostgreSqlParser.KW_DECLARE:
                case PostgreSqlParser.KW_DEFAULTS:
                case PostgreSqlParser.KW_DEFERRED:
                case PostgreSqlParser.KW_DEFINER:
                case PostgreSqlParser.KW_DELETE:
                case PostgreSqlParser.KW_DELIMITER:
                case PostgreSqlParser.KW_DELIMITERS:
                case PostgreSqlParser.KW_DICTIONARY:
                case PostgreSqlParser.KW_DISABLE:
                case PostgreSqlParser.KW_DISCARD:
                case PostgreSqlParser.KW_DOCUMENT:
                case PostgreSqlParser.KW_DOMAIN:
                case PostgreSqlParser.KW_DOUBLE:
                case PostgreSqlParser.KW_DROP:
                case PostgreSqlParser.KW_EACH:
                case PostgreSqlParser.KW_ENABLE:
                case PostgreSqlParser.KW_ENCODING:
                case PostgreSqlParser.KW_ENCRYPTED:
                case PostgreSqlParser.KW_ENUM:
                case PostgreSqlParser.KW_ESCAPE:
                case PostgreSqlParser.KW_EVENT:
                case PostgreSqlParser.KW_EXCLUDE:
                case PostgreSqlParser.KW_EXCLUDING:
                case PostgreSqlParser.KW_EXCLUSIVE:
                case PostgreSqlParser.KW_EXECUTE:
                case PostgreSqlParser.KW_EXPLAIN:
                case PostgreSqlParser.KW_EXTENSION:
                case PostgreSqlParser.KW_EXTERNAL:
                case PostgreSqlParser.KW_FAMILY:
                case PostgreSqlParser.KW_FIRST:
                case PostgreSqlParser.KW_FOLLOWING:
                case PostgreSqlParser.KW_FORCE:
                case PostgreSqlParser.KW_FORWARD:
                case PostgreSqlParser.KW_FUNCTION:
                case PostgreSqlParser.KW_FUNCTIONS:
                case PostgreSqlParser.KW_GLOBAL:
                case PostgreSqlParser.KW_GRANTED:
                case PostgreSqlParser.KW_HANDLER:
                case PostgreSqlParser.KW_HEADER:
                case PostgreSqlParser.KW_HOLD:
                case PostgreSqlParser.KW_HOUR:
                case PostgreSqlParser.KW_IDENTITY:
                case PostgreSqlParser.KW_IF:
                case PostgreSqlParser.KW_IMMEDIATE:
                case PostgreSqlParser.KW_IMMUTABLE:
                case PostgreSqlParser.KW_IMPLICIT:
                case PostgreSqlParser.KW_INCLUDING:
                case PostgreSqlParser.KW_INCREMENT:
                case PostgreSqlParser.KW_INDEX:
                case PostgreSqlParser.KW_INDEXES:
                case PostgreSqlParser.KW_INHERIT:
                case PostgreSqlParser.KW_INHERITS:
                case PostgreSqlParser.KW_INLINE:
                case PostgreSqlParser.KW_INSENSITIVE:
                case PostgreSqlParser.KW_INSERT:
                case PostgreSqlParser.KW_INSTEAD:
                case PostgreSqlParser.KW_INVOKER:
                case PostgreSqlParser.KW_ISOLATION:
                case PostgreSqlParser.KW_KEY:
                case PostgreSqlParser.KW_LABEL:
                case PostgreSqlParser.KW_LANGUAGE:
                case PostgreSqlParser.KW_LARGE:
                case PostgreSqlParser.KW_LAST:
                case PostgreSqlParser.KW_LEAKPROOF:
                case PostgreSqlParser.KW_LEVEL:
                case PostgreSqlParser.KW_LISTEN:
                case PostgreSqlParser.KW_LOAD:
                case PostgreSqlParser.KW_LOCAL:
                case PostgreSqlParser.KW_LOCATION:
                case PostgreSqlParser.KW_LOCK:
                case PostgreSqlParser.KW_MAPPING:
                case PostgreSqlParser.KW_MATCH:
                case PostgreSqlParser.KW_MATERIALIZED:
                case PostgreSqlParser.KW_MAXVALUE:
                case PostgreSqlParser.KW_MINUTE:
                case PostgreSqlParser.KW_MINVALUE:
                case PostgreSqlParser.KW_MODE:
                case PostgreSqlParser.KW_MONTH:
                case PostgreSqlParser.KW_MOVE:
                case PostgreSqlParser.KW_NAME:
                case PostgreSqlParser.KW_NAMES:
                case PostgreSqlParser.KW_NEXT:
                case PostgreSqlParser.KW_NO:
                case PostgreSqlParser.KW_NOTHING:
                case PostgreSqlParser.KW_NOTIFY:
                case PostgreSqlParser.KW_NOWAIT:
                case PostgreSqlParser.KW_NULLS:
                case PostgreSqlParser.KW_OBJECT:
                case PostgreSqlParser.KW_OF:
                case PostgreSqlParser.KW_OFF:
                case PostgreSqlParser.KW_OIDS:
                case PostgreSqlParser.KW_OPERATOR:
                case PostgreSqlParser.KW_OPTION:
                case PostgreSqlParser.KW_OPTIONS:
                case PostgreSqlParser.KW_OWNED:
                case PostgreSqlParser.KW_OWNER:
                case PostgreSqlParser.KW_PARSER:
                case PostgreSqlParser.KW_PARTIAL:
                case PostgreSqlParser.KW_PARTITION:
                case PostgreSqlParser.KW_PASSING:
                case PostgreSqlParser.KW_PASSWORD:
                case PostgreSqlParser.KW_PLANS:
                case PostgreSqlParser.KW_PRECEDING:
                case PostgreSqlParser.KW_PREPARE:
                case PostgreSqlParser.KW_PREPARED:
                case PostgreSqlParser.KW_PRESERVE:
                case PostgreSqlParser.KW_PRIOR:
                case PostgreSqlParser.KW_PRIVILEGES:
                case PostgreSqlParser.KW_PROCEDURAL:
                case PostgreSqlParser.KW_PROCEDURE:
                case PostgreSqlParser.KW_PROGRAM:
                case PostgreSqlParser.KW_QUOTE:
                case PostgreSqlParser.KW_RANGE:
                case PostgreSqlParser.KW_READ:
                case PostgreSqlParser.KW_REASSIGN:
                case PostgreSqlParser.KW_RECHECK:
                case PostgreSqlParser.KW_RECURSIVE:
                case PostgreSqlParser.KW_REF:
                case PostgreSqlParser.KW_REFRESH:
                case PostgreSqlParser.KW_REINDEX:
                case PostgreSqlParser.KW_RELATIVE:
                case PostgreSqlParser.KW_RELEASE:
                case PostgreSqlParser.KW_RENAME:
                case PostgreSqlParser.KW_REPEATABLE:
                case PostgreSqlParser.KW_REPLACE:
                case PostgreSqlParser.KW_REPLICA:
                case PostgreSqlParser.KW_RESET:
                case PostgreSqlParser.KW_RESTART:
                case PostgreSqlParser.KW_RESTRICT:
                case PostgreSqlParser.KW_RETURNS:
                case PostgreSqlParser.KW_REVOKE:
                case PostgreSqlParser.KW_ROLE:
                case PostgreSqlParser.KW_ROLLBACK:
                case PostgreSqlParser.KW_ROWS:
                case PostgreSqlParser.KW_RULE:
                case PostgreSqlParser.KW_SAVEPOINT:
                case PostgreSqlParser.KW_SCHEMA:
                case PostgreSqlParser.KW_SCROLL:
                case PostgreSqlParser.KW_SEARCH:
                case PostgreSqlParser.KW_SECOND:
                case PostgreSqlParser.KW_SECURITY:
                case PostgreSqlParser.KW_SEQUENCE:
                case PostgreSqlParser.KW_SEQUENCES:
                case PostgreSqlParser.KW_SERIALIZABLE:
                case PostgreSqlParser.KW_SERVER:
                case PostgreSqlParser.KW_SESSION:
                case PostgreSqlParser.KW_SET:
                case PostgreSqlParser.KW_SHARE:
                case PostgreSqlParser.KW_SHOW:
                case PostgreSqlParser.KW_SIMPLE:
                case PostgreSqlParser.KW_SNAPSHOT:
                case PostgreSqlParser.KW_STABLE:
                case PostgreSqlParser.KW_STANDALONE:
                case PostgreSqlParser.KW_START:
                case PostgreSqlParser.KW_STATEMENT:
                case PostgreSqlParser.KW_STATISTICS:
                case PostgreSqlParser.KW_STDIN:
                case PostgreSqlParser.KW_STDOUT:
                case PostgreSqlParser.KW_STORAGE:
                case PostgreSqlParser.KW_STRICT:
                case PostgreSqlParser.KW_STRIP:
                case PostgreSqlParser.KW_SYSID:
                case PostgreSqlParser.KW_SYSTEM:
                case PostgreSqlParser.KW_TABLES:
                case PostgreSqlParser.KW_TABLESPACE:
                case PostgreSqlParser.KW_TEMP:
                case PostgreSqlParser.KW_TEMPLATE:
                case PostgreSqlParser.KW_TEMPORARY:
                case PostgreSqlParser.KW_TEXT:
                case PostgreSqlParser.KW_TRANSACTION:
                case PostgreSqlParser.KW_TRIGGER:
                case PostgreSqlParser.KW_TRUNCATE:
                case PostgreSqlParser.KW_TRUSTED:
                case PostgreSqlParser.KW_TYPE:
                case PostgreSqlParser.KW_TYPES:
                case PostgreSqlParser.KW_UNBOUNDED:
                case PostgreSqlParser.KW_UNCOMMITTED:
                case PostgreSqlParser.KW_UNENCRYPTED:
                case PostgreSqlParser.KW_UNKNOWN:
                case PostgreSqlParser.KW_UNLISTEN:
                case PostgreSqlParser.KW_UNLOGGED:
                case PostgreSqlParser.KW_UNTIL:
                case PostgreSqlParser.KW_UPDATE:
                case PostgreSqlParser.KW_VACUUM:
                case PostgreSqlParser.KW_VALID:
                case PostgreSqlParser.KW_VALIDATE:
                case PostgreSqlParser.KW_VALIDATOR:
                case PostgreSqlParser.KW_VARYING:
                case PostgreSqlParser.KW_VERSION:
                case PostgreSqlParser.KW_VIEW:
                case PostgreSqlParser.KW_VOLATILE:
                case PostgreSqlParser.KW_WHITESPACE:
                case PostgreSqlParser.KW_WITHOUT:
                case PostgreSqlParser.KW_WORK:
                case PostgreSqlParser.KW_WRAPPER:
                case PostgreSqlParser.KW_WRITE:
                case PostgreSqlParser.KW_XML:
                case PostgreSqlParser.KW_YEAR:
                case PostgreSqlParser.KW_YES:
                case PostgreSqlParser.KW_ZONE:
                case PostgreSqlParser.KW_BETWEEN:
                case PostgreSqlParser.KW_BIGINT:
                case PostgreSqlParser.KW_BIT:
                case PostgreSqlParser.KW_BOOLEAN:
                case PostgreSqlParser.KW_CHAR:
                case PostgreSqlParser.KW_CHARACTER:
                case PostgreSqlParser.KW_COALESCE:
                case PostgreSqlParser.KW_DEC:
                case PostgreSqlParser.KW_DECIMAL:
                case PostgreSqlParser.KW_EXISTS:
                case PostgreSqlParser.KW_EXTRACT:
                case PostgreSqlParser.KW_FLOAT:
                case PostgreSqlParser.KW_GREATEST:
                case PostgreSqlParser.KW_INOUT:
                case PostgreSqlParser.KW_INT:
                case PostgreSqlParser.KW_INTEGER:
                case PostgreSqlParser.KW_INTERVAL:
                case PostgreSqlParser.KW_LEAST:
                case PostgreSqlParser.KW_NATIONAL:
                case PostgreSqlParser.KW_NCHAR:
                case PostgreSqlParser.KW_NONE:
                case PostgreSqlParser.KW_NULLIF:
                case PostgreSqlParser.KW_NUMERIC:
                case PostgreSqlParser.KW_OVERLAY:
                case PostgreSqlParser.KW_POSITION:
                case PostgreSqlParser.KW_PRECISION:
                case PostgreSqlParser.KW_REAL:
                case PostgreSqlParser.KW_ROW:
                case PostgreSqlParser.KW_SETOF:
                case PostgreSqlParser.KW_SMALLINT:
                case PostgreSqlParser.KW_SUBSTRING:
                case PostgreSqlParser.KW_TIME:
                case PostgreSqlParser.KW_TIMESTAMP:
                case PostgreSqlParser.KW_TREAT:
                case PostgreSqlParser.KW_TRIM:
                case PostgreSqlParser.KW_VALUES:
                case PostgreSqlParser.KW_VARCHAR:
                case PostgreSqlParser.KW_XMLATTRIBUTES:
                case PostgreSqlParser.KW_XMLCONCAT:
                case PostgreSqlParser.KW_XMLELEMENT:
                case PostgreSqlParser.KW_XMLEXISTS:
                case PostgreSqlParser.KW_XMLFOREST:
                case PostgreSqlParser.KW_XMLPARSE:
                case PostgreSqlParser.KW_XMLPI:
                case PostgreSqlParser.KW_XMLROOT:
                case PostgreSqlParser.KW_XMLSERIALIZE:
                case PostgreSqlParser.KW_CALL:
                case PostgreSqlParser.KW_CURRENT:
                case PostgreSqlParser.KW_ATTACH:
                case PostgreSqlParser.KW_DETACH:
                case PostgreSqlParser.KW_EXPRESSION:
                case PostgreSqlParser.KW_GENERATED:
                case PostgreSqlParser.KW_LOGGED:
                case PostgreSqlParser.KW_STORED:
                case PostgreSqlParser.KW_INCLUDE:
                case PostgreSqlParser.KW_ROUTINE:
                case PostgreSqlParser.KW_TRANSFORM:
                case PostgreSqlParser.KW_IMPORT:
                case PostgreSqlParser.KW_POLICY:
                case PostgreSqlParser.KW_METHOD:
                case PostgreSqlParser.KW_REFERENCING:
                case PostgreSqlParser.KW_NEW:
                case PostgreSqlParser.KW_OLD:
                case PostgreSqlParser.KW_VALUE:
                case PostgreSqlParser.KW_SUBSCRIPTION:
                case PostgreSqlParser.KW_PUBLICATION:
                case PostgreSqlParser.KW_OUT:
                case PostgreSqlParser.KW_ROUTINES:
                case PostgreSqlParser.KW_SCHEMAS:
                case PostgreSqlParser.KW_PROCEDURES:
                case PostgreSqlParser.KW_INPUT:
                case PostgreSqlParser.KW_SUPPORT:
                case PostgreSqlParser.KW_PARALLEL:
                case PostgreSqlParser.KW_SQL:
                case PostgreSqlParser.KW_DEPENDS:
                case PostgreSqlParser.KW_OVERRIDING:
                case PostgreSqlParser.KW_CONFLICT:
                case PostgreSqlParser.KW_SKIP:
                case PostgreSqlParser.KW_LOCKED:
                case PostgreSqlParser.KW_TIES:
                case PostgreSqlParser.KW_ROLLUP:
                case PostgreSqlParser.KW_CUBE:
                case PostgreSqlParser.KW_GROUPING:
                case PostgreSqlParser.KW_SETS:
                case PostgreSqlParser.KW_ORDINALITY:
                case PostgreSqlParser.KW_XMLTABLE:
                case PostgreSqlParser.KW_COLUMNS:
                case PostgreSqlParser.KW_XMLNAMESPACES:
                case PostgreSqlParser.KW_ROWTYPE:
                case PostgreSqlParser.KW_NORMALIZED:
                case PostgreSqlParser.KW_WITHIN:
                case PostgreSqlParser.KW_FILTER:
                case PostgreSqlParser.KW_GROUPS:
                case PostgreSqlParser.KW_OTHERS:
                case PostgreSqlParser.KW_NFC:
                case PostgreSqlParser.KW_NFD:
                case PostgreSqlParser.KW_NFKC:
                case PostgreSqlParser.KW_NFKD:
                case PostgreSqlParser.KW_UESCAPE:
                case PostgreSqlParser.KW_VIEWS:
                case PostgreSqlParser.KW_NORMALIZE:
                case PostgreSqlParser.KW_DUMP:
                case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
                case PostgreSqlParser.KW_VARIABLE_CONFLICT:
                case PostgreSqlParser.KW_ERROR:
                case PostgreSqlParser.KW_USE_VARIABLE:
                case PostgreSqlParser.KW_USE_COLUMN:
                case PostgreSqlParser.KW_ALIAS:
                case PostgreSqlParser.KW_CONSTANT:
                case PostgreSqlParser.KW_PERFORM:
                case PostgreSqlParser.KW_GET:
                case PostgreSqlParser.KW_DIAGNOSTICS:
                case PostgreSqlParser.KW_STACKED:
                case PostgreSqlParser.KW_ELSIF:
                case PostgreSqlParser.KW_REVERSE:
                case PostgreSqlParser.KW_SLICE:
                case PostgreSqlParser.KW_EXIT:
                case PostgreSqlParser.KW_RETURN:
                case PostgreSqlParser.KW_QUERY:
                case PostgreSqlParser.KW_RAISE:
                case PostgreSqlParser.KW_SQLSTATE:
                case PostgreSqlParser.KW_DEBUG:
                case PostgreSqlParser.KW_LOG:
                case PostgreSqlParser.KW_INFO:
                case PostgreSqlParser.KW_NOTICE:
                case PostgreSqlParser.KW_WARNING:
                case PostgreSqlParser.KW_EXCEPTION:
                case PostgreSqlParser.KW_ASSERT:
                case PostgreSqlParser.KW_OPEN:
                case PostgreSqlParser.KW_SKIP_LOCKED:
                case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
                case PostgreSqlParser.Identifier:
                case PostgreSqlParser.QuotedIdentifier:
                case PostgreSqlParser.UnicodeQuotedIdentifier:
                case PostgreSqlParser.StringConstant:
                case PostgreSqlParser.UnicodeEscapeStringConstant:
                case PostgreSqlParser.BeginDollarStringConstant:
                case PostgreSqlParser.PLSQLVARIABLENAME:
                case PostgreSqlParser.PLSQLIDENTIFIER:
                case PostgreSqlParser.EscapeStringConstant:
                    {
                    this.state = 11736;
                    this.any_name();
                    }
                    break;
                case PostgreSqlParser.KW_ALL:
                    {
                    this.state = 11737;
                    this.match(PostgreSqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 11740;
                this.match(PostgreSqlParser.SEMI);
                }
                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 cursor_variable(): Cursor_variableContext {
        let localContext = new Cursor_variableContext(this.context, this.state);
        this.enterRule(localContext, 1712, PostgreSqlParser.RULE_cursor_variable);
        try {
            this.state = 11745;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11743;
                this.colid();
                }
                break;
            case PostgreSqlParser.PARAM:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11744;
                this.match(PostgreSqlParser.PARAM);
                }
                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 exception_sect(): Exception_sectContext {
        let localContext = new Exception_sectContext(this.context, this.state);
        this.enterRule(localContext, 1714, PostgreSqlParser.RULE_exception_sect);
        try {
            this.state = 11750;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_END:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_EXCEPTION:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11748;
                this.match(PostgreSqlParser.KW_EXCEPTION);
                this.state = 11749;
                this.proc_exceptions();
                }
                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 proc_exceptions(): Proc_exceptionsContext {
        let localContext = new Proc_exceptionsContext(this.context, this.state);
        this.enterRule(localContext, 1716, PostgreSqlParser.RULE_proc_exceptions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11753;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 11752;
                this.proc_exception();
                }
                }
                this.state = 11755;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 102);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public proc_exception(): Proc_exceptionContext {
        let localContext = new Proc_exceptionContext(this.context, this.state);
        this.enterRule(localContext, 1718, PostgreSqlParser.RULE_proc_exception);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11757;
            this.match(PostgreSqlParser.KW_WHEN);
            this.state = 11758;
            this.proc_conditions();
            this.state = 11759;
            this.match(PostgreSqlParser.KW_THEN);
            this.state = 11760;
            this.proc_sect();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public proc_conditions(): Proc_conditionsContext {
        let localContext = new Proc_conditionsContext(this.context, this.state);
        this.enterRule(localContext, 1720, PostgreSqlParser.RULE_proc_conditions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11762;
            this.proc_condition();
            this.state = 11767;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 82) {
                {
                {
                this.state = 11763;
                this.match(PostgreSqlParser.KW_OR);
                this.state = 11764;
                this.proc_condition();
                }
                }
                this.state = 11769;
                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 proc_condition(): Proc_conditionContext {
        let localContext = new Proc_conditionContext(this.context, this.state);
        this.enterRule(localContext, 1722, PostgreSqlParser.RULE_proc_condition);
        try {
            this.state = 11773;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1269, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11770;
                this.any_identifier();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11771;
                this.match(PostgreSqlParser.KW_SQLSTATE);
                this.state = 11772;
                this.sconst();
                }
                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 opt_block_label(): Opt_block_labelContext {
        let localContext = new Opt_block_labelContext(this.context, this.state);
        this.enterRule(localContext, 1724, PostgreSqlParser.RULE_opt_block_label);
        try {
            this.state = 11777;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_DECLARE:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.LESS_LESS:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11776;
                this.label_decl();
                }
                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 opt_loop_label(): Opt_loop_labelContext {
        let localContext = new Opt_loop_labelContext(this.context, this.state);
        this.enterRule(localContext, 1726, PostgreSqlParser.RULE_opt_loop_label);
        try {
            this.state = 11781;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.KW_FOR:
            case PostgreSqlParser.KW_WHILE:
            case PostgreSqlParser.KW_FOREACH:
            case PostgreSqlParser.KW_LOOP:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.LESS_LESS:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11780;
                this.label_decl();
                }
                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 opt_label(): Opt_labelContext {
        let localContext = new Opt_labelContext(this.context, this.state);
        this.enterRule(localContext, 1728, PostgreSqlParser.RULE_opt_label);
        try {
            this.state = 11785;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case PostgreSqlParser.EOF:
            case PostgreSqlParser.SEMI:
            case PostgreSqlParser.KW_WHEN:
                this.enterOuterAlt(localContext, 1);
                // tslint:disable-next-line:no-empty
                {
                }
                break;
            case PostgreSqlParser.KW_AND:
            case PostgreSqlParser.KW_ARRAY:
            case PostgreSqlParser.KW_COLLATE:
            case PostgreSqlParser.KW_CONSTRAINT:
            case PostgreSqlParser.KW_DEFAULT:
            case PostgreSqlParser.KW_DO:
            case PostgreSqlParser.KW_FETCH:
            case PostgreSqlParser.KW_TABLE:
            case PostgreSqlParser.KW_IS:
            case PostgreSqlParser.KW_OUTER:
            case PostgreSqlParser.KW_OVER:
            case PostgreSqlParser.KW_ABORT:
            case PostgreSqlParser.KW_ABSOLUTE:
            case PostgreSqlParser.KW_ACCESS:
            case PostgreSqlParser.KW_ACTION:
            case PostgreSqlParser.KW_ADD:
            case PostgreSqlParser.KW_ADMIN:
            case PostgreSqlParser.KW_AFTER:
            case PostgreSqlParser.KW_AGGREGATE:
            case PostgreSqlParser.KW_ALSO:
            case PostgreSqlParser.KW_ALTER:
            case PostgreSqlParser.KW_ALWAYS:
            case PostgreSqlParser.KW_ASSERTION:
            case PostgreSqlParser.KW_ASSIGNMENT:
            case PostgreSqlParser.KW_AT:
            case PostgreSqlParser.KW_ATTRIBUTE:
            case PostgreSqlParser.KW_BACKWARD:
            case PostgreSqlParser.KW_BEFORE:
            case PostgreSqlParser.KW_BEGIN:
            case PostgreSqlParser.KW_BY:
            case PostgreSqlParser.KW_CACHE:
            case PostgreSqlParser.KW_CALLED:
            case PostgreSqlParser.KW_CASCADE:
            case PostgreSqlParser.KW_CASCADED:
            case PostgreSqlParser.KW_CATALOG:
            case PostgreSqlParser.KW_CHAIN:
            case PostgreSqlParser.KW_CHARACTERISTICS:
            case PostgreSqlParser.KW_CHECKPOINT:
            case PostgreSqlParser.KW_CLASS:
            case PostgreSqlParser.KW_CLOSE:
            case PostgreSqlParser.KW_CLUSTER:
            case PostgreSqlParser.KW_COMMENT:
            case PostgreSqlParser.KW_COMMENTS:
            case PostgreSqlParser.KW_COMMIT:
            case PostgreSqlParser.KW_COMMITTED:
            case PostgreSqlParser.KW_CONFIGURATION:
            case PostgreSqlParser.KW_CONNECTION:
            case PostgreSqlParser.KW_CONSTRAINTS:
            case PostgreSqlParser.KW_CONTENT:
            case PostgreSqlParser.KW_CONTINUE:
            case PostgreSqlParser.KW_CONVERSION:
            case PostgreSqlParser.KW_COPY:
            case PostgreSqlParser.KW_COST:
            case PostgreSqlParser.KW_CSV:
            case PostgreSqlParser.KW_CURSOR:
            case PostgreSqlParser.KW_CYCLE:
            case PostgreSqlParser.KW_DATA:
            case PostgreSqlParser.KW_DATABASE:
            case PostgreSqlParser.KW_DAY:
            case PostgreSqlParser.KW_DEALLOCATE:
            case PostgreSqlParser.KW_DECLARE:
            case PostgreSqlParser.KW_DEFAULTS:
            case PostgreSqlParser.KW_DEFERRED:
            case PostgreSqlParser.KW_DEFINER:
            case PostgreSqlParser.KW_DELETE:
            case PostgreSqlParser.KW_DELIMITER:
            case PostgreSqlParser.KW_DELIMITERS:
            case PostgreSqlParser.KW_DICTIONARY:
            case PostgreSqlParser.KW_DISABLE:
            case PostgreSqlParser.KW_DISCARD:
            case PostgreSqlParser.KW_DOCUMENT:
            case PostgreSqlParser.KW_DOMAIN:
            case PostgreSqlParser.KW_DOUBLE:
            case PostgreSqlParser.KW_DROP:
            case PostgreSqlParser.KW_EACH:
            case PostgreSqlParser.KW_ENABLE:
            case PostgreSqlParser.KW_ENCODING:
            case PostgreSqlParser.KW_ENCRYPTED:
            case PostgreSqlParser.KW_ENUM:
            case PostgreSqlParser.KW_ESCAPE:
            case PostgreSqlParser.KW_EVENT:
            case PostgreSqlParser.KW_EXCLUDE:
            case PostgreSqlParser.KW_EXCLUDING:
            case PostgreSqlParser.KW_EXCLUSIVE:
            case PostgreSqlParser.KW_EXECUTE:
            case PostgreSqlParser.KW_EXPLAIN:
            case PostgreSqlParser.KW_EXTENSION:
            case PostgreSqlParser.KW_EXTERNAL:
            case PostgreSqlParser.KW_FAMILY:
            case PostgreSqlParser.KW_FIRST:
            case PostgreSqlParser.KW_FOLLOWING:
            case PostgreSqlParser.KW_FORCE:
            case PostgreSqlParser.KW_FORWARD:
            case PostgreSqlParser.KW_FUNCTION:
            case PostgreSqlParser.KW_FUNCTIONS:
            case PostgreSqlParser.KW_GLOBAL:
            case PostgreSqlParser.KW_GRANTED:
            case PostgreSqlParser.KW_HANDLER:
            case PostgreSqlParser.KW_HEADER:
            case PostgreSqlParser.KW_HOLD:
            case PostgreSqlParser.KW_HOUR:
            case PostgreSqlParser.KW_IDENTITY:
            case PostgreSqlParser.KW_IF:
            case PostgreSqlParser.KW_IMMEDIATE:
            case PostgreSqlParser.KW_IMMUTABLE:
            case PostgreSqlParser.KW_IMPLICIT:
            case PostgreSqlParser.KW_INCLUDING:
            case PostgreSqlParser.KW_INCREMENT:
            case PostgreSqlParser.KW_INDEX:
            case PostgreSqlParser.KW_INDEXES:
            case PostgreSqlParser.KW_INHERIT:
            case PostgreSqlParser.KW_INHERITS:
            case PostgreSqlParser.KW_INLINE:
            case PostgreSqlParser.KW_INSENSITIVE:
            case PostgreSqlParser.KW_INSERT:
            case PostgreSqlParser.KW_INSTEAD:
            case PostgreSqlParser.KW_INVOKER:
            case PostgreSqlParser.KW_ISOLATION:
            case PostgreSqlParser.KW_KEY:
            case PostgreSqlParser.KW_LABEL:
            case PostgreSqlParser.KW_LANGUAGE:
            case PostgreSqlParser.KW_LARGE:
            case PostgreSqlParser.KW_LAST:
            case PostgreSqlParser.KW_LEAKPROOF:
            case PostgreSqlParser.KW_LEVEL:
            case PostgreSqlParser.KW_LISTEN:
            case PostgreSqlParser.KW_LOAD:
            case PostgreSqlParser.KW_LOCAL:
            case PostgreSqlParser.KW_LOCATION:
            case PostgreSqlParser.KW_LOCK:
            case PostgreSqlParser.KW_MAPPING:
            case PostgreSqlParser.KW_MATCH:
            case PostgreSqlParser.KW_MATERIALIZED:
            case PostgreSqlParser.KW_MAXVALUE:
            case PostgreSqlParser.KW_MINUTE:
            case PostgreSqlParser.KW_MINVALUE:
            case PostgreSqlParser.KW_MODE:
            case PostgreSqlParser.KW_MONTH:
            case PostgreSqlParser.KW_MOVE:
            case PostgreSqlParser.KW_NAME:
            case PostgreSqlParser.KW_NAMES:
            case PostgreSqlParser.KW_NEXT:
            case PostgreSqlParser.KW_NO:
            case PostgreSqlParser.KW_NOTHING:
            case PostgreSqlParser.KW_NOTIFY:
            case PostgreSqlParser.KW_NOWAIT:
            case PostgreSqlParser.KW_NULLS:
            case PostgreSqlParser.KW_OBJECT:
            case PostgreSqlParser.KW_OF:
            case PostgreSqlParser.KW_OFF:
            case PostgreSqlParser.KW_OIDS:
            case PostgreSqlParser.KW_OPERATOR:
            case PostgreSqlParser.KW_OPTION:
            case PostgreSqlParser.KW_OPTIONS:
            case PostgreSqlParser.KW_OWNED:
            case PostgreSqlParser.KW_OWNER:
            case PostgreSqlParser.KW_PARSER:
            case PostgreSqlParser.KW_PARTIAL:
            case PostgreSqlParser.KW_PARTITION:
            case PostgreSqlParser.KW_PASSING:
            case PostgreSqlParser.KW_PASSWORD:
            case PostgreSqlParser.KW_PLANS:
            case PostgreSqlParser.KW_PRECEDING:
            case PostgreSqlParser.KW_PREPARE:
            case PostgreSqlParser.KW_PREPARED:
            case PostgreSqlParser.KW_PRESERVE:
            case PostgreSqlParser.KW_PRIOR:
            case PostgreSqlParser.KW_PRIVILEGES:
            case PostgreSqlParser.KW_PROCEDURAL:
            case PostgreSqlParser.KW_PROCEDURE:
            case PostgreSqlParser.KW_PROGRAM:
            case PostgreSqlParser.KW_QUOTE:
            case PostgreSqlParser.KW_RANGE:
            case PostgreSqlParser.KW_READ:
            case PostgreSqlParser.KW_REASSIGN:
            case PostgreSqlParser.KW_RECHECK:
            case PostgreSqlParser.KW_RECURSIVE:
            case PostgreSqlParser.KW_REF:
            case PostgreSqlParser.KW_REFRESH:
            case PostgreSqlParser.KW_REINDEX:
            case PostgreSqlParser.KW_RELATIVE:
            case PostgreSqlParser.KW_RELEASE:
            case PostgreSqlParser.KW_RENAME:
            case PostgreSqlParser.KW_REPEATABLE:
            case PostgreSqlParser.KW_REPLACE:
            case PostgreSqlParser.KW_REPLICA:
            case PostgreSqlParser.KW_RESET:
            case PostgreSqlParser.KW_RESTART:
            case PostgreSqlParser.KW_RESTRICT:
            case PostgreSqlParser.KW_RETURNS:
            case PostgreSqlParser.KW_REVOKE:
            case PostgreSqlParser.KW_ROLE:
            case PostgreSqlParser.KW_ROLLBACK:
            case PostgreSqlParser.KW_ROWS:
            case PostgreSqlParser.KW_RULE:
            case PostgreSqlParser.KW_SAVEPOINT:
            case PostgreSqlParser.KW_SCHEMA:
            case PostgreSqlParser.KW_SCROLL:
            case PostgreSqlParser.KW_SEARCH:
            case PostgreSqlParser.KW_SECOND:
            case PostgreSqlParser.KW_SECURITY:
            case PostgreSqlParser.KW_SEQUENCE:
            case PostgreSqlParser.KW_SEQUENCES:
            case PostgreSqlParser.KW_SERIALIZABLE:
            case PostgreSqlParser.KW_SERVER:
            case PostgreSqlParser.KW_SESSION:
            case PostgreSqlParser.KW_SET:
            case PostgreSqlParser.KW_SHARE:
            case PostgreSqlParser.KW_SHOW:
            case PostgreSqlParser.KW_SIMPLE:
            case PostgreSqlParser.KW_SNAPSHOT:
            case PostgreSqlParser.KW_STABLE:
            case PostgreSqlParser.KW_STANDALONE:
            case PostgreSqlParser.KW_START:
            case PostgreSqlParser.KW_STATEMENT:
            case PostgreSqlParser.KW_STATISTICS:
            case PostgreSqlParser.KW_STDIN:
            case PostgreSqlParser.KW_STDOUT:
            case PostgreSqlParser.KW_STORAGE:
            case PostgreSqlParser.KW_STRICT:
            case PostgreSqlParser.KW_STRIP:
            case PostgreSqlParser.KW_SYSID:
            case PostgreSqlParser.KW_SYSTEM:
            case PostgreSqlParser.KW_TABLES:
            case PostgreSqlParser.KW_TABLESPACE:
            case PostgreSqlParser.KW_TEMP:
            case PostgreSqlParser.KW_TEMPLATE:
            case PostgreSqlParser.KW_TEMPORARY:
            case PostgreSqlParser.KW_TEXT:
            case PostgreSqlParser.KW_TRANSACTION:
            case PostgreSqlParser.KW_TRIGGER:
            case PostgreSqlParser.KW_TRUNCATE:
            case PostgreSqlParser.KW_TRUSTED:
            case PostgreSqlParser.KW_TYPE:
            case PostgreSqlParser.KW_TYPES:
            case PostgreSqlParser.KW_UNBOUNDED:
            case PostgreSqlParser.KW_UNCOMMITTED:
            case PostgreSqlParser.KW_UNENCRYPTED:
            case PostgreSqlParser.KW_UNKNOWN:
            case PostgreSqlParser.KW_UNLISTEN:
            case PostgreSqlParser.KW_UNLOGGED:
            case PostgreSqlParser.KW_UNTIL:
            case PostgreSqlParser.KW_UPDATE:
            case PostgreSqlParser.KW_VACUUM:
            case PostgreSqlParser.KW_VALID:
            case PostgreSqlParser.KW_VALIDATE:
            case PostgreSqlParser.KW_VALIDATOR:
            case PostgreSqlParser.KW_VARYING:
            case PostgreSqlParser.KW_VERSION:
            case PostgreSqlParser.KW_VIEW:
            case PostgreSqlParser.KW_VOLATILE:
            case PostgreSqlParser.KW_WHITESPACE:
            case PostgreSqlParser.KW_WITHOUT:
            case PostgreSqlParser.KW_WORK:
            case PostgreSqlParser.KW_WRAPPER:
            case PostgreSqlParser.KW_WRITE:
            case PostgreSqlParser.KW_XML:
            case PostgreSqlParser.KW_YEAR:
            case PostgreSqlParser.KW_YES:
            case PostgreSqlParser.KW_ZONE:
            case PostgreSqlParser.KW_BETWEEN:
            case PostgreSqlParser.KW_BIGINT:
            case PostgreSqlParser.KW_BIT:
            case PostgreSqlParser.KW_BOOLEAN:
            case PostgreSqlParser.KW_CHAR:
            case PostgreSqlParser.KW_CHARACTER:
            case PostgreSqlParser.KW_COALESCE:
            case PostgreSqlParser.KW_DEC:
            case PostgreSqlParser.KW_DECIMAL:
            case PostgreSqlParser.KW_EXISTS:
            case PostgreSqlParser.KW_EXTRACT:
            case PostgreSqlParser.KW_FLOAT:
            case PostgreSqlParser.KW_GREATEST:
            case PostgreSqlParser.KW_INOUT:
            case PostgreSqlParser.KW_INT:
            case PostgreSqlParser.KW_INTEGER:
            case PostgreSqlParser.KW_INTERVAL:
            case PostgreSqlParser.KW_LEAST:
            case PostgreSqlParser.KW_NATIONAL:
            case PostgreSqlParser.KW_NCHAR:
            case PostgreSqlParser.KW_NONE:
            case PostgreSqlParser.KW_NULLIF:
            case PostgreSqlParser.KW_NUMERIC:
            case PostgreSqlParser.KW_OVERLAY:
            case PostgreSqlParser.KW_POSITION:
            case PostgreSqlParser.KW_PRECISION:
            case PostgreSqlParser.KW_REAL:
            case PostgreSqlParser.KW_ROW:
            case PostgreSqlParser.KW_SETOF:
            case PostgreSqlParser.KW_SMALLINT:
            case PostgreSqlParser.KW_SUBSTRING:
            case PostgreSqlParser.KW_TIME:
            case PostgreSqlParser.KW_TIMESTAMP:
            case PostgreSqlParser.KW_TREAT:
            case PostgreSqlParser.KW_TRIM:
            case PostgreSqlParser.KW_VALUES:
            case PostgreSqlParser.KW_VARCHAR:
            case PostgreSqlParser.KW_XMLATTRIBUTES:
            case PostgreSqlParser.KW_XMLCONCAT:
            case PostgreSqlParser.KW_XMLELEMENT:
            case PostgreSqlParser.KW_XMLEXISTS:
            case PostgreSqlParser.KW_XMLFOREST:
            case PostgreSqlParser.KW_XMLPARSE:
            case PostgreSqlParser.KW_XMLPI:
            case PostgreSqlParser.KW_XMLROOT:
            case PostgreSqlParser.KW_XMLSERIALIZE:
            case PostgreSqlParser.KW_CALL:
            case PostgreSqlParser.KW_CURRENT:
            case PostgreSqlParser.KW_ATTACH:
            case PostgreSqlParser.KW_DETACH:
            case PostgreSqlParser.KW_EXPRESSION:
            case PostgreSqlParser.KW_GENERATED:
            case PostgreSqlParser.KW_LOGGED:
            case PostgreSqlParser.KW_STORED:
            case PostgreSqlParser.KW_INCLUDE:
            case PostgreSqlParser.KW_ROUTINE:
            case PostgreSqlParser.KW_TRANSFORM:
            case PostgreSqlParser.KW_IMPORT:
            case PostgreSqlParser.KW_POLICY:
            case PostgreSqlParser.KW_METHOD:
            case PostgreSqlParser.KW_REFERENCING:
            case PostgreSqlParser.KW_NEW:
            case PostgreSqlParser.KW_OLD:
            case PostgreSqlParser.KW_VALUE:
            case PostgreSqlParser.KW_SUBSCRIPTION:
            case PostgreSqlParser.KW_PUBLICATION:
            case PostgreSqlParser.KW_OUT:
            case PostgreSqlParser.KW_ROUTINES:
            case PostgreSqlParser.KW_SCHEMAS:
            case PostgreSqlParser.KW_PROCEDURES:
            case PostgreSqlParser.KW_INPUT:
            case PostgreSqlParser.KW_SUPPORT:
            case PostgreSqlParser.KW_PARALLEL:
            case PostgreSqlParser.KW_SQL:
            case PostgreSqlParser.KW_DEPENDS:
            case PostgreSqlParser.KW_OVERRIDING:
            case PostgreSqlParser.KW_CONFLICT:
            case PostgreSqlParser.KW_SKIP:
            case PostgreSqlParser.KW_LOCKED:
            case PostgreSqlParser.KW_TIES:
            case PostgreSqlParser.KW_ROLLUP:
            case PostgreSqlParser.KW_CUBE:
            case PostgreSqlParser.KW_GROUPING:
            case PostgreSqlParser.KW_SETS:
            case PostgreSqlParser.KW_ORDINALITY:
            case PostgreSqlParser.KW_XMLTABLE:
            case PostgreSqlParser.KW_COLUMNS:
            case PostgreSqlParser.KW_XMLNAMESPACES:
            case PostgreSqlParser.KW_ROWTYPE:
            case PostgreSqlParser.KW_NORMALIZED:
            case PostgreSqlParser.KW_WITHIN:
            case PostgreSqlParser.KW_FILTER:
            case PostgreSqlParser.KW_GROUPS:
            case PostgreSqlParser.KW_OTHERS:
            case PostgreSqlParser.KW_NFC:
            case PostgreSqlParser.KW_NFD:
            case PostgreSqlParser.KW_NFKC:
            case PostgreSqlParser.KW_NFKD:
            case PostgreSqlParser.KW_UESCAPE:
            case PostgreSqlParser.KW_VIEWS:
            case PostgreSqlParser.KW_NORMALIZE:
            case PostgreSqlParser.KW_DUMP:
            case PostgreSqlParser.KW_PRINT_STRICT_PARAMS:
            case PostgreSqlParser.KW_VARIABLE_CONFLICT:
            case PostgreSqlParser.KW_ERROR:
            case PostgreSqlParser.KW_USE_VARIABLE:
            case PostgreSqlParser.KW_USE_COLUMN:
            case PostgreSqlParser.KW_ALIAS:
            case PostgreSqlParser.KW_CONSTANT:
            case PostgreSqlParser.KW_PERFORM:
            case PostgreSqlParser.KW_GET:
            case PostgreSqlParser.KW_DIAGNOSTICS:
            case PostgreSqlParser.KW_STACKED:
            case PostgreSqlParser.KW_ELSIF:
            case PostgreSqlParser.KW_REVERSE:
            case PostgreSqlParser.KW_SLICE:
            case PostgreSqlParser.KW_EXIT:
            case PostgreSqlParser.KW_RETURN:
            case PostgreSqlParser.KW_QUERY:
            case PostgreSqlParser.KW_RAISE:
            case PostgreSqlParser.KW_SQLSTATE:
            case PostgreSqlParser.KW_DEBUG:
            case PostgreSqlParser.KW_LOG:
            case PostgreSqlParser.KW_INFO:
            case PostgreSqlParser.KW_NOTICE:
            case PostgreSqlParser.KW_WARNING:
            case PostgreSqlParser.KW_EXCEPTION:
            case PostgreSqlParser.KW_ASSERT:
            case PostgreSqlParser.KW_OPEN:
            case PostgreSqlParser.KW_SKIP_LOCKED:
            case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT:
            case PostgreSqlParser.Identifier:
            case PostgreSqlParser.QuotedIdentifier:
            case PostgreSqlParser.UnicodeQuotedIdentifier:
            case PostgreSqlParser.StringConstant:
            case PostgreSqlParser.UnicodeEscapeStringConstant:
            case PostgreSqlParser.BeginDollarStringConstant:
            case PostgreSqlParser.PLSQLVARIABLENAME:
            case PostgreSqlParser.PLSQLIDENTIFIER:
            case PostgreSqlParser.EscapeStringConstant:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11784;
                this.any_identifier();
                }
                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 opt_exitcond(): Opt_exitcondContext {
        let localContext = new Opt_exitcondContext(this.context, this.state);
        this.enterRule(localContext, 1730, PostgreSqlParser.RULE_opt_exitcond);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11787;
            this.match(PostgreSqlParser.KW_WHEN);
            this.state = 11788;
            this.expr_until_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 any_identifier(): Any_identifierContext {
        let localContext = new Any_identifierContext(this.context, this.state);
        this.enterRule(localContext, 1732, PostgreSqlParser.RULE_any_identifier);
        try {
            this.state = 11792;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1273, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 11790;
                this.colid();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 11791;
                this.plsql_unreserved_keyword();
                }
                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 plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
        let localContext = new Plsql_unreserved_keywordContext(this.context, this.state);
        this.enterRule(localContext, 1734, PostgreSqlParser.RULE_plsql_unreserved_keyword);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11794;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286266373) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 130)) & ~0x1F) === 0 && ((1 << (_la - 130)) & 2290106369) !== 0) || _la === 167 || _la === 172 || _la === 207 || _la === 210 || ((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 419430657) !== 0) || ((((_la - 279)) & ~0x1F) === 0 && ((1 << (_la - 279)) & 268451841) !== 0) || ((((_la - 313)) & ~0x1F) === 0 && ((1 << (_la - 313)) & 1051713) !== 0) || _la === 360 || _la === 433 || _la === 434 || ((((_la - 477)) & ~0x1F) === 0 && ((1 << (_la - 477)) & 3959414785) !== 0) || ((((_la - 509)) & ~0x1F) === 0 && ((1 << (_la - 509)) & 3071) !== 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 sql_expression(): Sql_expressionContext {
        let localContext = new Sql_expressionContext(this.context, this.state);
        this.enterRule(localContext, 1736, PostgreSqlParser.RULE_sql_expression);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11797;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1274, this.context) ) {
            case 1:
                {
                this.state = 11796;
                this.opt_target_list();
                }
                break;
            }
            this.state = 11800;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 71) {
                {
                this.state = 11799;
                this.into_clause();
                }
            }

            this.state = 11803;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 64) {
                {
                this.state = 11802;
                this.from_clause();
                }
            }

            this.state = 11806;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 103) {
                {
                this.state = 11805;
                this.where_clause();
                }
            }

            this.state = 11809;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 66) {
                {
                this.state = 11808;
                this.group_clause();
                }
            }

            this.state = 11812;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 67) {
                {
                this.state = 11811;
                this.having_clause();
                }
            }

            this.state = 11815;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 104) {
                {
                this.state = 11814;
                this.window_clause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public expr_until_then(): Expr_until_thenContext {
        let localContext = new Expr_until_thenContext(this.context, this.state);
        this.enterRule(localContext, 1738, PostgreSqlParser.RULE_expr_until_then);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11817;
            this.sql_expression();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public expr_until_semi(): Expr_until_semiContext {
        let localContext = new Expr_until_semiContext(this.context, this.state);
        this.enterRule(localContext, 1740, PostgreSqlParser.RULE_expr_until_semi);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11819;
            this.sql_expression();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public expr_until_rightbracket(): Expr_until_rightbracketContext {
        let localContext = new Expr_until_rightbracketContext(this.context, this.state);
        this.enterRule(localContext, 1742, PostgreSqlParser.RULE_expr_until_rightbracket);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11821;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public expr_until_loop(): Expr_until_loopContext {
        let localContext = new Expr_until_loopContext(this.context, this.state);
        this.enterRule(localContext, 1744, PostgreSqlParser.RULE_expr_until_loop);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11823;
            this.a_expr();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public make_execsql_stmt(): Make_execsql_stmtContext {
        let localContext = new Make_execsql_stmtContext(this.context, this.state);
        this.enterRule(localContext, 1746, PostgreSqlParser.RULE_make_execsql_stmt);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11825;
            this.stmt();
            this.state = 11827;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 71) {
                {
                this.state = 11826;
                this.opt_returning_clause_into();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public opt_returning_clause_into(): Opt_returning_clause_intoContext {
        let localContext = new Opt_returning_clause_intoContext(this.context, this.state);
        this.enterRule(localContext, 1748, PostgreSqlParser.RULE_opt_returning_clause_into);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 11829;
            this.match(PostgreSqlParser.KW_INTO);
            this.state = 11830;
            this.opt_strict();
            this.state = 11831;
            this.into_target();
            }
        }
        catch (re) {
            if (re instanceof 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 626:
            return this.b_expr_sempred(localContext as B_exprContext, predIndex);
        case 716:
            return this.column_name_sempred(localContext as Column_nameContext, predIndex);
        }
        return true;
    }
    private b_expr_sempred(localContext: B_exprContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 0:
            return this.precpred(this.context, 8);
        case 1:
            return this.precpred(this.context, 7);
        case 2:
            return this.precpred(this.context, 6);
        case 3:
            return this.precpred(this.context, 5);
        case 4:
            return this.precpred(this.context, 4);
        case 5:
            return this.precpred(this.context, 10);
        case 6:
            return this.precpred(this.context, 2);
        case 7:
            return this.precpred(this.context, 1);
        }
        return true;
    }
    private column_name_sempred(localContext: Column_nameContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 8:
            return this.shouldMatchEmpty();
        }
        return true;
    }

    public static readonly _serializedATN: number[] = [
        4,1,590,11834,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,
        2,417,7,417,2,418,7,418,2,419,7,419,2,420,7,420,2,421,7,421,2,422,
        7,422,2,423,7,423,2,424,7,424,2,425,7,425,2,426,7,426,2,427,7,427,
        2,428,7,428,2,429,7,429,2,430,7,430,2,431,7,431,2,432,7,432,2,433,
        7,433,2,434,7,434,2,435,7,435,2,436,7,436,2,437,7,437,2,438,7,438,
        2,439,7,439,2,440,7,440,2,441,7,441,2,442,7,442,2,443,7,443,2,444,
        7,444,2,445,7,445,2,446,7,446,2,447,7,447,2,448,7,448,2,449,7,449,
        2,450,7,450,2,451,7,451,2,452,7,452,2,453,7,453,2,454,7,454,2,455,
        7,455,2,456,7,456,2,457,7,457,2,458,7,458,2,459,7,459,2,460,7,460,
        2,461,7,461,2,462,7,462,2,463,7,463,2,464,7,464,2,465,7,465,2,466,
        7,466,2,467,7,467,2,468,7,468,2,469,7,469,2,470,7,470,2,471,7,471,
        2,472,7,472,2,473,7,473,2,474,7,474,2,475,7,475,2,476,7,476,2,477,
        7,477,2,478,7,478,2,479,7,479,2,480,7,480,2,481,7,481,2,482,7,482,
        2,483,7,483,2,484,7,484,2,485,7,485,2,486,7,486,2,487,7,487,2,488,
        7,488,2,489,7,489,2,490,7,490,2,491,7,491,2,492,7,492,2,493,7,493,
        2,494,7,494,2,495,7,495,2,496,7,496,2,497,7,497,2,498,7,498,2,499,
        7,499,2,500,7,500,2,501,7,501,2,502,7,502,2,503,7,503,2,504,7,504,
        2,505,7,505,2,506,7,506,2,507,7,507,2,508,7,508,2,509,7,509,2,510,
        7,510,2,511,7,511,2,512,7,512,2,513,7,513,2,514,7,514,2,515,7,515,
        2,516,7,516,2,517,7,517,2,518,7,518,2,519,7,519,2,520,7,520,2,521,
        7,521,2,522,7,522,2,523,7,523,2,524,7,524,2,525,7,525,2,526,7,526,
        2,527,7,527,2,528,7,528,2,529,7,529,2,530,7,530,2,531,7,531,2,532,
        7,532,2,533,7,533,2,534,7,534,2,535,7,535,2,536,7,536,2,537,7,537,
        2,538,7,538,2,539,7,539,2,540,7,540,2,541,7,541,2,542,7,542,2,543,
        7,543,2,544,7,544,2,545,7,545,2,546,7,546,2,547,7,547,2,548,7,548,
        2,549,7,549,2,550,7,550,2,551,7,551,2,552,7,552,2,553,7,553,2,554,
        7,554,2,555,7,555,2,556,7,556,2,557,7,557,2,558,7,558,2,559,7,559,
        2,560,7,560,2,561,7,561,2,562,7,562,2,563,7,563,2,564,7,564,2,565,
        7,565,2,566,7,566,2,567,7,567,2,568,7,568,2,569,7,569,2,570,7,570,
        2,571,7,571,2,572,7,572,2,573,7,573,2,574,7,574,2,575,7,575,2,576,
        7,576,2,577,7,577,2,578,7,578,2,579,7,579,2,580,7,580,2,581,7,581,
        2,582,7,582,2,583,7,583,2,584,7,584,2,585,7,585,2,586,7,586,2,587,
        7,587,2,588,7,588,2,589,7,589,2,590,7,590,2,591,7,591,2,592,7,592,
        2,593,7,593,2,594,7,594,2,595,7,595,2,596,7,596,2,597,7,597,2,598,
        7,598,2,599,7,599,2,600,7,600,2,601,7,601,2,602,7,602,2,603,7,603,
        2,604,7,604,2,605,7,605,2,606,7,606,2,607,7,607,2,608,7,608,2,609,
        7,609,2,610,7,610,2,611,7,611,2,612,7,612,2,613,7,613,2,614,7,614,
        2,615,7,615,2,616,7,616,2,617,7,617,2,618,7,618,2,619,7,619,2,620,
        7,620,2,621,7,621,2,622,7,622,2,623,7,623,2,624,7,624,2,625,7,625,
        2,626,7,626,2,627,7,627,2,628,7,628,2,629,7,629,2,630,7,630,2,631,
        7,631,2,632,7,632,2,633,7,633,2,634,7,634,2,635,7,635,2,636,7,636,
        2,637,7,637,2,638,7,638,2,639,7,639,2,640,7,640,2,641,7,641,2,642,
        7,642,2,643,7,643,2,644,7,644,2,645,7,645,2,646,7,646,2,647,7,647,
        2,648,7,648,2,649,7,649,2,650,7,650,2,651,7,651,2,652,7,652,2,653,
        7,653,2,654,7,654,2,655,7,655,2,656,7,656,2,657,7,657,2,658,7,658,
        2,659,7,659,2,660,7,660,2,661,7,661,2,662,7,662,2,663,7,663,2,664,
        7,664,2,665,7,665,2,666,7,666,2,667,7,667,2,668,7,668,2,669,7,669,
        2,670,7,670,2,671,7,671,2,672,7,672,2,673,7,673,2,674,7,674,2,675,
        7,675,2,676,7,676,2,677,7,677,2,678,7,678,2,679,7,679,2,680,7,680,
        2,681,7,681,2,682,7,682,2,683,7,683,2,684,7,684,2,685,7,685,2,686,
        7,686,2,687,7,687,2,688,7,688,2,689,7,689,2,690,7,690,2,691,7,691,
        2,692,7,692,2,693,7,693,2,694,7,694,2,695,7,695,2,696,7,696,2,697,
        7,697,2,698,7,698,2,699,7,699,2,700,7,700,2,701,7,701,2,702,7,702,
        2,703,7,703,2,704,7,704,2,705,7,705,2,706,7,706,2,707,7,707,2,708,
        7,708,2,709,7,709,2,710,7,710,2,711,7,711,2,712,7,712,2,713,7,713,
        2,714,7,714,2,715,7,715,2,716,7,716,2,717,7,717,2,718,7,718,2,719,
        7,719,2,720,7,720,2,721,7,721,2,722,7,722,2,723,7,723,2,724,7,724,
        2,725,7,725,2,726,7,726,2,727,7,727,2,728,7,728,2,729,7,729,2,730,
        7,730,2,731,7,731,2,732,7,732,2,733,7,733,2,734,7,734,2,735,7,735,
        2,736,7,736,2,737,7,737,2,738,7,738,2,739,7,739,2,740,7,740,2,741,
        7,741,2,742,7,742,2,743,7,743,2,744,7,744,2,745,7,745,2,746,7,746,
        2,747,7,747,2,748,7,748,2,749,7,749,2,750,7,750,2,751,7,751,2,752,
        7,752,2,753,7,753,2,754,7,754,2,755,7,755,2,756,7,756,2,757,7,757,
        2,758,7,758,2,759,7,759,2,760,7,760,2,761,7,761,2,762,7,762,2,763,
        7,763,2,764,7,764,2,765,7,765,2,766,7,766,2,767,7,767,2,768,7,768,
        2,769,7,769,2,770,7,770,2,771,7,771,2,772,7,772,2,773,7,773,2,774,
        7,774,2,775,7,775,2,776,7,776,2,777,7,777,2,778,7,778,2,779,7,779,
        2,780,7,780,2,781,7,781,2,782,7,782,2,783,7,783,2,784,7,784,2,785,
        7,785,2,786,7,786,2,787,7,787,2,788,7,788,2,789,7,789,2,790,7,790,
        2,791,7,791,2,792,7,792,2,793,7,793,2,794,7,794,2,795,7,795,2,796,
        7,796,2,797,7,797,2,798,7,798,2,799,7,799,2,800,7,800,2,801,7,801,
        2,802,7,802,2,803,7,803,2,804,7,804,2,805,7,805,2,806,7,806,2,807,
        7,807,2,808,7,808,2,809,7,809,2,810,7,810,2,811,7,811,2,812,7,812,
        2,813,7,813,2,814,7,814,2,815,7,815,2,816,7,816,2,817,7,817,2,818,
        7,818,2,819,7,819,2,820,7,820,2,821,7,821,2,822,7,822,2,823,7,823,
        2,824,7,824,2,825,7,825,2,826,7,826,2,827,7,827,2,828,7,828,2,829,
        7,829,2,830,7,830,2,831,7,831,2,832,7,832,2,833,7,833,2,834,7,834,
        2,835,7,835,2,836,7,836,2,837,7,837,2,838,7,838,2,839,7,839,2,840,
        7,840,2,841,7,841,2,842,7,842,2,843,7,843,2,844,7,844,2,845,7,845,
        2,846,7,846,2,847,7,847,2,848,7,848,2,849,7,849,2,850,7,850,2,851,
        7,851,2,852,7,852,2,853,7,853,2,854,7,854,2,855,7,855,2,856,7,856,
        2,857,7,857,2,858,7,858,2,859,7,859,2,860,7,860,2,861,7,861,2,862,
        7,862,2,863,7,863,2,864,7,864,2,865,7,865,2,866,7,866,2,867,7,867,
        2,868,7,868,2,869,7,869,2,870,7,870,2,871,7,871,2,872,7,872,2,873,
        7,873,2,874,7,874,1,0,5,0,1752,8,0,10,0,12,0,1755,9,0,1,0,1,0,1,
        1,1,1,1,2,1,2,3,2,1763,8,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
        3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
        3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
        3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
        3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
        3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
        3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
        3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,1882,8,3,1,4,1,
        4,3,4,1886,8,4,1,5,1,5,1,5,1,6,1,6,1,6,1,6,3,6,1895,8,6,1,6,1,6,
        1,7,1,7,1,8,5,8,1902,8,8,10,8,12,8,1905,9,8,1,9,5,9,1908,8,9,10,
        9,12,9,1911,9,9,1,10,1,10,1,10,3,10,1916,8,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,1948,8,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,
        3,11,1960,8,11,1,12,1,12,1,12,1,12,3,12,1966,8,12,1,12,1,12,1,13,
        1,13,1,13,1,13,3,13,1974,8,13,1,13,1,13,1,14,1,14,1,14,1,14,3,14,
        1982,8,14,1,15,1,15,1,15,1,15,3,15,1988,8,15,1,15,1,15,1,15,1,16,
        1,16,1,16,1,16,3,16,1997,8,16,1,16,1,16,1,17,1,17,3,17,2003,8,17,
        1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,2015,8,17,
        1,17,1,17,1,17,1,17,3,17,2021,8,17,1,18,1,18,5,18,2025,8,18,10,18,
        12,18,2028,9,18,1,19,1,19,1,19,1,19,3,19,2034,8,19,1,19,1,19,3,19,
        2038,8,19,1,19,1,19,1,19,3,19,2043,8,19,1,19,1,19,3,19,2047,8,19,
        1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,2060,
        8,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,2071,8,19,
        1,20,1,20,1,20,1,20,3,20,2077,8,20,1,20,1,20,1,21,1,21,1,21,1,21,
        1,21,1,21,1,21,1,22,1,22,1,23,1,23,1,23,3,23,2093,8,23,1,23,3,23,
        2096,8,23,1,23,1,23,1,23,3,23,2101,8,23,1,23,1,23,1,24,1,24,3,24,
        2107,8,24,1,25,5,25,2110,8,25,10,25,12,25,2113,9,25,1,26,1,26,1,
        26,1,26,1,26,1,26,3,26,2121,8,26,1,27,1,27,3,27,2125,8,27,1,27,1,
        27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,2137,8,28,1,29,1,
        29,3,29,2141,8,29,1,29,3,29,2144,8,29,1,29,1,29,3,29,2148,8,29,1,
        30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,2159,8,30,1,30,1,
        30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,
        30,1,30,3,30,2177,8,30,1,31,1,31,1,31,5,31,2182,8,31,10,31,12,31,
        2185,9,31,1,32,1,32,1,32,5,32,2190,8,32,10,32,12,32,2193,9,32,1,
        33,1,33,3,33,2197,8,33,1,34,1,34,1,34,1,34,1,34,3,34,2204,8,34,1,
        35,1,35,1,35,1,35,3,35,2210,8,35,1,36,1,36,1,36,1,36,3,36,2216,8,
        36,1,37,1,37,1,37,1,37,1,37,3,37,2223,8,37,1,37,1,37,1,37,1,37,1,
        37,1,37,1,37,1,37,1,37,3,37,2234,8,37,1,38,1,38,3,38,2238,8,38,1,
        39,1,39,3,39,2242,8,39,1,40,1,40,3,40,2246,8,40,1,41,1,41,1,41,1,
        42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,3,42,2259,8,42,1,43,1,43,3,
        43,2263,8,43,1,44,1,44,1,44,3,44,2268,8,44,1,45,1,45,1,45,3,45,2273,
        8,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,2285,
        8,46,1,47,1,47,1,47,1,47,1,47,1,48,1,48,3,48,2294,8,48,1,49,1,49,
        1,50,1,50,1,51,1,51,1,51,1,52,1,52,1,52,3,52,2306,8,52,1,52,1,52,
        1,52,3,52,2311,8,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
        3,52,2322,8,52,1,52,1,52,1,52,1,52,3,52,2328,8,52,1,52,1,52,1,52,
        3,52,2333,8,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,2343,
        8,52,1,52,1,52,1,52,3,52,2348,8,52,1,52,1,52,1,52,1,52,1,52,3,52,
        2355,8,52,1,52,1,52,1,52,3,52,2360,8,52,1,52,1,52,1,52,3,52,2365,
        8,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,2376,8,52,
        1,52,1,52,1,52,1,52,3,52,2382,8,52,1,52,1,52,1,52,3,52,2387,8,52,
        1,52,1,52,1,52,1,52,1,52,1,52,3,52,2395,8,52,1,52,1,52,1,52,1,52,
        1,52,1,52,1,52,3,52,2404,8,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
        1,52,1,52,1,52,1,52,1,52,1,52,3,52,2419,8,52,1,52,1,52,1,52,1,52,
        3,52,2425,8,52,1,52,1,52,1,52,1,52,3,52,2431,8,52,1,52,1,52,1,52,
        3,52,2436,8,52,1,53,1,53,1,53,5,53,2441,8,53,10,53,12,53,2444,9,
        53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,3,54,2455,8,54,1,
        55,1,55,1,55,1,55,5,55,2461,8,55,10,55,12,55,2464,9,55,1,55,1,55,
        1,56,1,56,1,56,3,56,2471,8,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57,
        1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,3,58,2489,8,58,1,59,
        1,59,1,59,1,59,1,60,1,60,1,60,3,60,2498,8,60,1,60,1,60,1,60,1,60,
        1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,2512,8,60,1,60,1,60,
        3,60,2516,8,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,
        1,60,1,60,1,60,3,60,2531,8,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,
        2539,8,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,2549,8,60,
        1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,
        1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,
        1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,
        2589,8,60,1,60,3,60,2592,8,60,1,60,1,60,3,60,2596,8,60,1,60,1,60,
        3,60,2600,8,60,1,60,3,60,2603,8,60,1,60,1,60,1,60,3,60,2608,8,60,
        1,60,1,60,1,60,1,60,1,60,3,60,2615,8,60,1,60,1,60,1,60,1,60,1,60,
        1,60,1,60,3,60,2624,8,60,1,60,1,60,1,60,1,60,3,60,2630,8,60,1,60,
        1,60,3,60,2634,8,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,2643,
        8,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,2651,8,60,1,60,1,60,1,60,
        1,60,1,60,1,60,1,60,3,60,2660,8,60,1,60,1,60,1,60,1,60,1,60,1,60,
        1,60,3,60,2669,8,60,1,60,1,60,3,60,2673,8,60,1,60,1,60,1,60,1,60,
        1,60,3,60,2680,8,60,1,60,1,60,1,60,1,60,3,60,2686,8,60,1,60,1,60,
        3,60,2690,8,60,1,60,1,60,3,60,2694,8,60,1,60,1,60,1,60,3,60,2699,
        8,60,1,60,3,60,2702,8,60,1,60,1,60,3,60,2706,8,60,1,60,1,60,1,60,
        1,60,3,60,2712,8,60,1,61,1,61,1,61,1,61,1,61,3,61,2719,8,61,1,62,
        1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,
        3,65,2735,8,65,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,68,1,68,1,68,
        5,68,2747,8,68,10,68,12,68,2750,9,68,1,69,1,69,1,69,1,69,1,69,1,
        69,1,69,3,69,2759,8,69,3,69,2761,8,69,1,70,4,70,2764,8,70,11,70,
        12,70,2765,1,71,1,71,3,71,2770,8,71,1,71,3,71,2773,8,71,1,71,1,71,
        1,71,1,71,3,71,2779,8,71,3,71,2781,8,71,1,72,1,72,1,72,1,72,1,72,
        1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,
        1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,3,72,2809,8,72,1,73,1,73,
        1,73,1,74,1,74,1,74,5,74,2817,8,74,10,74,12,74,2820,9,74,1,75,1,
        75,1,75,1,75,1,75,1,76,1,76,1,76,5,76,2830,8,76,10,76,12,76,2833,
        9,76,1,77,1,77,1,77,1,77,3,77,2839,8,77,1,77,1,77,1,77,3,77,2844,
        8,77,1,77,1,77,3,77,2848,8,77,1,77,1,77,1,77,1,77,3,77,2854,8,77,
        1,77,1,77,1,77,3,77,2859,8,77,1,77,3,77,2862,8,77,3,77,2864,8,77,
        1,78,1,78,1,78,3,78,2869,8,78,1,79,1,79,3,79,2873,8,79,1,79,1,79,
        3,79,2877,8,79,1,79,1,79,3,79,2881,8,79,1,79,1,79,3,79,2885,8,79,
        1,79,3,79,2888,8,79,1,79,1,79,3,79,2892,8,79,1,79,1,79,1,79,1,79,
        1,79,1,79,3,79,2900,8,79,1,79,1,79,3,79,2904,8,79,1,79,1,79,3,79,
        2908,8,79,1,80,1,80,1,81,1,81,1,82,1,82,1,82,3,82,2917,8,82,1,83,
        1,83,1,83,1,83,1,83,3,83,2924,8,83,1,84,5,84,2927,8,84,10,84,12,
        84,2930,9,84,1,85,1,85,1,85,1,85,3,85,2936,8,85,1,85,1,85,1,85,3,
        85,2941,8,85,1,85,1,85,1,85,1,85,1,85,3,85,2948,8,85,1,85,1,85,1,
        85,3,85,2953,8,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,
        85,1,85,1,85,1,85,1,85,1,85,1,85,3,85,2971,8,85,1,86,1,86,1,87,3,
        87,2976,8,87,1,87,1,87,1,87,1,88,1,88,1,89,1,89,1,89,5,89,2986,8,
        89,10,89,12,89,2989,9,89,1,90,1,90,3,90,2993,8,90,1,91,1,91,1,91,
        1,91,1,91,1,91,1,91,3,91,3002,8,91,1,92,1,92,1,92,5,92,3007,8,92,
        10,92,12,92,3010,9,92,1,93,1,93,1,94,1,94,3,94,3016,8,94,1,94,1,
        94,3,94,3020,8,94,1,94,1,94,1,94,3,94,3025,8,94,1,94,1,94,3,94,3029,
        8,94,1,94,3,94,3032,8,94,1,94,3,94,3035,8,94,1,94,3,94,3038,8,94,
        1,94,3,94,3041,8,94,1,94,3,94,3044,8,94,1,94,1,94,1,94,3,94,3049,
        8,94,1,94,3,94,3052,8,94,1,94,3,94,3055,8,94,1,94,3,94,3058,8,94,
        1,94,3,94,3061,8,94,1,94,3,94,3064,8,94,1,94,1,94,1,94,1,94,3,94,
        3070,8,94,1,94,1,94,3,94,3074,8,94,1,94,3,94,3077,8,94,1,94,3,94,
        3080,8,94,1,94,3,94,3083,8,94,1,94,3,94,3086,8,94,3,94,3088,8,94,
        1,95,1,95,1,95,1,95,1,95,1,95,1,95,3,95,3097,8,95,1,96,1,96,1,97,
        1,97,1,98,1,98,1,98,1,98,1,99,1,99,1,99,5,99,3110,8,99,10,99,12,
        99,3113,9,99,1,100,1,100,1,100,5,100,3118,8,100,10,100,12,100,3121,
        9,100,1,101,1,101,1,101,3,101,3126,8,101,1,102,1,102,3,102,3130,
        8,102,1,103,1,103,1,103,3,103,3135,8,103,1,103,3,103,3138,8,103,
        1,103,3,103,3141,8,103,1,103,1,103,3,103,3145,8,103,1,103,1,103,
        3,103,3149,8,103,1,103,1,103,1,104,1,104,1,104,1,105,1,105,1,105,
        1,105,1,105,1,105,1,105,3,105,3163,8,105,1,106,1,106,1,106,3,106,
        3168,8,106,1,106,1,106,1,107,5,107,3173,8,107,10,107,12,107,3176,
        9,107,1,108,1,108,3,108,3180,8,108,1,108,1,108,3,108,3184,8,108,
        1,108,3,108,3187,8,108,1,108,1,108,3,108,3191,8,108,1,108,3,108,
        3194,8,108,3,108,3196,8,108,1,109,1,109,1,109,1,109,1,109,3,109,
        3203,8,109,1,109,3,109,3206,8,109,1,109,1,109,3,109,3210,8,109,1,
        109,1,109,1,109,1,109,3,109,3216,8,109,1,109,3,109,3219,8,109,1,
        109,1,109,1,109,1,109,1,109,3,109,3226,8,109,1,109,1,109,1,109,1,
        109,1,109,1,109,1,109,3,109,3235,8,109,1,109,1,109,1,109,1,109,1,
        109,3,109,3242,8,109,1,109,1,109,1,109,3,109,3247,8,109,1,109,3,
        109,3250,8,109,1,109,3,109,3253,8,109,1,109,3,109,3256,8,109,1,110,
        1,110,3,110,3260,8,110,1,110,1,110,1,111,1,111,1,111,3,111,3267,
        8,111,1,112,1,112,1,112,3,112,3272,8,112,1,113,1,113,1,113,1,114,
        1,114,1,114,1,114,1,115,1,115,5,115,3283,8,115,10,115,12,115,3286,
        9,115,1,116,1,116,1,117,1,117,1,117,1,117,1,117,3,117,3295,8,117,
        1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,
        3,118,3308,8,118,1,118,3,118,3311,8,118,1,118,3,118,3314,8,118,1,
        118,1,118,1,118,1,118,1,118,3,118,3321,8,118,1,118,1,118,1,118,1,
        118,1,118,1,118,3,118,3329,8,118,1,118,3,118,3332,8,118,1,118,3,
        118,3335,8,118,1,118,1,118,1,118,1,118,1,118,3,118,3342,8,118,1,
        118,1,118,3,118,3346,8,118,1,118,1,118,1,118,1,118,3,118,3352,8,
        118,1,118,3,118,3355,8,118,1,118,3,118,3358,8,118,1,118,3,118,3361,
        8,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,
        3,118,3373,8,118,1,118,3,118,3376,8,118,1,118,3,118,3379,8,118,1,
        118,1,118,3,118,3383,8,118,1,119,1,119,1,119,1,120,1,120,1,120,1,
        120,1,121,1,121,1,121,1,121,1,122,1,122,1,122,5,122,3399,8,122,10,
        122,12,122,3402,9,122,1,123,1,123,1,123,5,123,3407,8,123,10,123,
        12,123,3410,9,123,1,124,1,124,1,124,1,124,1,124,1,125,1,125,1,125,
        1,126,1,126,1,126,5,126,3423,8,126,10,126,12,126,3426,9,126,1,127,
        1,127,1,127,1,127,1,127,1,127,1,127,1,127,3,127,3436,8,127,1,128,
        1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,
        1,129,3,129,3451,8,129,1,130,1,130,1,130,1,130,1,131,1,131,1,131,
        1,131,1,132,1,132,1,132,1,132,1,132,1,132,1,132,3,132,3468,8,132,
        3,132,3470,8,132,1,133,1,133,1,133,1,133,1,133,1,134,1,134,1,135,
        1,135,1,135,1,135,1,135,1,135,1,135,1,136,1,136,1,136,5,136,3489,
        8,136,10,136,12,136,3492,9,136,1,137,1,137,3,137,3496,8,137,1,137,
        3,137,3499,8,137,1,137,1,137,3,137,3503,8,137,1,137,3,137,3506,8,
        137,1,137,1,137,1,137,1,137,3,137,3512,8,137,1,137,3,137,3515,8,
        137,3,137,3517,8,137,1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,
        139,1,139,3,139,3528,8,139,1,140,1,140,1,140,1,140,1,140,1,140,1,
        140,3,140,3537,8,140,1,141,1,141,1,141,1,142,3,142,3543,8,142,1,
        142,3,142,3546,8,142,1,142,3,142,3549,8,142,1,143,1,143,1,143,1,
        143,1,143,1,144,1,144,1,144,1,144,1,145,1,145,1,145,3,145,3563,8,
        145,1,145,3,145,3566,8,145,1,145,3,145,3569,8,145,1,145,1,145,1,
        145,3,145,3574,8,145,1,145,1,145,1,145,1,146,1,146,1,146,3,146,3582,
        8,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147,3,147,3591,8,147,
        1,147,1,147,3,147,3595,8,147,1,147,1,147,1,147,1,147,3,147,3601,
        8,147,1,148,1,148,3,148,3605,8,148,1,148,3,148,3608,8,148,1,148,
        3,148,3611,8,148,1,148,3,148,3614,8,148,1,148,3,148,3617,8,148,1,
        149,1,149,1,149,1,149,3,149,3623,8,149,1,150,1,150,3,150,3627,8,
        150,1,150,1,150,1,150,3,150,3632,8,150,1,150,1,150,1,150,1,150,3,
        150,3638,8,150,1,151,1,151,3,151,3642,8,151,1,151,3,151,3645,8,151,
        1,151,3,151,3648,8,151,1,151,3,151,3651,8,151,1,152,1,152,1,153,
        1,153,1,153,1,153,3,153,3659,8,153,1,153,1,153,3,153,3663,8,153,
        1,154,1,154,3,154,3667,8,154,1,154,1,154,3,154,3671,8,154,1,154,
        1,154,3,154,3675,8,154,1,155,1,155,1,155,3,155,3680,8,155,1,155,
        1,155,1,155,1,156,1,156,1,157,1,157,1,157,1,157,1,158,4,158,3692,
        8,158,11,158,12,158,3693,1,159,1,159,1,159,1,159,1,159,1,159,1,159,
        3,159,3703,8,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,
        1,159,1,159,1,159,1,159,1,159,1,159,1,159,3,159,3720,8,159,1,159,
        1,159,1,159,3,159,3725,8,159,1,159,3,159,3728,8,159,3,159,3730,8,
        159,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,161,3,161,3740,8,
        161,1,162,1,162,1,162,5,162,3745,8,162,10,162,12,162,3748,9,162,
        1,163,1,163,3,163,3752,8,163,1,163,3,163,3755,8,163,1,163,3,163,
        3758,8,163,1,163,1,163,1,163,1,163,1,163,3,163,3765,8,163,1,163,
        3,163,3768,8,163,3,163,3770,8,163,1,164,1,164,1,165,1,165,3,165,
        3776,8,165,1,166,1,166,1,166,1,167,1,167,1,167,1,167,3,167,3785,
        8,167,1,168,1,168,1,169,1,169,1,170,1,170,1,170,1,170,3,170,3795,
        8,170,1,170,1,170,1,170,3,170,3800,8,170,1,171,1,171,1,171,1,172,
        1,172,1,172,3,172,3808,8,172,1,172,1,172,3,172,3812,8,172,1,172,
        1,172,1,173,5,173,3817,8,173,10,173,12,173,3820,9,173,1,174,1,174,
        1,174,1,174,1,174,1,174,1,174,3,174,3829,8,174,1,175,1,175,1,175,
        1,175,1,175,1,175,1,176,5,176,3838,8,176,10,176,12,176,3841,9,176,
        1,177,1,177,1,177,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
        1,178,1,178,1,178,1,178,1,178,1,178,3,178,3948,8,178,1,179,1,179,
        1,179,1,179,1,179,1,179,3,179,3956,8,179,1,179,3,179,3959,8,179,
        1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,3,180,3969,8,180,
        1,181,4,181,3972,8,181,11,181,12,181,3973,1,182,1,182,1,183,1,183,
        1,183,1,183,1,183,1,183,3,183,3984,8,183,1,183,1,183,1,183,1,183,
        1,183,1,183,1,183,1,183,1,183,3,183,3995,8,183,1,184,1,184,1,184,
        1,184,1,184,1,185,1,185,1,185,5,185,4005,8,185,10,185,12,185,4008,
        9,185,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,5,187,4018,
        8,187,10,187,12,187,4021,9,187,1,188,1,188,1,188,1,188,1,188,1,188,
        1,188,3,188,4030,8,188,1,189,1,189,1,189,1,190,1,190,1,191,1,191,
        1,192,1,192,1,192,3,192,4042,8,192,1,192,1,192,3,192,4046,8,192,
        1,192,3,192,4049,8,192,1,192,1,192,1,192,1,192,1,192,3,192,4056,
        8,192,1,193,1,193,1,193,1,194,1,194,1,194,3,194,4064,8,194,1,195,
        1,195,1,196,1,196,1,196,1,196,1,196,1,196,3,196,4074,8,196,3,196,
        4076,8,196,1,197,1,197,1,197,1,197,3,197,4082,8,197,1,197,1,197,
        1,197,3,197,4087,8,197,1,197,1,197,3,197,4091,8,197,1,197,1,197,
        1,197,3,197,4096,8,197,1,197,1,197,1,197,1,197,3,197,4102,8,197,
        1,197,1,197,1,197,1,197,1,197,3,197,4109,8,197,1,197,1,197,1,197,
        1,197,3,197,4115,8,197,3,197,4117,8,197,1,198,1,198,1,198,1,198,
        1,198,3,198,4124,8,198,1,198,1,198,1,198,1,198,1,198,1,198,3,198,
        4132,8,198,1,199,1,199,1,199,3,199,4137,8,199,1,200,1,200,1,200,
        1,200,1,200,1,201,1,201,1,201,1,201,3,201,4148,8,201,1,201,1,201,
        1,201,1,201,1,201,3,201,4155,8,201,1,202,1,202,3,202,4159,8,202,
        1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,204,1,204,
        1,204,1,204,1,204,1,204,3,204,4176,8,204,1,204,3,204,4179,8,204,
        1,204,3,204,4182,8,204,1,204,3,204,4185,8,204,1,204,3,204,4188,8,
        204,1,205,1,205,1,205,1,205,1,205,1,205,3,205,4196,8,205,1,205,3,
        205,4199,8,205,1,205,3,205,4202,8,205,1,206,1,206,1,206,1,206,3,
        206,4208,8,206,1,206,1,206,1,207,1,207,5,207,4214,8,207,10,207,12,
        207,4217,9,207,1,207,3,207,4220,8,207,1,207,1,207,1,207,1,207,1,
        207,1,207,1,207,1,207,1,207,1,207,3,207,4232,8,207,1,207,1,207,1,
        207,1,207,3,207,4238,8,207,1,208,3,208,4241,8,208,1,208,1,208,1,
        208,3,208,4246,8,208,1,208,1,208,3,208,4250,8,208,1,208,1,208,1,
        208,1,208,1,208,3,208,4257,8,208,1,208,1,208,1,208,1,208,1,208,1,
        208,1,208,1,208,1,208,3,208,4268,8,208,1,209,1,209,1,209,1,209,1,
        209,1,210,1,210,1,210,1,210,1,210,1,210,1,211,1,211,1,211,1,212,
        1,212,1,212,1,213,1,213,1,213,1,213,3,213,4291,8,213,1,214,1,214,
        1,214,1,215,1,215,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,
        1,216,1,217,1,217,1,218,1,218,3,218,4311,8,218,1,218,1,218,1,218,
        1,218,1,218,1,218,1,218,3,218,4320,8,218,1,218,3,218,4323,8,218,
        1,218,3,218,4326,8,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,
        1,218,3,218,4336,8,218,1,218,3,218,4339,8,218,1,218,1,218,1,218,
        1,218,1,218,1,218,1,218,3,218,4348,8,218,1,218,1,218,3,218,4352,
        8,218,1,218,3,218,4355,8,218,1,218,1,218,1,218,1,218,1,218,1,218,
        3,218,4363,8,218,1,219,1,219,1,219,1,219,3,219,4369,8,219,1,220,
        1,220,3,220,4373,8,220,1,220,1,220,1,221,1,221,1,222,1,222,1,222,
        5,222,4382,8,222,10,222,12,222,4385,9,222,1,223,1,223,1,223,1,223,
        1,223,1,223,1,223,3,223,4394,8,223,1,224,1,224,1,224,1,225,4,225,
        4400,8,225,11,225,12,225,4401,1,226,1,226,1,226,3,226,4407,8,226,
        1,226,1,226,1,227,1,227,1,228,1,228,1,229,1,229,1,230,1,230,3,230,
        4419,8,230,1,230,1,230,1,231,1,231,1,232,1,232,1,233,1,233,1,233,
        1,233,1,233,1,234,1,234,1,234,1,234,3,234,4436,8,234,1,235,1,235,
        3,235,4440,8,235,1,235,1,235,5,235,4444,8,235,10,235,12,235,4447,
        9,235,1,236,1,236,1,236,1,236,3,236,4453,8,236,1,237,1,237,1,237,
        1,238,5,238,4459,8,238,10,238,12,238,4462,9,238,1,239,1,239,1,239,
        1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,3,239,4475,8,239,
        1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,
        1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,240,
        1,240,1,240,3,240,4501,8,240,1,241,1,241,1,241,5,241,4506,8,241,
        10,241,12,241,4509,9,241,1,242,1,242,1,242,1,242,1,242,1,242,1,243,
        1,243,1,243,5,243,4520,8,243,10,243,12,243,4523,9,243,1,244,1,244,
        1,244,1,244,1,244,1,244,1,245,1,245,3,245,4533,8,245,1,245,3,245,
        4536,8,245,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,
        1,247,1,247,3,247,4549,8,247,1,247,1,247,1,247,1,247,1,247,1,247,
        1,247,3,247,4558,8,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,4583,8,247,1,247,1,247,1,247,
        1,247,1,247,1,247,1,247,1,247,1,247,3,247,4594,8,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,
        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,4636,8,247,1,247,1,247,1,247,
        1,247,1,247,1,247,3,247,4644,8,247,1,247,1,247,1,247,1,247,3,247,
        4650,8,247,1,248,1,248,1,248,1,248,1,249,1,249,1,249,5,249,4659,
        8,249,10,249,12,249,4662,9,249,1,250,1,250,1,250,3,250,4667,8,250,
        1,251,1,251,1,251,1,251,1,251,1,251,3,251,4675,8,251,1,252,1,252,
        1,252,1,252,1,253,1,253,1,253,5,253,4684,8,253,10,253,12,253,4687,
        9,253,1,254,1,254,1,254,1,254,1,255,1,255,1,256,1,256,1,256,5,256,
        4698,8,256,10,256,12,256,4701,9,256,1,257,1,257,1,257,1,257,1,257,
        1,257,3,257,4709,8,257,1,257,1,257,1,257,3,257,4714,8,257,1,257,
        1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,3,257,4725,8,257,
        1,258,1,258,1,258,1,258,1,259,1,259,1,259,1,259,1,259,3,259,4736,
        8,259,1,259,1,259,1,259,1,259,1,259,1,259,3,259,4744,8,259,1,259,
        1,259,1,259,1,260,1,260,1,260,5,260,4752,8,260,10,260,12,260,4755,
        9,260,1,261,1,261,1,261,1,261,3,261,4761,8,261,1,261,3,261,4764,
        8,261,1,261,1,261,1,261,1,261,3,261,4770,8,261,1,261,3,261,4773,
        8,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,
        1,261,1,261,1,261,3,261,4788,8,261,1,262,1,262,1,263,1,263,1,263,
        1,264,1,264,1,264,1,264,1,264,1,264,3,264,4801,8,264,1,265,1,265,
        1,266,1,266,1,266,1,266,1,266,1,266,1,266,1,267,1,267,1,267,1,267,
        1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
        1,267,1,267,1,267,3,267,4830,8,267,1,268,1,268,1,268,5,268,4835,
        8,268,10,268,12,268,4838,9,268,1,269,1,269,1,269,1,269,1,269,1,269,
        1,269,1,269,1,269,1,269,1,269,1,269,3,269,4852,8,269,1,270,1,270,
        1,270,1,270,1,270,1,270,1,270,1,271,1,271,1,271,3,271,4864,8,271,
        1,271,1,271,3,271,4868,8,271,1,271,1,271,1,271,3,271,4873,8,271,
        1,271,1,271,3,271,4877,8,271,1,271,1,271,1,271,3,271,4882,8,271,
        1,271,1,271,3,271,4886,8,271,1,271,1,271,1,271,1,271,3,271,4892,
        8,271,1,271,1,271,3,271,4896,8,271,1,271,1,271,1,271,3,271,4901,
        8,271,1,271,1,271,3,271,4905,8,271,1,271,1,271,1,271,1,271,3,271,
        4911,8,271,1,271,1,271,3,271,4915,8,271,1,271,1,271,1,271,3,271,
        4920,8,271,1,271,1,271,3,271,4924,8,271,1,271,1,271,1,271,3,271,
        4929,8,271,1,271,1,271,3,271,4933,8,271,1,271,1,271,1,271,3,271,
        4938,8,271,1,271,1,271,3,271,4942,8,271,1,271,1,271,1,271,1,271,
        1,271,3,271,4949,8,271,1,271,1,271,3,271,4953,8,271,1,271,1,271,
        1,271,1,271,1,271,3,271,4960,8,271,1,271,1,271,3,271,4964,8,271,
        1,271,1,271,1,271,1,271,1,271,3,271,4971,8,271,1,271,1,271,3,271,
        4975,8,271,1,271,1,271,1,271,1,271,1,271,3,271,4982,8,271,1,271,
        1,271,3,271,4986,8,271,1,271,1,271,1,271,1,271,3,271,4992,8,271,
        1,271,1,271,3,271,4996,8,271,1,271,1,271,1,271,1,271,3,271,5002,
        8,271,1,271,1,271,3,271,5006,8,271,1,271,1,271,1,271,3,271,5011,
        8,271,1,271,1,271,3,271,5015,8,271,1,271,1,271,1,271,1,271,1,271,
        3,271,5022,8,271,1,271,1,271,3,271,5026,8,271,1,271,1,271,3,271,
        5030,8,271,1,271,1,271,3,271,5034,8,271,1,271,1,271,3,271,5038,8,
        271,1,271,1,271,1,271,3,271,5043,8,271,1,271,1,271,3,271,5047,8,
        271,1,271,1,271,1,271,3,271,5052,8,271,1,271,1,271,3,271,5056,8,
        271,1,271,1,271,1,271,3,271,5061,8,271,1,271,1,271,3,271,5065,8,
        271,1,271,1,271,1,271,3,271,5070,8,271,1,271,1,271,1,271,1,271,3,
        271,5076,8,271,1,271,1,271,1,271,3,271,5081,8,271,1,271,1,271,1,
        271,1,271,3,271,5087,8,271,1,271,1,271,1,271,3,271,5092,8,271,1,
        271,1,271,1,271,1,271,3,271,5098,8,271,1,271,1,271,1,271,3,271,5103,
        8,271,1,271,1,271,3,271,5107,8,271,1,271,1,271,1,271,3,271,5112,
        8,271,1,271,1,271,3,271,5116,8,271,1,271,1,271,1,271,1,271,3,271,
        5122,8,271,1,271,1,271,3,271,5126,8,271,1,271,1,271,1,271,3,271,
        5131,8,271,1,271,1,271,1,271,1,271,1,271,1,271,3,271,5139,8,271,
        1,271,1,271,1,271,1,271,3,271,5145,8,271,1,271,1,271,1,271,1,271,
        3,271,5151,8,271,1,271,1,271,1,271,1,271,3,271,5157,8,271,1,271,
        1,271,1,271,1,271,3,271,5163,8,271,1,271,1,271,1,271,1,271,1,271,
        3,271,5170,8,271,1,271,1,271,1,271,3,271,5175,8,271,1,271,1,271,
        3,271,5179,8,271,1,271,1,271,1,271,3,271,5184,8,271,1,271,1,271,
        3,271,5188,8,271,1,271,1,271,1,271,3,271,5193,8,271,1,271,1,271,
        1,271,1,271,3,271,5199,8,271,1,271,1,271,1,271,1,271,1,271,3,271,
        5206,8,271,1,271,1,271,1,271,3,271,5211,8,271,1,271,1,271,1,271,
        1,271,1,271,3,271,5218,8,271,1,271,1,271,1,271,1,271,1,271,1,271,
        1,271,1,271,3,271,5228,8,271,1,271,1,271,3,271,5232,8,271,1,271,
        1,271,1,271,1,271,3,271,5238,8,271,3,271,5240,8,271,1,272,1,272,
        1,272,5,272,5245,8,272,10,272,12,272,5248,9,272,1,273,3,273,5251,
        8,273,1,273,1,273,1,273,3,273,5256,8,273,1,273,1,273,1,273,1,273,
        1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,
        1,273,3,273,5274,8,273,1,274,1,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,5289,8,274,1,274,1,274,
        1,274,1,274,1,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,5307,8,274,1,275,1,275,1,276,1,276,1,276,
        5,276,5314,8,276,10,276,12,276,5317,9,276,1,277,1,277,1,277,1,277,
        1,278,1,278,3,278,5325,8,278,1,279,1,279,3,279,5329,8,279,1,280,
        1,280,4,280,5333,8,280,11,280,12,280,5334,1,281,1,281,1,281,5,281,
        5340,8,281,10,281,12,281,5343,9,281,1,282,1,282,3,282,5347,8,282,
        1,282,1,282,1,282,5,282,5352,8,282,10,282,12,282,5355,9,282,1,282,
        1,282,3,282,5359,8,282,1,282,3,282,5362,8,282,1,283,3,283,5365,8,
        283,1,283,1,283,3,283,5369,8,283,1,284,1,284,1,284,1,284,1,284,1,
        284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,3,284,5440,
        8,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,
        1,284,1,284,1,284,1,284,1,284,1,284,1,284,3,284,5536,8,284,1,285,
        1,285,3,285,5540,8,285,1,286,1,286,1,286,3,286,5545,8,286,1,286,
        1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,3,286,5556,8,286,
        1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,3,286,5567,
        8,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,3,286,
        5578,8,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,
        3,286,5589,8,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,
        1,286,3,286,5600,8,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,
        1,286,1,286,1,286,3,286,5612,8,286,1,286,1,286,1,286,1,286,1,286,
        1,286,1,286,1,286,1,286,3,286,5623,8,286,1,286,1,286,1,286,1,286,
        1,286,1,286,1,286,1,286,1,286,3,286,5634,8,286,1,286,1,286,1,286,
        1,286,1,286,1,286,1,286,1,286,3,286,5644,8,286,1,286,1,286,1,286,
        1,286,1,286,3,286,5651,8,286,1,287,1,287,1,287,1,288,1,288,3,288,
        5658,8,288,1,289,1,289,1,289,1,289,3,289,5664,8,289,1,290,1,290,
        1,290,1,290,1,290,1,290,3,290,5672,8,290,1,290,1,290,1,290,3,290,
        5677,8,290,1,290,1,290,1,290,3,290,5682,8,290,1,290,1,290,1,290,
        3,290,5687,8,290,1,290,1,290,1,290,1,290,3,290,5693,8,290,1,290,
        1,290,1,290,1,290,1,290,3,290,5700,8,290,1,290,1,290,1,290,1,290,
        3,290,5706,8,290,1,290,1,290,1,290,1,290,3,290,5712,8,290,1,290,
        1,290,1,290,3,290,5717,8,290,1,290,1,290,1,290,1,290,3,290,5723,
        8,290,1,290,1,290,1,290,1,290,1,290,3,290,5730,8,290,1,290,1,290,
        1,290,3,290,5735,8,290,1,290,1,290,1,290,1,290,3,290,5741,8,290,
        1,290,1,290,1,290,1,290,1,290,3,290,5748,8,290,1,290,3,290,5751,
        8,290,1,291,1,291,1,292,1,292,1,293,1,293,1,293,1,293,1,293,1,293,
        1,293,3,293,5764,8,293,1,294,1,294,1,294,1,294,1,294,1,294,1,294,
        3,294,5773,8,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,
        1,294,1,294,3,294,5785,8,294,3,294,5787,8,294,1,295,1,295,1,295,
        1,295,1,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,5805,8,295,1,296,1,296,1,296,5,296,5810,8,296,
        10,296,12,296,5813,9,296,1,297,1,297,1,298,1,298,1,298,5,298,5820,
        8,298,10,298,12,298,5823,9,298,1,299,1,299,3,299,5827,8,299,1,299,
        1,299,3,299,5831,8,299,1,299,1,299,3,299,5835,8,299,1,299,1,299,
        3,299,5839,8,299,3,299,5841,8,299,1,300,1,300,1,300,1,300,1,300,
        1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,
        1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,
        1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,
        1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,
        1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,3,300,5901,
        8,300,1,301,1,301,1,301,5,301,5906,8,301,10,301,12,301,5909,9,301,
        1,302,1,302,1,302,3,302,5914,8,302,1,303,1,303,1,303,1,303,1,304,
        1,304,1,304,1,304,1,304,3,304,5925,8,304,1,304,3,304,5928,8,304,
        1,305,1,305,1,305,1,305,1,305,3,305,5935,8,305,1,305,3,305,5938,
        8,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305,3,305,5948,
        8,305,1,305,3,305,5951,8,305,3,305,5953,8,305,1,306,1,306,1,306,
        1,306,1,307,1,307,1,307,1,307,1,308,1,308,1,308,1,308,1,308,1,308,
        1,309,5,309,5970,8,309,10,309,12,309,5973,9,309,1,310,1,310,1,310,
        1,310,1,310,1,310,1,310,1,310,1,310,3,310,5984,8,310,1,311,1,311,
        1,311,1,311,1,311,1,311,1,311,3,311,5993,8,311,1,311,1,311,1,311,
        1,311,1,311,1,311,1,311,3,311,6002,8,311,1,311,1,311,1,311,1,311,
        1,311,1,311,1,311,1,311,1,311,1,311,3,311,6014,8,311,3,311,6016,
        8,311,1,312,1,312,1,313,1,313,3,313,6022,8,313,1,313,1,313,3,313,
        6026,8,313,1,313,3,313,6029,8,313,1,313,3,313,6032,8,313,1,313,1,
        313,1,313,3,313,6037,8,313,1,313,1,313,1,313,1,313,3,313,6043,8,
        313,1,313,3,313,6046,8,313,1,313,3,313,6049,8,313,1,313,3,313,6052,
        8,313,1,313,3,313,6055,8,313,1,314,1,314,1,315,1,315,1,316,1,316,
        1,317,1,317,1,317,1,318,1,318,1,318,5,318,6069,8,318,10,318,12,318,
        6072,9,318,1,319,3,319,6075,8,319,1,319,3,319,6078,8,319,1,319,3,
        319,6081,8,319,1,319,3,319,6084,8,319,1,319,3,319,6087,8,319,1,319,
        1,319,1,319,3,319,6092,8,319,1,319,3,319,6095,8,319,3,319,6097,8,
        319,1,320,1,320,1,320,1,320,1,320,1,320,1,320,1,320,1,320,1,320,
        1,320,3,320,6110,8,320,1,321,1,321,1,321,1,321,1,321,1,322,1,322,
        1,322,5,322,6120,8,322,10,322,12,322,6123,9,322,1,323,1,323,1,323,
        1,324,1,324,1,325,1,325,1,326,1,326,1,326,1,326,3,326,6136,8,326,
        1,327,1,327,3,327,6140,8,327,1,327,1,327,1,327,1,327,3,327,6146,
        8,327,1,327,1,327,1,327,1,327,1,327,1,327,1,327,1,327,3,327,6156,
        8,327,3,327,6158,8,327,1,327,1,327,1,327,3,327,6163,8,327,1,328,
        1,328,1,328,1,328,5,328,6169,8,328,10,328,12,328,6172,9,328,1,328,
        1,328,1,329,1,329,1,329,1,330,1,330,3,330,6181,8,330,1,330,1,330,
        1,331,1,331,1,331,5,331,6188,8,331,10,331,12,331,6191,9,331,1,332,
        1,332,1,332,5,332,6196,8,332,10,332,12,332,6199,9,332,1,333,1,333,
        1,333,1,333,1,333,1,333,3,333,6207,8,333,3,333,6209,8,333,1,334,
        1,334,1,334,5,334,6214,8,334,10,334,12,334,6217,9,334,1,335,1,335,
        1,335,1,335,1,335,1,335,3,335,6225,8,335,3,335,6227,8,335,1,336,
        1,336,1,336,5,336,6232,8,336,10,336,12,336,6235,9,336,1,337,1,337,
        1,337,1,337,1,337,1,337,3,337,6243,8,337,3,337,6245,8,337,1,338,
        1,338,3,338,6249,8,338,1,338,1,338,1,339,1,339,1,339,5,339,6256,
        8,339,10,339,12,339,6259,9,339,1,340,1,340,3,340,6263,8,340,1,340,
        1,340,1,340,1,340,3,340,6269,8,340,1,340,1,340,1,340,3,340,6274,
        8,340,1,341,1,341,3,341,6278,8,341,1,341,1,341,1,341,3,341,6283,
        8,341,1,342,1,342,1,343,1,343,1,344,1,344,1,344,1,344,1,344,1,344,
        1,344,1,344,1,344,1,344,1,344,1,344,3,344,6301,8,344,1,345,1,345,
        1,345,3,345,6306,8,345,1,346,1,346,1,347,1,347,1,347,1,347,1,347,
        1,347,1,347,1,347,1,347,1,347,1,347,3,347,6321,8,347,1,347,1,347,
        1,348,1,348,1,348,5,348,6328,8,348,10,348,12,348,6331,9,348,1,349,
        1,349,1,349,1,350,1,350,1,350,5,350,6339,8,350,10,350,12,350,6342,
        9,350,1,351,4,351,6345,8,351,11,351,12,351,6346,1,352,1,352,1,352,
        1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,
        1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,
        1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,3,352,
        6384,8,352,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,
        1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,3,353,6404,
        8,353,1,353,1,353,1,353,1,353,1,353,3,353,6411,8,353,1,354,1,354,
        1,354,1,354,1,354,1,354,1,354,5,354,6420,8,354,10,354,12,354,6423,
        9,354,1,355,1,355,1,355,1,356,1,356,1,356,1,357,1,357,1,357,5,357,
        6434,8,357,10,357,12,357,6437,9,357,1,358,1,358,1,358,1,358,3,358,
        6443,8,358,1,359,1,359,1,359,1,359,1,359,1,359,3,359,6451,8,359,
        1,360,4,360,6454,8,360,11,360,12,360,6455,1,361,1,361,1,362,1,362,
        1,362,3,362,6463,8,362,1,362,1,362,3,362,6467,8,362,1,362,1,362,
        1,362,3,362,6472,8,362,1,362,1,362,3,362,6476,8,362,1,362,1,362,
        1,362,3,362,6481,8,362,1,362,1,362,3,362,6485,8,362,3,362,6487,8,
        362,1,363,1,363,1,363,3,363,6492,8,363,1,363,1,363,3,363,6496,8,
        363,1,364,1,364,1,364,3,364,6501,8,364,1,364,1,364,3,364,6505,8,
        364,1,365,1,365,1,365,1,365,1,365,1,365,1,365,1,365,1,365,1,365,
        1,365,1,365,1,365,1,365,1,365,1,365,1,365,1,365,1,365,1,365,1,365,
        1,365,3,365,6529,8,365,1,366,1,366,1,366,5,366,6534,8,366,10,366,
        12,366,6537,9,366,1,366,1,366,1,367,1,367,1,367,5,367,6544,8,367,
        10,367,12,367,6547,9,367,1,368,1,368,1,368,1,369,1,369,1,369,1,370,
        4,370,6556,8,370,11,370,12,370,6557,1,371,1,371,1,371,3,371,6563,
        8,371,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,
        1,372,3,372,6576,8,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,
        1,372,1,372,1,372,3,372,6588,8,372,1,372,1,372,1,372,1,372,1,372,
        1,372,1,372,1,372,1,372,1,372,3,372,6600,8,372,3,372,6602,8,372,
        1,373,1,373,1,373,1,373,3,373,6608,8,373,1,374,1,374,1,374,1,375,
        1,375,3,375,6615,8,375,1,375,1,375,1,375,1,375,1,375,1,375,1,375,
        1,375,1,375,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,3,376,6660,8,376,1,377,1,377,1,377,1,377,1,377,
        1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,
        3,377,6678,8,377,1,378,1,378,3,378,6682,8,378,1,378,1,378,1,378,
        3,378,6687,8,378,1,378,3,378,6690,8,378,1,379,1,379,3,379,6694,8,
        379,1,379,1,379,1,379,3,379,6699,8,379,1,379,1,379,1,379,3,379,6704,
        8,379,1,379,3,379,6707,8,379,1,380,1,380,1,380,5,380,6712,8,380,
        10,380,12,380,6715,9,380,1,381,1,381,1,382,1,382,1,382,1,382,1,382,
        1,382,1,382,1,382,1,382,1,382,1,382,1,382,3,382,6731,8,382,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,3,383,6802,8,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,3,383,6833,8,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,3,383,6887,8,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,3,383,6897,8,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,3,383,6907,8,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,3,383,6918,8,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,3,383,6928,8,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,3,383,6939,8,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,3,383,6949,8,383,1,383,1,383,1,383,3,383,6954,
        8,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,3,383,6963,8,383,
        1,383,1,383,1,383,3,383,6968,8,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,3,383,6978,8,383,1,383,1,383,1,383,3,383,6983,
        8,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,3,383,6992,8,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        3,383,7005,8,383,1,383,1,383,1,383,3,383,7010,8,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,
        1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,1,383,3,383,7122,
        8,383,3,383,7124,8,383,1,384,1,384,1,384,1,385,1,385,1,385,1,385,
        3,385,7133,8,385,1,385,1,385,1,385,1,385,1,385,1,385,1,385,1,385,
        1,385,3,385,7144,8,385,1,385,1,385,1,385,1,385,1,385,1,385,1,385,
        1,385,1,385,3,385,7155,8,385,1,385,1,385,1,385,1,385,1,385,1,385,
        1,385,1,385,1,385,1,385,1,385,3,385,7168,8,385,1,385,1,385,1,385,
        1,385,1,385,1,385,1,385,1,385,1,385,1,385,3,385,7180,8,385,1,385,
        1,385,1,385,1,385,1,385,1,385,1,385,1,385,1,385,3,385,7191,8,385,
        1,385,1,385,1,385,1,385,1,385,3,385,7198,8,385,1,386,1,386,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,3,387,7288,8,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,3,387,7341,8,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,3,387,7351,8,387,1,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,3,387,7362,8,387,
        1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,3,387,7373,
        8,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,1,387,
        1,387,1,387,3,387,7387,8,387,1,388,1,388,1,388,1,388,1,388,1,388,
        1,388,1,388,1,389,1,389,1,389,5,389,7400,8,389,10,389,12,389,7403,
        9,389,1,390,1,390,1,390,1,390,1,390,1,390,1,390,1,390,3,390,7413,
        8,390,1,391,1,391,1,391,1,391,1,391,3,391,7420,8,391,1,392,1,392,
        1,392,1,392,1,392,1,392,1,392,1,392,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,3,393,7474,8,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
        1,393,1,393,1,393,1,393,1,393,3,393,7615,8,393,1,394,1,394,1,394,
        1,394,3,394,7621,8,394,1,394,3,394,7624,8,394,1,395,1,395,1,396,
        1,396,1,396,1,396,1,396,1,396,3,396,7634,8,396,1,397,1,397,1,397,
        1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,
        1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,
        1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,1,397,
        1,397,1,397,3,397,7674,8,397,1,398,1,398,1,398,1,398,1,398,1,398,
        1,398,1,398,3,398,7684,8,398,1,399,1,399,1,399,5,399,7689,8,399,
        10,399,12,399,7692,9,399,1,400,1,400,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,1,401,1,401,1,401,
        1,401,1,401,3,401,7714,8,401,1,401,1,401,1,401,1,401,1,401,1,401,
        1,401,3,401,7723,8,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,
        3,401,7732,8,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,3,401,
        7741,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,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,1,401,1,401,1,401,1,401,1,401,
        3,401,7774,8,401,1,402,1,402,3,402,7778,8,402,1,402,1,402,1,402,
        1,402,1,402,1,402,1,402,1,402,3,402,7788,8,402,1,402,1,402,3,402,
        7792,8,402,1,402,1,402,1,403,1,403,1,403,1,403,1,403,1,403,3,403,
        7802,8,403,1,404,3,404,7805,8,404,1,404,1,404,3,404,7809,8,404,5,
        404,7811,8,404,10,404,12,404,7814,9,404,1,405,1,405,1,405,1,405,
        1,405,3,405,7821,8,405,1,406,1,406,1,407,1,407,1,408,1,408,1,409,
        1,409,1,409,3,409,7832,8,409,1,410,1,410,1,410,1,411,1,411,1,411,
        1,412,1,412,1,412,1,412,3,412,7844,8,412,1,413,1,413,3,413,7848,
        8,413,1,413,3,413,7851,8,413,1,413,1,413,3,413,7855,8,413,1,413,
        3,413,7858,8,413,1,413,1,413,1,413,3,413,7863,8,413,1,413,1,413,
        3,413,7867,8,413,1,413,3,413,7870,8,413,1,413,1,413,1,413,1,413,
        3,413,7876,8,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,
        1,413,3,413,7887,8,413,1,413,3,413,7890,8,413,1,413,1,413,1,413,
        1,413,1,413,3,413,7897,8,413,1,413,1,413,3,413,7901,8,413,1,413,
        1,413,1,413,3,413,7906,8,413,1,413,3,413,7909,8,413,3,413,7911,8,
        413,1,414,1,414,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,
        1,415,1,415,3,415,7925,8,415,1,416,1,416,3,416,7929,8,416,1,416,
        5,416,7932,8,416,10,416,12,416,7935,9,416,1,417,1,417,1,418,1,418,
        3,418,7941,8,418,1,418,1,418,1,419,1,419,1,419,3,419,7948,8,419,
        1,419,3,419,7951,8,419,1,419,1,419,1,419,3,419,7956,8,419,1,419,
        3,419,7959,8,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,3,419,
        7968,8,419,3,419,7970,8,419,1,419,1,419,1,419,3,419,7975,8,419,1,
        420,1,420,3,420,7979,8,420,1,420,1,420,1,420,1,421,1,421,1,421,1,
        422,1,422,1,422,1,422,3,422,7991,8,422,1,422,3,422,7994,8,422,1,
        423,1,423,1,424,4,424,7999,8,424,11,424,12,424,8000,1,425,1,425,
        3,425,8005,8,425,1,425,1,425,1,425,3,425,8010,8,425,1,426,1,426,
        1,426,1,426,1,426,1,426,1,426,1,426,3,426,8020,8,426,1,427,1,427,
        1,428,1,428,1,428,1,428,1,428,1,428,3,428,8030,8,428,1,428,3,428,
        8033,8,428,1,428,3,428,8036,8,428,3,428,8038,8,428,1,429,1,429,1,
        429,1,429,3,429,8044,8,429,1,430,1,430,1,430,5,430,8049,8,430,10,
        430,12,430,8052,9,430,1,431,1,431,1,432,1,432,1,432,1,432,1,432,
        1,432,1,433,1,433,1,433,1,433,1,433,1,434,1,434,1,434,1,434,3,434,
        8071,8,434,1,434,1,434,1,434,1,435,1,435,1,435,1,435,1,435,1,435,
        1,435,1,435,1,435,1,435,1,435,1,435,1,435,1,435,1,435,3,435,8091,
        8,435,1,435,1,435,3,435,8095,8,435,1,435,1,435,1,435,3,435,8100,
        8,435,1,436,1,436,1,437,1,437,1,437,1,437,1,437,1,437,1,437,1,438,
        1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,
        1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,
        1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,
        1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,
        1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,1,438,
        1,438,1,438,3,438,8169,8,438,1,438,1,438,1,438,3,438,8174,8,438,
        1,439,1,439,1,440,1,440,3,440,8180,8,440,1,440,1,440,1,440,1,440,
        1,440,1,440,1,440,1,440,1,440,1,441,1,441,3,441,8193,8,441,1,441,
        1,441,3,441,8197,8,441,1,441,1,441,3,441,8201,8,441,1,441,1,441,
        1,441,1,441,3,441,8207,8,441,3,441,8209,8,441,1,442,1,442,1,442,
        1,442,5,442,8215,8,442,10,442,12,442,8218,9,442,1,442,1,442,1,443,
        1,443,1,443,1,444,1,444,3,444,8227,8,444,1,444,3,444,8230,8,444,
        1,444,3,444,8233,8,444,1,444,3,444,8236,8,444,1,444,3,444,8239,8,
        444,1,444,1,444,1,444,1,444,1,444,3,444,8246,8,444,1,444,3,444,8249,
        8,444,3,444,8251,8,444,1,445,1,445,3,445,8255,8,445,1,445,3,445,
        8258,8,445,1,445,1,445,1,445,1,445,1,445,3,445,8265,8,445,3,445,
        8267,8,445,1,446,1,446,1,446,5,446,8272,8,446,10,446,12,446,8275,
        9,446,1,447,1,447,1,448,1,448,3,448,8281,8,448,1,449,1,449,3,449,
        8285,8,449,1,450,1,450,3,450,8289,8,450,1,451,1,451,1,452,1,452,
        1,452,5,452,8296,8,452,10,452,12,452,8299,9,452,1,453,1,453,1,453,
        3,453,8304,8,453,1,454,1,454,3,454,8308,8,454,1,455,1,455,3,455,
        8312,8,455,1,456,1,456,1,456,3,456,8317,8,456,1,457,1,457,1,458,
        1,458,1,459,1,459,1,459,1,459,1,460,1,460,3,460,8329,8,460,1,461,
        1,461,1,461,5,461,8334,8,461,10,461,12,461,8337,9,461,1,462,1,462,
        1,463,1,463,1,463,1,463,1,463,3,463,8346,8,463,1,463,1,463,1,463,
        1,463,1,463,1,463,1,463,1,463,1,463,1,463,1,463,3,463,8359,8,463,
        1,464,1,464,1,464,1,464,1,464,1,464,1,464,1,464,1,464,3,464,8370,
        8,464,1,465,1,465,1,465,5,465,8375,8,465,10,465,12,465,8378,9,465,
        1,466,1,466,3,466,8382,8,466,1,467,1,467,3,467,8386,8,467,1,468,
        1,468,3,468,8390,8,468,1,469,1,469,1,469,3,469,8395,8,469,1,469,
        1,469,1,469,1,470,1,470,1,470,1,470,1,471,1,471,1,471,1,471,3,471,
        8408,8,471,1,472,1,472,1,472,3,472,8413,8,472,1,472,1,472,3,472,
        8417,8,472,1,472,1,472,3,472,8421,8,472,1,472,1,472,1,472,1,472,
        1,472,3,472,8428,8,472,1,472,3,472,8431,8,472,3,472,8433,8,472,1,
        473,1,473,1,473,1,473,1,474,1,474,3,474,8441,8,474,1,474,1,474,3,
        474,8445,8,474,1,475,3,475,8448,8,475,1,475,1,475,1,475,1,475,1,
        475,3,475,8455,8,475,1,475,3,475,8458,8,475,1,476,1,476,1,476,3,
        476,8463,8,476,1,477,1,477,1,477,1,477,3,477,8469,8,477,1,477,1,
        477,1,477,1,477,3,477,8475,8,477,1,477,1,477,3,477,8479,8,477,1,
        478,1,478,1,479,1,479,1,479,5,479,8486,8,479,10,479,12,479,8489,
        9,479,1,480,1,480,1,480,1,481,1,481,1,481,3,481,8497,8,481,1,481,
        1,481,1,481,1,481,1,481,3,481,8504,8,481,1,481,3,481,8507,8,481,
        1,482,1,482,1,482,1,482,3,482,8513,8,482,1,482,1,482,1,482,3,482,
        8518,8,482,1,483,1,483,1,483,1,484,3,484,8524,8,484,1,484,1,484,
        1,484,1,484,3,484,8530,8,484,1,484,3,484,8533,8,484,1,484,3,484,
        8536,8,484,1,485,1,485,1,485,1,486,1,486,3,486,8543,8,486,1,486,
        1,486,3,486,8547,8,486,1,486,3,486,8550,8,486,1,487,1,487,1,487,
        1,487,1,488,1,488,1,488,1,488,1,488,1,488,1,488,1,488,1,488,3,488,
        8565,8,488,1,488,3,488,8568,8,488,1,489,1,489,1,490,1,490,1,490,
        3,490,8575,8,490,1,491,3,491,8578,8,491,1,491,1,491,1,491,1,491,
        1,491,3,491,8585,8,491,1,491,3,491,8588,8,491,1,491,3,491,8591,8,
        491,1,492,1,492,1,492,5,492,8596,8,492,10,492,12,492,8599,9,492,
        1,493,1,493,1,493,1,493,1,493,1,493,1,493,1,493,1,493,3,493,8610,
        8,493,1,493,1,493,1,493,1,493,1,493,3,493,8617,8,493,3,493,8619,
        8,493,1,494,1,494,1,494,1,495,1,495,1,495,5,495,8627,8,495,10,495,
        12,495,8630,9,495,1,496,1,496,1,496,1,496,1,496,1,496,1,496,1,496,
        1,497,1,497,1,498,1,498,1,498,1,498,1,498,5,498,8647,8,498,10,498,
        12,498,8650,9,498,1,499,1,499,1,499,1,499,1,499,3,499,8657,8,499,
        1,500,1,500,3,500,8661,8,500,1,501,1,501,1,501,1,501,1,501,1,501,
        1,501,1,501,3,501,8671,8,501,1,502,1,502,3,502,8675,8,502,1,502,
        1,502,3,502,8679,8,502,1,502,1,502,3,502,8683,8,502,3,502,8685,8,
        502,1,502,1,502,1,502,3,502,8690,8,502,1,502,1,502,3,502,8694,8,
        502,1,502,1,502,3,502,8698,8,502,3,502,8700,8,502,3,502,8702,8,502,
        1,503,1,503,3,503,8706,8,503,1,504,1,504,3,504,8710,8,504,1,504,
        3,504,8713,8,504,1,504,3,504,8716,8,504,1,504,3,504,8719,8,504,1,
        504,3,504,8722,8,504,3,504,8724,8,504,1,504,3,504,8727,8,504,1,504,
        3,504,8730,8,504,1,504,3,504,8733,8,504,1,504,3,504,8736,8,504,1,
        504,3,504,8739,8,504,1,504,3,504,8742,8,504,1,504,1,504,1,504,1,
        504,1,504,1,504,1,504,3,504,8751,8,504,3,504,8753,8,504,1,504,1,
        504,1,504,3,504,8758,8,504,5,504,8760,8,504,10,504,12,504,8763,9,
        504,1,505,1,505,1,505,3,505,8768,8,505,1,506,1,506,3,506,8772,8,
        506,1,507,1,507,3,507,8776,8,507,1,507,1,507,1,508,1,508,1,508,5,
        508,8783,8,508,10,508,12,508,8786,9,508,1,509,1,509,3,509,8790,8,
        509,1,509,1,509,3,509,8794,8,509,1,509,1,509,1,509,1,509,3,509,8800,
        8,509,1,509,3,509,8803,8,509,1,510,1,510,1,510,1,510,1,510,1,510,
        1,510,1,510,1,511,1,511,1,511,1,511,1,511,1,511,1,511,1,511,1,511,
        3,511,8822,8,511,1,511,1,511,1,511,1,512,1,512,1,512,3,512,8830,
        8,512,1,513,1,513,1,514,1,514,1,514,1,514,1,514,3,514,8839,8,514,
        1,515,1,515,3,515,8843,8,515,1,516,3,516,8846,8,516,1,516,1,516,
        3,516,8850,8,516,1,516,1,516,1,516,3,516,8855,8,516,1,516,1,516,
        1,516,1,516,3,516,8861,8,516,1,517,1,517,1,518,1,518,1,519,1,519,
        1,519,1,519,1,519,1,519,3,519,8873,8,519,1,520,1,520,1,521,1,521,
        1,522,1,522,1,522,1,522,1,523,1,523,1,523,5,523,8886,8,523,10,523,
        12,523,8889,9,523,1,524,1,524,1,524,1,524,3,524,8895,8,524,1,524,
        3,524,8898,8,524,1,525,1,525,3,525,8902,8,525,1,525,1,525,3,525,
        8906,8,525,1,525,1,525,3,525,8910,8,525,3,525,8912,8,525,1,526,1,
        526,1,527,1,527,1,527,1,527,3,527,8920,8,527,1,528,1,528,1,528,1,
        528,1,528,1,528,1,528,3,528,8929,8,528,1,528,1,528,1,528,1,528,3,
        528,8935,8,528,3,528,8937,8,528,1,529,1,529,1,529,1,529,1,529,3,
        529,8944,8,529,1,530,1,530,3,530,8948,8,530,1,531,1,531,1,532,1,
        532,1,532,1,532,1,532,3,532,8957,8,532,1,533,1,533,3,533,8961,8,
        533,1,534,1,534,1,535,1,535,1,536,1,536,1,536,3,536,8970,8,536,1,
        536,1,536,1,537,1,537,1,537,5,537,8977,8,537,10,537,12,537,8980,
        9,537,1,538,1,538,1,538,1,538,1,538,1,538,1,538,1,538,1,538,3,538,
        8991,8,538,1,539,1,539,1,539,1,540,1,540,1,540,1,540,1,540,1,541,
        1,541,1,541,1,541,1,541,1,542,1,542,1,542,1,542,1,542,1,542,1,543,
        1,543,1,543,1,544,1,544,1,544,1,544,3,544,9019,8,544,1,545,1,545,
        1,546,4,546,9024,8,546,11,546,12,546,9025,1,547,1,547,3,547,9030,
        8,547,1,547,3,547,9033,8,547,1,548,1,548,1,548,3,548,9038,8,548,
        1,548,1,548,3,548,9042,8,548,1,548,3,548,9045,8,548,1,549,1,549,
        1,549,1,550,1,550,1,550,1,550,1,550,1,550,1,550,1,550,1,550,5,550,
        9059,8,550,10,550,12,550,9062,9,550,1,551,1,551,1,551,1,552,1,552,
        1,552,5,552,9070,8,552,10,552,12,552,9073,9,552,1,553,1,553,3,553,
        9077,8,553,1,553,3,553,9080,8,553,1,553,3,553,9083,8,553,1,553,1,
        553,3,553,9087,8,553,1,553,1,553,3,553,9091,8,553,1,553,1,553,3,
        553,9095,8,553,1,553,1,553,1,553,3,553,9100,8,553,1,553,1,553,3,
        553,9104,8,553,1,553,1,553,3,553,9108,8,553,3,553,9110,8,553,1,553,
        1,553,1,553,1,553,1,553,1,553,1,553,3,553,9119,8,553,1,553,1,553,
        1,553,3,553,9124,8,553,1,553,1,553,1,553,1,553,3,553,9130,8,553,
        1,553,1,553,3,553,9134,8,553,3,553,9136,8,553,1,553,1,553,1,553,
        1,553,1,553,3,553,9143,8,553,1,553,1,553,1,553,3,553,9148,8,553,
        1,553,1,553,1,553,1,553,5,553,9154,8,553,10,553,12,553,9157,9,553,
        1,554,3,554,9160,8,554,1,554,1,554,1,554,1,554,1,554,3,554,9167,
        8,554,1,555,1,555,1,556,1,556,1,556,3,556,9174,8,556,1,556,3,556,
        9177,8,556,1,556,1,556,1,556,1,556,3,556,9183,8,556,1,557,1,557,
        3,557,9187,8,557,1,558,1,558,1,558,1,558,1,558,1,558,1,558,3,558,
        9196,8,558,1,559,3,559,9199,8,559,1,559,1,559,3,559,9203,8,559,1,
        559,1,559,1,559,1,559,1,559,1,559,3,559,9211,8,559,1,559,1,559,1,
        559,1,559,3,559,9217,8,559,3,559,9219,8,559,1,560,3,560,9222,8,560,
        1,560,1,560,3,560,9226,8,560,1,560,3,560,9229,8,560,1,560,3,560,
        9232,8,560,1,561,1,561,3,561,9236,8,561,1,561,1,561,3,561,9240,8,
        561,1,561,1,561,1,561,1,561,3,561,9246,8,561,1,561,3,561,9249,8,
        561,1,561,1,561,1,561,1,561,1,561,1,561,1,561,3,561,9258,8,561,1,
        561,1,561,1,561,1,561,1,561,3,561,9265,8,561,3,561,9267,8,561,1,
        562,1,562,1,562,5,562,9272,8,562,10,562,12,562,9275,9,562,1,563,
        1,563,1,563,5,563,9280,8,563,10,563,12,563,9283,9,563,1,564,1,564,
        3,564,9287,8,564,1,564,3,564,9290,8,564,1,565,1,565,1,565,1,565,
        1,565,1,565,3,565,9298,8,565,1,566,1,566,1,566,1,566,1,566,1,567,
        1,567,3,567,9307,8,567,1,567,1,567,1,567,1,567,1,567,1,567,3,567,
        9315,8,567,3,567,9317,8,567,1,568,1,568,3,568,9321,8,568,1,569,1,
        569,1,569,5,569,9326,8,569,10,569,12,569,9329,9,569,1,570,1,570,
        1,570,1,570,1,570,1,571,1,571,1,571,1,572,1,572,1,572,1,573,1,573,
        1,573,1,573,1,573,3,573,9347,8,573,1,574,1,574,1,575,1,575,1,575,
        5,575,9354,8,575,10,575,12,575,9357,9,575,1,576,1,576,1,576,3,576,
        9362,8,576,1,577,1,577,1,577,1,577,1,577,1,577,1,577,1,577,1,577,
        1,577,1,577,1,577,1,577,1,577,1,577,1,577,1,577,3,577,9381,8,577,
        1,577,1,577,1,578,1,578,1,578,5,578,9388,8,578,10,578,12,578,9391,
        9,578,1,579,1,579,1,579,3,579,9396,8,579,1,579,1,579,3,579,9400,
        8,579,1,580,4,580,9403,8,580,11,580,12,580,9404,1,581,1,581,1,581,
        1,581,1,581,1,581,1,581,1,581,3,581,9415,8,581,1,582,1,582,1,582,
        5,582,9420,8,582,10,582,12,582,9423,9,582,1,583,1,583,1,583,1,583,
        1,583,1,583,3,583,9431,8,583,1,584,3,584,9434,8,584,1,584,1,584,
        1,584,1,584,1,584,1,584,1,584,3,584,9443,8,584,3,584,9445,8,584,
        1,584,1,584,1,584,1,584,3,584,9451,8,584,1,585,1,585,3,585,9455,
        8,585,1,585,5,585,9458,8,585,10,585,12,585,9461,9,585,1,586,1,586,
        1,586,1,586,1,586,1,586,1,586,3,586,9470,8,586,1,586,1,586,1,586,
        1,586,3,586,9476,8,586,3,586,9478,8,586,1,587,1,587,1,587,1,587,
        3,587,9484,8,587,1,588,1,588,3,588,9488,8,588,1,588,3,588,9491,8,
        588,1,589,1,589,1,589,1,589,1,590,1,590,1,590,1,590,1,590,1,590,
        1,590,3,590,9504,8,590,1,590,1,590,1,590,1,590,3,590,9510,8,590,
        1,590,1,590,3,590,9514,8,590,1,590,1,590,3,590,9518,8,590,1,590,
        3,590,9521,8,590,1,591,1,591,1,591,1,591,1,592,1,592,3,592,9529,
        8,592,1,593,1,593,3,593,9533,8,593,1,594,1,594,3,594,9537,8,594,
        1,594,1,594,1,594,1,594,1,595,1,595,3,595,9545,8,595,1,596,1,596,
        1,596,1,596,1,596,3,596,9552,8,596,1,597,1,597,1,597,1,597,1,597,
        3,597,9559,8,597,1,598,1,598,3,598,9563,8,598,1,598,1,598,1,598,
        1,598,3,598,9569,8,598,3,598,9571,8,598,1,599,1,599,1,600,1,600,
        1,600,1,600,1,600,3,600,9580,8,600,1,600,3,600,9583,8,600,1,601,
        1,601,1,602,1,602,1,602,1,602,1,602,1,602,3,602,9593,8,602,1,603,
        1,603,1,603,1,603,1,603,1,603,1,603,1,603,1,603,1,603,1,603,1,603,
        1,603,1,603,3,603,9609,8,603,1,603,1,603,1,603,1,603,3,603,9615,
        8,603,1,603,1,603,1,603,3,603,9620,8,603,1,604,1,604,1,604,1,604,
        1,604,3,604,9627,8,604,1,605,1,605,1,605,1,606,1,606,1,607,1,607,
        3,607,9636,8,607,1,608,1,608,1,608,5,608,9641,8,608,10,608,12,608,
        9644,9,608,1,609,1,609,1,609,5,609,9649,8,609,10,609,12,609,9652,
        9,609,1,610,1,610,1,610,5,610,9657,8,610,10,610,12,610,9660,9,610,
        1,611,1,611,3,611,9664,8,611,1,611,1,611,3,611,9668,8,611,1,612,
        3,612,9671,8,612,1,612,1,612,1,613,1,613,3,613,9677,8,613,1,614,
        1,614,1,614,3,614,9682,8,614,1,614,1,614,1,614,1,614,1,614,1,614,
        1,614,1,614,1,614,1,614,1,614,1,614,1,614,1,614,3,614,9698,8,614,
        1,614,3,614,9701,8,614,3,614,9703,8,614,1,615,1,615,1,615,1,615,
        1,615,1,615,1,615,1,615,1,615,1,615,3,615,9715,8,615,3,615,9717,
        8,615,1,616,1,616,3,616,9721,8,616,1,616,1,616,1,616,1,616,1,616,
        1,616,3,616,9729,8,616,3,616,9731,8,616,1,616,1,616,3,616,9735,8,
        616,3,616,9737,8,616,1,617,1,617,1,617,1,617,5,617,9743,8,617,10,
        617,12,617,9746,9,617,1,618,3,618,9749,8,618,1,618,1,618,1,619,1,
        619,1,619,5,619,9756,8,619,10,619,12,619,9759,9,619,1,620,1,620,
        1,620,5,620,9764,8,620,10,620,12,620,9767,9,620,1,621,1,621,1,621,
        3,621,9772,8,621,1,622,3,622,9775,8,622,1,622,1,622,1,623,1,623,
        1,623,1,623,1,623,3,623,9784,8,623,1,624,1,624,1,624,3,624,9789,
        8,624,1,625,1,625,1,625,5,625,9794,8,625,10,625,12,625,9797,9,625,
        1,626,1,626,1,626,1,626,1,626,1,626,1,626,3,626,9806,8,626,1,626,
        1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,
        1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,
        1,626,3,626,9832,8,626,1,626,1,626,1,626,1,626,1,626,1,626,1,626,
        1,626,1,626,3,626,9843,8,626,5,626,9845,8,626,10,626,12,626,9848,
        9,626,1,627,1,627,1,627,1,627,1,627,3,627,9855,8,627,1,627,1,627,
        1,627,1,627,1,627,1,627,1,627,1,627,1,627,1,627,1,627,1,627,1,627,
        1,627,1,627,1,627,1,627,1,627,1,627,1,627,3,627,9877,8,627,1,627,
        1,627,1,627,1,627,1,627,1,627,1,627,3,627,9886,8,627,1,628,1,628,
        1,629,1,629,1,629,1,629,1,629,1,629,3,629,9896,8,629,1,629,3,629,
        9899,8,629,1,629,1,629,1,629,3,629,9904,8,629,1,629,1,629,1,629,
        3,629,9909,8,629,1,629,1,629,3,629,9913,8,629,1,629,3,629,9916,8,
        629,1,630,1,630,3,630,9920,8,630,1,630,3,630,9923,8,630,1,630,3,
        630,9926,8,630,1,630,3,630,9929,8,630,1,631,1,631,3,631,9933,8,631,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        1,632,3,632,9947,8,632,1,632,1,632,1,632,1,632,1,632,3,632,9954,
        8,632,1,632,1,632,1,632,1,632,1,632,3,632,9961,8,632,1,632,1,632,
        1,632,1,632,1,632,3,632,9968,8,632,1,632,1,632,1,632,1,632,1,632,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        3,632,9986,8,632,1,632,1,632,1,632,1,632,1,632,1,632,3,632,9994,
        8,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        3,632,10006,8,632,1,632,1,632,1,632,1,632,3,632,10012,8,632,1,632,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,3,632,
        10025,8,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        1,632,1,632,1,632,1,632,1,632,1,632,3,632,10064,8,632,3,632,10066,
        8,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,3,632,10086,8,632,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,3,632,10096,8,632,
        1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,3,632,10107,
        8,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,1,632,
        3,632,10119,8,632,1,633,1,633,1,633,1,633,1,633,3,633,10126,8,633,
        1,634,1,634,1,634,1,634,1,634,1,634,1,634,1,634,1,634,1,634,3,634,
        10138,8,634,1,635,1,635,1,635,1,635,1,635,1,636,1,636,1,636,5,636,
        10148,8,636,10,636,12,636,10151,9,636,1,637,1,637,1,637,3,637,10156,
        8,637,1,638,1,638,1,639,1,639,1,639,1,639,3,639,10164,8,639,1,640,
        1,640,1,640,1,640,1,640,1,640,1,640,1,640,1,640,1,640,1,640,1,640,
        1,640,1,640,1,640,3,640,10181,8,640,1,641,1,641,1,641,1,642,1,642,
        1,642,1,642,1,642,1,642,1,643,1,643,1,643,1,643,1,643,1,643,1,644,
        1,644,1,644,1,645,1,645,1,645,5,645,10204,8,645,10,645,12,645,10207,
        9,645,1,646,1,646,1,646,1,646,1,647,1,647,1,647,3,647,10216,8,647,
        1,648,1,648,3,648,10220,8,648,1,648,3,648,10223,8,648,1,648,3,648,
        10226,8,648,1,648,3,648,10229,8,648,1,648,1,648,1,649,1,649,1,650,
        1,650,1,650,1,650,1,651,1,651,1,651,3,651,10242,8,651,1,651,1,651,
        1,651,3,651,10247,8,651,1,651,1,651,1,651,3,651,10252,8,651,3,651,
        10254,8,651,1,652,1,652,1,652,1,652,1,652,1,652,3,652,10262,8,652,
        1,653,1,653,1,653,1,653,1,653,1,653,1,653,3,653,10271,8,653,1,654,
        1,654,1,654,1,654,1,654,1,654,1,654,3,654,10280,8,654,1,655,1,655,
        1,655,3,655,10285,8,655,1,655,1,655,1,655,1,655,1,655,1,655,1,655,
        3,655,10294,8,655,1,656,1,656,1,656,3,656,10299,8,656,1,656,1,656,
        1,657,1,657,1,657,1,657,1,657,1,657,1,658,1,658,1,659,1,659,3,659,
        10313,8,659,1,660,1,660,1,661,1,661,1,661,1,661,1,661,1,661,3,661,
        10323,8,661,1,662,1,662,1,662,1,662,1,662,1,662,3,662,10331,8,662,
        1,663,1,663,1,663,1,663,1,663,1,663,1,663,1,663,1,663,1,663,1,663,
        1,663,3,663,10345,8,663,1,664,1,664,1,664,5,664,10350,8,664,10,664,
        12,664,10353,9,664,1,665,1,665,1,665,5,665,10358,8,665,10,665,12,
        665,10361,9,665,1,666,1,666,1,666,5,666,10366,8,666,10,666,12,666,
        10369,9,666,1,667,1,667,1,667,1,667,1,667,3,667,10376,8,667,1,668,
        1,668,3,668,10380,8,668,1,669,1,669,1,669,5,669,10385,8,669,10,669,
        12,669,10388,9,669,1,670,1,670,1,670,1,670,1,670,3,670,10395,8,670,
        1,671,1,671,1,671,5,671,10400,8,671,10,671,12,671,10403,9,671,1,
        672,1,672,1,672,3,672,10408,8,672,1,672,1,672,1,673,1,673,1,673,
        5,673,10415,8,673,10,673,12,673,10418,9,673,1,674,1,674,1,674,1,
        674,1,675,1,675,1,675,1,675,1,675,1,675,1,675,1,675,3,675,10432,
        8,675,1,676,1,676,1,677,1,677,1,677,1,677,1,677,1,677,1,677,3,677,
        10443,8,677,1,678,1,678,1,678,1,678,1,679,1,679,1,679,1,679,1,679,
        1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,
        1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,
        3,679,10476,8,679,1,680,1,680,1,680,1,680,1,680,1,680,1,680,3,680,
        10485,8,680,1,681,1,681,1,681,1,681,1,681,3,681,10492,8,681,1,682,
        1,682,3,682,10496,8,682,1,682,1,682,3,682,10500,8,682,1,682,1,682,
        1,683,4,683,10505,8,683,11,683,12,683,10506,1,684,1,684,1,684,1,
        684,1,684,1,685,1,685,1,685,1,686,1,686,1,687,1,687,3,687,10521,
        8,687,1,688,1,688,1,688,3,688,10526,8,688,1,688,1,688,1,688,3,688,
        10531,8,688,1,688,1,688,3,688,10535,8,688,3,688,10537,8,688,1,688,
        3,688,10540,8,688,1,689,1,689,1,690,4,690,10545,8,690,11,690,12,
        690,10546,1,691,5,691,10550,8,691,10,691,12,691,10553,9,691,1,692,
        1,692,1,693,1,693,1,693,5,693,10560,8,693,10,693,12,693,10563,9,
        693,1,694,1,694,1,694,1,694,1,694,3,694,10570,8,694,1,694,3,694,
        10573,8,694,1,695,1,695,1,695,5,695,10578,8,695,10,695,12,695,10581,
        9,695,1,696,1,696,1,696,5,696,10586,8,696,10,696,12,696,10589,9,
        696,1,697,1,697,1,697,5,697,10594,8,697,10,697,12,697,10597,9,697,
        1,698,1,698,1,698,5,698,10602,8,698,10,698,12,698,10605,9,698,1,
        699,1,699,1,699,5,699,10610,8,699,10,699,12,699,10613,9,699,1,700,
        1,700,3,700,10617,8,700,1,701,1,701,3,701,10621,8,701,1,702,1,702,
        3,702,10625,8,702,1,703,1,703,3,703,10629,8,703,1,704,1,704,3,704,
        10633,8,704,1,705,1,705,3,705,10637,8,705,1,706,1,706,3,706,10641,
        8,706,1,707,1,707,1,707,5,707,10646,8,707,10,707,12,707,10649,9,
        707,1,708,1,708,1,708,5,708,10654,8,708,10,708,12,708,10657,9,708,
        1,709,1,709,3,709,10661,8,709,1,710,1,710,3,710,10665,8,710,1,711,
        1,711,3,711,10669,8,711,1,712,1,712,1,713,1,713,1,714,1,714,1,714,
        1,714,3,714,10679,8,714,1,715,1,715,1,715,1,715,3,715,10685,8,715,
        1,716,1,716,5,716,10689,8,716,10,716,12,716,10692,9,716,1,716,3,
        716,10695,8,716,1,717,1,717,1,718,1,718,1,719,1,719,1,720,1,720,
        1,721,1,721,1,721,1,721,3,721,10709,8,721,1,722,1,722,1,722,1,722,
        3,722,10715,8,722,1,723,1,723,1,723,1,723,3,723,10721,8,723,1,724,
        1,724,1,724,1,724,1,724,1,724,1,724,1,724,1,724,1,724,3,724,10733,
        8,724,1,724,1,724,1,724,3,724,10738,8,724,1,724,1,724,1,724,1,724,
        1,724,1,724,3,724,10746,8,724,1,724,1,724,1,724,1,724,1,724,3,724,
        10753,8,724,1,724,1,724,1,724,3,724,10758,8,724,1,725,1,725,1,726,
        1,726,1,727,1,727,1,728,1,728,1,729,1,729,3,729,10770,8,729,1,730,
        1,730,1,730,1,730,5,730,10776,8,730,10,730,12,730,10779,9,730,1,
        730,1,730,3,730,10783,8,730,1,731,1,731,1,731,1,732,1,732,1,732,
        1,732,1,732,3,732,10793,8,732,1,733,1,733,1,734,1,734,1,735,1,735,
        1,735,1,735,1,735,3,735,10804,8,735,1,736,1,736,1,736,5,736,10809,
        8,736,10,736,12,736,10812,9,736,1,737,1,737,1,737,1,737,3,737,10818,
        8,737,1,738,1,738,1,739,1,739,1,739,1,739,1,739,1,739,1,739,3,739,
        10829,8,739,1,739,3,739,10832,8,739,3,739,10834,8,739,1,740,1,740,
        3,740,10838,8,740,1,740,3,740,10841,8,740,1,741,1,741,1,741,1,741,
        3,741,10847,8,741,1,742,1,742,1,742,1,742,3,742,10853,8,742,1,743,
        1,743,3,743,10857,8,743,1,744,1,744,1,744,1,744,3,744,10863,8,744,
        1,745,1,745,1,745,1,745,1,745,1,745,3,745,10871,8,745,1,746,1,746,
        3,746,10875,8,746,1,746,1,746,1,746,1,746,1,746,1,746,3,746,10883,
        8,746,1,747,1,747,1,748,1,748,1,749,1,749,1,749,1,749,1,749,1,749,
        1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,
        1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,
        1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,
        1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,1,749,
        1,749,3,749,10940,8,749,1,750,1,750,1,751,1,751,1,752,1,752,1,752,
        1,752,1,753,5,753,10951,8,753,10,753,12,753,10954,9,753,1,754,1,
        754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,
        1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,3,754,10976,8,754,
        1,755,1,755,1,756,1,756,1,756,1,756,3,756,10984,8,756,1,757,1,757,
        3,757,10988,8,757,1,758,1,758,1,758,1,758,1,758,1,758,1,758,1,759,
        1,759,1,759,3,759,11000,8,759,3,759,11002,8,759,1,760,1,760,1,761,
        4,761,11007,8,761,11,761,12,761,11008,1,762,1,762,1,762,1,762,1,
        763,1,763,1,763,3,763,11018,8,763,1,764,1,764,1,764,1,764,1,764,
        1,764,1,764,1,764,1,764,1,764,1,764,1,764,1,764,1,764,1,764,1,764,
        3,764,11036,8,764,1,764,1,764,1,765,1,765,1,765,1,765,3,765,11044,
        8,765,1,766,1,766,1,767,1,767,1,767,1,767,1,767,3,767,11053,8,767,
        1,768,1,768,1,768,5,768,11058,8,768,10,768,12,768,11061,9,768,1,
        769,1,769,1,769,1,770,1,770,1,771,1,771,3,771,11070,8,771,1,772,
        1,772,1,773,1,773,3,773,11076,8,773,1,774,1,774,1,775,1,775,1,775,
        3,775,11083,8,775,1,776,1,776,1,776,3,776,11088,8,776,1,777,1,777,
        1,777,1,777,3,777,11094,8,777,1,778,1,778,3,778,11098,8,778,1,779,
        1,779,1,780,5,780,11103,8,780,10,780,12,780,11106,9,780,1,781,1,
        781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,
        1,781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,1,781,
        1,781,1,781,1,781,1,781,3,781,11135,8,781,1,782,1,782,1,782,1,782,
        1,783,1,783,1,783,1,783,1,783,1,783,1,783,3,783,11148,8,783,1,783,
        1,783,1,783,1,783,1,783,1,783,1,783,3,783,11157,8,783,1,784,1,784,
        3,784,11161,8,784,1,785,1,785,1,785,1,785,1,785,1,786,1,786,1,786,
        1,786,1,786,1,786,1,787,1,787,1,787,3,787,11177,8,787,1,788,1,788,
        1,788,5,788,11182,8,788,10,788,12,788,11185,9,788,1,789,1,789,1,
        789,1,789,1,790,1,790,1,791,1,791,1,792,1,792,3,792,11197,8,792,
        1,792,1,792,1,792,1,792,5,792,11203,8,792,10,792,12,792,11206,9,
        792,1,793,1,793,1,793,1,793,1,793,1,793,1,793,1,793,1,793,1,793,
        1,794,1,794,1,794,1,794,1,794,5,794,11223,8,794,10,794,12,794,11226,
        9,794,1,795,1,795,1,795,3,795,11231,8,795,1,796,1,796,1,796,1,796,
        1,796,1,796,1,796,1,796,1,797,1,797,3,797,11243,8,797,1,798,4,798,
        11246,8,798,11,798,12,798,11247,1,799,1,799,1,799,1,799,1,799,1,
        800,1,800,1,800,3,800,11258,8,800,1,801,1,801,1,801,1,802,1,802,
        1,802,1,802,1,802,1,803,1,803,1,803,1,803,1,803,1,804,1,804,1,804,
        1,804,1,804,1,804,1,804,1,804,1,804,1,804,1,804,1,804,1,804,1,804,
        1,804,1,804,1,804,3,804,11290,8,804,1,805,1,805,1,805,3,805,11295,
        8,805,1,806,1,806,1,806,1,806,1,806,5,806,11302,8,806,10,806,12,
        806,11305,9,806,1,806,1,806,3,806,11309,8,806,1,807,1,807,3,807,
        11313,8,807,1,808,1,808,1,808,3,808,11318,8,808,1,809,1,809,1,810,
        1,810,1,810,1,810,1,810,1,810,1,810,1,810,1,810,1,811,1,811,1,811,
        3,811,11334,8,811,1,812,1,812,1,812,3,812,11339,8,812,1,812,1,812,
        1,813,1,813,1,814,1,814,1,814,1,814,1,814,1,814,1,814,1,814,1,814,
        3,814,11354,8,814,1,814,3,814,11357,8,814,1,814,1,814,1,815,1,815,
        3,815,11363,8,815,1,816,1,816,3,816,11367,8,816,1,816,1,816,1,816,
        1,816,1,816,1,816,1,816,3,816,11376,8,816,1,816,1,816,1,816,1,816,
        1,816,1,816,3,816,11384,8,816,1,816,1,816,1,816,1,816,1,816,1,816,
        1,816,3,816,11393,8,816,1,816,1,816,1,816,1,816,3,816,11399,8,816,
        1,817,1,817,1,818,1,818,1,818,4,818,11406,8,818,11,818,12,818,11407,
        3,818,11410,8,818,1,819,1,819,1,819,3,819,11415,8,819,1,820,1,820,
        1,820,1,820,1,821,1,821,1,821,5,821,11424,8,821,10,821,12,821,11427,
        9,821,1,822,1,822,1,822,1,822,1,822,1,823,1,823,1,823,3,823,11437,
        8,823,1,824,1,824,1,824,1,824,1,824,1,824,1,824,1,825,1,825,1,825,
        1,826,1,826,1,826,1,826,1,826,1,826,1,826,1,826,1,826,3,826,11458,
        8,826,1,826,1,826,1,827,1,827,1,827,3,827,11465,8,827,1,828,1,828,
        1,828,5,828,11470,8,828,10,828,12,828,11473,9,828,1,829,1,829,1,
        829,3,829,11478,8,829,1,829,3,829,11481,8,829,1,830,1,830,1,830,
        1,830,1,830,1,830,1,830,1,830,1,830,3,830,11492,8,830,1,830,1,830,
        1,830,1,830,1,830,3,830,11499,8,830,3,830,11501,8,830,1,830,1,830,
        1,831,1,831,1,831,1,831,1,831,3,831,11510,8,831,1,832,1,832,1,832,
        5,832,11515,8,832,10,832,12,832,11518,9,832,1,833,1,833,1,833,3,
        833,11523,8,833,1,834,1,834,1,834,1,834,3,834,11529,8,834,1,835,
        1,835,3,835,11533,8,835,1,836,1,836,3,836,11537,8,836,1,836,1,836,
        1,836,1,836,1,836,1,836,1,837,1,837,1,838,1,838,1,838,3,838,11550,
        8,838,1,839,1,839,1,839,1,839,1,839,1,839,1,839,1,839,1,839,1,839,
        1,839,1,839,1,839,3,839,11565,8,839,3,839,11567,8,839,1,840,1,840,
        3,840,11571,8,840,1,840,1,840,1,840,1,841,3,841,11577,8,841,1,841,
        1,841,1,841,3,841,11582,8,841,1,841,1,841,3,841,11586,8,841,1,841,
        3,841,11589,8,841,1,841,3,841,11592,8,841,1,841,1,841,1,841,1,841,
        1,841,4,841,11599,8,841,11,841,12,841,11600,1,842,3,842,11604,8,
        842,1,842,1,842,3,842,11608,8,842,1,842,1,842,3,842,11612,8,842,
        3,842,11614,8,842,1,842,3,842,11617,8,842,1,842,3,842,11620,8,842,
        1,843,1,843,1,844,1,844,1,844,1,844,3,844,11628,8,844,1,844,1,844,
        1,844,1,844,1,844,3,844,11635,8,844,1,844,1,844,1,844,1,844,1,844,
        3,844,11642,8,844,1,844,1,844,1,844,1,844,3,844,11648,8,844,3,844,
        11650,8,844,1,845,1,845,1,845,1,845,1,845,3,845,11657,8,845,1,845,
        1,845,1,845,3,845,11662,8,845,1,845,1,845,1,846,1,846,1,846,1,846,
        1,846,1,846,1,846,1,846,1,846,1,846,1,846,1,846,1,846,1,846,4,846,
        11680,8,846,11,846,12,846,11681,1,847,1,847,1,847,1,847,3,847,11688,
        8,847,1,848,1,848,1,848,1,848,5,848,11694,8,848,10,848,12,848,11697,
        9,848,1,848,1,848,1,849,1,849,3,849,11703,8,849,1,850,1,850,1,850,
        1,850,1,851,1,851,1,851,1,852,1,852,3,852,11714,8,852,1,852,1,852,
        1,853,1,853,3,853,11720,8,853,1,853,1,853,1,854,1,854,3,854,11726,
        8,854,1,854,1,854,1,855,1,855,1,855,1,855,1,855,1,855,1,855,1,855,
        1,855,3,855,11739,8,855,1,855,3,855,11742,8,855,1,856,1,856,3,856,
        11746,8,856,1,857,1,857,1,857,3,857,11751,8,857,1,858,4,858,11754,
        8,858,11,858,12,858,11755,1,859,1,859,1,859,1,859,1,859,1,860,1,
        860,1,860,5,860,11766,8,860,10,860,12,860,11769,9,860,1,861,1,861,
        1,861,3,861,11774,8,861,1,862,1,862,3,862,11778,8,862,1,863,1,863,
        3,863,11782,8,863,1,864,1,864,3,864,11786,8,864,1,865,1,865,1,865,
        1,866,1,866,3,866,11793,8,866,1,867,1,867,1,868,3,868,11798,8,868,
        1,868,3,868,11801,8,868,1,868,3,868,11804,8,868,1,868,3,868,11807,
        8,868,1,868,3,868,11810,8,868,1,868,3,868,11813,8,868,1,868,3,868,
        11816,8,868,1,869,1,869,1,870,1,870,1,871,1,871,1,872,1,872,1,873,
        1,873,3,873,11828,8,873,1,874,1,874,1,874,1,874,1,874,0,1,1252,875,
        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,834,836,838,840,842,844,846,848,850,852,854,856,858,860,
        862,864,866,868,870,872,874,876,878,880,882,884,886,888,890,892,
        894,896,898,900,902,904,906,908,910,912,914,916,918,920,922,924,
        926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,
        958,960,962,964,966,968,970,972,974,976,978,980,982,984,986,988,
        990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,
        1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,
        1044,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,
        1070,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,
        1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,
        1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,
        1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,
        1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,
        1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,
        1226,1228,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,
        1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,
        1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,
        1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,
        1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,
        1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,
        1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,
        1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,
        1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,
        1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,
        1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,
        1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,
        1538,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,
        1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,
        1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,
        1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,
        1642,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,
        1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,
        1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,
        1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,
        1746,1748,0,87,2,0,195,195,364,364,1,0,228,229,1,0,236,237,1,0,234,
        235,1,0,232,233,1,0,230,231,1,0,535,536,1,0,537,538,1,0,539,540,
        2,0,66,66,318,318,2,0,99,99,318,318,1,0,529,531,2,0,10,10,94,94,
        2,0,133,133,191,191,2,0,254,254,332,332,2,0,162,162,363,363,2,0,
        180,180,221,221,5,0,30,30,288,288,329,329,352,352,354,354,2,0,109,
        109,532,532,2,0,367,367,439,439,2,0,139,139,312,312,2,0,191,191,
        333,333,2,0,313,313,333,333,2,0,150,150,315,315,2,0,64,64,94,94,
        2,0,352,352,354,354,2,0,200,200,224,224,9,0,30,30,160,160,165,165,
        179,179,219,219,227,227,342,342,345,345,438,438,3,0,113,113,284,
        284,336,336,2,0,53,53,78,78,3,0,173,173,260,260,262,262,2,0,9,9,
        94,94,5,0,30,30,88,88,182,182,241,241,369,369,2,0,92,92,226,226,
        2,0,341,341,414,414,1,0,448,449,2,0,92,92,414,414,2,0,135,135,145,
        145,3,0,66,66,99,99,318,318,4,0,163,163,185,185,283,283,353,353,
        3,0,321,321,357,357,445,445,2,0,167,167,314,314,2,0,64,64,68,68,
        10,0,46,46,88,88,182,182,202,202,241,241,352,352,354,354,357,358,
        369,369,521,523,5,0,212,212,329,329,350,350,361,361,455,456,2,0,
        37,37,55,55,2,0,10,10,53,53,4,0,88,88,182,182,241,241,369,369,2,
        0,137,137,242,242,2,0,356,356,380,380,2,0,151,151,254,254,1,0,31,
        32,2,0,60,60,96,96,2,0,99,99,349,349,2,0,201,201,334,334,1,0,527,
        528,2,0,213,213,254,254,2,0,30,30,56,56,2,0,320,320,414,414,2,0,
        207,207,268,268,4,0,113,113,115,115,119,119,126,126,2,0,360,360,
        477,477,2,0,391,392,406,406,1,0,391,392,1,0,418,419,1,0,18,19,2,
        0,117,117,122,122,5,0,10,10,16,17,21,21,23,23,25,25,1,0,12,13,3,
        0,9,9,14,14,27,27,3,0,39,39,73,73,95,95,2,0,166,166,188,188,2,0,
        304,304,450,450,2,0,208,208,289,289,3,0,30,30,34,34,90,90,6,0,9,
        10,12,17,21,21,23,23,25,25,27,27,2,0,20,20,22,22,1,0,483,486,10,
        0,124,124,129,228,238,386,433,452,455,469,471,471,473,473,475,475,
        478,488,547,548,3,0,106,123,125,128,472,472,4,0,30,52,54,70,72,105,
        454,454,2,0,62,62,116,116,2,0,10,10,20,20,2,0,167,167,507,507,1,
        0,512,517,2,0,144,144,210,210,37,0,33,33,35,35,43,43,45,45,53,53,
        57,57,61,61,92,92,116,116,123,123,130,130,144,144,153,153,157,157,
        161,161,167,167,172,172,207,207,210,210,241,241,249,249,265,265,
        268,269,279,279,293,293,307,307,313,313,319,319,323,324,333,333,
        360,360,433,434,477,477,490,502,504,504,506,518,520,520,13157,0,
        1753,1,0,0,0,2,1758,1,0,0,0,4,1760,1,0,0,0,6,1881,1,0,0,0,8,1883,
        1,0,0,0,10,1887,1,0,0,0,12,1890,1,0,0,0,14,1898,1,0,0,0,16,1903,
        1,0,0,0,18,1909,1,0,0,0,20,1947,1,0,0,0,22,1959,1,0,0,0,24,1961,
        1,0,0,0,26,1969,1,0,0,0,28,1981,1,0,0,0,30,1983,1,0,0,0,32,1992,
        1,0,0,0,34,2020,1,0,0,0,36,2022,1,0,0,0,38,2070,1,0,0,0,40,2072,
        1,0,0,0,42,2080,1,0,0,0,44,2087,1,0,0,0,46,2089,1,0,0,0,48,2104,
        1,0,0,0,50,2111,1,0,0,0,52,2120,1,0,0,0,54,2122,1,0,0,0,56,2136,
        1,0,0,0,58,2140,1,0,0,0,60,2176,1,0,0,0,62,2178,1,0,0,0,64,2186,
        1,0,0,0,66,2196,1,0,0,0,68,2203,1,0,0,0,70,2209,1,0,0,0,72,2215,
        1,0,0,0,74,2233,1,0,0,0,76,2237,1,0,0,0,78,2241,1,0,0,0,80,2245,
        1,0,0,0,82,2247,1,0,0,0,84,2258,1,0,0,0,86,2262,1,0,0,0,88,2267,
        1,0,0,0,90,2272,1,0,0,0,92,2274,1,0,0,0,94,2286,1,0,0,0,96,2293,
        1,0,0,0,98,2295,1,0,0,0,100,2297,1,0,0,0,102,2299,1,0,0,0,104,2435,
        1,0,0,0,106,2437,1,0,0,0,108,2454,1,0,0,0,110,2456,1,0,0,0,112,2470,
        1,0,0,0,114,2472,1,0,0,0,116,2488,1,0,0,0,118,2490,1,0,0,0,120,2711,
        1,0,0,0,122,2718,1,0,0,0,124,2720,1,0,0,0,126,2722,1,0,0,0,128,2725,
        1,0,0,0,130,2734,1,0,0,0,132,2736,1,0,0,0,134,2740,1,0,0,0,136,2743,
        1,0,0,0,138,2751,1,0,0,0,140,2763,1,0,0,0,142,2780,1,0,0,0,144,2808,
        1,0,0,0,146,2810,1,0,0,0,148,2813,1,0,0,0,150,2821,1,0,0,0,152,2826,
        1,0,0,0,154,2863,1,0,0,0,156,2865,1,0,0,0,158,2907,1,0,0,0,160,2909,
        1,0,0,0,162,2911,1,0,0,0,164,2916,1,0,0,0,166,2923,1,0,0,0,168,2928,
        1,0,0,0,170,2970,1,0,0,0,172,2972,1,0,0,0,174,2975,1,0,0,0,176,2980,
        1,0,0,0,178,2982,1,0,0,0,180,2990,1,0,0,0,182,3001,1,0,0,0,184,3003,
        1,0,0,0,186,3011,1,0,0,0,188,3013,1,0,0,0,190,3096,1,0,0,0,192,3098,
        1,0,0,0,194,3100,1,0,0,0,196,3102,1,0,0,0,198,3106,1,0,0,0,200,3114,
        1,0,0,0,202,3125,1,0,0,0,204,3129,1,0,0,0,206,3131,1,0,0,0,208,3152,
        1,0,0,0,210,3155,1,0,0,0,212,3164,1,0,0,0,214,3174,1,0,0,0,216,3195,
        1,0,0,0,218,3255,1,0,0,0,220,3257,1,0,0,0,222,3266,1,0,0,0,224,3271,
        1,0,0,0,226,3273,1,0,0,0,228,3276,1,0,0,0,230,3284,1,0,0,0,232,3287,
        1,0,0,0,234,3294,1,0,0,0,236,3382,1,0,0,0,238,3384,1,0,0,0,240,3387,
        1,0,0,0,242,3391,1,0,0,0,244,3395,1,0,0,0,246,3403,1,0,0,0,248,3411,
        1,0,0,0,250,3416,1,0,0,0,252,3419,1,0,0,0,254,3427,1,0,0,0,256,3437,
        1,0,0,0,258,3450,1,0,0,0,260,3452,1,0,0,0,262,3456,1,0,0,0,264,3469,
        1,0,0,0,266,3471,1,0,0,0,268,3476,1,0,0,0,270,3478,1,0,0,0,272,3485,
        1,0,0,0,274,3516,1,0,0,0,276,3518,1,0,0,0,278,3527,1,0,0,0,280,3529,
        1,0,0,0,282,3538,1,0,0,0,284,3542,1,0,0,0,286,3550,1,0,0,0,288,3555,
        1,0,0,0,290,3559,1,0,0,0,292,3578,1,0,0,0,294,3588,1,0,0,0,296,3602,
        1,0,0,0,298,3618,1,0,0,0,300,3624,1,0,0,0,302,3639,1,0,0,0,304,3652,
        1,0,0,0,306,3654,1,0,0,0,308,3664,1,0,0,0,310,3676,1,0,0,0,312,3684,
        1,0,0,0,314,3686,1,0,0,0,316,3691,1,0,0,0,318,3729,1,0,0,0,320,3731,
        1,0,0,0,322,3739,1,0,0,0,324,3741,1,0,0,0,326,3749,1,0,0,0,328,3771,
        1,0,0,0,330,3773,1,0,0,0,332,3777,1,0,0,0,334,3784,1,0,0,0,336,3786,
        1,0,0,0,338,3788,1,0,0,0,340,3790,1,0,0,0,342,3801,1,0,0,0,344,3804,
        1,0,0,0,346,3818,1,0,0,0,348,3828,1,0,0,0,350,3830,1,0,0,0,352,3839,
        1,0,0,0,354,3842,1,0,0,0,356,3947,1,0,0,0,358,3949,1,0,0,0,360,3968,
        1,0,0,0,362,3971,1,0,0,0,364,3975,1,0,0,0,366,3994,1,0,0,0,368,3996,
        1,0,0,0,370,4001,1,0,0,0,372,4009,1,0,0,0,374,4014,1,0,0,0,376,4029,
        1,0,0,0,378,4031,1,0,0,0,380,4034,1,0,0,0,382,4036,1,0,0,0,384,4038,
        1,0,0,0,386,4057,1,0,0,0,388,4060,1,0,0,0,390,4065,1,0,0,0,392,4067,
        1,0,0,0,394,4116,1,0,0,0,396,4118,1,0,0,0,398,4136,1,0,0,0,400,4138,
        1,0,0,0,402,4143,1,0,0,0,404,4158,1,0,0,0,406,4160,1,0,0,0,408,4169,
        1,0,0,0,410,4189,1,0,0,0,412,4203,1,0,0,0,414,4237,1,0,0,0,416,4267,
        1,0,0,0,418,4269,1,0,0,0,420,4274,1,0,0,0,422,4280,1,0,0,0,424,4283,
        1,0,0,0,426,4286,1,0,0,0,428,4292,1,0,0,0,430,4295,1,0,0,0,432,4297,
        1,0,0,0,434,4306,1,0,0,0,436,4362,1,0,0,0,438,4368,1,0,0,0,440,4370,
        1,0,0,0,442,4376,1,0,0,0,444,4378,1,0,0,0,446,4393,1,0,0,0,448,4395,
        1,0,0,0,450,4399,1,0,0,0,452,4403,1,0,0,0,454,4410,1,0,0,0,456,4412,
        1,0,0,0,458,4414,1,0,0,0,460,4416,1,0,0,0,462,4422,1,0,0,0,464,4424,
        1,0,0,0,466,4426,1,0,0,0,468,4435,1,0,0,0,470,4439,1,0,0,0,472,4452,
        1,0,0,0,474,4454,1,0,0,0,476,4460,1,0,0,0,478,4474,1,0,0,0,480,4500,
        1,0,0,0,482,4502,1,0,0,0,484,4510,1,0,0,0,486,4516,1,0,0,0,488,4524,
        1,0,0,0,490,4535,1,0,0,0,492,4537,1,0,0,0,494,4649,1,0,0,0,496,4651,
        1,0,0,0,498,4655,1,0,0,0,500,4663,1,0,0,0,502,4674,1,0,0,0,504,4676,
        1,0,0,0,506,4680,1,0,0,0,508,4688,1,0,0,0,510,4692,1,0,0,0,512,4694,
        1,0,0,0,514,4724,1,0,0,0,516,4726,1,0,0,0,518,4730,1,0,0,0,520,4748,
        1,0,0,0,522,4787,1,0,0,0,524,4789,1,0,0,0,526,4791,1,0,0,0,528,4800,
        1,0,0,0,530,4802,1,0,0,0,532,4804,1,0,0,0,534,4829,1,0,0,0,536,4831,
        1,0,0,0,538,4851,1,0,0,0,540,4853,1,0,0,0,542,5239,1,0,0,0,544,5241,
        1,0,0,0,546,5273,1,0,0,0,548,5306,1,0,0,0,550,5308,1,0,0,0,552,5310,
        1,0,0,0,554,5318,1,0,0,0,556,5322,1,0,0,0,558,5326,1,0,0,0,560,5332,
        1,0,0,0,562,5336,1,0,0,0,564,5344,1,0,0,0,566,5364,1,0,0,0,568,5535,
        1,0,0,0,570,5539,1,0,0,0,572,5650,1,0,0,0,574,5652,1,0,0,0,576,5657,
        1,0,0,0,578,5663,1,0,0,0,580,5750,1,0,0,0,582,5752,1,0,0,0,584,5754,
        1,0,0,0,586,5756,1,0,0,0,588,5786,1,0,0,0,590,5804,1,0,0,0,592,5806,
        1,0,0,0,594,5814,1,0,0,0,596,5816,1,0,0,0,598,5840,1,0,0,0,600,5900,
        1,0,0,0,602,5902,1,0,0,0,604,5913,1,0,0,0,606,5915,1,0,0,0,608,5919,
        1,0,0,0,610,5952,1,0,0,0,612,5954,1,0,0,0,614,5958,1,0,0,0,616,5962,
        1,0,0,0,618,5971,1,0,0,0,620,5983,1,0,0,0,622,6015,1,0,0,0,624,6017,
        1,0,0,0,626,6019,1,0,0,0,628,6056,1,0,0,0,630,6058,1,0,0,0,632,6060,
        1,0,0,0,634,6062,1,0,0,0,636,6065,1,0,0,0,638,6096,1,0,0,0,640,6109,
        1,0,0,0,642,6111,1,0,0,0,644,6116,1,0,0,0,646,6124,1,0,0,0,648,6127,
        1,0,0,0,650,6129,1,0,0,0,652,6135,1,0,0,0,654,6137,1,0,0,0,656,6164,
        1,0,0,0,658,6175,1,0,0,0,660,6178,1,0,0,0,662,6184,1,0,0,0,664,6192,
        1,0,0,0,666,6208,1,0,0,0,668,6210,1,0,0,0,670,6226,1,0,0,0,672,6228,
        1,0,0,0,674,6244,1,0,0,0,676,6246,1,0,0,0,678,6252,1,0,0,0,680,6273,
        1,0,0,0,682,6282,1,0,0,0,684,6284,1,0,0,0,686,6286,1,0,0,0,688,6300,
        1,0,0,0,690,6302,1,0,0,0,692,6307,1,0,0,0,694,6309,1,0,0,0,696,6324,
        1,0,0,0,698,6332,1,0,0,0,700,6335,1,0,0,0,702,6344,1,0,0,0,704,6383,
        1,0,0,0,706,6410,1,0,0,0,708,6412,1,0,0,0,710,6424,1,0,0,0,712,6427,
        1,0,0,0,714,6430,1,0,0,0,716,6438,1,0,0,0,718,6450,1,0,0,0,720,6453,
        1,0,0,0,722,6457,1,0,0,0,724,6486,1,0,0,0,726,6488,1,0,0,0,728,6497,
        1,0,0,0,730,6528,1,0,0,0,732,6535,1,0,0,0,734,6540,1,0,0,0,736,6548,
        1,0,0,0,738,6551,1,0,0,0,740,6555,1,0,0,0,742,6562,1,0,0,0,744,6601,
        1,0,0,0,746,6607,1,0,0,0,748,6609,1,0,0,0,750,6612,1,0,0,0,752,6659,
        1,0,0,0,754,6677,1,0,0,0,756,6689,1,0,0,0,758,6706,1,0,0,0,760,6708,
        1,0,0,0,762,6716,1,0,0,0,764,6730,1,0,0,0,766,7123,1,0,0,0,768,7125,
        1,0,0,0,770,7197,1,0,0,0,772,7199,1,0,0,0,774,7386,1,0,0,0,776,7388,
        1,0,0,0,778,7396,1,0,0,0,780,7412,1,0,0,0,782,7419,1,0,0,0,784,7421,
        1,0,0,0,786,7614,1,0,0,0,788,7616,1,0,0,0,790,7625,1,0,0,0,792,7633,
        1,0,0,0,794,7673,1,0,0,0,796,7675,1,0,0,0,798,7685,1,0,0,0,800,7693,
        1,0,0,0,802,7773,1,0,0,0,804,7775,1,0,0,0,806,7801,1,0,0,0,808,7804,
        1,0,0,0,810,7820,1,0,0,0,812,7822,1,0,0,0,814,7824,1,0,0,0,816,7826,
        1,0,0,0,818,7828,1,0,0,0,820,7833,1,0,0,0,822,7836,1,0,0,0,824,7843,
        1,0,0,0,826,7910,1,0,0,0,828,7912,1,0,0,0,830,7924,1,0,0,0,832,7926,
        1,0,0,0,834,7936,1,0,0,0,836,7938,1,0,0,0,838,7944,1,0,0,0,840,7976,
        1,0,0,0,842,7983,1,0,0,0,844,7986,1,0,0,0,846,7995,1,0,0,0,848,7998,
        1,0,0,0,850,8002,1,0,0,0,852,8019,1,0,0,0,854,8021,1,0,0,0,856,8023,
        1,0,0,0,858,8039,1,0,0,0,860,8045,1,0,0,0,862,8053,1,0,0,0,864,8055,
        1,0,0,0,866,8061,1,0,0,0,868,8066,1,0,0,0,870,8075,1,0,0,0,872,8101,
        1,0,0,0,874,8103,1,0,0,0,876,8173,1,0,0,0,878,8175,1,0,0,0,880,8177,
        1,0,0,0,882,8208,1,0,0,0,884,8210,1,0,0,0,886,8221,1,0,0,0,888,8250,
        1,0,0,0,890,8266,1,0,0,0,892,8268,1,0,0,0,894,8276,1,0,0,0,896,8278,
        1,0,0,0,898,8284,1,0,0,0,900,8288,1,0,0,0,902,8290,1,0,0,0,904,8292,
        1,0,0,0,906,8303,1,0,0,0,908,8305,1,0,0,0,910,8309,1,0,0,0,912,8313,
        1,0,0,0,914,8318,1,0,0,0,916,8320,1,0,0,0,918,8322,1,0,0,0,920,8326,
        1,0,0,0,922,8330,1,0,0,0,924,8338,1,0,0,0,926,8358,1,0,0,0,928,8369,
        1,0,0,0,930,8371,1,0,0,0,932,8379,1,0,0,0,934,8385,1,0,0,0,936,8389,
        1,0,0,0,938,8391,1,0,0,0,940,8399,1,0,0,0,942,8407,1,0,0,0,944,8432,
        1,0,0,0,946,8434,1,0,0,0,948,8438,1,0,0,0,950,8447,1,0,0,0,952,8459,
        1,0,0,0,954,8468,1,0,0,0,956,8480,1,0,0,0,958,8482,1,0,0,0,960,8490,
        1,0,0,0,962,8493,1,0,0,0,964,8517,1,0,0,0,966,8519,1,0,0,0,968,8523,
        1,0,0,0,970,8537,1,0,0,0,972,8540,1,0,0,0,974,8551,1,0,0,0,976,8567,
        1,0,0,0,978,8569,1,0,0,0,980,8574,1,0,0,0,982,8577,1,0,0,0,984,8592,
        1,0,0,0,986,8618,1,0,0,0,988,8620,1,0,0,0,990,8623,1,0,0,0,992,8631,
        1,0,0,0,994,8639,1,0,0,0,996,8648,1,0,0,0,998,8656,1,0,0,0,1000,
        8660,1,0,0,0,1002,8670,1,0,0,0,1004,8701,1,0,0,0,1006,8705,1,0,0,
        0,1008,8752,1,0,0,0,1010,8767,1,0,0,0,1012,8769,1,0,0,0,1014,8773,
        1,0,0,0,1016,8779,1,0,0,0,1018,8787,1,0,0,0,1020,8804,1,0,0,0,1022,
        8812,1,0,0,0,1024,8829,1,0,0,0,1026,8831,1,0,0,0,1028,8833,1,0,0,
        0,1030,8842,1,0,0,0,1032,8860,1,0,0,0,1034,8862,1,0,0,0,1036,8864,
        1,0,0,0,1038,8866,1,0,0,0,1040,8874,1,0,0,0,1042,8876,1,0,0,0,1044,
        8878,1,0,0,0,1046,8882,1,0,0,0,1048,8890,1,0,0,0,1050,8911,1,0,0,
        0,1052,8913,1,0,0,0,1054,8915,1,0,0,0,1056,8921,1,0,0,0,1058,8938,
        1,0,0,0,1060,8947,1,0,0,0,1062,8949,1,0,0,0,1064,8956,1,0,0,0,1066,
        8960,1,0,0,0,1068,8962,1,0,0,0,1070,8964,1,0,0,0,1072,8966,1,0,0,
        0,1074,8973,1,0,0,0,1076,8990,1,0,0,0,1078,8992,1,0,0,0,1080,8995,
        1,0,0,0,1082,9000,1,0,0,0,1084,9005,1,0,0,0,1086,9011,1,0,0,0,1088,
        9018,1,0,0,0,1090,9020,1,0,0,0,1092,9023,1,0,0,0,1094,9027,1,0,0,
        0,1096,9034,1,0,0,0,1098,9046,1,0,0,0,1100,9049,1,0,0,0,1102,9063,
        1,0,0,0,1104,9066,1,0,0,0,1106,9135,1,0,0,0,1108,9159,1,0,0,0,1110,
        9168,1,0,0,0,1112,9182,1,0,0,0,1114,9184,1,0,0,0,1116,9195,1,0,0,
        0,1118,9218,1,0,0,0,1120,9221,1,0,0,0,1122,9266,1,0,0,0,1124,9268,
        1,0,0,0,1126,9276,1,0,0,0,1128,9284,1,0,0,0,1130,9291,1,0,0,0,1132,
        9299,1,0,0,0,1134,9316,1,0,0,0,1136,9318,1,0,0,0,1138,9322,1,0,0,
        0,1140,9330,1,0,0,0,1142,9335,1,0,0,0,1144,9338,1,0,0,0,1146,9341,
        1,0,0,0,1148,9348,1,0,0,0,1150,9350,1,0,0,0,1152,9358,1,0,0,0,1154,
        9363,1,0,0,0,1156,9384,1,0,0,0,1158,9392,1,0,0,0,1160,9402,1,0,0,
        0,1162,9414,1,0,0,0,1164,9416,1,0,0,0,1166,9430,1,0,0,0,1168,9450,
        1,0,0,0,1170,9459,1,0,0,0,1172,9477,1,0,0,0,1174,9483,1,0,0,0,1176,
        9485,1,0,0,0,1178,9492,1,0,0,0,1180,9520,1,0,0,0,1182,9522,1,0,0,
        0,1184,9528,1,0,0,0,1186,9532,1,0,0,0,1188,9534,1,0,0,0,1190,9542,
        1,0,0,0,1192,9546,1,0,0,0,1194,9553,1,0,0,0,1196,9570,1,0,0,0,1198,
        9572,1,0,0,0,1200,9574,1,0,0,0,1202,9584,1,0,0,0,1204,9592,1,0,0,
        0,1206,9619,1,0,0,0,1208,9621,1,0,0,0,1210,9628,1,0,0,0,1212,9631,
        1,0,0,0,1214,9633,1,0,0,0,1216,9637,1,0,0,0,1218,9645,1,0,0,0,1220,
        9653,1,0,0,0,1222,9661,1,0,0,0,1224,9670,1,0,0,0,1226,9674,1,0,0,
        0,1228,9678,1,0,0,0,1230,9704,1,0,0,0,1232,9718,1,0,0,0,1234,9738,
        1,0,0,0,1236,9748,1,0,0,0,1238,9752,1,0,0,0,1240,9760,1,0,0,0,1242,
        9768,1,0,0,0,1244,9774,1,0,0,0,1246,9778,1,0,0,0,1248,9785,1,0,0,
        0,1250,9790,1,0,0,0,1252,9805,1,0,0,0,1254,9885,1,0,0,0,1256,9887,
        1,0,0,0,1258,9889,1,0,0,0,1260,9928,1,0,0,0,1262,9932,1,0,0,0,1264,
        10118,1,0,0,0,1266,10125,1,0,0,0,1268,10137,1,0,0,0,1270,10139,1,
        0,0,0,1272,10144,1,0,0,0,1274,10152,1,0,0,0,1276,10157,1,0,0,0,1278,
        10163,1,0,0,0,1280,10180,1,0,0,0,1282,10182,1,0,0,0,1284,10185,1,
        0,0,0,1286,10191,1,0,0,0,1288,10197,1,0,0,0,1290,10200,1,0,0,0,1292,
        10208,1,0,0,0,1294,10212,1,0,0,0,1296,10217,1,0,0,0,1298,10232,1,
        0,0,0,1300,10234,1,0,0,0,1302,10253,1,0,0,0,1304,10261,1,0,0,0,1306,
        10270,1,0,0,0,1308,10272,1,0,0,0,1310,10293,1,0,0,0,1312,10295,1,
        0,0,0,1314,10302,1,0,0,0,1316,10308,1,0,0,0,1318,10312,1,0,0,0,1320,
        10314,1,0,0,0,1322,10322,1,0,0,0,1324,10330,1,0,0,0,1326,10344,1,
        0,0,0,1328,10346,1,0,0,0,1330,10354,1,0,0,0,1332,10362,1,0,0,0,1334,
        10375,1,0,0,0,1336,10379,1,0,0,0,1338,10381,1,0,0,0,1340,10394,1,
        0,0,0,1342,10396,1,0,0,0,1344,10404,1,0,0,0,1346,10411,1,0,0,0,1348,
        10419,1,0,0,0,1350,10431,1,0,0,0,1352,10433,1,0,0,0,1354,10435,1,
        0,0,0,1356,10444,1,0,0,0,1358,10475,1,0,0,0,1360,10484,1,0,0,0,1362,
        10491,1,0,0,0,1364,10493,1,0,0,0,1366,10504,1,0,0,0,1368,10508,1,
        0,0,0,1370,10513,1,0,0,0,1372,10516,1,0,0,0,1374,10518,1,0,0,0,1376,
        10539,1,0,0,0,1378,10541,1,0,0,0,1380,10544,1,0,0,0,1382,10551,1,
        0,0,0,1384,10554,1,0,0,0,1386,10556,1,0,0,0,1388,10572,1,0,0,0,1390,
        10574,1,0,0,0,1392,10582,1,0,0,0,1394,10590,1,0,0,0,1396,10598,1,
        0,0,0,1398,10606,1,0,0,0,1400,10614,1,0,0,0,1402,10618,1,0,0,0,1404,
        10622,1,0,0,0,1406,10626,1,0,0,0,1408,10630,1,0,0,0,1410,10634,1,
        0,0,0,1412,10638,1,0,0,0,1414,10642,1,0,0,0,1416,10650,1,0,0,0,1418,
        10658,1,0,0,0,1420,10662,1,0,0,0,1422,10666,1,0,0,0,1424,10670,1,
        0,0,0,1426,10672,1,0,0,0,1428,10678,1,0,0,0,1430,10684,1,0,0,0,1432,
        10694,1,0,0,0,1434,10696,1,0,0,0,1436,10698,1,0,0,0,1438,10700,1,
        0,0,0,1440,10702,1,0,0,0,1442,10708,1,0,0,0,1444,10714,1,0,0,0,1446,
        10720,1,0,0,0,1448,10757,1,0,0,0,1450,10759,1,0,0,0,1452,10761,1,
        0,0,0,1454,10763,1,0,0,0,1456,10765,1,0,0,0,1458,10767,1,0,0,0,1460,
        10782,1,0,0,0,1462,10784,1,0,0,0,1464,10792,1,0,0,0,1466,10794,1,
        0,0,0,1468,10796,1,0,0,0,1470,10803,1,0,0,0,1472,10805,1,0,0,0,1474,
        10817,1,0,0,0,1476,10819,1,0,0,0,1478,10833,1,0,0,0,1480,10837,1,
        0,0,0,1482,10846,1,0,0,0,1484,10852,1,0,0,0,1486,10856,1,0,0,0,1488,
        10862,1,0,0,0,1490,10870,1,0,0,0,1492,10882,1,0,0,0,1494,10884,1,
        0,0,0,1496,10886,1,0,0,0,1498,10939,1,0,0,0,1500,10941,1,0,0,0,1502,
        10943,1,0,0,0,1504,10945,1,0,0,0,1506,10952,1,0,0,0,1508,10975,1,
        0,0,0,1510,10977,1,0,0,0,1512,10983,1,0,0,0,1514,10987,1,0,0,0,1516,
        10989,1,0,0,0,1518,10996,1,0,0,0,1520,11003,1,0,0,0,1522,11006,1,
        0,0,0,1524,11010,1,0,0,0,1526,11017,1,0,0,0,1528,11019,1,0,0,0,1530,
        11043,1,0,0,0,1532,11045,1,0,0,0,1534,11052,1,0,0,0,1536,11054,1,
        0,0,0,1538,11062,1,0,0,0,1540,11065,1,0,0,0,1542,11069,1,0,0,0,1544,
        11071,1,0,0,0,1546,11075,1,0,0,0,1548,11077,1,0,0,0,1550,11082,1,
        0,0,0,1552,11087,1,0,0,0,1554,11093,1,0,0,0,1556,11097,1,0,0,0,1558,
        11099,1,0,0,0,1560,11104,1,0,0,0,1562,11134,1,0,0,0,1564,11136,1,
        0,0,0,1566,11156,1,0,0,0,1568,11160,1,0,0,0,1570,11162,1,0,0,0,1572,
        11167,1,0,0,0,1574,11176,1,0,0,0,1576,11178,1,0,0,0,1578,11186,1,
        0,0,0,1580,11190,1,0,0,0,1582,11192,1,0,0,0,1584,11196,1,0,0,0,1586,
        11207,1,0,0,0,1588,11224,1,0,0,0,1590,11230,1,0,0,0,1592,11232,1,
        0,0,0,1594,11242,1,0,0,0,1596,11245,1,0,0,0,1598,11249,1,0,0,0,1600,
        11257,1,0,0,0,1602,11259,1,0,0,0,1604,11262,1,0,0,0,1606,11267,1,
        0,0,0,1608,11272,1,0,0,0,1610,11294,1,0,0,0,1612,11308,1,0,0,0,1614,
        11312,1,0,0,0,1616,11317,1,0,0,0,1618,11319,1,0,0,0,1620,11321,1,
        0,0,0,1622,11333,1,0,0,0,1624,11335,1,0,0,0,1626,11342,1,0,0,0,1628,
        11344,1,0,0,0,1630,11362,1,0,0,0,1632,11398,1,0,0,0,1634,11400,1,
        0,0,0,1636,11409,1,0,0,0,1638,11414,1,0,0,0,1640,11416,1,0,0,0,1642,
        11420,1,0,0,0,1644,11428,1,0,0,0,1646,11436,1,0,0,0,1648,11438,1,
        0,0,0,1650,11445,1,0,0,0,1652,11448,1,0,0,0,1654,11464,1,0,0,0,1656,
        11466,1,0,0,0,1658,11480,1,0,0,0,1660,11482,1,0,0,0,1662,11509,1,
        0,0,0,1664,11511,1,0,0,0,1666,11522,1,0,0,0,1668,11528,1,0,0,0,1670,
        11532,1,0,0,0,1672,11534,1,0,0,0,1674,11544,1,0,0,0,1676,11549,1,
        0,0,0,1678,11566,1,0,0,0,1680,11568,1,0,0,0,1682,11576,1,0,0,0,1684,
        11613,1,0,0,0,1686,11621,1,0,0,0,1688,11649,1,0,0,0,1690,11651,1,
        0,0,0,1692,11665,1,0,0,0,1694,11687,1,0,0,0,1696,11689,1,0,0,0,1698,
        11702,1,0,0,0,1700,11704,1,0,0,0,1702,11708,1,0,0,0,1704,11711,1,
        0,0,0,1706,11717,1,0,0,0,1708,11723,1,0,0,0,1710,11741,1,0,0,0,1712,
        11745,1,0,0,0,1714,11750,1,0,0,0,1716,11753,1,0,0,0,1718,11757,1,
        0,0,0,1720,11762,1,0,0,0,1722,11773,1,0,0,0,1724,11777,1,0,0,0,1726,
        11781,1,0,0,0,1728,11785,1,0,0,0,1730,11787,1,0,0,0,1732,11792,1,
        0,0,0,1734,11794,1,0,0,0,1736,11797,1,0,0,0,1738,11817,1,0,0,0,1740,
        11819,1,0,0,0,1742,11821,1,0,0,0,1744,11823,1,0,0,0,1746,11825,1,
        0,0,0,1748,11829,1,0,0,0,1750,1752,3,4,2,0,1751,1750,1,0,0,0,1752,
        1755,1,0,0,0,1753,1751,1,0,0,0,1753,1754,1,0,0,0,1754,1756,1,0,0,
        0,1755,1753,1,0,0,0,1756,1757,5,0,0,1,1757,1,1,0,0,0,1758,1759,3,
        1504,752,0,1759,3,1,0,0,0,1760,1762,3,6,3,0,1761,1763,5,7,0,0,1762,
        1761,1,0,0,0,1762,1763,1,0,0,0,1763,5,1,0,0,0,1764,1882,3,488,244,
        0,1765,1882,3,864,432,0,1766,1882,3,856,428,0,1767,1882,3,858,429,
        0,1768,1882,3,616,308,0,1769,1882,3,870,435,0,1770,1882,3,514,257,
        0,1771,1882,3,350,175,0,1772,1882,3,356,178,0,1773,1882,3,366,183,
        0,1774,1882,3,392,196,0,1775,1882,3,716,358,0,1776,1882,3,42,21,
        0,1777,1882,3,770,385,0,1778,1882,3,774,387,0,1779,1882,3,786,393,
        0,1780,1882,3,776,388,0,1781,1882,3,784,392,0,1782,1882,3,410,205,
        0,1783,1882,3,412,206,0,1784,1882,3,310,155,0,1785,1882,3,866,433,
        0,1786,1882,3,104,52,0,1787,1882,3,764,382,0,1788,1882,3,150,75,
        0,1789,1882,3,794,397,0,1790,1882,3,30,15,0,1791,1882,3,32,16,0,
        1792,1882,3,26,13,0,1793,1882,3,802,401,0,1794,1882,3,292,146,0,
        1795,1882,3,876,438,0,1796,1882,3,874,437,0,1797,1882,3,406,203,
        0,1798,1882,3,890,445,0,1799,1882,3,10,5,0,1800,1882,3,100,50,0,
        1801,1882,3,156,78,0,1802,1882,3,882,441,0,1803,1882,3,568,284,0,
        1804,1882,3,94,47,0,1805,1882,3,158,79,0,1806,1882,3,432,216,0,1807,
        1882,3,294,147,0,1808,1882,3,492,246,0,1809,1882,3,744,372,0,1810,
        1882,3,880,440,0,1811,1882,3,868,434,0,1812,1882,3,344,172,0,1813,
        1882,3,358,179,0,1814,1882,3,384,192,0,1815,1882,3,394,197,0,1816,
        1882,3,654,327,0,1817,1882,3,40,20,0,1818,1882,3,300,150,0,1819,
        1882,3,518,259,0,1820,1882,3,532,266,0,1821,1882,3,788,394,0,1822,
        1882,3,534,267,0,1823,1882,3,408,204,0,1824,1882,3,326,163,0,1825,
        1882,3,46,23,0,1826,1882,3,308,154,0,1827,1882,3,188,94,0,1828,1882,
        3,796,398,0,1829,1882,3,290,145,0,1830,1882,3,340,170,0,1831,1882,
        3,750,375,0,1832,1882,3,436,218,0,1833,1882,3,480,240,0,1834,1882,
        3,12,6,0,1835,1882,3,24,12,0,1836,1882,3,402,201,0,1837,1882,3,844,
        422,0,1838,1882,3,948,474,0,1839,1882,3,992,496,0,1840,1882,3,494,
        247,0,1841,1882,3,968,484,0,1842,1882,3,102,51,0,1843,1882,3,738,
        369,0,1844,1882,3,542,271,0,1845,1882,3,944,472,0,1846,1882,3,926,
        463,0,1847,1882,3,578,289,0,1848,1882,3,586,293,0,1849,1882,3,608,
        304,0,1850,1882,3,1682,841,0,1851,1882,3,396,198,0,1852,1882,3,626,
        313,0,1853,1882,3,950,475,0,1854,1882,3,822,411,0,1855,1882,3,306,
        153,0,1856,1882,3,842,421,0,1857,1882,3,972,486,0,1858,1882,3,818,
        409,0,1859,1882,3,938,469,0,1860,1882,3,540,270,0,1861,1882,3,754,
        377,0,1862,1882,3,726,363,0,1863,1882,3,724,362,0,1864,1882,3,728,
        364,0,1865,1882,3,766,383,0,1866,1882,3,588,294,0,1867,1882,3,610,
        305,0,1868,1882,3,804,402,0,1869,1882,3,572,286,0,1870,1882,3,1000,
        500,0,1871,1882,3,826,413,0,1872,1882,3,564,282,0,1873,1882,3,824,
        412,0,1874,1882,3,982,491,0,1875,1882,3,888,444,0,1876,1882,3,82,
        41,0,1877,1882,3,54,27,0,1878,1882,3,92,46,0,1879,1882,3,838,419,
        0,1880,1882,3,8,4,0,1881,1764,1,0,0,0,1881,1765,1,0,0,0,1881,1766,
        1,0,0,0,1881,1767,1,0,0,0,1881,1768,1,0,0,0,1881,1769,1,0,0,0,1881,
        1770,1,0,0,0,1881,1771,1,0,0,0,1881,1772,1,0,0,0,1881,1773,1,0,0,
        0,1881,1774,1,0,0,0,1881,1775,1,0,0,0,1881,1776,1,0,0,0,1881,1777,
        1,0,0,0,1881,1778,1,0,0,0,1881,1779,1,0,0,0,1881,1780,1,0,0,0,1881,
        1781,1,0,0,0,1881,1782,1,0,0,0,1881,1783,1,0,0,0,1881,1784,1,0,0,
        0,1881,1785,1,0,0,0,1881,1786,1,0,0,0,1881,1787,1,0,0,0,1881,1788,
        1,0,0,0,1881,1789,1,0,0,0,1881,1790,1,0,0,0,1881,1791,1,0,0,0,1881,
        1792,1,0,0,0,1881,1793,1,0,0,0,1881,1794,1,0,0,0,1881,1795,1,0,0,
        0,1881,1796,1,0,0,0,1881,1797,1,0,0,0,1881,1798,1,0,0,0,1881,1799,
        1,0,0,0,1881,1800,1,0,0,0,1881,1801,1,0,0,0,1881,1802,1,0,0,0,1881,
        1803,1,0,0,0,1881,1804,1,0,0,0,1881,1805,1,0,0,0,1881,1806,1,0,0,
        0,1881,1807,1,0,0,0,1881,1808,1,0,0,0,1881,1809,1,0,0,0,1881,1810,
        1,0,0,0,1881,1811,1,0,0,0,1881,1812,1,0,0,0,1881,1813,1,0,0,0,1881,
        1814,1,0,0,0,1881,1815,1,0,0,0,1881,1816,1,0,0,0,1881,1817,1,0,0,
        0,1881,1818,1,0,0,0,1881,1819,1,0,0,0,1881,1820,1,0,0,0,1881,1821,
        1,0,0,0,1881,1822,1,0,0,0,1881,1823,1,0,0,0,1881,1824,1,0,0,0,1881,
        1825,1,0,0,0,1881,1826,1,0,0,0,1881,1827,1,0,0,0,1881,1828,1,0,0,
        0,1881,1829,1,0,0,0,1881,1830,1,0,0,0,1881,1831,1,0,0,0,1881,1832,
        1,0,0,0,1881,1833,1,0,0,0,1881,1834,1,0,0,0,1881,1835,1,0,0,0,1881,
        1836,1,0,0,0,1881,1837,1,0,0,0,1881,1838,1,0,0,0,1881,1839,1,0,0,
        0,1881,1840,1,0,0,0,1881,1841,1,0,0,0,1881,1842,1,0,0,0,1881,1843,
        1,0,0,0,1881,1844,1,0,0,0,1881,1845,1,0,0,0,1881,1846,1,0,0,0,1881,
        1847,1,0,0,0,1881,1848,1,0,0,0,1881,1849,1,0,0,0,1881,1850,1,0,0,
        0,1881,1851,1,0,0,0,1881,1852,1,0,0,0,1881,1853,1,0,0,0,1881,1854,
        1,0,0,0,1881,1855,1,0,0,0,1881,1856,1,0,0,0,1881,1857,1,0,0,0,1881,
        1858,1,0,0,0,1881,1859,1,0,0,0,1881,1860,1,0,0,0,1881,1861,1,0,0,
        0,1881,1862,1,0,0,0,1881,1863,1,0,0,0,1881,1864,1,0,0,0,1881,1865,
        1,0,0,0,1881,1866,1,0,0,0,1881,1867,1,0,0,0,1881,1868,1,0,0,0,1881,
        1869,1,0,0,0,1881,1870,1,0,0,0,1881,1871,1,0,0,0,1881,1872,1,0,0,
        0,1881,1873,1,0,0,0,1881,1874,1,0,0,0,1881,1875,1,0,0,0,1881,1876,
        1,0,0,0,1881,1877,1,0,0,0,1881,1878,1,0,0,0,1881,1879,1,0,0,0,1881,
        1880,1,0,0,0,1882,7,1,0,0,0,1883,1885,5,581,0,0,1884,1886,5,582,
        0,0,1885,1884,1,0,0,0,1885,1886,1,0,0,0,1886,9,1,0,0,0,1887,1888,
        5,433,0,0,1888,1889,3,1258,629,0,1889,11,1,0,0,0,1890,1891,5,46,
        0,0,1891,1892,5,318,0,0,1892,1894,3,1468,734,0,1893,1895,3,14,7,
        0,1894,1893,1,0,0,0,1894,1895,1,0,0,0,1895,1896,1,0,0,0,1896,1897,
        3,16,8,0,1897,13,1,0,0,0,1898,1899,5,105,0,0,1899,15,1,0,0,0,1900,
        1902,3,22,11,0,1901,1900,1,0,0,0,1902,1905,1,0,0,0,1903,1901,1,0,
        0,0,1903,1904,1,0,0,0,1904,17,1,0,0,0,1905,1903,1,0,0,0,1906,1908,
        3,20,10,0,1907,1906,1,0,0,0,1908,1911,1,0,0,0,1909,1907,1,0,0,0,
        1909,1910,1,0,0,0,1910,19,1,0,0,0,1911,1909,1,0,0,0,1912,1915,5,
        287,0,0,1913,1916,3,1458,729,0,1914,1916,5,78,0,0,1915,1913,1,0,
        0,0,1915,1914,1,0,0,0,1916,1948,1,0,0,0,1917,1918,7,0,0,0,1918,1919,
        5,287,0,0,1919,1948,3,1458,729,0,1920,1948,7,1,0,0,1921,1948,7,2,
        0,0,1922,1948,7,3,0,0,1923,1948,7,4,0,0,1924,1948,7,5,0,0,1925,1948,
        7,6,0,0,1926,1948,7,7,0,0,1927,1948,7,8,0,0,1928,1929,5,164,0,0,
        1929,1930,5,74,0,0,1930,1948,3,1464,732,0,1931,1932,5,371,0,0,1932,
        1933,5,368,0,0,1933,1948,3,1458,729,0,1934,1935,5,68,0,0,1935,1936,
        5,318,0,0,1936,1948,3,1416,708,0,1937,1938,5,68,0,0,1938,1939,5,
        66,0,0,1939,1948,3,1416,708,0,1940,1941,5,318,0,0,1941,1948,3,1472,
        736,0,1942,1943,5,134,0,0,1943,1948,3,1416,708,0,1944,1945,5,99,
        0,0,1945,1948,3,1472,736,0,1946,1948,3,1492,746,0,1947,1912,1,0,
        0,0,1947,1917,1,0,0,0,1947,1920,1,0,0,0,1947,1921,1,0,0,0,1947,1922,
        1,0,0,0,1947,1923,1,0,0,0,1947,1924,1,0,0,0,1947,1925,1,0,0,0,1947,
        1926,1,0,0,0,1947,1927,1,0,0,0,1947,1928,1,0,0,0,1947,1931,1,0,0,
        0,1947,1934,1,0,0,0,1947,1937,1,0,0,0,1947,1940,1,0,0,0,1947,1942,
        1,0,0,0,1947,1944,1,0,0,0,1947,1946,1,0,0,0,1948,21,1,0,0,0,1949,
        1960,3,20,10,0,1950,1951,5,348,0,0,1951,1960,3,1456,728,0,1952,1953,
        5,134,0,0,1953,1960,3,1472,736,0,1954,1955,5,318,0,0,1955,1960,3,
        1472,736,0,1956,1957,5,68,0,0,1957,1958,7,9,0,0,1958,1960,3,1472,
        736,0,1959,1949,1,0,0,0,1959,1950,1,0,0,0,1959,1952,1,0,0,0,1959,
        1954,1,0,0,0,1959,1956,1,0,0,0,1960,23,1,0,0,0,1961,1962,5,46,0,
        0,1962,1963,5,99,0,0,1963,1965,3,1468,734,0,1964,1966,3,14,7,0,1965,
        1964,1,0,0,0,1965,1966,1,0,0,0,1966,1967,1,0,0,0,1967,1968,3,16,
        8,0,1968,25,1,0,0,0,1969,1970,5,138,0,0,1970,1971,7,10,0,0,1971,
        1973,3,1470,735,0,1972,1974,3,14,7,0,1973,1972,1,0,0,0,1973,1974,
        1,0,0,0,1974,1975,1,0,0,0,1975,1976,3,18,9,0,1976,27,1,0,0,0,1977,
        1982,1,0,0,0,1978,1979,5,68,0,0,1979,1980,5,175,0,0,1980,1982,3,
        1420,710,0,1981,1977,1,0,0,0,1981,1978,1,0,0,0,1982,29,1,0,0,0,1983,
        1984,5,138,0,0,1984,1987,7,10,0,0,1985,1988,5,30,0,0,1986,1988,3,
        1470,735,0,1987,1985,1,0,0,0,1987,1986,1,0,0,0,1988,1989,1,0,0,0,
        1989,1990,3,28,14,0,1990,1991,3,88,44,0,1991,31,1,0,0,0,1992,1993,
        5,138,0,0,1993,1994,5,442,0,0,1994,1996,3,1426,713,0,1995,1997,3,
        660,330,0,1996,1995,1,0,0,0,1996,1997,1,0,0,0,1997,1998,1,0,0,0,
        1998,1999,3,34,17,0,1999,33,1,0,0,0,2000,2002,3,36,18,0,2001,2003,
        5,315,0,0,2002,2001,1,0,0,0,2002,2003,1,0,0,0,2003,2021,1,0,0,0,
        2004,2005,5,309,0,0,2005,2006,5,94,0,0,2006,2021,3,1424,712,0,2007,
        2008,5,282,0,0,2008,2009,5,94,0,0,2009,2021,3,1470,735,0,2010,2011,
        5,333,0,0,2011,2012,5,323,0,0,2012,2021,3,48,24,0,2013,2015,5,269,
        0,0,2014,2013,1,0,0,0,2014,2015,1,0,0,0,2015,2016,1,0,0,0,2016,2017,
        5,462,0,0,2017,2018,5,80,0,0,2018,2019,5,204,0,0,2019,2021,3,1436,
        718,0,2020,2000,1,0,0,0,2020,2004,1,0,0,0,2020,2007,1,0,0,0,2020,
        2010,1,0,0,0,2020,2014,1,0,0,0,2021,35,1,0,0,0,2022,2026,3,38,19,
        0,2023,2025,3,38,19,0,2024,2023,1,0,0,0,2025,2028,1,0,0,0,2026,2024,
        1,0,0,0,2026,2027,1,0,0,0,2027,37,1,0,0,0,2028,2026,1,0,0,0,2029,
        2071,5,222,0,0,2030,2071,5,338,0,0,2031,2071,5,377,0,0,2032,2034,
        5,77,0,0,2033,2032,1,0,0,0,2033,2034,1,0,0,0,2034,2035,1,0,0,0,2035,
        2071,5,250,0,0,2036,2038,5,205,0,0,2037,2036,1,0,0,0,2037,2038,1,
        0,0,0,2038,2039,1,0,0,0,2039,2040,5,327,0,0,2040,2047,5,243,0,0,
        2041,2043,5,205,0,0,2042,2041,1,0,0,0,2042,2043,1,0,0,0,2043,2044,
        1,0,0,0,2044,2045,5,327,0,0,2045,2047,5,181,0,0,2046,2037,1,0,0,
        0,2046,2042,1,0,0,0,2047,2071,1,0,0,0,2048,2049,5,460,0,0,2049,2071,
        7,11,0,0,2050,2051,5,170,0,0,2051,2071,3,1438,719,0,2052,2053,5,
        320,0,0,2053,2071,3,1436,718,0,2054,2055,5,333,0,0,2055,2056,3,1436,
        718,0,2056,2059,7,12,0,0,2057,2060,3,1436,718,0,2058,2060,5,53,0,
        0,2059,2057,1,0,0,0,2059,2058,1,0,0,0,2060,2071,1,0,0,0,2061,2062,
        5,333,0,0,2062,2063,3,1436,718,0,2063,2064,5,64,0,0,2064,2065,5,
        434,0,0,2065,2071,1,0,0,0,2066,2067,5,313,0,0,2067,2071,3,1436,718,
        0,2068,2069,5,313,0,0,2069,2071,5,30,0,0,2070,2029,1,0,0,0,2070,
        2030,1,0,0,0,2070,2031,1,0,0,0,2070,2033,1,0,0,0,2070,2046,1,0,0,
        0,2070,2048,1,0,0,0,2070,2050,1,0,0,0,2070,2052,1,0,0,0,2070,2054,
        1,0,0,0,2070,2061,1,0,0,0,2070,2066,1,0,0,0,2070,2068,1,0,0,0,2071,
        39,1,0,0,0,2072,2073,5,46,0,0,2073,2074,5,66,0,0,2074,2076,3,1466,
        733,0,2075,2077,3,14,7,0,2076,2075,1,0,0,0,2076,2077,1,0,0,0,2077,
        2078,1,0,0,0,2078,2079,3,16,8,0,2079,41,1,0,0,0,2080,2081,5,138,
        0,0,2081,2082,5,66,0,0,2082,2083,3,1470,735,0,2083,2084,3,44,22,
        0,2084,2085,5,99,0,0,2085,2086,3,1472,736,0,2086,43,1,0,0,0,2087,
        2088,7,13,0,0,2088,45,1,0,0,0,2089,2090,5,46,0,0,2090,2092,5,323,
        0,0,2091,2093,3,516,258,0,2092,2091,1,0,0,0,2092,2093,1,0,0,0,2093,
        2100,1,0,0,0,2094,2096,3,48,24,0,2095,2094,1,0,0,0,2095,2096,1,0,
        0,0,2096,2097,1,0,0,0,2097,2098,5,106,0,0,2098,2101,3,1470,735,0,
        2099,2101,3,48,24,0,2100,2095,1,0,0,0,2100,2099,1,0,0,0,2101,2102,
        1,0,0,0,2102,2103,3,50,25,0,2103,47,1,0,0,0,2104,2106,3,1474,737,
        0,2105,2107,3,560,280,0,2106,2105,1,0,0,0,2106,2107,1,0,0,0,2107,
        49,1,0,0,0,2108,2110,3,52,26,0,2109,2108,1,0,0,0,2110,2113,1,0,0,
        0,2111,2109,1,0,0,0,2111,2112,1,0,0,0,2112,51,1,0,0,0,2113,2111,
        1,0,0,0,2114,2121,3,188,94,0,2115,2121,3,626,313,0,2116,2121,3,308,
        154,0,2117,2121,3,436,218,0,2118,2121,3,586,293,0,2119,2121,3,838,
        419,0,2120,2114,1,0,0,0,2120,2115,1,0,0,0,2120,2116,1,0,0,0,2120,
        2117,1,0,0,0,2120,2118,1,0,0,0,2120,2119,1,0,0,0,2121,53,1,0,0,0,
        2122,2124,5,333,0,0,2123,2125,7,14,0,0,2124,2123,1,0,0,0,2124,2125,
        1,0,0,0,2125,2126,1,0,0,0,2126,2127,3,56,28,0,2127,55,1,0,0,0,2128,
        2129,5,356,0,0,2129,2137,3,832,416,0,2130,2131,5,332,0,0,2131,2132,
        5,154,0,0,2132,2133,5,36,0,0,2133,2134,5,356,0,0,2134,2137,3,832,
        416,0,2135,2137,3,60,30,0,2136,2128,1,0,0,0,2136,2130,1,0,0,0,2136,
        2135,1,0,0,0,2137,57,1,0,0,0,2138,2141,5,30,0,0,2139,2141,3,62,31,
        0,2140,2138,1,0,0,0,2140,2139,1,0,0,0,2141,2143,1,0,0,0,2142,2144,
        7,12,0,0,2143,2142,1,0,0,0,2143,2144,1,0,0,0,2144,2147,1,0,0,0,2145,
        2148,5,53,0,0,2146,2148,3,64,32,0,2147,2145,1,0,0,0,2147,2146,1,
        0,0,0,2147,2148,1,0,0,0,2148,59,1,0,0,0,2149,2150,5,418,0,0,2150,
        2151,5,386,0,0,2151,2177,3,74,37,0,2152,2153,5,152,0,0,2153,2177,
        3,1458,729,0,2154,2155,5,323,0,0,2155,2177,3,1422,711,0,2156,2158,
        5,267,0,0,2157,2159,3,76,38,0,2158,2157,1,0,0,0,2158,2159,1,0,0,
        0,2159,2177,1,0,0,0,2160,2161,5,318,0,0,2161,2177,3,80,40,0,2162,
        2163,5,332,0,0,2163,2164,5,106,0,0,2164,2177,3,80,40,0,2165,2166,
        5,383,0,0,2166,2167,5,279,0,0,2167,2177,3,1276,638,0,2168,2169,5,
        356,0,0,2169,2170,5,337,0,0,2170,2177,3,1458,729,0,2171,2172,3,62,
        31,0,2172,2173,5,64,0,0,2173,2174,5,434,0,0,2174,2177,1,0,0,0,2175,
        2177,3,58,29,0,2176,2149,1,0,0,0,2176,2152,1,0,0,0,2176,2154,1,0,
        0,0,2176,2156,1,0,0,0,2176,2160,1,0,0,0,2176,2162,1,0,0,0,2176,2165,
        1,0,0,0,2176,2168,1,0,0,0,2176,2171,1,0,0,0,2176,2175,1,0,0,0,2177,
        61,1,0,0,0,2178,2183,3,1474,737,0,2179,2180,5,11,0,0,2180,2182,3,
        1474,737,0,2181,2179,1,0,0,0,2182,2185,1,0,0,0,2183,2181,1,0,0,0,
        2183,2184,1,0,0,0,2184,63,1,0,0,0,2185,2183,1,0,0,0,2186,2191,3,
        66,33,0,2187,2188,5,6,0,0,2188,2190,3,66,33,0,2189,2187,1,0,0,0,
        2190,2193,1,0,0,0,2191,2189,1,0,0,0,2191,2192,1,0,0,0,2192,65,1,
        0,0,0,2193,2191,1,0,0,0,2194,2197,3,72,36,0,2195,2197,3,322,161,
        0,2196,2194,1,0,0,0,2196,2195,1,0,0,0,2197,67,1,0,0,0,2198,2199,
        5,300,0,0,2199,2204,7,15,0,0,2200,2201,5,310,0,0,2201,2204,5,300,
        0,0,2202,2204,5,330,0,0,2203,2198,1,0,0,0,2203,2200,1,0,0,0,2203,
        2202,1,0,0,0,2204,69,1,0,0,0,2205,2210,5,96,0,0,2206,2210,5,60,0,
        0,2207,2210,5,80,0,0,2208,2210,3,78,39,0,2209,2205,1,0,0,0,2209,
        2206,1,0,0,0,2209,2207,1,0,0,0,2209,2208,1,0,0,0,2210,71,1,0,0,0,
        2211,2216,5,96,0,0,2212,2216,5,60,0,0,2213,2216,5,80,0,0,2214,2216,
        3,80,40,0,2215,2211,1,0,0,0,2215,2212,1,0,0,0,2215,2213,1,0,0,0,
        2215,2214,1,0,0,0,2216,73,1,0,0,0,2217,2234,3,1458,729,0,2218,2234,
        3,1492,746,0,2219,2220,3,1202,601,0,2220,2222,3,1458,729,0,2221,
        2223,3,1206,603,0,2222,2221,1,0,0,0,2222,2223,1,0,0,0,2223,2234,
        1,0,0,0,2224,2225,3,1202,601,0,2225,2226,5,2,0,0,2226,2227,3,1456,
        728,0,2227,2228,5,3,0,0,2228,2229,3,1458,729,0,2229,2234,1,0,0,0,
        2230,2234,3,322,161,0,2231,2234,5,53,0,0,2232,2234,5,254,0,0,2233,
        2217,1,0,0,0,2233,2218,1,0,0,0,2233,2219,1,0,0,0,2233,2224,1,0,0,
        0,2233,2230,1,0,0,0,2233,2231,1,0,0,0,2233,2232,1,0,0,0,2234,75,
        1,0,0,0,2235,2238,3,1458,729,0,2236,2238,5,53,0,0,2237,2235,1,0,
        0,0,2237,2236,1,0,0,0,2238,77,1,0,0,0,2239,2242,3,1486,743,0,2240,
        2242,3,1458,729,0,2241,2239,1,0,0,0,2241,2240,1,0,0,0,2242,79,1,
        0,0,0,2243,2246,3,1488,744,0,2244,2246,3,1458,729,0,2245,2243,1,
        0,0,0,2245,2244,1,0,0,0,2246,81,1,0,0,0,2247,2248,5,313,0,0,2248,
        2249,3,84,42,0,2249,83,1,0,0,0,2250,2251,5,418,0,0,2251,2259,5,386,
        0,0,2252,2253,5,356,0,0,2253,2254,5,244,0,0,2254,2259,5,251,0,0,
        2255,2256,5,332,0,0,2256,2259,5,106,0,0,2257,2259,3,86,43,0,2258,
        2250,1,0,0,0,2258,2252,1,0,0,0,2258,2255,1,0,0,0,2258,2257,1,0,0,
        0,2259,85,1,0,0,0,2260,2263,5,30,0,0,2261,2263,3,62,31,0,2262,2260,
        1,0,0,0,2262,2261,1,0,0,0,2263,87,1,0,0,0,2264,2265,5,333,0,0,2265,
        2268,3,56,28,0,2266,2268,3,82,41,0,2267,2264,1,0,0,0,2267,2266,1,
        0,0,0,2268,89,1,0,0,0,2269,2270,5,333,0,0,2270,2273,3,60,30,0,2271,
        2273,3,82,41,0,2272,2269,1,0,0,0,2272,2271,1,0,0,0,2273,91,1,0,0,
        0,2274,2284,5,335,0,0,2275,2285,3,62,31,0,2276,2277,5,418,0,0,2277,
        2285,5,386,0,0,2278,2279,5,356,0,0,2279,2280,5,244,0,0,2280,2285,
        5,251,0,0,2281,2282,5,332,0,0,2282,2285,5,106,0,0,2283,2285,5,30,
        0,0,2284,2275,1,0,0,0,2284,2276,1,0,0,0,2284,2278,1,0,0,0,2284,2281,
        1,0,0,0,2284,2283,1,0,0,0,2285,93,1,0,0,0,2286,2287,5,333,0,0,2287,
        2288,5,165,0,0,2288,2289,3,96,48,0,2289,2290,3,98,49,0,2290,95,1,
        0,0,0,2291,2294,5,30,0,0,2292,2294,3,1390,695,0,2293,2291,1,0,0,
        0,2293,2292,1,0,0,0,2294,97,1,0,0,0,2295,2296,7,16,0,0,2296,99,1,
        0,0,0,2297,2298,5,155,0,0,2298,101,1,0,0,0,2299,2300,5,187,0,0,2300,
        2301,7,17,0,0,2301,103,1,0,0,0,2302,2303,5,138,0,0,2303,2305,5,92,
        0,0,2304,2306,3,748,374,0,2305,2304,1,0,0,0,2305,2306,1,0,0,0,2306,
        2307,1,0,0,0,2307,2310,3,1118,559,0,2308,2311,3,106,53,0,2309,2311,
        3,116,58,0,2310,2308,1,0,0,0,2310,2309,1,0,0,0,2311,2436,1,0,0,0,
        2312,2313,5,138,0,0,2313,2314,5,92,0,0,2314,2315,5,30,0,0,2315,2316,
        5,68,0,0,2316,2317,5,351,0,0,2317,2321,3,1402,701,0,2318,2319,5,
        281,0,0,2319,2320,5,147,0,0,2320,2322,3,1472,736,0,2321,2318,1,0,
        0,0,2321,2322,1,0,0,0,2322,2323,1,0,0,0,2323,2324,5,333,0,0,2324,
        2325,5,351,0,0,2325,2327,3,1400,700,0,2326,2328,3,978,489,0,2327,
        2326,1,0,0,0,2327,2328,1,0,0,0,2328,2436,1,0,0,0,2329,2330,5,138,
        0,0,2330,2332,5,92,0,0,2331,2333,3,748,374,0,2332,2331,1,0,0,0,2332,
        2333,1,0,0,0,2333,2334,1,0,0,0,2334,2335,3,1406,703,0,2335,2336,
        5,435,0,0,2336,2337,5,285,0,0,2337,2342,3,1412,706,0,2338,2339,5,
        62,0,0,2339,2340,5,422,0,0,2340,2343,3,108,54,0,2341,2343,5,53,0,
        0,2342,2338,1,0,0,0,2342,2341,1,0,0,0,2343,2436,1,0,0,0,2344,2345,
        5,138,0,0,2345,2347,5,92,0,0,2346,2348,3,748,374,0,2347,2346,1,0,
        0,0,2347,2348,1,0,0,0,2348,2349,1,0,0,0,2349,2350,3,1406,703,0,2350,
        2351,5,436,0,0,2351,2352,5,285,0,0,2352,2354,3,1412,706,0,2353,2355,
        7,18,0,0,2354,2353,1,0,0,0,2354,2355,1,0,0,0,2355,2436,1,0,0,0,2356,
        2357,5,138,0,0,2357,2359,5,226,0,0,2358,2360,3,748,374,0,2359,2358,
        1,0,0,0,2359,2360,1,0,0,0,2360,2361,1,0,0,0,2361,2364,3,1412,706,
        0,2362,2365,3,106,53,0,2363,2365,3,118,59,0,2364,2362,1,0,0,0,2364,
        2363,1,0,0,0,2365,2436,1,0,0,0,2366,2367,5,138,0,0,2367,2368,5,226,
        0,0,2368,2369,5,30,0,0,2369,2370,5,68,0,0,2370,2371,5,351,0,0,2371,
        2375,3,1402,701,0,2372,2373,5,281,0,0,2373,2374,5,147,0,0,2374,2376,
        3,1472,736,0,2375,2372,1,0,0,0,2375,2376,1,0,0,0,2376,2377,1,0,0,
        0,2377,2378,5,333,0,0,2378,2379,5,351,0,0,2379,2381,3,1402,701,0,
        2380,2382,3,978,489,0,2381,2380,1,0,0,0,2381,2382,1,0,0,0,2382,2436,
        1,0,0,0,2383,2384,5,138,0,0,2384,2386,5,328,0,0,2385,2387,3,748,
        374,0,2386,2385,1,0,0,0,2386,2387,1,0,0,0,2387,2388,1,0,0,0,2388,
        2389,3,1412,706,0,2389,2390,3,106,53,0,2390,2436,1,0,0,0,2391,2392,
        5,138,0,0,2392,2394,5,376,0,0,2393,2395,3,748,374,0,2394,2393,1,
        0,0,0,2394,2395,1,0,0,0,2395,2396,1,0,0,0,2396,2397,3,1410,705,0,
        2397,2398,3,106,53,0,2398,2436,1,0,0,0,2399,2400,5,138,0,0,2400,
        2401,5,259,0,0,2401,2403,5,376,0,0,2402,2404,3,748,374,0,2403,2402,
        1,0,0,0,2403,2404,1,0,0,0,2404,2405,1,0,0,0,2405,2406,3,1410,705,
        0,2406,2407,3,106,53,0,2407,2436,1,0,0,0,2408,2409,5,138,0,0,2409,
        2410,5,259,0,0,2410,2411,5,376,0,0,2411,2412,5,30,0,0,2412,2413,
        5,68,0,0,2413,2414,5,351,0,0,2414,2418,3,1402,701,0,2415,2416,5,
        281,0,0,2416,2417,5,147,0,0,2417,2419,3,1472,736,0,2418,2415,1,0,
        0,0,2418,2419,1,0,0,0,2419,2420,1,0,0,0,2420,2421,5,333,0,0,2421,
        2422,5,351,0,0,2422,2424,3,1400,700,0,2423,2425,3,978,489,0,2424,
        2423,1,0,0,0,2424,2425,1,0,0,0,2425,2436,1,0,0,0,2426,2427,5,138,
        0,0,2427,2428,5,63,0,0,2428,2430,5,92,0,0,2429,2431,3,748,374,0,
        2430,2429,1,0,0,0,2430,2431,1,0,0,0,2431,2432,1,0,0,0,2432,2433,
        3,1118,559,0,2433,2434,3,106,53,0,2434,2436,1,0,0,0,2435,2302,1,
        0,0,0,2435,2312,1,0,0,0,2435,2329,1,0,0,0,2435,2344,1,0,0,0,2435,
        2356,1,0,0,0,2435,2366,1,0,0,0,2435,2383,1,0,0,0,2435,2391,1,0,0,
        0,2435,2399,1,0,0,0,2435,2408,1,0,0,0,2435,2426,1,0,0,0,2436,105,
        1,0,0,0,2437,2442,3,120,60,0,2438,2439,5,6,0,0,2439,2441,3,120,60,
        0,2440,2438,1,0,0,0,2441,2444,1,0,0,0,2442,2440,1,0,0,0,2442,2443,
        1,0,0,0,2443,107,1,0,0,0,2444,2442,1,0,0,0,2445,2446,5,68,0,0,2446,
        2455,3,1178,589,0,2447,2448,5,64,0,0,2448,2449,3,110,55,0,2449,2450,
        5,94,0,0,2450,2451,3,110,55,0,2451,2455,1,0,0,0,2452,2453,5,105,
        0,0,2453,2455,3,114,57,0,2454,2445,1,0,0,0,2454,2447,1,0,0,0,2454,
        2452,1,0,0,0,2455,109,1,0,0,0,2456,2457,5,2,0,0,2457,2462,3,112,
        56,0,2458,2459,5,6,0,0,2459,2461,3,112,56,0,2460,2458,1,0,0,0,2461,
        2464,1,0,0,0,2462,2460,1,0,0,0,2462,2463,1,0,0,0,2463,2465,1,0,0,
        0,2464,2462,1,0,0,0,2465,2466,5,3,0,0,2466,111,1,0,0,0,2467,2471,
        3,1178,589,0,2468,2471,5,262,0,0,2469,2471,5,260,0,0,2470,2467,1,
        0,0,0,2470,2468,1,0,0,0,2470,2469,1,0,0,0,2471,113,1,0,0,0,2472,
        2473,5,2,0,0,2473,2474,5,533,0,0,2474,2475,3,322,161,0,2475,2476,
        5,6,0,0,2476,2477,5,534,0,0,2477,2478,3,322,161,0,2478,2479,5,3,
        0,0,2479,115,1,0,0,0,2480,2481,5,435,0,0,2481,2482,5,285,0,0,2482,
        2483,3,1412,706,0,2483,2484,3,144,72,0,2484,2489,1,0,0,0,2485,2486,
        5,436,0,0,2486,2487,5,285,0,0,2487,2489,3,1412,706,0,2488,2480,1,
        0,0,0,2488,2485,1,0,0,0,2489,117,1,0,0,0,2490,2491,5,435,0,0,2491,
        2492,5,285,0,0,2492,2493,3,1412,706,0,2493,119,1,0,0,0,2494,2497,
        5,133,0,0,2495,2496,5,45,0,0,2496,2498,3,1436,718,0,2497,2495,1,
        0,0,0,2497,2498,1,0,0,0,2498,2499,1,0,0,0,2499,2712,3,236,118,0,
        2500,2501,5,138,0,0,2501,2502,5,45,0,0,2502,2503,3,1436,718,0,2503,
        2504,3,476,238,0,2504,2712,1,0,0,0,2505,2506,5,372,0,0,2506,2507,
        5,45,0,0,2507,2712,3,1436,718,0,2508,2509,5,191,0,0,2509,2511,5,
        45,0,0,2510,2512,3,748,374,0,2511,2510,1,0,0,0,2511,2512,1,0,0,0,
        2512,2513,1,0,0,0,2513,2515,3,1436,718,0,2514,2516,3,124,62,0,2515,
        2514,1,0,0,0,2515,2516,1,0,0,0,2516,2712,1,0,0,0,2517,2518,5,333,
        0,0,2518,2519,5,379,0,0,2519,2712,5,277,0,0,2520,2521,5,158,0,0,
        2521,2522,5,80,0,0,2522,2712,3,1436,718,0,2523,2524,5,333,0,0,2524,
        2525,5,379,0,0,2525,2712,5,158,0,0,2526,2527,5,333,0,0,2527,2712,
        7,19,0,0,2528,2530,5,193,0,0,2529,2531,7,20,0,0,2530,2529,1,0,0,
        0,2530,2531,1,0,0,0,2531,2532,1,0,0,0,2532,2712,5,357,0,0,2533,2534,
        5,186,0,0,2534,2538,5,357,0,0,2535,2539,5,30,0,0,2536,2539,5,99,
        0,0,2537,2539,3,1436,718,0,2538,2535,1,0,0,0,2538,2536,1,0,0,0,2538,
        2537,1,0,0,0,2539,2712,1,0,0,0,2540,2541,5,193,0,0,2541,2542,7,20,
        0,0,2542,2543,5,321,0,0,2543,2712,3,1436,718,0,2544,2545,5,186,0,
        0,2545,2546,5,321,0,0,2546,2712,3,1436,718,0,2547,2549,5,269,0,0,
        2548,2547,1,0,0,0,2548,2549,1,0,0,0,2549,2550,1,0,0,0,2550,2551,
        5,228,0,0,2551,2712,3,1412,706,0,2552,2553,5,275,0,0,2553,2712,3,
        558,279,0,2554,2555,5,77,0,0,2555,2712,5,275,0,0,2556,2557,5,282,
        0,0,2557,2558,5,94,0,0,2558,2712,3,1470,735,0,2559,2560,5,333,0,
        0,2560,2561,5,351,0,0,2561,2712,3,1400,700,0,2562,2563,5,333,0,0,
        2563,2712,3,132,66,0,2564,2565,5,313,0,0,2565,2712,3,132,66,0,2566,
        2567,5,312,0,0,2567,2568,5,219,0,0,2568,2712,3,130,65,0,2569,2570,
        5,193,0,0,2570,2571,5,414,0,0,2571,2572,5,251,0,0,2572,2712,5,327,
        0,0,2573,2574,5,186,0,0,2574,2575,5,414,0,0,2575,2576,5,251,0,0,
        2576,2712,5,327,0,0,2577,2578,5,209,0,0,2578,2579,5,414,0,0,2579,
        2580,5,251,0,0,2580,2712,5,327,0,0,2581,2582,5,269,0,0,2582,2583,
        5,209,0,0,2583,2584,5,414,0,0,2584,2585,5,251,0,0,2585,2712,5,327,
        0,0,2586,2588,5,191,0,0,2587,2589,5,44,0,0,2588,2587,1,0,0,0,2588,
        2589,1,0,0,0,2589,2591,1,0,0,0,2590,2592,3,748,374,0,2591,2590,1,
        0,0,0,2591,2592,1,0,0,0,2592,2593,1,0,0,0,2593,2595,3,1432,716,0,
        2594,2596,3,124,62,0,2595,2594,1,0,0,0,2595,2596,1,0,0,0,2596,2712,
        1,0,0,0,2597,2599,5,133,0,0,2598,2600,5,44,0,0,2599,2598,1,0,0,0,
        2599,2600,1,0,0,0,2600,2602,1,0,0,0,2601,2603,3,516,258,0,2602,2601,
        1,0,0,0,2602,2603,1,0,0,0,2603,2604,1,0,0,0,2604,2712,3,206,103,
        0,2605,2607,5,138,0,0,2606,2608,5,44,0,0,2607,2606,1,0,0,0,2607,
        2608,1,0,0,0,2608,2609,1,0,0,0,2609,2610,3,1432,716,0,2610,2611,
        3,122,61,0,2611,2712,1,0,0,0,2612,2614,5,138,0,0,2613,2615,5,44,
        0,0,2614,2613,1,0,0,0,2614,2615,1,0,0,0,2615,2616,1,0,0,0,2616,2617,
        3,1432,716,0,2617,2618,7,21,0,0,2618,2619,5,77,0,0,2619,2620,5,78,
        0,0,2620,2712,1,0,0,0,2621,2623,5,138,0,0,2622,2624,5,44,0,0,2623,
        2622,1,0,0,0,2623,2624,1,0,0,0,2624,2625,1,0,0,0,2625,2626,3,1432,
        716,0,2626,2627,5,191,0,0,2627,2629,5,437,0,0,2628,2630,3,748,374,
        0,2629,2628,1,0,0,0,2629,2630,1,0,0,0,2630,2712,1,0,0,0,2631,2633,
        5,138,0,0,2632,2634,5,44,0,0,2633,2632,1,0,0,0,2633,2634,1,0,0,0,
        2634,2635,1,0,0,0,2635,2636,3,1432,716,0,2636,2637,5,333,0,0,2637,
        2638,5,342,0,0,2638,2639,3,1464,732,0,2639,2712,1,0,0,0,2640,2642,
        5,138,0,0,2641,2643,5,44,0,0,2642,2641,1,0,0,0,2642,2643,1,0,0,0,
        2643,2644,1,0,0,0,2644,2645,3,1432,716,0,2645,2646,7,22,0,0,2646,
        2647,3,132,66,0,2647,2712,1,0,0,0,2648,2650,5,138,0,0,2649,2651,
        5,44,0,0,2650,2649,1,0,0,0,2650,2651,1,0,0,0,2651,2652,1,0,0,0,2652,
        2653,3,1432,716,0,2653,2654,5,333,0,0,2654,2655,5,345,0,0,2655,2656,
        3,1474,737,0,2656,2712,1,0,0,0,2657,2659,5,138,0,0,2658,2660,5,44,
        0,0,2659,2658,1,0,0,0,2659,2660,1,0,0,0,2660,2661,1,0,0,0,2661,2662,
        3,1432,716,0,2662,2663,5,133,0,0,2663,2664,5,438,0,0,2664,2665,3,
        222,111,0,2665,2666,5,36,0,0,2666,2668,5,219,0,0,2667,2669,3,314,
        157,0,2668,2667,1,0,0,0,2668,2669,1,0,0,0,2669,2712,1,0,0,0,2670,
        2672,5,138,0,0,2671,2673,5,44,0,0,2672,2671,1,0,0,0,2672,2673,1,
        0,0,0,2673,2674,1,0,0,0,2674,2675,3,1432,716,0,2675,2676,3,140,70,
        0,2676,2712,1,0,0,0,2677,2679,5,138,0,0,2678,2680,5,44,0,0,2679,
        2678,1,0,0,0,2679,2680,1,0,0,0,2680,2681,1,0,0,0,2681,2682,3,1432,
        716,0,2682,2683,5,191,0,0,2683,2685,5,219,0,0,2684,2686,3,748,374,
        0,2685,2684,1,0,0,0,2685,2686,1,0,0,0,2686,2712,1,0,0,0,2687,2689,
        5,138,0,0,2688,2690,5,44,0,0,2689,2688,1,0,0,0,2689,2690,1,0,0,0,
        2690,2691,1,0,0,0,2691,2693,3,1432,716,0,2692,2694,3,768,384,0,2693,
        2692,1,0,0,0,2693,2694,1,0,0,0,2694,2695,1,0,0,0,2695,2696,5,360,
        0,0,2696,2698,3,1168,584,0,2697,2699,3,126,63,0,2698,2697,1,0,0,
        0,2698,2699,1,0,0,0,2699,2701,1,0,0,0,2700,2702,3,128,64,0,2701,
        2700,1,0,0,0,2701,2702,1,0,0,0,2702,2712,1,0,0,0,2703,2705,5,138,
        0,0,2704,2706,5,44,0,0,2705,2704,1,0,0,0,2705,2706,1,0,0,0,2706,
        2707,1,0,0,0,2707,2708,3,1432,716,0,2708,2709,3,372,186,0,2709,2712,
        1,0,0,0,2710,2712,3,372,186,0,2711,2494,1,0,0,0,2711,2500,1,0,0,
        0,2711,2505,1,0,0,0,2711,2508,1,0,0,0,2711,2517,1,0,0,0,2711,2520,
        1,0,0,0,2711,2523,1,0,0,0,2711,2526,1,0,0,0,2711,2528,1,0,0,0,2711,
        2533,1,0,0,0,2711,2540,1,0,0,0,2711,2544,1,0,0,0,2711,2548,1,0,0,
        0,2711,2552,1,0,0,0,2711,2554,1,0,0,0,2711,2556,1,0,0,0,2711,2559,
        1,0,0,0,2711,2562,1,0,0,0,2711,2564,1,0,0,0,2711,2566,1,0,0,0,2711,
        2569,1,0,0,0,2711,2573,1,0,0,0,2711,2577,1,0,0,0,2711,2581,1,0,0,
        0,2711,2586,1,0,0,0,2711,2597,1,0,0,0,2711,2605,1,0,0,0,2711,2612,
        1,0,0,0,2711,2621,1,0,0,0,2711,2631,1,0,0,0,2711,2640,1,0,0,0,2711,
        2648,1,0,0,0,2711,2657,1,0,0,0,2711,2670,1,0,0,0,2711,2677,1,0,0,
        0,2711,2687,1,0,0,0,2711,2703,1,0,0,0,2711,2710,1,0,0,0,2712,121,
        1,0,0,0,2713,2714,5,333,0,0,2714,2715,5,53,0,0,2715,2719,3,1212,
        606,0,2716,2717,5,191,0,0,2717,2719,5,53,0,0,2718,2713,1,0,0,0,2718,
        2716,1,0,0,0,2719,123,1,0,0,0,2720,2721,7,23,0,0,2721,125,1,0,0,
        0,2722,2723,5,43,0,0,2723,2724,3,558,279,0,2724,127,1,0,0,0,2725,
        2726,5,100,0,0,2726,2727,3,1212,606,0,2727,129,1,0,0,0,2728,2735,
        5,270,0,0,2729,2735,5,113,0,0,2730,2735,5,53,0,0,2731,2732,5,100,
        0,0,2732,2733,5,226,0,0,2733,2735,3,1436,718,0,2734,2728,1,0,0,0,
        2734,2729,1,0,0,0,2734,2730,1,0,0,0,2734,2731,1,0,0,0,2735,131,1,
        0,0,0,2736,2737,5,2,0,0,2737,2738,3,136,68,0,2738,2739,5,3,0,0,2739,
        133,1,0,0,0,2740,2741,5,105,0,0,2741,2742,3,132,66,0,2742,135,1,
        0,0,0,2743,2748,3,138,69,0,2744,2745,5,6,0,0,2745,2747,3,138,69,
        0,2746,2744,1,0,0,0,2747,2750,1,0,0,0,2748,2746,1,0,0,0,2748,2749,
        1,0,0,0,2749,137,1,0,0,0,2750,2748,1,0,0,0,2751,2760,3,1490,745,
        0,2752,2753,5,10,0,0,2753,2761,3,502,251,0,2754,2755,5,11,0,0,2755,
        2758,3,1490,745,0,2756,2757,5,10,0,0,2757,2759,3,502,251,0,2758,
        2756,1,0,0,0,2758,2759,1,0,0,0,2759,2761,1,0,0,0,2760,2752,1,0,0,
        0,2760,2754,1,0,0,0,2760,2761,1,0,0,0,2761,139,1,0,0,0,2762,2764,
        3,142,71,0,2763,2762,1,0,0,0,2764,2765,1,0,0,0,2765,2763,1,0,0,0,
        2765,2766,1,0,0,0,2766,141,1,0,0,0,2767,2772,5,314,0,0,2768,2770,
        3,14,7,0,2769,2768,1,0,0,0,2769,2770,1,0,0,0,2770,2771,1,0,0,0,2771,
        2773,3,322,161,0,2772,2769,1,0,0,0,2772,2773,1,0,0,0,2773,2781,1,
        0,0,0,2774,2778,5,333,0,0,2775,2779,3,318,159,0,2776,2777,5,438,
        0,0,2777,2779,3,222,111,0,2778,2775,1,0,0,0,2778,2776,1,0,0,0,2779,
        2781,1,0,0,0,2780,2767,1,0,0,0,2780,2774,1,0,0,0,2781,143,1,0,0,
        0,2782,2783,5,62,0,0,2783,2784,5,422,0,0,2784,2785,5,105,0,0,2785,
        2786,5,2,0,0,2786,2787,3,148,74,0,2787,2788,5,3,0,0,2788,2809,1,
        0,0,0,2789,2790,5,62,0,0,2790,2791,5,422,0,0,2791,2792,5,68,0,0,
        2792,2793,5,2,0,0,2793,2794,3,1328,664,0,2794,2795,5,3,0,0,2795,
        2809,1,0,0,0,2796,2797,5,62,0,0,2797,2798,5,422,0,0,2798,2799,5,
        64,0,0,2799,2800,5,2,0,0,2800,2801,3,1328,664,0,2801,2802,5,3,0,
        0,2802,2803,5,94,0,0,2803,2804,5,2,0,0,2804,2805,3,1328,664,0,2805,
        2806,5,3,0,0,2806,2809,1,0,0,0,2807,2809,5,53,0,0,2808,2782,1,0,
        0,0,2808,2789,1,0,0,0,2808,2796,1,0,0,0,2808,2807,1,0,0,0,2809,145,
        1,0,0,0,2810,2811,3,1488,744,0,2811,2812,3,1456,728,0,2812,147,1,
        0,0,0,2813,2818,3,146,73,0,2814,2815,5,6,0,0,2815,2817,3,146,73,
        0,2816,2814,1,0,0,0,2817,2820,1,0,0,0,2818,2816,1,0,0,0,2818,2819,
        1,0,0,0,2819,149,1,0,0,0,2820,2818,1,0,0,0,2821,2822,5,138,0,0,2822,
        2823,5,360,0,0,2823,2824,3,558,279,0,2824,2825,3,152,76,0,2825,151,
        1,0,0,0,2826,2831,3,154,77,0,2827,2828,5,6,0,0,2828,2830,3,154,77,
        0,2829,2827,1,0,0,0,2830,2833,1,0,0,0,2831,2829,1,0,0,0,2831,2832,
        1,0,0,0,2832,153,1,0,0,0,2833,2831,1,0,0,0,2834,2835,5,133,0,0,2835,
        2836,5,143,0,0,2836,2838,3,1152,576,0,2837,2839,3,124,62,0,2838,
        2837,1,0,0,0,2838,2839,1,0,0,0,2839,2864,1,0,0,0,2840,2841,5,191,
        0,0,2841,2843,5,143,0,0,2842,2844,3,748,374,0,2843,2842,1,0,0,0,
        2843,2844,1,0,0,0,2844,2845,1,0,0,0,2845,2847,3,1474,737,0,2846,
        2848,3,124,62,0,2847,2846,1,0,0,0,2847,2848,1,0,0,0,2848,2864,1,
        0,0,0,2849,2850,5,138,0,0,2850,2851,5,143,0,0,2851,2853,3,1474,737,
        0,2852,2854,3,768,384,0,2853,2852,1,0,0,0,2853,2854,1,0,0,0,2854,
        2855,1,0,0,0,2855,2856,5,360,0,0,2856,2858,3,1168,584,0,2857,2859,
        3,126,63,0,2858,2857,1,0,0,0,2858,2859,1,0,0,0,2859,2861,1,0,0,0,
        2860,2862,3,124,62,0,2861,2860,1,0,0,0,2861,2862,1,0,0,0,2862,2864,
        1,0,0,0,2863,2834,1,0,0,0,2863,2840,1,0,0,0,2863,2849,1,0,0,0,2864,
        155,1,0,0,0,2865,2868,5,157,0,0,2866,2869,3,994,497,0,2867,2869,
        5,30,0,0,2868,2866,1,0,0,0,2868,2867,1,0,0,0,2869,157,1,0,0,0,2870,
        2872,5,169,0,0,2871,2873,3,172,86,0,2872,2871,1,0,0,0,2872,2873,
        1,0,0,0,2873,2874,1,0,0,0,2874,2876,3,1406,703,0,2875,2877,3,240,
        120,0,2876,2875,1,0,0,0,2876,2877,1,0,0,0,2877,2878,1,0,0,0,2878,
        2880,3,160,80,0,2879,2881,3,162,81,0,2880,2879,1,0,0,0,2880,2881,
        1,0,0,0,2881,2882,1,0,0,0,2882,2884,3,164,82,0,2883,2885,3,174,87,
        0,2884,2883,1,0,0,0,2884,2885,1,0,0,0,2885,2887,1,0,0,0,2886,2888,
        3,14,7,0,2887,2886,1,0,0,0,2887,2888,1,0,0,0,2888,2889,1,0,0,0,2889,
        2891,3,166,83,0,2890,2892,3,1144,572,0,2891,2890,1,0,0,0,2891,2892,
        1,0,0,0,2892,2908,1,0,0,0,2893,2894,5,169,0,0,2894,2895,5,2,0,0,
        2895,2896,3,942,471,0,2896,2897,5,3,0,0,2897,2899,5,94,0,0,2898,
        2900,3,162,81,0,2899,2898,1,0,0,0,2899,2900,1,0,0,0,2900,2901,1,
        0,0,0,2901,2903,3,164,82,0,2902,2904,3,14,7,0,2903,2902,1,0,0,0,
        2903,2904,1,0,0,0,2904,2905,1,0,0,0,2905,2906,3,166,83,0,2906,2908,
        1,0,0,0,2907,2870,1,0,0,0,2907,2893,1,0,0,0,2908,159,1,0,0,0,2909,
        2910,7,24,0,0,2910,161,1,0,0,0,2911,2912,5,297,0,0,2912,163,1,0,
        0,0,2913,2917,3,1458,729,0,2914,2917,5,343,0,0,2915,2917,5,344,0,
        0,2916,2913,1,0,0,0,2916,2914,1,0,0,0,2916,2915,1,0,0,0,2917,165,
        1,0,0,0,2918,2924,3,168,84,0,2919,2920,5,2,0,0,2920,2921,3,178,89,
        0,2921,2922,5,3,0,0,2922,2924,1,0,0,0,2923,2918,1,0,0,0,2923,2919,
        1,0,0,0,2924,167,1,0,0,0,2925,2927,3,170,85,0,2926,2925,1,0,0,0,
        2927,2930,1,0,0,0,2928,2926,1,0,0,0,2928,2929,1,0,0,0,2929,169,1,
        0,0,0,2930,2928,1,0,0,0,2931,2971,5,107,0,0,2932,2971,5,112,0,0,
        2933,2935,5,183,0,0,2934,2936,3,872,436,0,2935,2934,1,0,0,0,2935,
        2936,1,0,0,0,2936,2937,1,0,0,0,2937,2971,3,1458,729,0,2938,2940,
        5,78,0,0,2939,2941,3,872,436,0,2940,2939,1,0,0,0,2940,2941,1,0,0,
        0,2941,2942,1,0,0,0,2942,2971,3,1458,729,0,2943,2971,5,171,0,0,2944,
        2971,5,216,0,0,2945,2947,5,298,0,0,2946,2948,3,872,436,0,2947,2946,
        1,0,0,0,2947,2948,1,0,0,0,2948,2949,1,0,0,0,2949,2971,3,1458,729,
        0,2950,2952,5,197,0,0,2951,2953,3,872,436,0,2952,2951,1,0,0,0,2952,
        2953,1,0,0,0,2953,2954,1,0,0,0,2954,2971,3,1458,729,0,2955,2956,
        5,209,0,0,2956,2957,5,298,0,0,2957,2971,3,244,122,0,2958,2959,5,
        209,0,0,2959,2960,5,298,0,0,2960,2971,5,9,0,0,2961,2962,5,209,0,
        0,2962,2963,5,77,0,0,2963,2964,5,78,0,0,2964,2971,3,244,122,0,2965,
        2966,5,209,0,0,2966,2967,5,78,0,0,2967,2971,3,244,122,0,2968,2969,
        5,194,0,0,2969,2971,3,1458,729,0,2970,2931,1,0,0,0,2970,2932,1,0,
        0,0,2970,2933,1,0,0,0,2970,2938,1,0,0,0,2970,2943,1,0,0,0,2970,2944,
        1,0,0,0,2970,2945,1,0,0,0,2970,2950,1,0,0,0,2970,2955,1,0,0,0,2970,
        2958,1,0,0,0,2970,2961,1,0,0,0,2970,2965,1,0,0,0,2970,2968,1,0,0,
        0,2971,171,1,0,0,0,2972,2973,5,107,0,0,2973,173,1,0,0,0,2974,2976,
        3,176,88,0,2975,2974,1,0,0,0,2975,2976,1,0,0,0,2976,2977,1,0,0,0,
        2977,2978,5,184,0,0,2978,2979,3,1458,729,0,2979,175,1,0,0,0,2980,
        2981,5,100,0,0,2981,177,1,0,0,0,2982,2987,3,180,90,0,2983,2984,5,
        6,0,0,2984,2986,3,180,90,0,2985,2983,1,0,0,0,2986,2989,1,0,0,0,2987,
        2985,1,0,0,0,2987,2988,1,0,0,0,2988,179,1,0,0,0,2989,2987,1,0,0,
        0,2990,2992,3,1490,745,0,2991,2993,3,182,91,0,2992,2991,1,0,0,0,
        2992,2993,1,0,0,0,2993,181,1,0,0,0,2994,3002,3,72,36,0,2995,3002,
        3,322,161,0,2996,3002,5,9,0,0,2997,2998,5,2,0,0,2998,2999,3,184,
        92,0,2999,3000,5,3,0,0,3000,3002,1,0,0,0,3001,2994,1,0,0,0,3001,
        2995,1,0,0,0,3001,2996,1,0,0,0,3001,2997,1,0,0,0,3002,183,1,0,0,
        0,3003,3008,3,186,93,0,3004,3005,5,6,0,0,3005,3007,3,186,93,0,3006,
        3004,1,0,0,0,3007,3010,1,0,0,0,3008,3006,1,0,0,0,3008,3009,1,0,0,
        0,3009,185,1,0,0,0,3010,3008,1,0,0,0,3011,3012,3,70,35,0,3012,187,
        1,0,0,0,3013,3015,5,46,0,0,3014,3016,3,190,95,0,3015,3014,1,0,0,
        0,3015,3016,1,0,0,0,3016,3017,1,0,0,0,3017,3019,5,92,0,0,3018,3020,
        3,516,258,0,3019,3018,1,0,0,0,3019,3020,1,0,0,0,3020,3021,1,0,0,
        0,3021,3087,3,1404,702,0,3022,3024,5,2,0,0,3023,3025,3,192,96,0,
        3024,3023,1,0,0,0,3024,3025,1,0,0,0,3025,3026,1,0,0,0,3026,3028,
        5,3,0,0,3027,3029,3,266,133,0,3028,3027,1,0,0,0,3028,3029,1,0,0,
        0,3029,3031,1,0,0,0,3030,3032,3,268,134,0,3031,3030,1,0,0,0,3031,
        3032,1,0,0,0,3032,3034,1,0,0,0,3033,3035,3,276,138,0,3034,3033,1,
        0,0,0,3034,3035,1,0,0,0,3035,3037,1,0,0,0,3036,3038,3,278,139,0,
        3037,3036,1,0,0,0,3037,3038,1,0,0,0,3038,3040,1,0,0,0,3039,3041,
        3,280,140,0,3040,3039,1,0,0,0,3040,3041,1,0,0,0,3041,3043,1,0,0,
        0,3042,3044,3,282,141,0,3043,3042,1,0,0,0,3043,3044,1,0,0,0,3044,
        3088,1,0,0,0,3045,3046,5,275,0,0,3046,3048,3,558,279,0,3047,3049,
        3,196,98,0,3048,3047,1,0,0,0,3048,3049,1,0,0,0,3049,3051,1,0,0,0,
        3050,3052,3,268,134,0,3051,3050,1,0,0,0,3051,3052,1,0,0,0,3052,3054,
        1,0,0,0,3053,3055,3,276,138,0,3054,3053,1,0,0,0,3054,3055,1,0,0,
        0,3055,3057,1,0,0,0,3056,3058,3,278,139,0,3057,3056,1,0,0,0,3057,
        3058,1,0,0,0,3058,3060,1,0,0,0,3059,3061,3,280,140,0,3060,3059,1,
        0,0,0,3060,3061,1,0,0,0,3061,3063,1,0,0,0,3062,3064,3,282,141,0,
        3063,3062,1,0,0,0,3063,3064,1,0,0,0,3064,3088,1,0,0,0,3065,3066,
        5,285,0,0,3066,3067,5,275,0,0,3067,3069,3,1412,706,0,3068,3070,3,
        196,98,0,3069,3068,1,0,0,0,3069,3070,1,0,0,0,3070,3071,1,0,0,0,3071,
        3073,3,144,72,0,3072,3074,3,268,134,0,3073,3072,1,0,0,0,3073,3074,
        1,0,0,0,3074,3076,1,0,0,0,3075,3077,3,276,138,0,3076,3075,1,0,0,
        0,3076,3077,1,0,0,0,3077,3079,1,0,0,0,3078,3080,3,278,139,0,3079,
        3078,1,0,0,0,3079,3080,1,0,0,0,3080,3082,1,0,0,0,3081,3083,3,280,
        140,0,3082,3081,1,0,0,0,3082,3083,1,0,0,0,3083,3085,1,0,0,0,3084,
        3086,3,282,141,0,3085,3084,1,0,0,0,3085,3086,1,0,0,0,3086,3088,1,
        0,0,0,3087,3022,1,0,0,0,3087,3045,1,0,0,0,3087,3065,1,0,0,0,3088,
        189,1,0,0,0,3089,3097,5,354,0,0,3090,3097,5,352,0,0,3091,3092,5,
        254,0,0,3092,3097,7,25,0,0,3093,3094,5,213,0,0,3094,3097,7,25,0,
        0,3095,3097,5,367,0,0,3096,3089,1,0,0,0,3096,3090,1,0,0,0,3096,3091,
        1,0,0,0,3096,3093,1,0,0,0,3096,3095,1,0,0,0,3097,191,1,0,0,0,3098,
        3099,3,198,99,0,3099,193,1,0,0,0,3100,3101,3,198,99,0,3101,195,1,
        0,0,0,3102,3103,5,2,0,0,3103,3104,3,200,100,0,3104,3105,5,3,0,0,
        3105,197,1,0,0,0,3106,3111,3,202,101,0,3107,3108,5,6,0,0,3108,3110,
        3,202,101,0,3109,3107,1,0,0,0,3110,3113,1,0,0,0,3111,3109,1,0,0,
        0,3111,3112,1,0,0,0,3112,199,1,0,0,0,3113,3111,1,0,0,0,3114,3119,
        3,204,102,0,3115,3116,5,6,0,0,3116,3118,3,204,102,0,3117,3115,1,
        0,0,0,3118,3121,1,0,0,0,3119,3117,1,0,0,0,3119,3120,1,0,0,0,3120,
        201,1,0,0,0,3121,3119,1,0,0,0,3122,3126,3,206,103,0,3123,3126,3,
        228,114,0,3124,3126,3,234,117,0,3125,3122,1,0,0,0,3125,3123,1,0,
        0,0,3125,3124,1,0,0,0,3126,203,1,0,0,0,3127,3130,3,212,106,0,3128,
        3130,3,234,117,0,3129,3127,1,0,0,0,3129,3128,1,0,0,0,3130,205,1,
        0,0,0,3131,3132,3,1434,717,0,3132,3134,3,1168,584,0,3133,3135,3,
        368,184,0,3134,3133,1,0,0,0,3134,3135,1,0,0,0,3135,3137,1,0,0,0,
        3136,3138,3,210,105,0,3137,3136,1,0,0,0,3137,3138,1,0,0,0,3138,3140,
        1,0,0,0,3139,3141,3,208,104,0,3140,3139,1,0,0,0,3140,3141,1,0,0,
        0,3141,3144,1,0,0,0,3142,3143,5,43,0,0,3143,3145,3,558,279,0,3144,
        3142,1,0,0,0,3144,3145,1,0,0,0,3145,3148,1,0,0,0,3146,3147,5,105,
        0,0,3147,3149,5,280,0,0,3148,3146,1,0,0,0,3148,3149,1,0,0,0,3149,
        3150,1,0,0,0,3150,3151,3,214,107,0,3151,207,1,0,0,0,3152,3153,5,
        543,0,0,3153,3154,3,1474,737,0,3154,209,1,0,0,0,3155,3162,5,345,
        0,0,3156,3163,5,544,0,0,3157,3163,5,205,0,0,3158,3163,5,545,0,0,
        3159,3163,5,546,0,0,3160,3163,5,53,0,0,3161,3163,3,1474,737,0,3162,
        3156,1,0,0,0,3162,3157,1,0,0,0,3162,3158,1,0,0,0,3162,3159,1,0,0,
        0,3162,3160,1,0,0,0,3162,3161,1,0,0,0,3163,211,1,0,0,0,3164,3167,
        3,1434,717,0,3165,3166,5,105,0,0,3166,3168,5,280,0,0,3167,3165,1,
        0,0,0,3167,3168,1,0,0,0,3168,3169,1,0,0,0,3169,3170,3,214,107,0,
        3170,213,1,0,0,0,3171,3173,3,216,108,0,3172,3171,1,0,0,0,3173,3176,
        1,0,0,0,3174,3172,1,0,0,0,3174,3175,1,0,0,0,3175,215,1,0,0,0,3176,
        3174,1,0,0,0,3177,3178,5,45,0,0,3178,3180,3,1436,718,0,3179,3177,
        1,0,0,0,3179,3180,1,0,0,0,3180,3181,1,0,0,0,3181,3183,3,218,109,
        0,3182,3184,3,224,112,0,3183,3182,1,0,0,0,3183,3184,1,0,0,0,3184,
        3186,1,0,0,0,3185,3187,3,226,113,0,3186,3185,1,0,0,0,3186,3187,1,
        0,0,0,3187,3196,1,0,0,0,3188,3190,3,218,109,0,3189,3191,3,224,112,
        0,3190,3189,1,0,0,0,3190,3191,1,0,0,0,3191,3193,1,0,0,0,3192,3194,
        3,226,113,0,3193,3192,1,0,0,0,3193,3194,1,0,0,0,3194,3196,1,0,0,
        0,3195,3179,1,0,0,0,3195,3188,1,0,0,0,3196,217,1,0,0,0,3197,3198,
        5,77,0,0,3198,3256,5,78,0,0,3199,3256,5,78,0,0,3200,3202,5,98,0,
        0,3201,3203,3,710,355,0,3202,3201,1,0,0,0,3202,3203,1,0,0,0,3203,
        3205,1,0,0,0,3204,3206,3,286,143,0,3205,3204,1,0,0,0,3205,3206,1,
        0,0,0,3206,3256,1,0,0,0,3207,3209,5,98,0,0,3208,3210,3,220,110,0,
        3209,3208,1,0,0,0,3209,3210,1,0,0,0,3210,3211,1,0,0,0,3211,3256,
        3,284,142,0,3212,3213,5,85,0,0,3213,3215,5,245,0,0,3214,3216,3,710,
        355,0,3215,3214,1,0,0,0,3215,3216,1,0,0,0,3216,3218,1,0,0,0,3217,
        3219,3,286,143,0,3218,3217,1,0,0,0,3218,3219,1,0,0,0,3219,3256,1,
        0,0,0,3220,3221,5,42,0,0,3221,3222,5,2,0,0,3222,3223,3,1212,606,
        0,3223,3225,5,3,0,0,3224,3226,3,238,119,0,3225,3224,1,0,0,0,3225,
        3226,1,0,0,0,3226,3256,1,0,0,0,3227,3228,5,53,0,0,3228,3256,3,1252,
        626,0,3229,3230,5,438,0,0,3230,3231,3,222,111,0,3231,3241,5,36,0,
        0,3232,3234,5,219,0,0,3233,3235,3,314,157,0,3234,3233,1,0,0,0,3234,
        3235,1,0,0,0,3235,3242,1,0,0,0,3236,3237,5,2,0,0,3237,3238,3,1212,
        606,0,3238,3239,5,3,0,0,3239,3240,5,440,0,0,3240,3242,1,0,0,0,3241,
        3232,1,0,0,0,3241,3236,1,0,0,0,3242,3256,1,0,0,0,3243,3244,5,86,
        0,0,3244,3246,3,1412,706,0,3245,3247,3,240,120,0,3246,3245,1,0,0,
        0,3246,3247,1,0,0,0,3247,3249,1,0,0,0,3248,3250,3,250,125,0,3249,
        3248,1,0,0,0,3249,3250,1,0,0,0,3250,3252,1,0,0,0,3251,3253,3,258,
        129,0,3252,3251,1,0,0,0,3252,3253,1,0,0,0,3253,3256,1,0,0,0,3254,
        3256,3,646,323,0,3255,3197,1,0,0,0,3255,3199,1,0,0,0,3255,3200,1,
        0,0,0,3255,3207,1,0,0,0,3255,3212,1,0,0,0,3255,3220,1,0,0,0,3255,
        3227,1,0,0,0,3255,3229,1,0,0,0,3255,3243,1,0,0,0,3255,3254,1,0,0,
        0,3256,219,1,0,0,0,3257,3259,5,273,0,0,3258,3260,5,77,0,0,3259,3258,
        1,0,0,0,3259,3260,1,0,0,0,3260,3261,1,0,0,0,3261,3262,5,56,0,0,3262,
        221,1,0,0,0,3263,3267,5,139,0,0,3264,3265,5,147,0,0,3265,3267,5,
        53,0,0,3266,3263,1,0,0,0,3266,3264,1,0,0,0,3267,223,1,0,0,0,3268,
        3272,5,54,0,0,3269,3270,5,77,0,0,3270,3272,5,54,0,0,3271,3268,1,
        0,0,0,3271,3269,1,0,0,0,3272,225,1,0,0,0,3273,3274,5,69,0,0,3274,
        3275,7,16,0,0,3275,227,1,0,0,0,3276,3277,5,120,0,0,3277,3278,3,1412,
        706,0,3278,3279,3,230,115,0,3279,229,1,0,0,0,3280,3281,7,26,0,0,
        3281,3283,3,232,116,0,3282,3280,1,0,0,0,3283,3286,1,0,0,0,3284,3282,
        1,0,0,0,3284,3285,1,0,0,0,3285,231,1,0,0,0,3286,3284,1,0,0,0,3287,
        3288,7,27,0,0,3288,233,1,0,0,0,3289,3290,5,45,0,0,3290,3291,3,1436,
        718,0,3291,3292,3,236,118,0,3292,3295,1,0,0,0,3293,3295,3,236,118,
        0,3294,3289,1,0,0,0,3294,3293,1,0,0,0,3295,235,1,0,0,0,3296,3297,
        5,42,0,0,3297,3298,5,2,0,0,3298,3299,3,1212,606,0,3299,3300,5,3,
        0,0,3300,3301,3,476,238,0,3301,3383,1,0,0,0,3302,3320,5,98,0,0,3303,
        3304,5,2,0,0,3304,3305,3,244,122,0,3305,3307,5,3,0,0,3306,3308,3,
        248,124,0,3307,3306,1,0,0,0,3307,3308,1,0,0,0,3308,3310,1,0,0,0,
        3309,3311,3,710,355,0,3310,3309,1,0,0,0,3310,3311,1,0,0,0,3311,3313,
        1,0,0,0,3312,3314,3,286,143,0,3313,3312,1,0,0,0,3313,3314,1,0,0,
        0,3314,3315,1,0,0,0,3315,3316,3,476,238,0,3316,3321,1,0,0,0,3317,
        3318,3,288,144,0,3318,3319,3,476,238,0,3319,3321,1,0,0,0,3320,3303,
        1,0,0,0,3320,3317,1,0,0,0,3321,3383,1,0,0,0,3322,3323,5,85,0,0,3323,
        3341,5,245,0,0,3324,3325,5,2,0,0,3325,3326,3,244,122,0,3326,3328,
        5,3,0,0,3327,3329,3,248,124,0,3328,3327,1,0,0,0,3328,3329,1,0,0,
        0,3329,3331,1,0,0,0,3330,3332,3,710,355,0,3331,3330,1,0,0,0,3331,
        3332,1,0,0,0,3332,3334,1,0,0,0,3333,3335,3,286,143,0,3334,3333,1,
        0,0,0,3334,3335,1,0,0,0,3335,3336,1,0,0,0,3336,3337,3,476,238,0,
        3337,3342,1,0,0,0,3338,3339,3,288,144,0,3339,3340,3,476,238,0,3340,
        3342,1,0,0,0,3341,3324,1,0,0,0,3341,3338,1,0,0,0,3342,3383,1,0,0,
        0,3343,3345,5,199,0,0,3344,3346,3,634,317,0,3345,3344,1,0,0,0,3345,
        3346,1,0,0,0,3346,3347,1,0,0,0,3347,3348,5,2,0,0,3348,3349,3,252,
        126,0,3349,3351,5,3,0,0,3350,3352,3,248,124,0,3351,3350,1,0,0,0,
        3351,3352,1,0,0,0,3352,3354,1,0,0,0,3353,3355,3,710,355,0,3354,3353,
        1,0,0,0,3354,3355,1,0,0,0,3355,3357,1,0,0,0,3356,3358,3,286,143,
        0,3357,3356,1,0,0,0,3357,3358,1,0,0,0,3358,3360,1,0,0,0,3359,3361,
        3,256,128,0,3360,3359,1,0,0,0,3360,3361,1,0,0,0,3361,3362,1,0,0,
        0,3362,3363,3,476,238,0,3363,3383,1,0,0,0,3364,3365,5,63,0,0,3365,
        3366,5,245,0,0,3366,3367,5,2,0,0,3367,3368,3,244,122,0,3368,3369,
        5,3,0,0,3369,3370,5,86,0,0,3370,3372,3,1412,706,0,3371,3373,3,240,
        120,0,3372,3371,1,0,0,0,3372,3373,1,0,0,0,3373,3375,1,0,0,0,3374,
        3376,3,250,125,0,3375,3374,1,0,0,0,3375,3376,1,0,0,0,3376,3378,1,
        0,0,0,3377,3379,3,258,129,0,3378,3377,1,0,0,0,3378,3379,1,0,0,0,
        3379,3380,1,0,0,0,3380,3381,3,476,238,0,3381,3383,1,0,0,0,3382,3296,
        1,0,0,0,3382,3302,1,0,0,0,3382,3322,1,0,0,0,3382,3343,1,0,0,0,3382,
        3364,1,0,0,0,3383,237,1,0,0,0,3384,3385,5,269,0,0,3385,3386,5,228,
        0,0,3386,239,1,0,0,0,3387,3388,5,2,0,0,3388,3389,3,244,122,0,3389,
        3390,5,3,0,0,3390,241,1,0,0,0,3391,3392,5,2,0,0,3392,3393,3,246,
        123,0,3393,3394,5,3,0,0,3394,243,1,0,0,0,3395,3400,3,1432,716,0,
        3396,3397,5,6,0,0,3397,3399,3,1432,716,0,3398,3396,1,0,0,0,3399,
        3402,1,0,0,0,3400,3398,1,0,0,0,3400,3401,1,0,0,0,3401,245,1,0,0,
        0,3402,3400,1,0,0,0,3403,3408,3,1434,717,0,3404,3405,5,6,0,0,3405,
        3407,3,1434,717,0,3406,3404,1,0,0,0,3407,3410,1,0,0,0,3408,3406,
        1,0,0,0,3408,3409,1,0,0,0,3409,247,1,0,0,0,3410,3408,1,0,0,0,3411,
        3412,5,441,0,0,3412,3413,5,2,0,0,3413,3414,3,244,122,0,3414,3415,
        5,3,0,0,3415,249,1,0,0,0,3416,3417,5,258,0,0,3417,3418,7,28,0,0,
        3418,251,1,0,0,0,3419,3424,3,254,127,0,3420,3421,5,6,0,0,3421,3423,
        3,254,127,0,3422,3420,1,0,0,0,3423,3426,1,0,0,0,3424,3422,1,0,0,
        0,3424,3425,1,0,0,0,3425,253,1,0,0,0,3426,3424,1,0,0,0,3427,3428,
        3,640,320,0,3428,3435,5,105,0,0,3429,3436,3,732,366,0,3430,3431,
        5,278,0,0,3431,3432,5,2,0,0,3432,3433,3,732,366,0,3433,3434,5,3,
        0,0,3434,3436,1,0,0,0,3435,3429,1,0,0,0,3435,3430,1,0,0,0,3436,255,
        1,0,0,0,3437,3438,5,103,0,0,3438,3439,5,2,0,0,3439,3440,3,1212,606,
        0,3440,3441,5,3,0,0,3441,257,1,0,0,0,3442,3451,3,260,130,0,3443,
        3451,3,262,131,0,3444,3445,3,260,130,0,3445,3446,3,262,131,0,3446,
        3451,1,0,0,0,3447,3448,3,262,131,0,3448,3449,3,260,130,0,3449,3451,
        1,0,0,0,3450,3442,1,0,0,0,3450,3443,1,0,0,0,3450,3444,1,0,0,0,3450,
        3447,1,0,0,0,3451,259,1,0,0,0,3452,3453,5,80,0,0,3453,3454,5,369,
        0,0,3454,3455,3,264,132,0,3455,261,1,0,0,0,3456,3457,5,80,0,0,3457,
        3458,5,182,0,0,3458,3459,3,264,132,0,3459,263,1,0,0,0,3460,3461,
        5,269,0,0,3461,3470,5,132,0,0,3462,3470,5,315,0,0,3463,3470,5,150,
        0,0,3464,3465,5,333,0,0,3465,3467,7,29,0,0,3466,3468,3,244,122,0,
        3467,3466,1,0,0,0,3467,3468,1,0,0,0,3468,3470,1,0,0,0,3469,3460,
        1,0,0,0,3469,3462,1,0,0,0,3469,3463,1,0,0,0,3469,3464,1,0,0,0,3470,
        265,1,0,0,0,3471,3472,5,238,0,0,3472,3473,5,2,0,0,3473,3474,3,1390,
        695,0,3474,3475,5,3,0,0,3475,267,1,0,0,0,3476,3477,3,270,135,0,3477,
        269,1,0,0,0,3478,3479,5,285,0,0,3479,3480,5,147,0,0,3480,3481,3,
        1474,737,0,3481,3482,5,2,0,0,3482,3483,3,272,136,0,3483,3484,5,3,
        0,0,3484,271,1,0,0,0,3485,3490,3,274,137,0,3486,3487,5,6,0,0,3487,
        3489,3,274,137,0,3488,3486,1,0,0,0,3489,3492,1,0,0,0,3490,3488,1,
        0,0,0,3490,3491,1,0,0,0,3491,273,1,0,0,0,3492,3490,1,0,0,0,3493,
        3495,3,1432,716,0,3494,3496,3,646,323,0,3495,3494,1,0,0,0,3495,3496,
        1,0,0,0,3496,3498,1,0,0,0,3497,3499,3,648,324,0,3498,3497,1,0,0,
        0,3498,3499,1,0,0,0,3499,3517,1,0,0,0,3500,3502,3,1262,631,0,3501,
        3503,3,646,323,0,3502,3501,1,0,0,0,3502,3503,1,0,0,0,3503,3505,1,
        0,0,0,3504,3506,3,648,324,0,3505,3504,1,0,0,0,3505,3506,1,0,0,0,
        3506,3517,1,0,0,0,3507,3508,5,2,0,0,3508,3509,3,1212,606,0,3509,
        3511,5,3,0,0,3510,3512,3,646,323,0,3511,3510,1,0,0,0,3511,3512,1,
        0,0,0,3512,3514,1,0,0,0,3513,3515,3,648,324,0,3514,3513,1,0,0,0,
        3514,3515,1,0,0,0,3515,3517,1,0,0,0,3516,3493,1,0,0,0,3516,3500,
        1,0,0,0,3516,3507,1,0,0,0,3517,275,1,0,0,0,3518,3519,5,100,0,0,3519,
        3520,3,1436,718,0,3520,277,1,0,0,0,3521,3522,5,105,0,0,3522,3528,
        3,132,66,0,3523,3524,5,379,0,0,3524,3528,5,277,0,0,3525,3526,5,105,
        0,0,3526,3528,5,277,0,0,3527,3521,1,0,0,0,3527,3523,1,0,0,0,3527,
        3525,1,0,0,0,3528,279,1,0,0,0,3529,3530,5,80,0,0,3530,3536,5,161,
        0,0,3531,3537,5,191,0,0,3532,3533,5,182,0,0,3533,3537,5,320,0,0,
        3534,3535,5,292,0,0,3535,3537,5,320,0,0,3536,3531,1,0,0,0,3536,3532,
        1,0,0,0,3536,3534,1,0,0,0,3537,281,1,0,0,0,3538,3539,5,351,0,0,3539,
        3540,3,1402,701,0,3540,283,1,0,0,0,3541,3543,3,642,321,0,3542,3541,
        1,0,0,0,3542,3543,1,0,0,0,3543,3545,1,0,0,0,3544,3546,3,1014,507,
        0,3545,3544,1,0,0,0,3545,3546,1,0,0,0,3546,3548,1,0,0,0,3547,3549,
        3,286,143,0,3548,3547,1,0,0,0,3548,3549,1,0,0,0,3549,285,1,0,0,0,
        3550,3551,5,100,0,0,3551,3552,5,226,0,0,3552,3553,5,351,0,0,3553,
        3554,3,1402,701,0,3554,287,1,0,0,0,3555,3556,5,100,0,0,3556,3557,
        5,226,0,0,3557,3558,3,1436,718,0,3558,289,1,0,0,0,3559,3560,5,46,
        0,0,3560,3565,5,342,0,0,3561,3563,3,516,258,0,3562,3561,1,0,0,0,
        3562,3563,1,0,0,0,3563,3564,1,0,0,0,3564,3566,3,558,279,0,3565,3562,
        1,0,0,0,3565,3566,1,0,0,0,3566,3568,1,0,0,0,3567,3569,3,918,459,
        0,3568,3567,1,0,0,0,3568,3569,1,0,0,0,3569,3570,1,0,0,0,3570,3573,
        5,80,0,0,3571,3574,3,1332,666,0,3572,3574,3,1328,664,0,3573,3571,
        1,0,0,0,3573,3572,1,0,0,0,3574,3575,1,0,0,0,3575,3576,5,64,0,0,3576,
        3577,3,1104,552,0,3577,291,1,0,0,0,3578,3579,5,138,0,0,3579,3581,
        5,342,0,0,3580,3582,3,748,374,0,3581,3580,1,0,0,0,3581,3582,1,0,
        0,0,3582,3583,1,0,0,0,3583,3584,3,558,279,0,3584,3585,5,333,0,0,
        3585,3586,5,342,0,0,3586,3587,3,1464,732,0,3587,293,1,0,0,0,3588,
        3590,5,46,0,0,3589,3591,3,190,95,0,3590,3589,1,0,0,0,3590,3591,1,
        0,0,0,3591,3592,1,0,0,0,3592,3594,5,92,0,0,3593,3595,3,516,258,0,
        3594,3593,1,0,0,0,3594,3595,1,0,0,0,3595,3596,1,0,0,0,3596,3597,
        3,296,148,0,3597,3598,5,36,0,0,3598,3600,3,1000,500,0,3599,3601,
        3,298,149,0,3600,3599,1,0,0,0,3600,3601,1,0,0,0,3601,295,1,0,0,0,
        3602,3604,3,1404,702,0,3603,3605,3,242,121,0,3604,3603,1,0,0,0,3604,
        3605,1,0,0,0,3605,3607,1,0,0,0,3606,3608,3,276,138,0,3607,3606,1,
        0,0,0,3607,3608,1,0,0,0,3608,3610,1,0,0,0,3609,3611,3,278,139,0,
        3610,3609,1,0,0,0,3610,3611,1,0,0,0,3611,3613,1,0,0,0,3612,3614,
        3,280,140,0,3613,3612,1,0,0,0,3613,3614,1,0,0,0,3614,3616,1,0,0,
        0,3615,3617,3,282,141,0,3616,3615,1,0,0,0,3616,3617,1,0,0,0,3617,
        297,1,0,0,0,3618,3622,5,105,0,0,3619,3623,5,174,0,0,3620,3621,5,
        269,0,0,3621,3623,5,174,0,0,3622,3619,1,0,0,0,3622,3620,1,0,0,0,
        3623,299,1,0,0,0,3624,3626,5,46,0,0,3625,3627,3,304,152,0,3626,3625,
        1,0,0,0,3626,3627,1,0,0,0,3627,3628,1,0,0,0,3628,3629,5,259,0,0,
        3629,3631,5,376,0,0,3630,3632,3,516,258,0,3631,3630,1,0,0,0,3631,
        3632,1,0,0,0,3632,3633,1,0,0,0,3633,3634,3,302,151,0,3634,3635,5,
        36,0,0,3635,3637,3,1000,500,0,3636,3638,3,298,149,0,3637,3636,1,
        0,0,0,3637,3638,1,0,0,0,3638,301,1,0,0,0,3639,3641,3,1408,704,0,
        3640,3642,3,242,121,0,3641,3640,1,0,0,0,3641,3642,1,0,0,0,3642,3644,
        1,0,0,0,3643,3645,3,276,138,0,3644,3643,1,0,0,0,3644,3645,1,0,0,
        0,3645,3647,1,0,0,0,3646,3648,3,134,67,0,3647,3646,1,0,0,0,3647,
        3648,1,0,0,0,3648,3650,1,0,0,0,3649,3651,3,282,141,0,3650,3649,1,
        0,0,0,3650,3651,1,0,0,0,3651,303,1,0,0,0,3652,3653,5,367,0,0,3653,
        305,1,0,0,0,3654,3655,5,305,0,0,3655,3656,5,259,0,0,3656,3658,5,
        376,0,0,3657,3659,3,630,315,0,3658,3657,1,0,0,0,3658,3659,1,0,0,
        0,3659,3660,1,0,0,0,3660,3662,3,1410,705,0,3661,3663,3,298,149,0,
        3662,3661,1,0,0,0,3662,3663,1,0,0,0,3663,307,1,0,0,0,3664,3666,5,
        46,0,0,3665,3667,3,190,95,0,3666,3665,1,0,0,0,3666,3667,1,0,0,0,
        3667,3668,1,0,0,0,3668,3670,5,328,0,0,3669,3671,3,516,258,0,3670,
        3669,1,0,0,0,3670,3671,1,0,0,0,3671,3672,1,0,0,0,3672,3674,3,1412,
        706,0,3673,3675,3,312,156,0,3674,3673,1,0,0,0,3674,3675,1,0,0,0,
        3675,309,1,0,0,0,3676,3677,5,138,0,0,3677,3679,5,328,0,0,3678,3680,
        3,748,374,0,3679,3678,1,0,0,0,3679,3680,1,0,0,0,3680,3681,1,0,0,
        0,3681,3682,3,1412,706,0,3682,3683,3,316,158,0,3683,311,1,0,0,0,
        3684,3685,3,316,158,0,3685,313,1,0,0,0,3686,3687,5,2,0,0,3687,3688,
        3,316,158,0,3688,3689,5,3,0,0,3689,315,1,0,0,0,3690,3692,3,318,159,
        0,3691,3690,1,0,0,0,3692,3693,1,0,0,0,3693,3691,1,0,0,0,3693,3694,
        1,0,0,0,3694,317,1,0,0,0,3695,3696,5,36,0,0,3696,3730,3,1172,586,
        0,3697,3698,5,148,0,0,3698,3730,3,322,161,0,3699,3730,5,173,0,0,
        3700,3702,5,225,0,0,3701,3703,3,320,160,0,3702,3701,1,0,0,0,3702,
        3703,1,0,0,0,3703,3704,1,0,0,0,3704,3730,3,322,161,0,3705,3706,5,
        260,0,0,3706,3730,3,322,161,0,3707,3708,5,262,0,0,3708,3730,3,322,
        161,0,3709,3710,5,269,0,0,3710,3730,7,30,0,0,3711,3712,5,281,0,0,
        3712,3713,5,147,0,0,3713,3730,3,1432,716,0,3714,3715,5,328,0,0,3715,
        3716,5,266,0,0,3716,3730,3,558,279,0,3717,3719,5,340,0,0,3718,3720,
        3,14,7,0,3719,3718,1,0,0,0,3719,3720,1,0,0,0,3720,3721,1,0,0,0,3721,
        3730,3,322,161,0,3722,3724,5,314,0,0,3723,3725,3,14,7,0,3724,3723,
        1,0,0,0,3724,3725,1,0,0,0,3725,3727,1,0,0,0,3726,3728,3,322,161,
        0,3727,3726,1,0,0,0,3727,3728,1,0,0,0,3728,3730,1,0,0,0,3729,3695,
        1,0,0,0,3729,3697,1,0,0,0,3729,3699,1,0,0,0,3729,3700,1,0,0,0,3729,
        3705,1,0,0,0,3729,3707,1,0,0,0,3729,3709,1,0,0,0,3729,3711,1,0,0,
        0,3729,3714,1,0,0,0,3729,3717,1,0,0,0,3729,3722,1,0,0,0,3730,319,
        1,0,0,0,3731,3732,5,147,0,0,3732,321,1,0,0,0,3733,3740,3,1454,727,
        0,3734,3735,5,12,0,0,3735,3740,3,1454,727,0,3736,3737,5,13,0,0,3737,
        3740,3,1454,727,0,3738,3740,3,1464,732,0,3739,3733,1,0,0,0,3739,
        3734,1,0,0,0,3739,3736,1,0,0,0,3739,3738,1,0,0,0,3740,323,1,0,0,
        0,3741,3746,3,322,161,0,3742,3743,5,6,0,0,3743,3745,3,322,161,0,
        3744,3742,1,0,0,0,3745,3748,1,0,0,0,3746,3744,1,0,0,0,3746,3747,
        1,0,0,0,3747,325,1,0,0,0,3748,3746,1,0,0,0,3749,3751,5,46,0,0,3750,
        3752,3,658,329,0,3751,3750,1,0,0,0,3751,3752,1,0,0,0,3752,3754,1,
        0,0,0,3753,3755,3,328,164,0,3754,3753,1,0,0,0,3754,3755,1,0,0,0,
        3755,3757,1,0,0,0,3756,3758,3,338,169,0,3757,3756,1,0,0,0,3757,3758,
        1,0,0,0,3758,3759,1,0,0,0,3759,3760,5,247,0,0,3760,3769,3,1436,718,
        0,3761,3762,5,215,0,0,3762,3764,3,330,165,0,3763,3765,3,332,166,
        0,3764,3763,1,0,0,0,3764,3765,1,0,0,0,3765,3767,1,0,0,0,3766,3768,
        3,336,168,0,3767,3766,1,0,0,0,3767,3768,1,0,0,0,3768,3770,1,0,0,
        0,3769,3761,1,0,0,0,3769,3770,1,0,0,0,3770,327,1,0,0,0,3771,3772,
        5,359,0,0,3772,329,1,0,0,0,3773,3775,3,1436,718,0,3774,3776,3,560,
        280,0,3775,3774,1,0,0,0,3775,3776,1,0,0,0,3776,331,1,0,0,0,3777,
        3778,5,239,0,0,3778,3779,3,330,165,0,3779,333,1,0,0,0,3780,3781,
        5,373,0,0,3781,3785,3,330,165,0,3782,3783,5,269,0,0,3783,3785,5,
        373,0,0,3784,3780,1,0,0,0,3784,3782,1,0,0,0,3785,335,1,0,0,0,3786,
        3787,3,334,167,0,3787,337,1,0,0,0,3788,3789,5,295,0,0,3789,339,1,
        0,0,0,3790,3791,5,46,0,0,3791,3792,5,351,0,0,3792,3794,3,1402,701,
        0,3793,3795,3,342,171,0,3794,3793,1,0,0,0,3794,3795,1,0,0,0,3795,
        3796,1,0,0,0,3796,3797,5,255,0,0,3797,3799,3,1458,729,0,3798,3800,
        3,134,67,0,3799,3798,1,0,0,0,3799,3800,1,0,0,0,3800,341,1,0,0,0,
        3801,3802,5,282,0,0,3802,3803,3,1470,735,0,3803,343,1,0,0,0,3804,
        3805,5,46,0,0,3805,3807,5,204,0,0,3806,3808,3,516,258,0,3807,3806,
        1,0,0,0,3807,3808,1,0,0,0,3808,3809,1,0,0,0,3809,3811,3,1436,718,
        0,3810,3812,3,14,7,0,3811,3810,1,0,0,0,3811,3812,1,0,0,0,3812,3813,
        1,0,0,0,3813,3814,3,346,173,0,3814,345,1,0,0,0,3815,3817,3,348,174,
        0,3816,3815,1,0,0,0,3817,3820,1,0,0,0,3818,3816,1,0,0,0,3818,3819,
        1,0,0,0,3819,347,1,0,0,0,3820,3818,1,0,0,0,3821,3822,5,323,0,0,3822,
        3829,3,1422,711,0,3823,3824,5,375,0,0,3824,3829,3,80,40,0,3825,3826,
        5,64,0,0,3826,3829,3,80,40,0,3827,3829,5,150,0,0,3828,3821,1,0,0,
        0,3828,3823,1,0,0,0,3828,3825,1,0,0,0,3828,3827,1,0,0,0,3829,349,
        1,0,0,0,3830,3831,5,138,0,0,3831,3832,5,204,0,0,3832,3833,3,1436,
        718,0,3833,3834,5,369,0,0,3834,3835,3,352,176,0,3835,351,1,0,0,0,
        3836,3838,3,354,177,0,3837,3836,1,0,0,0,3838,3841,1,0,0,0,3839,3837,
        1,0,0,0,3839,3840,1,0,0,0,3840,353,1,0,0,0,3841,3839,1,0,0,0,3842,
        3843,5,94,0,0,3843,3844,3,80,40,0,3844,355,1,0,0,0,3845,3846,5,138,
        0,0,3846,3847,5,204,0,0,3847,3848,3,1436,718,0,3848,3849,3,44,22,
        0,3849,3850,3,548,274,0,3850,3948,1,0,0,0,3851,3852,5,138,0,0,3852,
        3853,5,204,0,0,3853,3854,3,1436,718,0,3854,3855,3,44,22,0,3855,3856,
        3,546,273,0,3856,3948,1,0,0,0,3857,3858,5,138,0,0,3858,3859,5,204,
        0,0,3859,3860,3,1436,718,0,3860,3861,3,44,22,0,3861,3862,5,136,0,
        0,3862,3863,3,698,349,0,3863,3948,1,0,0,0,3864,3865,5,138,0,0,3865,
        3866,5,204,0,0,3866,3867,3,1436,718,0,3867,3868,3,44,22,0,3868,3869,
        5,41,0,0,3869,3870,5,2,0,0,3870,3871,3,1168,584,0,3871,3872,5,36,
        0,0,3872,3873,3,1168,584,0,3873,3874,5,3,0,0,3874,3948,1,0,0,0,3875,
        3876,5,138,0,0,3876,3877,5,204,0,0,3877,3878,3,1436,718,0,3878,3879,
        3,44,22,0,3879,3880,5,189,0,0,3880,3881,3,1168,584,0,3881,3948,1,
        0,0,0,3882,3883,5,138,0,0,3883,3884,5,204,0,0,3884,3885,3,1436,718,
        0,3885,3886,3,44,22,0,3886,3887,5,211,0,0,3887,3888,3,674,337,0,
        3888,3948,1,0,0,0,3889,3890,5,138,0,0,3890,3891,5,204,0,0,3891,3892,
        3,1436,718,0,3892,3893,3,44,22,0,3893,3894,5,278,0,0,3894,3895,3,
        736,368,0,3895,3948,1,0,0,0,3896,3897,5,138,0,0,3897,3898,5,204,
        0,0,3898,3899,3,1436,718,0,3899,3900,3,44,22,0,3900,3901,5,278,0,
        0,3901,3902,5,156,0,0,3902,3903,3,558,279,0,3903,3904,5,100,0,0,
        3904,3905,3,1436,718,0,3905,3948,1,0,0,0,3906,3907,5,138,0,0,3907,
        3908,5,204,0,0,3908,3909,3,1436,718,0,3909,3910,3,44,22,0,3910,3911,
        5,278,0,0,3911,3912,5,206,0,0,3912,3913,3,558,279,0,3913,3914,5,
        100,0,0,3914,3915,3,1436,718,0,3915,3948,1,0,0,0,3916,3917,5,138,
        0,0,3917,3918,5,204,0,0,3918,3919,3,1436,718,0,3919,3920,3,44,22,
        0,3920,3921,5,296,0,0,3921,3922,3,670,335,0,3922,3948,1,0,0,0,3923,
        3924,5,138,0,0,3924,3925,5,204,0,0,3925,3926,3,1436,718,0,3926,3927,
        3,44,22,0,3927,3928,5,442,0,0,3928,3929,3,666,333,0,3929,3948,1,
        0,0,0,3930,3931,5,138,0,0,3931,3932,5,204,0,0,3932,3933,3,1436,718,
        0,3933,3934,3,44,22,0,3934,3935,5,443,0,0,3935,3936,5,62,0,0,3936,
        3937,3,1168,584,0,3937,3938,5,247,0,0,3938,3939,3,1436,718,0,3939,
        3948,1,0,0,0,3940,3941,5,138,0,0,3941,3942,5,204,0,0,3942,3943,3,
        1436,718,0,3943,3944,3,44,22,0,3944,3945,5,360,0,0,3945,3946,3,1168,
        584,0,3946,3948,1,0,0,0,3947,3845,1,0,0,0,3947,3851,1,0,0,0,3947,
        3857,1,0,0,0,3947,3864,1,0,0,0,3947,3875,1,0,0,0,3947,3882,1,0,0,
        0,3947,3889,1,0,0,0,3947,3896,1,0,0,0,3947,3906,1,0,0,0,3947,3916,
        1,0,0,0,3947,3923,1,0,0,0,3947,3930,1,0,0,0,3947,3940,1,0,0,0,3948,
        357,1,0,0,0,3949,3950,5,46,0,0,3950,3951,5,63,0,0,3951,3952,5,174,
        0,0,3952,3953,5,381,0,0,3953,3955,3,1436,718,0,3954,3956,3,364,182,
        0,3955,3954,1,0,0,0,3955,3956,1,0,0,0,3956,3958,1,0,0,0,3957,3959,
        3,368,184,0,3958,3957,1,0,0,0,3958,3959,1,0,0,0,3959,359,1,0,0,0,
        3960,3961,5,215,0,0,3961,3969,3,330,165,0,3962,3963,5,269,0,0,3963,
        3969,5,215,0,0,3964,3965,5,373,0,0,3965,3969,3,330,165,0,3966,3967,
        5,269,0,0,3967,3969,5,373,0,0,3968,3960,1,0,0,0,3968,3962,1,0,0,
        0,3968,3964,1,0,0,0,3968,3966,1,0,0,0,3969,361,1,0,0,0,3970,3972,
        3,360,180,0,3971,3970,1,0,0,0,3972,3973,1,0,0,0,3973,3971,1,0,0,
        0,3973,3974,1,0,0,0,3974,363,1,0,0,0,3975,3976,3,362,181,0,3976,
        365,1,0,0,0,3977,3978,5,138,0,0,3978,3979,5,63,0,0,3979,3980,5,174,
        0,0,3980,3981,5,381,0,0,3981,3983,3,1436,718,0,3982,3984,3,364,182,
        0,3983,3982,1,0,0,0,3983,3984,1,0,0,0,3984,3985,1,0,0,0,3985,3986,
        3,372,186,0,3986,3995,1,0,0,0,3987,3988,5,138,0,0,3988,3989,5,63,
        0,0,3989,3990,5,174,0,0,3990,3991,5,381,0,0,3991,3992,3,1436,718,
        0,3992,3993,3,362,181,0,3993,3995,1,0,0,0,3994,3977,1,0,0,0,3994,
        3987,1,0,0,0,3995,367,1,0,0,0,3996,3997,5,280,0,0,3997,3998,5,2,
        0,0,3998,3999,3,370,185,0,3999,4000,5,3,0,0,4000,369,1,0,0,0,4001,
        4006,3,378,189,0,4002,4003,5,6,0,0,4003,4005,3,378,189,0,4004,4002,
        1,0,0,0,4005,4008,1,0,0,0,4006,4004,1,0,0,0,4006,4007,1,0,0,0,4007,
        371,1,0,0,0,4008,4006,1,0,0,0,4009,4010,5,280,0,0,4010,4011,5,2,
        0,0,4011,4012,3,374,187,0,4012,4013,5,3,0,0,4013,373,1,0,0,0,4014,
        4019,3,376,188,0,4015,4016,5,6,0,0,4016,4018,3,376,188,0,4017,4015,
        1,0,0,0,4018,4021,1,0,0,0,4019,4017,1,0,0,0,4019,4020,1,0,0,0,4020,
        375,1,0,0,0,4021,4019,1,0,0,0,4022,4030,3,378,189,0,4023,4024,5,
        333,0,0,4024,4030,3,378,189,0,4025,4026,5,133,0,0,4026,4030,3,378,
        189,0,4027,4028,5,191,0,0,4028,4030,3,378,189,0,4029,4022,1,0,0,
        0,4029,4023,1,0,0,0,4029,4025,1,0,0,0,4029,4027,1,0,0,0,4030,377,
        1,0,0,0,4031,4032,3,380,190,0,4032,4033,3,382,191,0,4033,379,1,0,
        0,0,4034,4035,3,1490,745,0,4035,381,1,0,0,0,4036,4037,3,1458,729,
        0,4037,383,1,0,0,0,4038,4039,5,46,0,0,4039,4041,5,331,0,0,4040,4042,
        3,516,258,0,4041,4040,1,0,0,0,4041,4042,1,0,0,0,4042,4043,1,0,0,
        0,4043,4045,3,1436,718,0,4044,4046,3,386,193,0,4045,4044,1,0,0,0,
        4045,4046,1,0,0,0,4046,4048,1,0,0,0,4047,4049,3,390,195,0,4048,4047,
        1,0,0,0,4048,4049,1,0,0,0,4049,4050,1,0,0,0,4050,4051,5,63,0,0,4051,
        4052,5,174,0,0,4052,4053,5,381,0,0,4053,4055,3,1436,718,0,4054,4056,
        3,368,184,0,4055,4054,1,0,0,0,4055,4056,1,0,0,0,4056,385,1,0,0,0,
        4057,4058,5,360,0,0,4058,4059,3,1458,729,0,4059,387,1,0,0,0,4060,
        4063,5,375,0,0,4061,4064,3,1458,729,0,4062,4064,5,78,0,0,4063,4061,
        1,0,0,0,4063,4062,1,0,0,0,4064,389,1,0,0,0,4065,4066,3,388,194,0,
        4066,391,1,0,0,0,4067,4068,5,138,0,0,4068,4069,5,331,0,0,4069,4075,
        3,1436,718,0,4070,4076,3,372,186,0,4071,4073,3,388,194,0,4072,4074,
        3,372,186,0,4073,4072,1,0,0,0,4073,4074,1,0,0,0,4074,4076,1,0,0,
        0,4075,4070,1,0,0,0,4075,4071,1,0,0,0,4076,393,1,0,0,0,4077,4078,
        5,46,0,0,4078,4079,5,63,0,0,4079,4081,5,92,0,0,4080,4082,3,516,258,
        0,4081,4080,1,0,0,0,4081,4082,1,0,0,0,4082,4083,1,0,0,0,4083,4084,
        3,1404,702,0,4084,4086,5,2,0,0,4085,4087,3,194,97,0,4086,4085,1,
        0,0,0,4086,4087,1,0,0,0,4087,4088,1,0,0,0,4088,4090,5,3,0,0,4089,
        4091,3,266,133,0,4090,4089,1,0,0,0,4090,4091,1,0,0,0,4091,4092,1,
        0,0,0,4092,4093,5,331,0,0,4093,4095,3,1436,718,0,4094,4096,3,368,
        184,0,4095,4094,1,0,0,0,4095,4096,1,0,0,0,4096,4117,1,0,0,0,4097,
        4098,5,46,0,0,4098,4099,5,63,0,0,4099,4101,5,92,0,0,4100,4102,3,
        516,258,0,4101,4100,1,0,0,0,4101,4102,1,0,0,0,4102,4103,1,0,0,0,
        4103,4104,3,1404,702,0,4104,4105,5,285,0,0,4105,4106,5,275,0,0,4106,
        4108,3,1406,703,0,4107,4109,3,196,98,0,4108,4107,1,0,0,0,4108,4109,
        1,0,0,0,4109,4110,1,0,0,0,4110,4111,3,144,72,0,4111,4112,5,331,0,
        0,4112,4114,3,1436,718,0,4113,4115,3,368,184,0,4114,4113,1,0,0,0,
        4114,4115,1,0,0,0,4115,4117,1,0,0,0,4116,4077,1,0,0,0,4116,4097,
        1,0,0,0,4117,395,1,0,0,0,4118,4119,5,444,0,0,4119,4120,5,63,0,0,
        4120,4121,5,323,0,0,4121,4123,3,1422,711,0,4122,4124,3,400,200,0,
        4123,4122,1,0,0,0,4123,4124,1,0,0,0,4124,4125,1,0,0,0,4125,4126,
        5,64,0,0,4126,4127,5,331,0,0,4127,4128,3,1436,718,0,4128,4129,5,
        71,0,0,4129,4131,3,1436,718,0,4130,4132,3,368,184,0,4131,4130,1,
        0,0,0,4131,4132,1,0,0,0,4132,397,1,0,0,0,4133,4134,5,74,0,0,4134,
        4137,5,94,0,0,4135,4137,5,59,0,0,4136,4133,1,0,0,0,4136,4135,1,0,
        0,0,4137,399,1,0,0,0,4138,4139,3,398,199,0,4139,4140,5,2,0,0,4140,
        4141,3,1124,562,0,4141,4142,5,3,0,0,4142,401,1,0,0,0,4143,4144,5,
        46,0,0,4144,4145,5,99,0,0,4145,4147,5,257,0,0,4146,4148,3,516,258,
        0,4147,4146,1,0,0,0,4147,4148,1,0,0,0,4148,4149,1,0,0,0,4149,4150,
        5,62,0,0,4150,4151,3,404,202,0,4151,4152,5,331,0,0,4152,4154,3,1436,
        718,0,4153,4155,3,368,184,0,4154,4153,1,0,0,0,4154,4155,1,0,0,0,
        4155,403,1,0,0,0,4156,4159,3,1470,735,0,4157,4159,5,99,0,0,4158,
        4156,1,0,0,0,4158,4157,1,0,0,0,4159,405,1,0,0,0,4160,4161,5,138,
        0,0,4161,4162,5,99,0,0,4162,4163,5,257,0,0,4163,4164,5,62,0,0,4164,
        4165,3,404,202,0,4165,4166,5,331,0,0,4166,4167,3,1436,718,0,4167,
        4168,3,372,186,0,4168,407,1,0,0,0,4169,4170,5,46,0,0,4170,4171,5,
        445,0,0,4171,4172,3,1436,718,0,4172,4173,5,80,0,0,4173,4175,3,1412,
        706,0,4174,4176,3,426,213,0,4175,4174,1,0,0,0,4175,4176,1,0,0,0,
        4176,4178,1,0,0,0,4177,4179,3,428,214,0,4178,4177,1,0,0,0,4178,4179,
        1,0,0,0,4179,4181,1,0,0,0,4180,4182,3,422,211,0,4181,4180,1,0,0,
        0,4181,4182,1,0,0,0,4182,4184,1,0,0,0,4183,4185,3,418,209,0,4184,
        4183,1,0,0,0,4184,4185,1,0,0,0,4185,4187,1,0,0,0,4186,4188,3,420,
        210,0,4187,4186,1,0,0,0,4187,4188,1,0,0,0,4188,409,1,0,0,0,4189,
        4190,5,138,0,0,4190,4191,5,445,0,0,4191,4192,3,1436,718,0,4192,4193,
        5,80,0,0,4193,4195,3,1412,706,0,4194,4196,3,424,212,0,4195,4194,
        1,0,0,0,4195,4196,1,0,0,0,4196,4198,1,0,0,0,4197,4199,3,418,209,
        0,4198,4197,1,0,0,0,4198,4199,1,0,0,0,4199,4201,1,0,0,0,4200,4202,
        3,420,210,0,4201,4200,1,0,0,0,4201,4202,1,0,0,0,4202,411,1,0,0,0,
        4203,4204,5,138,0,0,4204,4205,5,296,0,0,4205,4207,3,1428,714,0,4206,
        4208,3,660,330,0,4207,4206,1,0,0,0,4207,4208,1,0,0,0,4208,4209,1,
        0,0,0,4209,4210,3,414,207,0,4210,413,1,0,0,0,4211,4215,3,416,208,
        0,4212,4214,3,416,208,0,4213,4212,1,0,0,0,4214,4217,1,0,0,0,4215,
        4213,1,0,0,0,4215,4216,1,0,0,0,4216,4219,1,0,0,0,4217,4215,1,0,0,
        0,4218,4220,5,315,0,0,4219,4218,1,0,0,0,4219,4220,1,0,0,0,4220,4238,
        1,0,0,0,4221,4222,5,309,0,0,4222,4223,5,94,0,0,4223,4238,3,1430,
        715,0,4224,4225,5,282,0,0,4225,4226,5,94,0,0,4226,4238,3,1470,735,
        0,4227,4228,5,333,0,0,4228,4229,5,323,0,0,4229,4238,3,48,24,0,4230,
        4232,5,269,0,0,4231,4230,1,0,0,0,4231,4232,1,0,0,0,4232,4233,1,0,
        0,0,4233,4234,5,462,0,0,4234,4235,5,80,0,0,4235,4236,5,204,0,0,4236,
        4238,3,1436,718,0,4237,4211,1,0,0,0,4237,4221,1,0,0,0,4237,4224,
        1,0,0,0,4237,4227,1,0,0,0,4237,4231,1,0,0,0,4238,415,1,0,0,0,4239,
        4241,5,205,0,0,4240,4239,1,0,0,0,4240,4241,1,0,0,0,4241,4242,1,0,
        0,0,4242,4243,5,327,0,0,4243,4250,5,243,0,0,4244,4246,5,205,0,0,
        4245,4244,1,0,0,0,4245,4246,1,0,0,0,4246,4247,1,0,0,0,4247,4248,
        5,327,0,0,4248,4250,5,181,0,0,4249,4240,1,0,0,0,4249,4245,1,0,0,
        0,4250,4268,1,0,0,0,4251,4252,5,333,0,0,4252,4253,3,1436,718,0,4253,
        4256,7,31,0,0,4254,4257,3,1436,718,0,4255,4257,5,53,0,0,4256,4254,
        1,0,0,0,4256,4255,1,0,0,0,4257,4268,1,0,0,0,4258,4259,5,333,0,0,
        4259,4260,3,1436,718,0,4260,4261,5,64,0,0,4261,4262,5,434,0,0,4262,
        4268,1,0,0,0,4263,4264,5,313,0,0,4264,4268,3,1436,718,0,4265,4266,
        5,313,0,0,4266,4268,5,30,0,0,4267,4249,1,0,0,0,4267,4251,1,0,0,0,
        4267,4258,1,0,0,0,4267,4263,1,0,0,0,4267,4265,1,0,0,0,4268,417,1,
        0,0,0,4269,4270,5,100,0,0,4270,4271,5,2,0,0,4271,4272,3,1212,606,
        0,4272,4273,5,3,0,0,4273,419,1,0,0,0,4274,4275,5,105,0,0,4275,4276,
        5,42,0,0,4276,4277,5,2,0,0,4277,4278,3,1212,606,0,4278,4279,5,3,
        0,0,4279,421,1,0,0,0,4280,4281,5,94,0,0,4281,4282,3,1472,736,0,4282,
        423,1,0,0,0,4283,4284,5,94,0,0,4284,4285,3,1472,736,0,4285,425,1,
        0,0,0,4286,4290,5,36,0,0,4287,4291,5,541,0,0,4288,4291,5,542,0,0,
        4289,4291,3,1492,746,0,4290,4287,1,0,0,0,4290,4288,1,0,0,0,4290,
        4289,1,0,0,0,4291,427,1,0,0,0,4292,4293,5,62,0,0,4293,4294,3,430,
        215,0,4294,429,1,0,0,0,4295,4296,7,32,0,0,4296,431,1,0,0,0,4297,
        4298,5,46,0,0,4298,4299,5,131,0,0,4299,4300,5,446,0,0,4300,4301,
        3,1436,718,0,4301,4302,5,360,0,0,4302,4303,3,434,217,0,4303,4304,
        5,215,0,0,4304,4305,3,330,165,0,4305,433,1,0,0,0,4306,4307,7,33,
        0,0,4307,435,1,0,0,0,4308,4310,5,46,0,0,4309,4311,3,658,329,0,4310,
        4309,1,0,0,0,4310,4311,1,0,0,0,4311,4312,1,0,0,0,4312,4313,5,357,
        0,0,4313,4314,3,1436,718,0,4314,4315,3,438,219,0,4315,4316,3,444,
        222,0,4316,4317,5,80,0,0,4317,4319,3,1406,703,0,4318,4320,3,448,
        224,0,4319,4318,1,0,0,0,4319,4320,1,0,0,0,4320,4322,1,0,0,0,4321,
        4323,3,460,230,0,4322,4321,1,0,0,0,4322,4323,1,0,0,0,4323,4325,1,
        0,0,0,4324,4326,3,466,233,0,4325,4324,1,0,0,0,4325,4326,1,0,0,0,
        4326,4327,1,0,0,0,4327,4328,5,202,0,0,4328,4329,3,468,234,0,4329,
        4330,5,2,0,0,4330,4331,3,470,235,0,4331,4332,5,3,0,0,4332,4363,1,
        0,0,0,4333,4335,5,46,0,0,4334,4336,3,658,329,0,4335,4334,1,0,0,0,
        4335,4336,1,0,0,0,4336,4338,1,0,0,0,4337,4339,5,45,0,0,4338,4337,
        1,0,0,0,4338,4339,1,0,0,0,4339,4340,1,0,0,0,4340,4341,5,357,0,0,
        4341,4342,3,1436,718,0,4342,4343,3,438,219,0,4343,4344,3,444,222,
        0,4344,4345,5,80,0,0,4345,4347,3,1406,703,0,4346,4348,3,474,237,
        0,4347,4346,1,0,0,0,4347,4348,1,0,0,0,4348,4349,1,0,0,0,4349,4351,
        3,476,238,0,4350,4352,3,440,220,0,4351,4350,1,0,0,0,4351,4352,1,
        0,0,0,4352,4354,1,0,0,0,4353,4355,3,466,233,0,4354,4353,1,0,0,0,
        4354,4355,1,0,0,0,4355,4356,1,0,0,0,4356,4357,5,202,0,0,4357,4358,
        3,468,234,0,4358,4359,5,2,0,0,4359,4360,3,470,235,0,4360,4361,5,
        3,0,0,4361,4363,1,0,0,0,4362,4308,1,0,0,0,4362,4333,1,0,0,0,4363,
        437,1,0,0,0,4364,4369,5,145,0,0,4365,4369,5,135,0,0,4366,4367,5,
        242,0,0,4367,4369,5,275,0,0,4368,4364,1,0,0,0,4368,4365,1,0,0,0,
        4368,4366,1,0,0,0,4369,439,1,0,0,0,4370,4372,5,62,0,0,4371,4373,
        5,192,0,0,4372,4371,1,0,0,0,4372,4373,1,0,0,0,4373,4374,1,0,0,0,
        4374,4375,3,442,221,0,4375,441,1,0,0,0,4376,4377,7,34,0,0,4377,443,
        1,0,0,0,4378,4383,3,446,223,0,4379,4380,5,82,0,0,4380,4382,3,446,
        223,0,4381,4379,1,0,0,0,4382,4385,1,0,0,0,4383,4381,1,0,0,0,4383,
        4384,1,0,0,0,4384,445,1,0,0,0,4385,4383,1,0,0,0,4386,4394,5,241,
        0,0,4387,4394,5,182,0,0,4388,4394,5,369,0,0,4389,4390,5,369,0,0,
        4390,4391,5,275,0,0,4391,4394,3,244,122,0,4392,4394,5,358,0,0,4393,
        4386,1,0,0,0,4393,4387,1,0,0,0,4393,4388,1,0,0,0,4393,4389,1,0,0,
        0,4393,4392,1,0,0,0,4394,447,1,0,0,0,4395,4396,5,447,0,0,4396,4397,
        3,450,225,0,4397,449,1,0,0,0,4398,4400,3,452,226,0,4399,4398,1,0,
        0,0,4400,4401,1,0,0,0,4401,4399,1,0,0,0,4401,4402,1,0,0,0,4402,451,
        1,0,0,0,4403,4404,3,454,227,0,4404,4406,3,456,228,0,4405,4407,3,
        872,436,0,4406,4405,1,0,0,0,4406,4407,1,0,0,0,4407,4408,1,0,0,0,
        4408,4409,3,458,229,0,4409,453,1,0,0,0,4410,4411,7,35,0,0,4411,455,
        1,0,0,0,4412,4413,7,36,0,0,4413,457,1,0,0,0,4414,4415,3,1474,737,
        0,4415,459,1,0,0,0,4416,4418,5,62,0,0,4417,4419,3,462,231,0,4418,
        4417,1,0,0,0,4418,4419,1,0,0,0,4419,4420,1,0,0,0,4420,4421,3,464,
        232,0,4421,461,1,0,0,0,4422,4423,5,192,0,0,4423,463,1,0,0,0,4424,
        4425,7,34,0,0,4425,465,1,0,0,0,4426,4427,5,102,0,0,4427,4428,5,2,
        0,0,4428,4429,3,1212,606,0,4429,4430,5,3,0,0,4430,467,1,0,0,0,4431,
        4432,5,211,0,0,4432,4436,3,1444,722,0,4433,4434,5,296,0,0,4434,4436,
        3,1428,714,0,4435,4431,1,0,0,0,4435,4433,1,0,0,0,4436,469,1,0,0,
        0,4437,4440,3,472,236,0,4438,4440,1,0,0,0,4439,4437,1,0,0,0,4439,
        4438,1,0,0,0,4440,4445,1,0,0,0,4441,4442,5,6,0,0,4442,4444,3,472,
        236,0,4443,4441,1,0,0,0,4444,4447,1,0,0,0,4445,4443,1,0,0,0,4445,
        4446,1,0,0,0,4446,471,1,0,0,0,4447,4445,1,0,0,0,4448,4453,3,1456,
        728,0,4449,4453,3,1454,727,0,4450,4453,3,1458,729,0,4451,4453,3,
        1490,745,0,4452,4448,1,0,0,0,4452,4449,1,0,0,0,4452,4450,1,0,0,0,
        4452,4451,1,0,0,0,4453,473,1,0,0,0,4454,4455,5,64,0,0,4455,4456,
        3,1412,706,0,4456,475,1,0,0,0,4457,4459,3,478,239,0,4458,4457,1,
        0,0,0,4459,4462,1,0,0,0,4460,4458,1,0,0,0,4460,4461,1,0,0,0,4461,
        477,1,0,0,0,4462,4460,1,0,0,0,4463,4464,5,77,0,0,4464,4475,5,54,
        0,0,4465,4475,5,54,0,0,4466,4467,5,69,0,0,4467,4475,5,221,0,0,4468,
        4469,5,69,0,0,4469,4475,5,180,0,0,4470,4471,5,77,0,0,4471,4475,5,
        371,0,0,4472,4473,5,269,0,0,4473,4475,5,228,0,0,4474,4463,1,0,0,
        0,4474,4465,1,0,0,0,4474,4466,1,0,0,0,4474,4468,1,0,0,0,4474,4470,
        1,0,0,0,4474,4472,1,0,0,0,4475,479,1,0,0,0,4476,4477,5,46,0,0,4477,
        4478,5,198,0,0,4478,4479,5,357,0,0,4479,4480,3,1436,718,0,4480,4481,
        5,80,0,0,4481,4482,3,1490,745,0,4482,4483,5,202,0,0,4483,4484,3,
        468,234,0,4484,4485,5,2,0,0,4485,4486,5,3,0,0,4486,4501,1,0,0,0,
        4487,4488,5,46,0,0,4488,4489,5,198,0,0,4489,4490,5,357,0,0,4490,
        4491,3,1436,718,0,4491,4492,5,80,0,0,4492,4493,3,1490,745,0,4493,
        4494,5,102,0,0,4494,4495,3,482,241,0,4495,4496,5,202,0,0,4496,4497,
        3,468,234,0,4497,4498,5,2,0,0,4498,4499,5,3,0,0,4499,4501,1,0,0,
        0,4500,4476,1,0,0,0,4500,4487,1,0,0,0,4501,481,1,0,0,0,4502,4507,
        3,484,242,0,4503,4504,5,33,0,0,4504,4506,3,484,242,0,4505,4503,1,
        0,0,0,4506,4509,1,0,0,0,4507,4505,1,0,0,0,4507,4508,1,0,0,0,4508,
        483,1,0,0,0,4509,4507,1,0,0,0,4510,4511,3,1474,737,0,4511,4512,5,
        68,0,0,4512,4513,5,2,0,0,4513,4514,3,486,243,0,4514,4515,5,3,0,0,
        4515,485,1,0,0,0,4516,4521,3,1458,729,0,4517,4518,5,6,0,0,4518,4520,
        3,1458,729,0,4519,4517,1,0,0,0,4520,4523,1,0,0,0,4521,4519,1,0,0,
        0,4521,4522,1,0,0,0,4522,487,1,0,0,0,4523,4521,1,0,0,0,4524,4525,
        5,138,0,0,4525,4526,5,198,0,0,4526,4527,5,357,0,0,4527,4528,3,1436,
        718,0,4528,4529,3,490,245,0,4529,489,1,0,0,0,4530,4532,5,193,0,0,
        4531,4533,7,20,0,0,4532,4531,1,0,0,0,4532,4533,1,0,0,0,4533,4536,
        1,0,0,0,4534,4536,5,186,0,0,4535,4530,1,0,0,0,4535,4534,1,0,0,0,
        4536,491,1,0,0,0,4537,4538,5,46,0,0,4538,4539,5,140,0,0,4539,4540,
        3,558,279,0,4540,4541,5,42,0,0,4541,4542,5,2,0,0,4542,4543,3,1212,
        606,0,4543,4544,5,3,0,0,4544,4545,3,476,238,0,4545,493,1,0,0,0,4546,
        4548,5,46,0,0,4547,4549,3,658,329,0,4548,4547,1,0,0,0,4548,4549,
        1,0,0,0,4549,4550,1,0,0,0,4550,4551,5,136,0,0,4551,4552,3,1444,722,
        0,4552,4553,3,694,347,0,4553,4554,3,496,248,0,4554,4650,1,0,0,0,
        4555,4557,5,46,0,0,4556,4558,3,658,329,0,4557,4556,1,0,0,0,4557,
        4558,1,0,0,0,4558,4559,1,0,0,0,4559,4560,5,136,0,0,4560,4561,3,1444,
        722,0,4561,4562,3,504,252,0,4562,4650,1,0,0,0,4563,4564,5,46,0,0,
        4564,4565,5,278,0,0,4565,4566,3,732,366,0,4566,4567,3,496,248,0,
        4567,4650,1,0,0,0,4568,4569,5,46,0,0,4569,4570,5,360,0,0,4570,4571,
        3,558,279,0,4571,4572,3,496,248,0,4572,4650,1,0,0,0,4573,4574,5,
        46,0,0,4574,4575,5,360,0,0,4575,4650,3,558,279,0,4576,4577,5,46,
        0,0,4577,4578,5,360,0,0,4578,4579,3,558,279,0,4579,4580,5,36,0,0,
        4580,4582,5,2,0,0,4581,4583,3,1148,574,0,4582,4581,1,0,0,0,4582,
        4583,1,0,0,0,4583,4584,1,0,0,0,4584,4585,5,3,0,0,4585,4650,1,0,0,
        0,4586,4587,5,46,0,0,4587,4588,5,360,0,0,4588,4589,3,558,279,0,4589,
        4590,5,36,0,0,4590,4591,5,196,0,0,4591,4593,5,2,0,0,4592,4594,3,
        510,255,0,4593,4592,1,0,0,0,4593,4594,1,0,0,0,4594,4595,1,0,0,0,
        4595,4596,5,3,0,0,4596,4650,1,0,0,0,4597,4598,5,46,0,0,4598,4599,
        5,360,0,0,4599,4600,3,558,279,0,4600,4601,5,36,0,0,4601,4602,5,299,
        0,0,4602,4603,3,496,248,0,4603,4650,1,0,0,0,4604,4605,5,46,0,0,4605,
        4606,5,355,0,0,4606,4607,5,325,0,0,4607,4608,5,283,0,0,4608,4609,
        3,558,279,0,4609,4610,3,496,248,0,4610,4650,1,0,0,0,4611,4612,5,
        46,0,0,4612,4613,5,355,0,0,4613,4614,5,325,0,0,4614,4615,5,185,0,
        0,4615,4616,3,558,279,0,4616,4617,3,496,248,0,4617,4650,1,0,0,0,
        4618,4619,5,46,0,0,4619,4620,5,355,0,0,4620,4621,5,325,0,0,4621,
        4622,5,353,0,0,4622,4623,3,558,279,0,4623,4624,3,496,248,0,4624,
        4650,1,0,0,0,4625,4626,5,46,0,0,4626,4627,5,355,0,0,4627,4628,5,
        325,0,0,4628,4629,5,163,0,0,4629,4630,3,558,279,0,4630,4631,3,496,
        248,0,4631,4650,1,0,0,0,4632,4633,5,46,0,0,4633,4635,5,108,0,0,4634,
        4636,3,516,258,0,4635,4634,1,0,0,0,4635,4636,1,0,0,0,4636,4637,1,
        0,0,0,4637,4638,3,558,279,0,4638,4639,3,496,248,0,4639,4650,1,0,
        0,0,4640,4641,5,46,0,0,4641,4643,5,108,0,0,4642,4644,3,516,258,0,
        4643,4642,1,0,0,0,4643,4644,1,0,0,0,4644,4645,1,0,0,0,4645,4646,
        3,558,279,0,4646,4647,5,64,0,0,4647,4648,3,558,279,0,4648,4650,1,
        0,0,0,4649,4546,1,0,0,0,4649,4555,1,0,0,0,4649,4563,1,0,0,0,4649,
        4568,1,0,0,0,4649,4573,1,0,0,0,4649,4576,1,0,0,0,4649,4586,1,0,0,
        0,4649,4597,1,0,0,0,4649,4604,1,0,0,0,4649,4611,1,0,0,0,4649,4618,
        1,0,0,0,4649,4625,1,0,0,0,4649,4632,1,0,0,0,4649,4640,1,0,0,0,4650,
        495,1,0,0,0,4651,4652,5,2,0,0,4652,4653,3,498,249,0,4653,4654,5,
        3,0,0,4654,497,1,0,0,0,4655,4660,3,500,250,0,4656,4657,5,6,0,0,4657,
        4659,3,500,250,0,4658,4656,1,0,0,0,4659,4662,1,0,0,0,4660,4658,1,
        0,0,0,4660,4661,1,0,0,0,4661,499,1,0,0,0,4662,4660,1,0,0,0,4663,
        4666,3,1490,745,0,4664,4665,5,10,0,0,4665,4667,3,502,251,0,4666,
        4664,1,0,0,0,4666,4667,1,0,0,0,4667,501,1,0,0,0,4668,4675,3,688,
        344,0,4669,4675,3,1502,751,0,4670,4675,3,1324,662,0,4671,4675,3,
        322,161,0,4672,4675,3,1458,729,0,4673,4675,5,407,0,0,4674,4668,1,
        0,0,0,4674,4669,1,0,0,0,4674,4670,1,0,0,0,4674,4671,1,0,0,0,4674,
        4672,1,0,0,0,4674,4673,1,0,0,0,4675,503,1,0,0,0,4676,4677,5,2,0,
        0,4677,4678,3,506,253,0,4678,4679,5,3,0,0,4679,505,1,0,0,0,4680,
        4685,3,508,254,0,4681,4682,5,6,0,0,4682,4684,3,508,254,0,4683,4681,
        1,0,0,0,4684,4687,1,0,0,0,4685,4683,1,0,0,0,4685,4686,1,0,0,0,4686,
        507,1,0,0,0,4687,4685,1,0,0,0,4688,4689,3,1492,746,0,4689,4690,5,
        10,0,0,4690,4691,3,502,251,0,4691,509,1,0,0,0,4692,4693,3,512,256,
        0,4693,511,1,0,0,0,4694,4699,3,1458,729,0,4695,4696,5,6,0,0,4696,
        4698,3,1458,729,0,4697,4695,1,0,0,0,4698,4701,1,0,0,0,4699,4697,
        1,0,0,0,4699,4700,1,0,0,0,4700,513,1,0,0,0,4701,4699,1,0,0,0,4702,
        4703,5,138,0,0,4703,4704,5,360,0,0,4704,4705,3,558,279,0,4705,4706,
        5,133,0,0,4706,4708,5,450,0,0,4707,4709,3,516,258,0,4708,4707,1,
        0,0,0,4708,4709,1,0,0,0,4709,4710,1,0,0,0,4710,4713,3,1458,729,0,
        4711,4712,7,37,0,0,4712,4714,3,1458,729,0,4713,4711,1,0,0,0,4713,
        4714,1,0,0,0,4714,4725,1,0,0,0,4715,4716,5,138,0,0,4716,4717,5,360,
        0,0,4717,4718,3,558,279,0,4718,4719,5,309,0,0,4719,4720,5,450,0,
        0,4720,4721,3,1458,729,0,4721,4722,5,94,0,0,4722,4723,3,1458,729,
        0,4723,4725,1,0,0,0,4724,4702,1,0,0,0,4724,4715,1,0,0,0,4725,515,
        1,0,0,0,4726,4727,5,220,0,0,4727,4728,5,77,0,0,4728,4729,5,396,0,
        0,4729,517,1,0,0,0,4730,4731,5,46,0,0,4731,4732,5,278,0,0,4732,4733,
        5,156,0,0,4733,4735,3,558,279,0,4734,4736,3,524,262,0,4735,4734,
        1,0,0,0,4735,4736,1,0,0,0,4736,4737,1,0,0,0,4737,4738,5,62,0,0,4738,
        4739,5,360,0,0,4739,4740,3,1168,584,0,4740,4741,5,100,0,0,4741,4743,
        3,1436,718,0,4742,4744,3,526,263,0,4743,4742,1,0,0,0,4743,4744,1,
        0,0,0,4744,4745,1,0,0,0,4745,4746,5,36,0,0,4746,4747,3,520,260,0,
        4747,519,1,0,0,0,4748,4753,3,522,261,0,4749,4750,5,6,0,0,4750,4752,
        3,522,261,0,4751,4749,1,0,0,0,4752,4755,1,0,0,0,4753,4751,1,0,0,
        0,4753,4754,1,0,0,0,4754,521,1,0,0,0,4755,4753,1,0,0,0,4756,4757,
        5,278,0,0,4757,4758,3,1456,728,0,4758,4760,3,732,366,0,4759,4761,
        3,528,264,0,4760,4759,1,0,0,0,4760,4761,1,0,0,0,4761,4763,1,0,0,
        0,4762,4764,3,530,265,0,4763,4762,1,0,0,0,4763,4764,1,0,0,0,4764,
        4788,1,0,0,0,4765,4766,5,278,0,0,4766,4767,3,1456,728,0,4767,4769,
        3,736,368,0,4768,4770,3,528,264,0,4769,4768,1,0,0,0,4769,4770,1,
        0,0,0,4770,4772,1,0,0,0,4771,4773,3,530,265,0,4772,4771,1,0,0,0,
        4772,4773,1,0,0,0,4773,4788,1,0,0,0,4774,4775,5,211,0,0,4775,4776,
        3,1456,728,0,4776,4777,3,674,337,0,4777,4788,1,0,0,0,4778,4779,5,
        211,0,0,4779,4780,3,1456,728,0,4780,4781,5,2,0,0,4781,4782,3,1342,
        671,0,4782,4783,5,3,0,0,4783,4784,3,674,337,0,4784,4788,1,0,0,0,
        4785,4786,5,345,0,0,4786,4788,3,1168,584,0,4787,4756,1,0,0,0,4787,
        4765,1,0,0,0,4787,4774,1,0,0,0,4787,4778,1,0,0,0,4787,4785,1,0,0,
        0,4788,523,1,0,0,0,4789,4790,5,53,0,0,4790,525,1,0,0,0,4791,4792,
        5,206,0,0,4792,4793,3,558,279,0,4793,527,1,0,0,0,4794,4795,5,62,
        0,0,4795,4801,5,325,0,0,4796,4797,5,62,0,0,4797,4798,5,83,0,0,4798,
        4799,5,147,0,0,4799,4801,3,558,279,0,4800,4794,1,0,0,0,4800,4796,
        1,0,0,0,4801,529,1,0,0,0,4802,4803,5,302,0,0,4803,531,1,0,0,0,4804,
        4805,5,46,0,0,4805,4806,5,278,0,0,4806,4807,5,206,0,0,4807,4808,
        3,558,279,0,4808,4809,5,100,0,0,4809,4810,3,1436,718,0,4810,533,
        1,0,0,0,4811,4812,5,138,0,0,4812,4813,5,278,0,0,4813,4814,5,206,
        0,0,4814,4815,3,558,279,0,4815,4816,5,100,0,0,4816,4817,3,1436,718,
        0,4817,4818,5,133,0,0,4818,4819,3,520,260,0,4819,4830,1,0,0,0,4820,
        4821,5,138,0,0,4821,4822,5,278,0,0,4822,4823,5,206,0,0,4823,4824,
        3,558,279,0,4824,4825,5,100,0,0,4825,4826,3,1436,718,0,4826,4827,
        5,191,0,0,4827,4828,3,536,268,0,4828,4830,1,0,0,0,4829,4811,1,0,
        0,0,4829,4820,1,0,0,0,4830,535,1,0,0,0,4831,4836,3,538,269,0,4832,
        4833,5,6,0,0,4833,4835,3,538,269,0,4834,4832,1,0,0,0,4835,4838,1,
        0,0,0,4836,4834,1,0,0,0,4836,4837,1,0,0,0,4837,537,1,0,0,0,4838,
        4836,1,0,0,0,4839,4840,5,278,0,0,4840,4841,3,1456,728,0,4841,4842,
        5,2,0,0,4842,4843,3,1342,671,0,4843,4844,5,3,0,0,4844,4852,1,0,0,
        0,4845,4846,5,211,0,0,4846,4847,3,1456,728,0,4847,4848,5,2,0,0,4848,
        4849,3,1342,671,0,4849,4850,5,3,0,0,4850,4852,1,0,0,0,4851,4839,
        1,0,0,0,4851,4845,1,0,0,0,4852,539,1,0,0,0,4853,4854,5,301,0,0,4854,
        4855,5,281,0,0,4855,4856,5,147,0,0,4856,4857,3,1472,736,0,4857,4858,
        5,94,0,0,4858,4859,3,1470,735,0,4859,541,1,0,0,0,4860,4861,5,191,
        0,0,4861,4863,5,92,0,0,4862,4864,3,748,374,0,4863,4862,1,0,0,0,4863,
        4864,1,0,0,0,4864,4865,1,0,0,0,4865,4867,3,1392,696,0,4866,4868,
        3,124,62,0,4867,4866,1,0,0,0,4867,4868,1,0,0,0,4868,5240,1,0,0,0,
        4869,4870,5,191,0,0,4870,4872,5,328,0,0,4871,4873,3,748,374,0,4872,
        4871,1,0,0,0,4872,4873,1,0,0,0,4873,4874,1,0,0,0,4874,4876,3,1416,
        708,0,4875,4877,3,124,62,0,4876,4875,1,0,0,0,4876,4877,1,0,0,0,4877,
        5240,1,0,0,0,4878,4879,5,191,0,0,4879,4881,5,376,0,0,4880,4882,3,
        748,374,0,4881,4880,1,0,0,0,4881,4882,1,0,0,0,4882,4883,1,0,0,0,
        4883,4885,3,544,272,0,4884,4886,3,124,62,0,4885,4884,1,0,0,0,4885,
        4886,1,0,0,0,4886,5240,1,0,0,0,4887,4888,5,191,0,0,4888,4889,5,259,
        0,0,4889,4891,5,376,0,0,4890,4892,3,748,374,0,4891,4890,1,0,0,0,
        4891,4892,1,0,0,0,4892,4893,1,0,0,0,4893,4895,3,544,272,0,4894,4896,
        3,124,62,0,4895,4894,1,0,0,0,4895,4896,1,0,0,0,4896,5240,1,0,0,0,
        4897,4898,5,191,0,0,4898,4900,5,226,0,0,4899,4901,3,748,374,0,4900,
        4899,1,0,0,0,4900,4901,1,0,0,0,4901,4902,1,0,0,0,4902,4904,3,1416,
        708,0,4903,4905,3,124,62,0,4904,4903,1,0,0,0,4904,4905,1,0,0,0,4905,
        5240,1,0,0,0,4906,4907,5,191,0,0,4907,4908,5,63,0,0,4908,4910,5,
        92,0,0,4909,4911,3,748,374,0,4910,4909,1,0,0,0,4910,4911,1,0,0,0,
        4911,4912,1,0,0,0,4912,4914,3,1392,696,0,4913,4915,3,124,62,0,4914,
        4913,1,0,0,0,4914,4915,1,0,0,0,4915,5240,1,0,0,0,4916,4917,5,191,
        0,0,4917,4919,5,108,0,0,4918,4920,3,748,374,0,4919,4918,1,0,0,0,
        4919,4920,1,0,0,0,4920,4921,1,0,0,0,4921,4923,3,1416,708,0,4922,
        4924,3,124,62,0,4923,4922,1,0,0,0,4923,4924,1,0,0,0,4924,5240,1,
        0,0,0,4925,4926,5,191,0,0,4926,4928,5,168,0,0,4927,4929,3,748,374,
        0,4928,4927,1,0,0,0,4928,4929,1,0,0,0,4929,4930,1,0,0,0,4930,4932,
        3,1416,708,0,4931,4933,3,124,62,0,4932,4931,1,0,0,0,4932,4933,1,
        0,0,0,4933,5240,1,0,0,0,4934,4935,5,191,0,0,4935,4937,5,342,0,0,
        4936,4938,3,748,374,0,4937,4936,1,0,0,0,4937,4938,1,0,0,0,4938,4939,
        1,0,0,0,4939,4941,3,1416,708,0,4940,4942,3,124,62,0,4941,4940,1,
        0,0,0,4941,4942,1,0,0,0,4942,5240,1,0,0,0,4943,4944,5,191,0,0,4944,
        4945,5,355,0,0,4945,4946,5,325,0,0,4946,4948,5,283,0,0,4947,4949,
        3,748,374,0,4948,4947,1,0,0,0,4948,4949,1,0,0,0,4949,4950,1,0,0,
        0,4950,4952,3,1416,708,0,4951,4953,3,124,62,0,4952,4951,1,0,0,0,
        4952,4953,1,0,0,0,4953,5240,1,0,0,0,4954,4955,5,191,0,0,4955,4956,
        5,355,0,0,4956,4957,5,325,0,0,4957,4959,5,185,0,0,4958,4960,3,748,
        374,0,4959,4958,1,0,0,0,4959,4960,1,0,0,0,4960,4961,1,0,0,0,4961,
        4963,3,1416,708,0,4962,4964,3,124,62,0,4963,4962,1,0,0,0,4963,4964,
        1,0,0,0,4964,5240,1,0,0,0,4965,4966,5,191,0,0,4966,4967,5,355,0,
        0,4967,4968,5,325,0,0,4968,4970,5,353,0,0,4969,4971,3,748,374,0,
        4970,4969,1,0,0,0,4970,4971,1,0,0,0,4971,4972,1,0,0,0,4972,4974,
        3,1416,708,0,4973,4975,3,124,62,0,4974,4973,1,0,0,0,4974,4975,1,
        0,0,0,4975,5240,1,0,0,0,4976,4977,5,191,0,0,4977,4978,5,355,0,0,
        4978,4979,5,325,0,0,4979,4981,5,163,0,0,4980,4982,3,748,374,0,4981,
        4980,1,0,0,0,4981,4982,1,0,0,0,4982,4983,1,0,0,0,4983,4985,3,1416,
        708,0,4984,4986,3,124,62,0,4985,4984,1,0,0,0,4985,4986,1,0,0,0,4986,
        5240,1,0,0,0,4987,4988,5,191,0,0,4988,4989,5,131,0,0,4989,4991,5,
        446,0,0,4990,4992,3,748,374,0,4991,4990,1,0,0,0,4991,4992,1,0,0,
        0,4992,4993,1,0,0,0,4993,4995,3,1416,708,0,4994,4996,3,124,62,0,
        4995,4994,1,0,0,0,4995,4996,1,0,0,0,4996,5240,1,0,0,0,4997,4998,
        5,191,0,0,4998,4999,5,198,0,0,4999,5001,5,357,0,0,5000,5002,3,748,
        374,0,5001,5000,1,0,0,0,5001,5002,1,0,0,0,5002,5003,1,0,0,0,5003,
        5005,3,1416,708,0,5004,5006,3,124,62,0,5005,5004,1,0,0,0,5005,5006,
        1,0,0,0,5006,5240,1,0,0,0,5007,5008,5,191,0,0,5008,5010,5,204,0,
        0,5009,5011,3,748,374,0,5010,5009,1,0,0,0,5010,5011,1,0,0,0,5011,
        5012,1,0,0,0,5012,5014,3,1416,708,0,5013,5015,3,124,62,0,5014,5013,
        1,0,0,0,5014,5015,1,0,0,0,5015,5240,1,0,0,0,5016,5017,5,191,0,0,
        5017,5018,5,63,0,0,5018,5019,5,174,0,0,5019,5021,5,381,0,0,5020,
        5022,3,748,374,0,5021,5020,1,0,0,0,5021,5022,1,0,0,0,5022,5023,1,
        0,0,0,5023,5025,3,1416,708,0,5024,5026,3,124,62,0,5025,5024,1,0,
        0,0,5025,5026,1,0,0,0,5026,5240,1,0,0,0,5027,5029,5,191,0,0,5028,
        5030,3,338,169,0,5029,5028,1,0,0,0,5029,5030,1,0,0,0,5030,5031,1,
        0,0,0,5031,5033,5,247,0,0,5032,5034,3,748,374,0,5033,5032,1,0,0,
        0,5033,5034,1,0,0,0,5034,5035,1,0,0,0,5035,5037,3,1416,708,0,5036,
        5038,3,124,62,0,5037,5036,1,0,0,0,5037,5038,1,0,0,0,5038,5240,1,
        0,0,0,5039,5040,5,191,0,0,5040,5042,5,452,0,0,5041,5043,3,748,374,
        0,5042,5041,1,0,0,0,5042,5043,1,0,0,0,5043,5044,1,0,0,0,5044,5046,
        3,1416,708,0,5045,5047,3,124,62,0,5046,5045,1,0,0,0,5046,5047,1,
        0,0,0,5047,5240,1,0,0,0,5048,5049,5,191,0,0,5049,5051,5,331,0,0,
        5050,5052,3,748,374,0,5051,5050,1,0,0,0,5051,5052,1,0,0,0,5052,5053,
        1,0,0,0,5053,5055,3,1416,708,0,5054,5056,3,124,62,0,5055,5054,1,
        0,0,0,5055,5056,1,0,0,0,5056,5240,1,0,0,0,5057,5058,5,191,0,0,5058,
        5060,5,323,0,0,5059,5061,3,748,374,0,5060,5059,1,0,0,0,5060,5061,
        1,0,0,0,5061,5062,1,0,0,0,5062,5064,3,1394,697,0,5063,5065,3,124,
        62,0,5064,5063,1,0,0,0,5064,5065,1,0,0,0,5065,5240,1,0,0,0,5066,
        5067,5,191,0,0,5067,5069,5,445,0,0,5068,5070,3,748,374,0,5069,5068,
        1,0,0,0,5069,5070,1,0,0,0,5070,5071,1,0,0,0,5071,5072,3,1436,718,
        0,5072,5073,5,80,0,0,5073,5075,3,558,279,0,5074,5076,3,124,62,0,
        5075,5074,1,0,0,0,5075,5076,1,0,0,0,5076,5240,1,0,0,0,5077,5078,
        5,191,0,0,5078,5080,5,321,0,0,5079,5081,3,748,374,0,5080,5079,1,
        0,0,0,5080,5081,1,0,0,0,5081,5082,1,0,0,0,5082,5083,3,1436,718,0,
        5083,5084,5,80,0,0,5084,5086,3,558,279,0,5085,5087,3,124,62,0,5086,
        5085,1,0,0,0,5086,5087,1,0,0,0,5087,5240,1,0,0,0,5088,5089,5,191,
        0,0,5089,5091,5,357,0,0,5090,5092,3,748,374,0,5091,5090,1,0,0,0,
        5091,5092,1,0,0,0,5092,5093,1,0,0,0,5093,5094,3,1436,718,0,5094,
        5095,5,80,0,0,5095,5097,3,558,279,0,5096,5098,3,124,62,0,5097,5096,
        1,0,0,0,5097,5098,1,0,0,0,5098,5240,1,0,0,0,5099,5100,5,191,0,0,
        5100,5102,5,360,0,0,5101,5103,3,748,374,0,5102,5101,1,0,0,0,5102,
        5103,1,0,0,0,5103,5104,1,0,0,0,5104,5106,3,562,281,0,5105,5107,3,
        124,62,0,5106,5105,1,0,0,0,5106,5107,1,0,0,0,5107,5240,1,0,0,0,5108,
        5109,5,191,0,0,5109,5111,5,189,0,0,5110,5112,3,748,374,0,5111,5110,
        1,0,0,0,5111,5112,1,0,0,0,5112,5113,1,0,0,0,5113,5115,3,562,281,
        0,5114,5116,3,124,62,0,5115,5114,1,0,0,0,5115,5116,1,0,0,0,5116,
        5240,1,0,0,0,5117,5118,5,191,0,0,5118,5119,5,226,0,0,5119,5121,5,
        109,0,0,5120,5122,3,748,374,0,5121,5120,1,0,0,0,5121,5122,1,0,0,
        0,5122,5123,1,0,0,0,5123,5125,3,552,276,0,5124,5126,3,124,62,0,5125,
        5124,1,0,0,0,5125,5126,1,0,0,0,5126,5240,1,0,0,0,5127,5128,5,191,
        0,0,5128,5130,5,41,0,0,5129,5131,3,748,374,0,5130,5129,1,0,0,0,5130,
        5131,1,0,0,0,5131,5132,1,0,0,0,5132,5133,5,2,0,0,5133,5134,3,1168,
        584,0,5134,5135,5,36,0,0,5135,5136,3,1168,584,0,5136,5138,5,3,0,
        0,5137,5139,3,124,62,0,5138,5137,1,0,0,0,5138,5139,1,0,0,0,5139,
        5240,1,0,0,0,5140,5141,5,191,0,0,5141,5142,5,278,0,0,5142,5144,5,
        156,0,0,5143,5145,3,748,374,0,5144,5143,1,0,0,0,5144,5145,1,0,0,
        0,5145,5146,1,0,0,0,5146,5147,3,558,279,0,5147,5148,5,100,0,0,5148,
        5150,3,1436,718,0,5149,5151,3,124,62,0,5150,5149,1,0,0,0,5150,5151,
        1,0,0,0,5151,5240,1,0,0,0,5152,5153,5,191,0,0,5153,5154,5,278,0,
        0,5154,5156,5,206,0,0,5155,5157,3,748,374,0,5156,5155,1,0,0,0,5156,
        5157,1,0,0,0,5157,5158,1,0,0,0,5158,5159,3,558,279,0,5159,5160,5,
        100,0,0,5160,5162,3,1436,718,0,5161,5163,3,124,62,0,5162,5161,1,
        0,0,0,5162,5163,1,0,0,0,5163,5240,1,0,0,0,5164,5165,5,191,0,0,5165,
        5166,5,281,0,0,5166,5167,5,147,0,0,5167,5169,3,1472,736,0,5168,5170,
        3,124,62,0,5169,5168,1,0,0,0,5169,5170,1,0,0,0,5170,5240,1,0,0,0,
        5171,5172,5,191,0,0,5172,5174,5,376,0,0,5173,5175,3,748,374,0,5174,
        5173,1,0,0,0,5174,5175,1,0,0,0,5175,5176,1,0,0,0,5176,5178,3,544,
        272,0,5177,5179,3,124,62,0,5178,5177,1,0,0,0,5178,5179,1,0,0,0,5179,
        5240,1,0,0,0,5180,5181,5,191,0,0,5181,5183,5,451,0,0,5182,5184,3,
        748,374,0,5183,5182,1,0,0,0,5183,5184,1,0,0,0,5184,5185,1,0,0,0,
        5185,5187,3,1436,718,0,5186,5188,3,124,62,0,5187,5186,1,0,0,0,5187,
        5188,1,0,0,0,5188,5240,1,0,0,0,5189,5190,5,191,0,0,5190,5192,5,351,
        0,0,5191,5193,3,748,374,0,5192,5191,1,0,0,0,5192,5193,1,0,0,0,5193,
        5194,1,0,0,0,5194,5240,3,1402,701,0,5195,5196,5,191,0,0,5196,5198,
        5,443,0,0,5197,5199,3,748,374,0,5198,5197,1,0,0,0,5198,5199,1,0,
        0,0,5199,5200,1,0,0,0,5200,5201,5,62,0,0,5201,5202,3,1168,584,0,
        5202,5203,5,247,0,0,5203,5205,3,1436,718,0,5204,5206,3,124,62,0,
        5205,5204,1,0,0,0,5205,5206,1,0,0,0,5206,5240,1,0,0,0,5207,5208,
        5,191,0,0,5208,5210,7,38,0,0,5209,5211,3,748,374,0,5210,5209,1,0,
        0,0,5210,5211,1,0,0,0,5211,5212,1,0,0,0,5212,5240,3,1472,736,0,5213,
        5214,5,191,0,0,5214,5215,5,99,0,0,5215,5217,5,257,0,0,5216,5218,
        3,748,374,0,5217,5216,1,0,0,0,5217,5218,1,0,0,0,5218,5219,1,0,0,
        0,5219,5220,5,62,0,0,5220,5221,3,404,202,0,5221,5222,5,331,0,0,5222,
        5223,3,1436,718,0,5223,5240,1,0,0,0,5224,5225,5,191,0,0,5225,5227,
        5,175,0,0,5226,5228,3,748,374,0,5227,5226,1,0,0,0,5227,5228,1,0,
        0,0,5228,5229,1,0,0,0,5229,5237,3,1420,710,0,5230,5232,3,14,7,0,
        5231,5230,1,0,0,0,5231,5232,1,0,0,0,5232,5233,1,0,0,0,5233,5234,
        5,2,0,0,5234,5235,3,860,430,0,5235,5236,5,3,0,0,5236,5238,1,0,0,
        0,5237,5231,1,0,0,0,5237,5238,1,0,0,0,5238,5240,1,0,0,0,5239,4860,
        1,0,0,0,5239,4869,1,0,0,0,5239,4878,1,0,0,0,5239,4887,1,0,0,0,5239,
        4897,1,0,0,0,5239,4906,1,0,0,0,5239,4916,1,0,0,0,5239,4925,1,0,0,
        0,5239,4934,1,0,0,0,5239,4943,1,0,0,0,5239,4954,1,0,0,0,5239,4965,
        1,0,0,0,5239,4976,1,0,0,0,5239,4987,1,0,0,0,5239,4997,1,0,0,0,5239,
        5007,1,0,0,0,5239,5016,1,0,0,0,5239,5027,1,0,0,0,5239,5039,1,0,0,
        0,5239,5048,1,0,0,0,5239,5057,1,0,0,0,5239,5066,1,0,0,0,5239,5077,
        1,0,0,0,5239,5088,1,0,0,0,5239,5099,1,0,0,0,5239,5108,1,0,0,0,5239,
        5117,1,0,0,0,5239,5127,1,0,0,0,5239,5140,1,0,0,0,5239,5152,1,0,0,
        0,5239,5164,1,0,0,0,5239,5171,1,0,0,0,5239,5180,1,0,0,0,5239,5189,
        1,0,0,0,5239,5195,1,0,0,0,5239,5207,1,0,0,0,5239,5213,1,0,0,0,5239,
        5224,1,0,0,0,5240,543,1,0,0,0,5241,5246,3,1410,705,0,5242,5243,5,
        6,0,0,5243,5245,3,1410,705,0,5244,5242,1,0,0,0,5245,5248,1,0,0,0,
        5246,5244,1,0,0,0,5246,5247,1,0,0,0,5247,545,1,0,0,0,5248,5246,1,
        0,0,0,5249,5251,5,63,0,0,5250,5249,1,0,0,0,5250,5251,1,0,0,0,5251,
        5252,1,0,0,0,5252,5253,5,92,0,0,5253,5274,3,1406,703,0,5254,5256,
        5,259,0,0,5255,5254,1,0,0,0,5255,5256,1,0,0,0,5256,5257,1,0,0,0,
        5257,5258,5,376,0,0,5258,5274,3,1410,705,0,5259,5260,5,226,0,0,5260,
        5274,3,558,279,0,5261,5262,5,108,0,0,5262,5274,3,558,279,0,5263,
        5264,5,168,0,0,5264,5274,3,558,279,0,5265,5266,5,342,0,0,5266,5274,
        3,558,279,0,5267,5268,5,328,0,0,5268,5274,3,558,279,0,5269,5270,
        5,355,0,0,5270,5271,5,325,0,0,5271,5272,7,39,0,0,5272,5274,3,558,
        279,0,5273,5250,1,0,0,0,5273,5255,1,0,0,0,5273,5259,1,0,0,0,5273,
        5261,1,0,0,0,5273,5263,1,0,0,0,5273,5265,1,0,0,0,5273,5267,1,0,0,
        0,5273,5269,1,0,0,0,5274,547,1,0,0,0,5275,5276,5,131,0,0,5276,5277,
        5,446,0,0,5277,5307,3,1436,718,0,5278,5279,5,198,0,0,5279,5280,5,
        357,0,0,5280,5307,3,1436,718,0,5281,5282,5,204,0,0,5282,5307,3,1436,
        718,0,5283,5284,5,63,0,0,5284,5285,5,174,0,0,5285,5286,5,381,0,0,
        5286,5307,3,1436,718,0,5287,5289,3,338,169,0,5288,5287,1,0,0,0,5288,
        5289,1,0,0,0,5289,5290,1,0,0,0,5290,5291,5,247,0,0,5291,5307,3,1436,
        718,0,5292,5293,5,452,0,0,5293,5307,3,1436,718,0,5294,5295,5,323,
        0,0,5295,5307,3,1422,711,0,5296,5297,5,331,0,0,5297,5307,3,1436,
        718,0,5298,5299,5,175,0,0,5299,5307,3,1420,710,0,5300,5301,5,318,
        0,0,5301,5307,3,1436,718,0,5302,5303,5,451,0,0,5303,5307,3,1436,
        718,0,5304,5305,5,351,0,0,5305,5307,3,1402,701,0,5306,5275,1,0,0,
        0,5306,5278,1,0,0,0,5306,5281,1,0,0,0,5306,5283,1,0,0,0,5306,5288,
        1,0,0,0,5306,5292,1,0,0,0,5306,5294,1,0,0,0,5306,5296,1,0,0,0,5306,
        5298,1,0,0,0,5306,5300,1,0,0,0,5306,5302,1,0,0,0,5306,5304,1,0,0,
        0,5307,549,1,0,0,0,5308,5309,7,40,0,0,5309,551,1,0,0,0,5310,5315,
        3,558,279,0,5311,5312,5,6,0,0,5312,5314,3,558,279,0,5313,5311,1,
        0,0,0,5314,5317,1,0,0,0,5315,5313,1,0,0,0,5315,5316,1,0,0,0,5316,
        553,1,0,0,0,5317,5315,1,0,0,0,5318,5319,3,556,278,0,5319,5320,5,
        11,0,0,5320,5321,3,1432,716,0,5321,555,1,0,0,0,5322,5324,3,1474,
        737,0,5323,5325,3,560,280,0,5324,5323,1,0,0,0,5324,5325,1,0,0,0,
        5325,557,1,0,0,0,5326,5328,3,1474,737,0,5327,5329,3,560,280,0,5328,
        5327,1,0,0,0,5328,5329,1,0,0,0,5329,559,1,0,0,0,5330,5331,5,11,0,
        0,5331,5333,3,1438,719,0,5332,5330,1,0,0,0,5333,5334,1,0,0,0,5334,
        5332,1,0,0,0,5334,5335,1,0,0,0,5335,561,1,0,0,0,5336,5341,3,1168,
        584,0,5337,5338,5,6,0,0,5338,5340,3,1168,584,0,5339,5337,1,0,0,0,
        5340,5343,1,0,0,0,5341,5339,1,0,0,0,5341,5342,1,0,0,0,5342,563,1,
        0,0,0,5343,5341,1,0,0,0,5344,5346,5,358,0,0,5345,5347,5,92,0,0,5346,
        5345,1,0,0,0,5346,5347,1,0,0,0,5347,5348,1,0,0,0,5348,5353,3,566,
        283,0,5349,5350,5,6,0,0,5350,5352,3,566,283,0,5351,5349,1,0,0,0,
        5352,5355,1,0,0,0,5353,5351,1,0,0,0,5353,5354,1,0,0,0,5354,5358,
        1,0,0,0,5355,5353,1,0,0,0,5356,5357,7,41,0,0,5357,5359,5,219,0,0,
        5358,5356,1,0,0,0,5358,5359,1,0,0,0,5359,5361,1,0,0,0,5360,5362,
        3,124,62,0,5361,5360,1,0,0,0,5361,5362,1,0,0,0,5362,565,1,0,0,0,
        5363,5365,5,81,0,0,5364,5363,1,0,0,0,5364,5365,1,0,0,0,5365,5366,
        1,0,0,0,5366,5368,3,1406,703,0,5367,5369,5,9,0,0,5368,5367,1,0,0,
        0,5368,5369,1,0,0,0,5369,567,1,0,0,0,5370,5371,5,159,0,0,5371,5372,
        5,80,0,0,5372,5373,3,546,273,0,5373,5374,5,116,0,0,5374,5375,3,570,
        285,0,5375,5536,1,0,0,0,5376,5377,5,159,0,0,5377,5378,5,80,0,0,5378,
        5379,5,44,0,0,5379,5380,3,554,277,0,5380,5381,5,116,0,0,5381,5382,
        3,570,285,0,5382,5536,1,0,0,0,5383,5384,5,159,0,0,5384,5385,5,80,
        0,0,5385,5386,3,548,274,0,5386,5387,5,116,0,0,5387,5388,3,570,285,
        0,5388,5536,1,0,0,0,5389,5390,5,159,0,0,5390,5391,5,80,0,0,5391,
        5392,5,360,0,0,5392,5393,3,1168,584,0,5393,5394,5,116,0,0,5394,5395,
        3,570,285,0,5395,5536,1,0,0,0,5396,5397,5,159,0,0,5397,5398,5,80,
        0,0,5398,5399,5,189,0,0,5399,5400,3,1168,584,0,5400,5401,5,116,0,
        0,5401,5402,3,570,285,0,5402,5536,1,0,0,0,5403,5404,5,159,0,0,5404,
        5405,5,80,0,0,5405,5406,5,136,0,0,5406,5407,3,698,349,0,5407,5408,
        5,116,0,0,5408,5409,3,570,285,0,5409,5536,1,0,0,0,5410,5411,5,159,
        0,0,5411,5412,5,80,0,0,5412,5413,5,211,0,0,5413,5414,3,674,337,0,
        5414,5415,5,116,0,0,5415,5416,3,570,285,0,5416,5536,1,0,0,0,5417,
        5418,5,159,0,0,5418,5419,5,80,0,0,5419,5420,5,278,0,0,5420,5421,
        3,736,368,0,5421,5422,5,116,0,0,5422,5423,3,570,285,0,5423,5536,
        1,0,0,0,5424,5425,5,159,0,0,5425,5426,5,80,0,0,5426,5427,5,45,0,
        0,5427,5428,3,1436,718,0,5428,5429,5,80,0,0,5429,5430,3,1406,703,
        0,5430,5431,5,116,0,0,5431,5432,3,570,285,0,5432,5536,1,0,0,0,5433,
        5434,5,159,0,0,5434,5435,5,80,0,0,5435,5436,5,45,0,0,5436,5437,3,
        1436,718,0,5437,5439,5,80,0,0,5438,5440,5,189,0,0,5439,5438,1,0,
        0,0,5439,5440,1,0,0,0,5440,5441,1,0,0,0,5441,5442,3,558,279,0,5442,
        5443,5,116,0,0,5443,5444,3,570,285,0,5444,5536,1,0,0,0,5445,5446,
        5,159,0,0,5446,5447,5,80,0,0,5447,5448,5,445,0,0,5448,5449,3,1436,
        718,0,5449,5450,5,80,0,0,5450,5451,3,558,279,0,5451,5452,5,116,0,
        0,5452,5453,3,570,285,0,5453,5536,1,0,0,0,5454,5455,5,159,0,0,5455,
        5456,5,80,0,0,5456,5457,5,321,0,0,5457,5458,3,1436,718,0,5458,5459,
        5,80,0,0,5459,5460,3,558,279,0,5460,5461,5,116,0,0,5461,5462,3,570,
        285,0,5462,5536,1,0,0,0,5463,5464,5,159,0,0,5464,5465,5,80,0,0,5465,
        5466,5,357,0,0,5466,5467,3,1436,718,0,5467,5468,5,80,0,0,5468,5469,
        3,558,279,0,5469,5470,5,116,0,0,5470,5471,3,570,285,0,5471,5536,
        1,0,0,0,5472,5473,5,159,0,0,5473,5474,5,80,0,0,5474,5475,5,296,0,
        0,5475,5476,3,670,335,0,5476,5477,5,116,0,0,5477,5478,3,570,285,
        0,5478,5536,1,0,0,0,5479,5480,5,159,0,0,5480,5481,5,80,0,0,5481,
        5482,5,442,0,0,5482,5483,3,666,333,0,5483,5484,5,116,0,0,5484,5485,
        3,570,285,0,5485,5536,1,0,0,0,5486,5487,5,159,0,0,5487,5488,5,80,
        0,0,5488,5489,5,443,0,0,5489,5490,5,62,0,0,5490,5491,3,1168,584,
        0,5491,5492,5,247,0,0,5492,5493,3,1436,718,0,5493,5494,5,116,0,0,
        5494,5495,3,570,285,0,5495,5536,1,0,0,0,5496,5497,5,159,0,0,5497,
        5498,5,80,0,0,5498,5499,5,278,0,0,5499,5500,5,156,0,0,5500,5501,
        3,558,279,0,5501,5502,5,100,0,0,5502,5503,3,1436,718,0,5503,5504,
        5,116,0,0,5504,5505,3,570,285,0,5505,5536,1,0,0,0,5506,5507,5,159,
        0,0,5507,5508,5,80,0,0,5508,5509,5,278,0,0,5509,5510,5,206,0,0,5510,
        5511,3,558,279,0,5511,5512,5,100,0,0,5512,5513,3,1436,718,0,5513,
        5514,5,116,0,0,5514,5515,3,570,285,0,5515,5536,1,0,0,0,5516,5517,
        5,159,0,0,5517,5518,5,80,0,0,5518,5519,5,248,0,0,5519,5520,5,274,
        0,0,5520,5521,3,322,161,0,5521,5522,5,116,0,0,5522,5523,3,570,285,
        0,5523,5536,1,0,0,0,5524,5525,5,159,0,0,5525,5526,5,80,0,0,5526,
        5527,5,41,0,0,5527,5528,5,2,0,0,5528,5529,3,1168,584,0,5529,5530,
        5,36,0,0,5530,5531,3,1168,584,0,5531,5532,5,3,0,0,5532,5533,5,116,
        0,0,5533,5534,3,570,285,0,5534,5536,1,0,0,0,5535,5370,1,0,0,0,5535,
        5376,1,0,0,0,5535,5383,1,0,0,0,5535,5389,1,0,0,0,5535,5396,1,0,0,
        0,5535,5403,1,0,0,0,5535,5410,1,0,0,0,5535,5417,1,0,0,0,5535,5424,
        1,0,0,0,5535,5433,1,0,0,0,5535,5445,1,0,0,0,5535,5454,1,0,0,0,5535,
        5463,1,0,0,0,5535,5472,1,0,0,0,5535,5479,1,0,0,0,5535,5486,1,0,0,
        0,5535,5496,1,0,0,0,5535,5506,1,0,0,0,5535,5516,1,0,0,0,5535,5524,
        1,0,0,0,5536,569,1,0,0,0,5537,5540,3,1458,729,0,5538,5540,5,78,0,
        0,5539,5537,1,0,0,0,5539,5538,1,0,0,0,5540,571,1,0,0,0,5541,5542,
        5,327,0,0,5542,5544,5,246,0,0,5543,5545,3,574,287,0,5544,5543,1,
        0,0,0,5544,5545,1,0,0,0,5545,5546,1,0,0,0,5546,5547,5,80,0,0,5547,
        5548,5,44,0,0,5548,5549,3,1432,716,0,5549,5550,5,116,0,0,5550,5551,
        3,576,288,0,5551,5651,1,0,0,0,5552,5553,5,327,0,0,5553,5555,5,246,
        0,0,5554,5556,3,574,287,0,5555,5554,1,0,0,0,5555,5556,1,0,0,0,5556,
        5557,1,0,0,0,5557,5558,5,80,0,0,5558,5559,5,360,0,0,5559,5560,3,
        1168,584,0,5560,5561,5,116,0,0,5561,5562,3,576,288,0,5562,5651,1,
        0,0,0,5563,5564,5,327,0,0,5564,5566,5,246,0,0,5565,5567,3,574,287,
        0,5566,5565,1,0,0,0,5566,5567,1,0,0,0,5567,5568,1,0,0,0,5568,5569,
        5,80,0,0,5569,5570,5,189,0,0,5570,5571,3,1168,584,0,5571,5572,5,
        116,0,0,5572,5573,3,576,288,0,5573,5651,1,0,0,0,5574,5575,5,327,
        0,0,5575,5577,5,246,0,0,5576,5578,3,574,287,0,5577,5576,1,0,0,0,
        5577,5578,1,0,0,0,5578,5579,1,0,0,0,5579,5580,5,80,0,0,5580,5581,
        5,136,0,0,5581,5582,3,698,349,0,5582,5583,5,116,0,0,5583,5584,3,
        576,288,0,5584,5651,1,0,0,0,5585,5586,5,327,0,0,5586,5588,5,246,
        0,0,5587,5589,3,574,287,0,5588,5587,1,0,0,0,5588,5589,1,0,0,0,5589,
        5590,1,0,0,0,5590,5591,5,80,0,0,5591,5592,5,211,0,0,5592,5593,3,
        674,337,0,5593,5594,5,116,0,0,5594,5595,3,576,288,0,5595,5651,1,
        0,0,0,5596,5597,5,327,0,0,5597,5599,5,246,0,0,5598,5600,3,574,287,
        0,5599,5598,1,0,0,0,5599,5600,1,0,0,0,5600,5601,1,0,0,0,5601,5602,
        5,80,0,0,5602,5603,5,248,0,0,5603,5604,5,274,0,0,5604,5605,3,322,
        161,0,5605,5606,5,116,0,0,5606,5607,3,576,288,0,5607,5651,1,0,0,
        0,5608,5609,5,327,0,0,5609,5611,5,246,0,0,5610,5612,3,574,287,0,
        5611,5610,1,0,0,0,5611,5612,1,0,0,0,5612,5613,1,0,0,0,5613,5614,
        5,80,0,0,5614,5615,5,296,0,0,5615,5616,3,670,335,0,5616,5617,5,116,
        0,0,5617,5618,3,576,288,0,5618,5651,1,0,0,0,5619,5620,5,327,0,0,
        5620,5622,5,246,0,0,5621,5623,3,574,287,0,5622,5621,1,0,0,0,5622,
        5623,1,0,0,0,5623,5624,1,0,0,0,5624,5625,5,80,0,0,5625,5626,5,442,
        0,0,5626,5627,3,666,333,0,5627,5628,5,116,0,0,5628,5629,3,576,288,
        0,5629,5651,1,0,0,0,5630,5631,5,327,0,0,5631,5633,5,246,0,0,5632,
        5634,3,574,287,0,5633,5632,1,0,0,0,5633,5634,1,0,0,0,5634,5635,1,
        0,0,0,5635,5636,5,80,0,0,5636,5637,3,546,273,0,5637,5638,5,116,0,
        0,5638,5639,3,576,288,0,5639,5651,1,0,0,0,5640,5641,5,327,0,0,5641,
        5643,5,246,0,0,5642,5644,3,574,287,0,5643,5642,1,0,0,0,5643,5644,
        1,0,0,0,5644,5645,1,0,0,0,5645,5646,5,80,0,0,5646,5647,3,548,274,
        0,5647,5648,5,116,0,0,5648,5649,3,576,288,0,5649,5651,1,0,0,0,5650,
        5541,1,0,0,0,5650,5552,1,0,0,0,5650,5563,1,0,0,0,5650,5574,1,0,0,
        0,5650,5585,1,0,0,0,5650,5596,1,0,0,0,5650,5608,1,0,0,0,5650,5619,
        1,0,0,0,5650,5630,1,0,0,0,5650,5640,1,0,0,0,5651,573,1,0,0,0,5652,
        5653,5,62,0,0,5653,5654,3,80,40,0,5654,575,1,0,0,0,5655,5658,3,1458,
        729,0,5656,5658,5,78,0,0,5657,5655,1,0,0,0,5657,5656,1,0,0,0,5658,
        577,1,0,0,0,5659,5660,5,61,0,0,5660,5664,3,580,290,0,5661,5662,5,
        265,0,0,5662,5664,3,580,290,0,5663,5659,1,0,0,0,5663,5661,1,0,0,
        0,5664,579,1,0,0,0,5665,5751,3,994,497,0,5666,5667,3,582,291,0,5667,
        5668,3,994,497,0,5668,5751,1,0,0,0,5669,5671,5,268,0,0,5670,5672,
        3,584,292,0,5671,5670,1,0,0,0,5671,5672,1,0,0,0,5672,5673,1,0,0,
        0,5673,5751,3,994,497,0,5674,5676,5,293,0,0,5675,5677,3,584,292,
        0,5676,5675,1,0,0,0,5676,5677,1,0,0,0,5677,5678,1,0,0,0,5678,5751,
        3,994,497,0,5679,5681,5,207,0,0,5680,5682,3,584,292,0,5681,5680,
        1,0,0,0,5681,5682,1,0,0,0,5682,5683,1,0,0,0,5683,5751,3,994,497,
        0,5684,5686,5,249,0,0,5685,5687,3,584,292,0,5686,5685,1,0,0,0,5686,
        5687,1,0,0,0,5687,5688,1,0,0,0,5688,5751,3,994,497,0,5689,5690,5,
        130,0,0,5690,5692,3,1464,732,0,5691,5693,3,584,292,0,5692,5691,1,
        0,0,0,5692,5693,1,0,0,0,5693,5694,1,0,0,0,5694,5695,3,994,497,0,
        5695,5751,1,0,0,0,5696,5697,5,307,0,0,5697,5699,3,1464,732,0,5698,
        5700,3,584,292,0,5699,5698,1,0,0,0,5699,5700,1,0,0,0,5700,5701,1,
        0,0,0,5701,5702,3,994,497,0,5702,5751,1,0,0,0,5703,5705,3,1464,732,
        0,5704,5706,3,584,292,0,5705,5704,1,0,0,0,5705,5706,1,0,0,0,5706,
        5707,1,0,0,0,5707,5708,3,994,497,0,5708,5751,1,0,0,0,5709,5711,5,
        30,0,0,5710,5712,3,584,292,0,5711,5710,1,0,0,0,5711,5712,1,0,0,0,
        5712,5713,1,0,0,0,5713,5751,3,994,497,0,5714,5716,5,210,0,0,5715,
        5717,3,584,292,0,5716,5715,1,0,0,0,5716,5717,1,0,0,0,5717,5718,1,
        0,0,0,5718,5751,3,994,497,0,5719,5720,5,210,0,0,5720,5722,3,1464,
        732,0,5721,5723,3,584,292,0,5722,5721,1,0,0,0,5722,5723,1,0,0,0,
        5723,5724,1,0,0,0,5724,5725,3,994,497,0,5725,5751,1,0,0,0,5726,5727,
        5,210,0,0,5727,5729,5,30,0,0,5728,5730,3,584,292,0,5729,5728,1,0,
        0,0,5729,5730,1,0,0,0,5730,5731,1,0,0,0,5731,5751,3,994,497,0,5732,
        5734,5,144,0,0,5733,5735,3,584,292,0,5734,5733,1,0,0,0,5734,5735,
        1,0,0,0,5735,5736,1,0,0,0,5736,5751,3,994,497,0,5737,5738,5,144,
        0,0,5738,5740,3,1464,732,0,5739,5741,3,584,292,0,5740,5739,1,0,0,
        0,5740,5741,1,0,0,0,5741,5742,1,0,0,0,5742,5743,3,994,497,0,5743,
        5751,1,0,0,0,5744,5745,5,144,0,0,5745,5747,5,30,0,0,5746,5748,3,
        584,292,0,5747,5746,1,0,0,0,5747,5748,1,0,0,0,5748,5749,1,0,0,0,
        5749,5751,3,994,497,0,5750,5665,1,0,0,0,5750,5666,1,0,0,0,5750,5669,
        1,0,0,0,5750,5674,1,0,0,0,5750,5679,1,0,0,0,5750,5684,1,0,0,0,5750,
        5689,1,0,0,0,5750,5696,1,0,0,0,5750,5703,1,0,0,0,5750,5709,1,0,0,
        0,5750,5714,1,0,0,0,5750,5719,1,0,0,0,5750,5726,1,0,0,0,5750,5732,
        1,0,0,0,5750,5737,1,0,0,0,5750,5744,1,0,0,0,5751,581,1,0,0,0,5752,
        5753,7,42,0,0,5753,583,1,0,0,0,5754,5755,3,582,291,0,5755,585,1,
        0,0,0,5756,5757,5,65,0,0,5757,5758,3,590,295,0,5758,5759,5,80,0,
        0,5759,5760,3,600,300,0,5760,5761,5,94,0,0,5761,5763,3,602,301,0,
        5762,5764,3,606,303,0,5763,5762,1,0,0,0,5763,5764,1,0,0,0,5764,587,
        1,0,0,0,5765,5766,5,317,0,0,5766,5767,3,590,295,0,5767,5768,5,80,
        0,0,5768,5769,3,600,300,0,5769,5770,5,64,0,0,5770,5772,3,602,301,
        0,5771,5773,3,124,62,0,5772,5771,1,0,0,0,5772,5773,1,0,0,0,5773,
        5787,1,0,0,0,5774,5775,5,317,0,0,5775,5776,5,65,0,0,5776,5777,5,
        279,0,0,5777,5778,5,62,0,0,5778,5779,3,590,295,0,5779,5780,5,80,
        0,0,5780,5781,3,600,300,0,5781,5782,5,64,0,0,5782,5784,3,602,301,
        0,5783,5785,3,124,62,0,5784,5783,1,0,0,0,5784,5785,1,0,0,0,5785,
        5787,1,0,0,0,5786,5765,1,0,0,0,5786,5774,1,0,0,0,5787,589,1,0,0,
        0,5788,5805,3,596,298,0,5789,5805,5,30,0,0,5790,5791,5,30,0,0,5791,
        5805,5,294,0,0,5792,5793,5,30,0,0,5793,5794,5,2,0,0,5794,5795,3,
        244,122,0,5795,5796,5,3,0,0,5796,5805,1,0,0,0,5797,5798,5,30,0,0,
        5798,5799,5,294,0,0,5799,5800,5,2,0,0,5800,5801,3,244,122,0,5801,
        5802,5,3,0,0,5802,5805,1,0,0,0,5803,5805,3,592,296,0,5804,5788,1,
        0,0,0,5804,5789,1,0,0,0,5804,5790,1,0,0,0,5804,5792,1,0,0,0,5804,
        5797,1,0,0,0,5804,5803,1,0,0,0,5805,591,1,0,0,0,5806,5811,3,594,
        297,0,5807,5808,5,6,0,0,5808,5810,3,594,297,0,5809,5807,1,0,0,0,
        5810,5813,1,0,0,0,5811,5809,1,0,0,0,5811,5812,1,0,0,0,5812,593,1,
        0,0,0,5813,5811,1,0,0,0,5814,5815,7,43,0,0,5815,595,1,0,0,0,5816,
        5821,3,598,299,0,5817,5818,5,6,0,0,5818,5820,3,598,299,0,5819,5817,
        1,0,0,0,5820,5823,1,0,0,0,5821,5819,1,0,0,0,5821,5822,1,0,0,0,5822,
        597,1,0,0,0,5823,5821,1,0,0,0,5824,5826,5,88,0,0,5825,5827,3,240,
        120,0,5826,5825,1,0,0,0,5826,5827,1,0,0,0,5827,5841,1,0,0,0,5828,
        5830,5,86,0,0,5829,5831,3,240,120,0,5830,5829,1,0,0,0,5830,5831,
        1,0,0,0,5831,5841,1,0,0,0,5832,5834,5,46,0,0,5833,5835,3,240,120,
        0,5834,5833,1,0,0,0,5834,5835,1,0,0,0,5835,5841,1,0,0,0,5836,5838,
        3,1474,737,0,5837,5839,3,240,120,0,5838,5837,1,0,0,0,5838,5839,1,
        0,0,0,5839,5841,1,0,0,0,5840,5824,1,0,0,0,5840,5828,1,0,0,0,5840,
        5832,1,0,0,0,5840,5836,1,0,0,0,5841,599,1,0,0,0,5842,5901,3,1390,
        695,0,5843,5844,5,92,0,0,5844,5901,3,1392,696,0,5845,5846,5,328,
        0,0,5846,5901,3,1390,695,0,5847,5848,5,63,0,0,5848,5849,5,174,0,
        0,5849,5850,5,381,0,0,5850,5901,3,1416,708,0,5851,5852,5,63,0,0,
        5852,5853,5,331,0,0,5853,5901,3,1416,708,0,5854,5855,5,211,0,0,5855,
        5901,3,672,336,0,5856,5857,5,296,0,0,5857,5901,3,668,334,0,5858,
        5859,5,442,0,0,5859,5901,3,664,332,0,5860,5861,5,175,0,0,5861,5901,
        3,1396,698,0,5862,5863,5,189,0,0,5863,5901,3,552,276,0,5864,5865,
        5,247,0,0,5865,5901,3,1416,708,0,5866,5867,5,248,0,0,5867,5868,5,
        274,0,0,5868,5901,3,324,162,0,5869,5870,5,323,0,0,5870,5901,3,1394,
        697,0,5871,5872,5,351,0,0,5872,5901,3,1414,707,0,5873,5874,5,360,
        0,0,5874,5901,3,552,276,0,5875,5876,5,30,0,0,5876,5877,5,350,0,0,
        5877,5878,5,68,0,0,5878,5879,5,323,0,0,5879,5901,3,1394,697,0,5880,
        5881,5,30,0,0,5881,5882,5,329,0,0,5882,5883,5,68,0,0,5883,5884,5,
        323,0,0,5884,5901,3,1394,697,0,5885,5886,5,30,0,0,5886,5887,5,212,
        0,0,5887,5888,5,68,0,0,5888,5889,5,323,0,0,5889,5901,3,1394,697,
        0,5890,5891,5,30,0,0,5891,5892,5,457,0,0,5892,5893,5,68,0,0,5893,
        5894,5,323,0,0,5894,5901,3,1394,697,0,5895,5896,5,30,0,0,5896,5897,
        5,455,0,0,5897,5898,5,68,0,0,5898,5899,5,323,0,0,5899,5901,3,1394,
        697,0,5900,5842,1,0,0,0,5900,5843,1,0,0,0,5900,5845,1,0,0,0,5900,
        5847,1,0,0,0,5900,5851,1,0,0,0,5900,5854,1,0,0,0,5900,5856,1,0,0,
        0,5900,5858,1,0,0,0,5900,5860,1,0,0,0,5900,5862,1,0,0,0,5900,5864,
        1,0,0,0,5900,5866,1,0,0,0,5900,5869,1,0,0,0,5900,5871,1,0,0,0,5900,
        5873,1,0,0,0,5900,5875,1,0,0,0,5900,5880,1,0,0,0,5900,5885,1,0,0,
        0,5900,5890,1,0,0,0,5900,5895,1,0,0,0,5901,601,1,0,0,0,5902,5907,
        3,604,302,0,5903,5904,5,6,0,0,5904,5906,3,604,302,0,5905,5903,1,
        0,0,0,5906,5909,1,0,0,0,5907,5905,1,0,0,0,5907,5908,1,0,0,0,5908,
        603,1,0,0,0,5909,5907,1,0,0,0,5910,5914,3,1470,735,0,5911,5912,5,
        66,0,0,5912,5914,3,1470,735,0,5913,5910,1,0,0,0,5913,5911,1,0,0,
        0,5914,605,1,0,0,0,5915,5916,5,105,0,0,5916,5917,5,65,0,0,5917,5918,
        5,279,0,0,5918,607,1,0,0,0,5919,5920,5,65,0,0,5920,5921,3,596,298,
        0,5921,5922,5,94,0,0,5922,5924,3,1472,736,0,5923,5925,3,612,306,
        0,5924,5923,1,0,0,0,5924,5925,1,0,0,0,5925,5927,1,0,0,0,5926,5928,
        3,614,307,0,5927,5926,1,0,0,0,5927,5928,1,0,0,0,5928,609,1,0,0,0,
        5929,5930,5,317,0,0,5930,5931,3,596,298,0,5931,5932,5,64,0,0,5932,
        5934,3,1472,736,0,5933,5935,3,614,307,0,5934,5933,1,0,0,0,5934,5935,
        1,0,0,0,5935,5937,1,0,0,0,5936,5938,3,124,62,0,5937,5936,1,0,0,0,
        5937,5938,1,0,0,0,5938,5953,1,0,0,0,5939,5940,5,317,0,0,5940,5941,
        5,134,0,0,5941,5942,5,279,0,0,5942,5943,5,62,0,0,5943,5944,3,596,
        298,0,5944,5945,5,64,0,0,5945,5947,3,1472,736,0,5946,5948,3,614,
        307,0,5947,5946,1,0,0,0,5947,5948,1,0,0,0,5948,5950,1,0,0,0,5949,
        5951,3,124,62,0,5950,5949,1,0,0,0,5950,5951,1,0,0,0,5951,5953,1,
        0,0,0,5952,5929,1,0,0,0,5952,5939,1,0,0,0,5953,611,1,0,0,0,5954,
        5955,5,105,0,0,5955,5956,5,134,0,0,5956,5957,5,279,0,0,5957,613,
        1,0,0,0,5958,5959,5,214,0,0,5959,5960,5,147,0,0,5960,5961,3,1470,
        735,0,5961,615,1,0,0,0,5962,5963,5,138,0,0,5963,5964,5,53,0,0,5964,
        5965,5,294,0,0,5965,5966,3,618,309,0,5966,5967,3,622,311,0,5967,
        617,1,0,0,0,5968,5970,3,620,310,0,5969,5968,1,0,0,0,5970,5973,1,
        0,0,0,5971,5969,1,0,0,0,5971,5972,1,0,0,0,5972,619,1,0,0,0,5973,
        5971,1,0,0,0,5974,5975,5,68,0,0,5975,5976,5,323,0,0,5976,5984,3,
        1394,697,0,5977,5978,5,62,0,0,5978,5979,5,318,0,0,5979,5984,3,1472,
        736,0,5980,5981,5,62,0,0,5981,5982,5,99,0,0,5982,5984,3,1472,736,
        0,5983,5974,1,0,0,0,5983,5977,1,0,0,0,5983,5980,1,0,0,0,5984,621,
        1,0,0,0,5985,5986,5,65,0,0,5986,5987,3,590,295,0,5987,5988,5,80,
        0,0,5988,5989,3,624,312,0,5989,5990,5,94,0,0,5990,5992,3,602,301,
        0,5991,5993,3,606,303,0,5992,5991,1,0,0,0,5992,5993,1,0,0,0,5993,
        6016,1,0,0,0,5994,5995,5,317,0,0,5995,5996,3,590,295,0,5996,5997,
        5,80,0,0,5997,5998,3,624,312,0,5998,5999,5,64,0,0,5999,6001,3,602,
        301,0,6000,6002,3,124,62,0,6001,6000,1,0,0,0,6001,6002,1,0,0,0,6002,
        6016,1,0,0,0,6003,6004,5,317,0,0,6004,6005,5,65,0,0,6005,6006,5,
        279,0,0,6006,6007,5,62,0,0,6007,6008,3,590,295,0,6008,6009,5,80,
        0,0,6009,6010,3,624,312,0,6010,6011,5,64,0,0,6011,6013,3,602,301,
        0,6012,6014,3,124,62,0,6013,6012,1,0,0,0,6013,6014,1,0,0,0,6014,
        6016,1,0,0,0,6015,5985,1,0,0,0,6015,5994,1,0,0,0,6015,6003,1,0,0,
        0,6016,623,1,0,0,0,6017,6018,7,44,0,0,6018,625,1,0,0,0,6019,6021,
        5,46,0,0,6020,6022,3,628,314,0,6021,6020,1,0,0,0,6021,6022,1,0,0,
        0,6022,6023,1,0,0,0,6023,6025,5,226,0,0,6024,6026,3,630,315,0,6025,
        6024,1,0,0,0,6025,6026,1,0,0,0,6026,6028,1,0,0,0,6027,6029,3,516,
        258,0,6028,6027,1,0,0,0,6028,6029,1,0,0,0,6029,6031,1,0,0,0,6030,
        6032,3,632,316,0,6031,6030,1,0,0,0,6031,6032,1,0,0,0,6032,6033,1,
        0,0,0,6033,6034,5,80,0,0,6034,6036,3,1118,559,0,6035,6037,3,634,
        317,0,6036,6035,1,0,0,0,6036,6037,1,0,0,0,6037,6038,1,0,0,0,6038,
        6039,5,2,0,0,6039,6040,3,636,318,0,6040,6042,5,3,0,0,6041,6043,3,
        642,321,0,6042,6041,1,0,0,0,6042,6043,1,0,0,0,6043,6045,1,0,0,0,
        6044,6046,3,220,110,0,6045,6044,1,0,0,0,6045,6046,1,0,0,0,6046,6048,
        1,0,0,0,6047,6049,3,134,67,0,6048,6047,1,0,0,0,6048,6049,1,0,0,0,
        6049,6051,1,0,0,0,6050,6052,3,282,141,0,6051,6050,1,0,0,0,6051,6052,
        1,0,0,0,6052,6054,1,0,0,0,6053,6055,3,1144,572,0,6054,6053,1,0,0,
        0,6054,6055,1,0,0,0,6055,627,1,0,0,0,6056,6057,5,98,0,0,6057,629,
        1,0,0,0,6058,6059,5,109,0,0,6059,631,1,0,0,0,6060,6061,3,1436,718,
        0,6061,633,1,0,0,0,6062,6063,5,100,0,0,6063,6064,3,1436,718,0,6064,
        635,1,0,0,0,6065,6070,3,640,320,0,6066,6067,5,6,0,0,6067,6069,3,
        640,320,0,6068,6066,1,0,0,0,6069,6072,1,0,0,0,6070,6068,1,0,0,0,
        6070,6071,1,0,0,0,6071,637,1,0,0,0,6072,6070,1,0,0,0,6073,6075,3,
        646,323,0,6074,6073,1,0,0,0,6074,6075,1,0,0,0,6075,6077,1,0,0,0,
        6076,6078,3,648,324,0,6077,6076,1,0,0,0,6077,6078,1,0,0,0,6078,6080,
        1,0,0,0,6079,6081,3,650,325,0,6080,6079,1,0,0,0,6080,6081,1,0,0,
        0,6081,6083,1,0,0,0,6082,6084,3,652,326,0,6083,6082,1,0,0,0,6083,
        6084,1,0,0,0,6084,6097,1,0,0,0,6085,6087,3,646,323,0,6086,6085,1,
        0,0,0,6086,6087,1,0,0,0,6087,6088,1,0,0,0,6088,6089,3,558,279,0,
        6089,6091,3,132,66,0,6090,6092,3,650,325,0,6091,6090,1,0,0,0,6091,
        6092,1,0,0,0,6092,6094,1,0,0,0,6093,6095,3,652,326,0,6094,6093,1,
        0,0,0,6094,6095,1,0,0,0,6095,6097,1,0,0,0,6096,6074,1,0,0,0,6096,
        6086,1,0,0,0,6097,639,1,0,0,0,6098,6099,3,1432,716,0,6099,6100,3,
        638,319,0,6100,6110,1,0,0,0,6101,6102,3,1262,631,0,6102,6103,3,638,
        319,0,6103,6110,1,0,0,0,6104,6105,5,2,0,0,6105,6106,3,1212,606,0,
        6106,6107,5,3,0,0,6107,6108,3,638,319,0,6108,6110,1,0,0,0,6109,6098,
        1,0,0,0,6109,6101,1,0,0,0,6109,6104,1,0,0,0,6110,641,1,0,0,0,6111,
        6112,5,441,0,0,6112,6113,5,2,0,0,6113,6114,3,644,322,0,6114,6115,
        5,3,0,0,6115,643,1,0,0,0,6116,6121,3,640,320,0,6117,6118,5,6,0,0,
        6118,6120,3,640,320,0,6119,6117,1,0,0,0,6120,6123,1,0,0,0,6121,6119,
        1,0,0,0,6121,6122,1,0,0,0,6122,645,1,0,0,0,6123,6121,1,0,0,0,6124,
        6125,5,43,0,0,6125,6126,3,558,279,0,6126,647,1,0,0,0,6127,6128,3,
        558,279,0,6128,649,1,0,0,0,6129,6130,7,45,0,0,6130,651,1,0,0,0,6131,
        6132,5,273,0,0,6132,6136,5,207,0,0,6133,6134,5,273,0,0,6134,6136,
        5,249,0,0,6135,6131,1,0,0,0,6135,6133,1,0,0,0,6136,653,1,0,0,0,6137,
        6139,5,46,0,0,6138,6140,3,658,329,0,6139,6138,1,0,0,0,6139,6140,
        1,0,0,0,6140,6145,1,0,0,0,6141,6142,5,211,0,0,6142,6146,3,1442,721,
        0,6143,6144,5,296,0,0,6144,6146,3,1430,715,0,6145,6141,1,0,0,0,6145,
        6143,1,0,0,0,6146,6147,1,0,0,0,6147,6157,3,676,338,0,6148,6155,5,
        316,0,0,6149,6156,3,686,343,0,6150,6151,5,92,0,0,6151,6152,5,2,0,
        0,6152,6153,3,714,357,0,6153,6154,5,3,0,0,6154,6156,1,0,0,0,6155,
        6149,1,0,0,0,6155,6150,1,0,0,0,6156,6158,1,0,0,0,6157,6148,1,0,0,
        0,6157,6158,1,0,0,0,6158,6159,1,0,0,0,6159,6162,3,702,351,0,6160,
        6161,5,105,0,0,6161,6163,3,656,328,0,6162,6160,1,0,0,0,6162,6163,
        1,0,0,0,6163,655,1,0,0,0,6164,6165,5,2,0,0,6165,6170,3,1474,737,
        0,6166,6167,5,6,0,0,6167,6169,3,1474,737,0,6168,6166,1,0,0,0,6169,
        6172,1,0,0,0,6170,6168,1,0,0,0,6170,6171,1,0,0,0,6171,6173,1,0,0,
        0,6172,6170,1,0,0,0,6173,6174,5,3,0,0,6174,657,1,0,0,0,6175,6176,
        5,82,0,0,6176,6177,5,311,0,0,6177,659,1,0,0,0,6178,6180,5,2,0,0,
        6179,6181,3,662,331,0,6180,6179,1,0,0,0,6180,6181,1,0,0,0,6181,6182,
        1,0,0,0,6182,6183,5,3,0,0,6183,661,1,0,0,0,6184,6189,3,680,340,0,
        6185,6186,5,6,0,0,6186,6188,3,680,340,0,6187,6185,1,0,0,0,6188,6191,
        1,0,0,0,6189,6187,1,0,0,0,6189,6190,1,0,0,0,6190,663,1,0,0,0,6191,
        6189,1,0,0,0,6192,6197,3,666,333,0,6193,6194,5,6,0,0,6194,6196,3,
        666,333,0,6195,6193,1,0,0,0,6196,6199,1,0,0,0,6197,6195,1,0,0,0,
        6197,6198,1,0,0,0,6198,665,1,0,0,0,6199,6197,1,0,0,0,6200,6201,3,
        1426,713,0,6201,6202,3,660,330,0,6202,6209,1,0,0,0,6203,6209,3,1500,
        750,0,6204,6206,3,1474,737,0,6205,6207,3,1380,690,0,6206,6205,1,
        0,0,0,6206,6207,1,0,0,0,6207,6209,1,0,0,0,6208,6200,1,0,0,0,6208,
        6203,1,0,0,0,6208,6204,1,0,0,0,6209,667,1,0,0,0,6210,6215,3,670,
        335,0,6211,6212,5,6,0,0,6212,6214,3,670,335,0,6213,6211,1,0,0,0,
        6214,6217,1,0,0,0,6215,6213,1,0,0,0,6215,6216,1,0,0,0,6216,669,1,
        0,0,0,6217,6215,1,0,0,0,6218,6219,3,1428,714,0,6219,6220,3,660,330,
        0,6220,6227,1,0,0,0,6221,6227,3,1500,750,0,6222,6224,3,1474,737,
        0,6223,6225,3,1380,690,0,6224,6223,1,0,0,0,6224,6225,1,0,0,0,6225,
        6227,1,0,0,0,6226,6218,1,0,0,0,6226,6221,1,0,0,0,6226,6222,1,0,0,
        0,6227,671,1,0,0,0,6228,6233,3,674,337,0,6229,6230,5,6,0,0,6230,
        6232,3,674,337,0,6231,6229,1,0,0,0,6232,6235,1,0,0,0,6233,6231,1,
        0,0,0,6233,6234,1,0,0,0,6234,673,1,0,0,0,6235,6233,1,0,0,0,6236,
        6237,3,1444,722,0,6237,6238,3,660,330,0,6238,6245,1,0,0,0,6239,6245,
        3,1500,750,0,6240,6242,3,1474,737,0,6241,6243,3,1380,690,0,6242,
        6241,1,0,0,0,6242,6243,1,0,0,0,6243,6245,1,0,0,0,6244,6236,1,0,0,
        0,6244,6239,1,0,0,0,6244,6240,1,0,0,0,6245,675,1,0,0,0,6246,6248,
        5,2,0,0,6247,6249,3,678,339,0,6248,6247,1,0,0,0,6248,6249,1,0,0,
        0,6249,6250,1,0,0,0,6250,6251,5,3,0,0,6251,677,1,0,0,0,6252,6257,
        3,690,345,0,6253,6254,5,6,0,0,6254,6256,3,690,345,0,6255,6253,1,
        0,0,0,6256,6259,1,0,0,0,6257,6255,1,0,0,0,6257,6258,1,0,0,0,6258,
        679,1,0,0,0,6259,6257,1,0,0,0,6260,6262,3,682,341,0,6261,6263,3,
        684,342,0,6262,6261,1,0,0,0,6262,6263,1,0,0,0,6263,6264,1,0,0,0,
        6264,6265,3,688,344,0,6265,6274,1,0,0,0,6266,6268,3,684,342,0,6267,
        6269,3,682,341,0,6268,6267,1,0,0,0,6268,6269,1,0,0,0,6269,6270,1,
        0,0,0,6270,6271,3,688,344,0,6271,6274,1,0,0,0,6272,6274,3,688,344,
        0,6273,6260,1,0,0,0,6273,6266,1,0,0,0,6273,6272,1,0,0,0,6274,681,
        1,0,0,0,6275,6277,5,68,0,0,6276,6278,5,453,0,0,6277,6276,1,0,0,0,
        6277,6278,1,0,0,0,6278,6283,1,0,0,0,6279,6283,5,453,0,0,6280,6283,
        5,400,0,0,6281,6283,5,101,0,0,6282,6275,1,0,0,0,6282,6279,1,0,0,
        0,6282,6280,1,0,0,0,6282,6281,1,0,0,0,6283,683,1,0,0,0,6284,6285,
        3,1482,741,0,6285,685,1,0,0,0,6286,6287,3,688,344,0,6287,687,1,0,
        0,0,6288,6301,3,1168,584,0,6289,6290,3,1482,741,0,6290,6291,3,560,
        280,0,6291,6292,5,27,0,0,6292,6293,5,360,0,0,6293,6301,1,0,0,0,6294,
        6295,5,415,0,0,6295,6296,3,1482,741,0,6296,6297,3,560,280,0,6297,
        6298,5,27,0,0,6298,6299,5,360,0,0,6299,6301,1,0,0,0,6300,6288,1,
        0,0,0,6300,6289,1,0,0,0,6300,6294,1,0,0,0,6301,689,1,0,0,0,6302,
        6305,3,680,340,0,6303,6304,7,46,0,0,6304,6306,3,1212,606,0,6305,
        6303,1,0,0,0,6305,6306,1,0,0,0,6306,691,1,0,0,0,6307,6308,3,680,
        340,0,6308,693,1,0,0,0,6309,6320,5,2,0,0,6310,6321,5,9,0,0,6311,
        6321,3,696,348,0,6312,6313,5,83,0,0,6313,6314,5,147,0,0,6314,6321,
        3,696,348,0,6315,6316,3,696,348,0,6316,6317,5,83,0,0,6317,6318,5,
        147,0,0,6318,6319,3,696,348,0,6319,6321,1,0,0,0,6320,6310,1,0,0,
        0,6320,6311,1,0,0,0,6320,6312,1,0,0,0,6320,6315,1,0,0,0,6321,6322,
        1,0,0,0,6322,6323,5,3,0,0,6323,695,1,0,0,0,6324,6329,3,692,346,0,
        6325,6326,5,6,0,0,6326,6328,3,692,346,0,6327,6325,1,0,0,0,6328,6331,
        1,0,0,0,6329,6327,1,0,0,0,6329,6330,1,0,0,0,6330,697,1,0,0,0,6331,
        6329,1,0,0,0,6332,6333,3,1444,722,0,6333,6334,3,694,347,0,6334,699,
        1,0,0,0,6335,6340,3,698,349,0,6336,6337,5,6,0,0,6337,6339,3,698,
        349,0,6338,6336,1,0,0,0,6339,6342,1,0,0,0,6340,6338,1,0,0,0,6340,
        6341,1,0,0,0,6341,701,1,0,0,0,6342,6340,1,0,0,0,6343,6345,3,706,
        353,0,6344,6343,1,0,0,0,6345,6346,1,0,0,0,6346,6344,1,0,0,0,6346,
        6347,1,0,0,0,6347,703,1,0,0,0,6348,6349,5,149,0,0,6349,6350,5,80,
        0,0,6350,6351,5,78,0,0,6351,6384,5,458,0,0,6352,6353,5,316,0,0,6353,
        6354,5,78,0,0,6354,6355,5,80,0,0,6355,6356,5,78,0,0,6356,6384,5,
        458,0,0,6357,6384,5,346,0,0,6358,6384,5,222,0,0,6359,6384,5,338,
        0,0,6360,6384,5,377,0,0,6361,6362,5,205,0,0,6362,6363,5,327,0,0,
        6363,6384,5,181,0,0,6364,6365,5,205,0,0,6365,6366,5,327,0,0,6366,
        6384,5,243,0,0,6367,6368,5,327,0,0,6368,6384,5,181,0,0,6369,6370,
        5,327,0,0,6370,6384,5,243,0,0,6371,6384,5,250,0,0,6372,6373,5,77,
        0,0,6373,6384,5,250,0,0,6374,6375,5,170,0,0,6375,6384,3,322,161,
        0,6376,6377,5,320,0,0,6377,6384,3,322,161,0,6378,6379,5,459,0,0,
        6379,6384,3,558,279,0,6380,6384,3,90,45,0,6381,6382,5,460,0,0,6382,
        6384,3,1474,737,0,6383,6348,1,0,0,0,6383,6352,1,0,0,0,6383,6357,
        1,0,0,0,6383,6358,1,0,0,0,6383,6359,1,0,0,0,6383,6360,1,0,0,0,6383,
        6361,1,0,0,0,6383,6364,1,0,0,0,6383,6367,1,0,0,0,6383,6369,1,0,0,
        0,6383,6371,1,0,0,0,6383,6372,1,0,0,0,6383,6374,1,0,0,0,6383,6376,
        1,0,0,0,6383,6378,1,0,0,0,6383,6380,1,0,0,0,6383,6381,1,0,0,0,6384,
        705,1,0,0,0,6385,6386,5,36,0,0,6386,6387,3,1458,729,0,6387,6388,
        5,6,0,0,6388,6389,3,1458,729,0,6389,6411,1,0,0,0,6390,6391,5,247,
        0,0,6391,6411,3,80,40,0,6392,6393,5,443,0,0,6393,6411,3,708,354,
        0,6394,6411,5,104,0,0,6395,6396,5,333,0,0,6396,6403,3,1474,737,0,
        6397,6398,5,94,0,0,6398,6404,3,1474,737,0,6399,6400,5,10,0,0,6400,
        6404,3,1474,737,0,6401,6402,5,64,0,0,6402,6404,5,434,0,0,6403,6397,
        1,0,0,0,6403,6399,1,0,0,0,6403,6401,1,0,0,0,6404,6411,1,0,0,0,6405,
        6406,5,36,0,0,6406,6411,3,1474,737,0,6407,6411,3,6,3,0,6408,6411,
        3,704,352,0,6409,6411,3,1474,737,0,6410,6385,1,0,0,0,6410,6390,1,
        0,0,0,6410,6392,1,0,0,0,6410,6394,1,0,0,0,6410,6395,1,0,0,0,6410,
        6405,1,0,0,0,6410,6407,1,0,0,0,6410,6408,1,0,0,0,6410,6409,1,0,0,
        0,6411,707,1,0,0,0,6412,6413,5,62,0,0,6413,6414,5,360,0,0,6414,6421,
        3,1168,584,0,6415,6416,5,6,0,0,6416,6417,5,62,0,0,6417,6418,5,360,
        0,0,6418,6420,3,1168,584,0,6419,6415,1,0,0,0,6420,6423,1,0,0,0,6421,
        6419,1,0,0,0,6421,6422,1,0,0,0,6422,709,1,0,0,0,6423,6421,1,0,0,
        0,6424,6425,5,105,0,0,6425,6426,3,496,248,0,6426,711,1,0,0,0,6427,
        6428,3,1432,716,0,6428,6429,3,688,344,0,6429,713,1,0,0,0,6430,6435,
        3,712,356,0,6431,6432,5,6,0,0,6432,6434,3,712,356,0,6433,6431,1,
        0,0,0,6434,6437,1,0,0,0,6435,6433,1,0,0,0,6435,6436,1,0,0,0,6436,
        715,1,0,0,0,6437,6435,1,0,0,0,6438,6439,5,138,0,0,6439,6440,3,718,
        359,0,6440,6442,3,720,360,0,6441,6443,3,722,361,0,6442,6441,1,0,
        0,0,6442,6443,1,0,0,0,6443,717,1,0,0,0,6444,6445,5,211,0,0,6445,
        6451,3,674,337,0,6446,6447,5,296,0,0,6447,6451,3,670,335,0,6448,
        6449,5,442,0,0,6449,6451,3,666,333,0,6450,6444,1,0,0,0,6450,6446,
        1,0,0,0,6450,6448,1,0,0,0,6451,719,1,0,0,0,6452,6454,3,704,352,0,
        6453,6452,1,0,0,0,6454,6455,1,0,0,0,6455,6453,1,0,0,0,6455,6456,
        1,0,0,0,6456,721,1,0,0,0,6457,6458,5,315,0,0,6458,723,1,0,0,0,6459,
        6460,5,191,0,0,6460,6462,5,211,0,0,6461,6463,3,748,374,0,6462,6461,
        1,0,0,0,6462,6463,1,0,0,0,6463,6464,1,0,0,0,6464,6466,3,672,336,
        0,6465,6467,3,124,62,0,6466,6465,1,0,0,0,6466,6467,1,0,0,0,6467,
        6487,1,0,0,0,6468,6469,5,191,0,0,6469,6471,5,296,0,0,6470,6472,3,
        748,374,0,6471,6470,1,0,0,0,6471,6472,1,0,0,0,6472,6473,1,0,0,0,
        6473,6475,3,668,334,0,6474,6476,3,124,62,0,6475,6474,1,0,0,0,6475,
        6476,1,0,0,0,6476,6487,1,0,0,0,6477,6478,5,191,0,0,6478,6480,5,442,
        0,0,6479,6481,3,748,374,0,6480,6479,1,0,0,0,6480,6481,1,0,0,0,6481,
        6482,1,0,0,0,6482,6484,3,664,332,0,6483,6485,3,124,62,0,6484,6483,
        1,0,0,0,6484,6485,1,0,0,0,6485,6487,1,0,0,0,6486,6459,1,0,0,0,6486,
        6468,1,0,0,0,6486,6477,1,0,0,0,6487,725,1,0,0,0,6488,6489,5,191,
        0,0,6489,6491,5,136,0,0,6490,6492,3,748,374,0,6491,6490,1,0,0,0,
        6491,6492,1,0,0,0,6492,6493,1,0,0,0,6493,6495,3,700,350,0,6494,6496,
        3,124,62,0,6495,6494,1,0,0,0,6495,6496,1,0,0,0,6496,727,1,0,0,0,
        6497,6498,5,191,0,0,6498,6500,5,278,0,0,6499,6501,3,748,374,0,6500,
        6499,1,0,0,0,6500,6501,1,0,0,0,6501,6502,1,0,0,0,6502,6504,3,734,
        367,0,6503,6505,3,124,62,0,6504,6503,1,0,0,0,6504,6505,1,0,0,0,6505,
        729,1,0,0,0,6506,6507,5,2,0,0,6507,6508,3,1168,584,0,6508,6509,5,
        3,0,0,6509,6529,1,0,0,0,6510,6511,5,2,0,0,6511,6512,3,1168,584,0,
        6512,6513,5,6,0,0,6513,6514,3,1168,584,0,6514,6515,5,3,0,0,6515,
        6529,1,0,0,0,6516,6517,5,2,0,0,6517,6518,5,407,0,0,6518,6519,5,6,
        0,0,6519,6520,3,1168,584,0,6520,6521,5,3,0,0,6521,6529,1,0,0,0,6522,
        6523,5,2,0,0,6523,6524,3,1168,584,0,6524,6525,5,6,0,0,6525,6526,
        5,407,0,0,6526,6527,5,3,0,0,6527,6529,1,0,0,0,6528,6506,1,0,0,0,
        6528,6510,1,0,0,0,6528,6516,1,0,0,0,6528,6522,1,0,0,0,6529,731,1,
        0,0,0,6530,6531,3,1474,737,0,6531,6532,5,11,0,0,6532,6534,1,0,0,
        0,6533,6530,1,0,0,0,6534,6537,1,0,0,0,6535,6533,1,0,0,0,6535,6536,
        1,0,0,0,6536,6538,1,0,0,0,6537,6535,1,0,0,0,6538,6539,3,1318,659,
        0,6539,733,1,0,0,0,6540,6545,3,736,368,0,6541,6542,5,6,0,0,6542,
        6544,3,736,368,0,6543,6541,1,0,0,0,6544,6547,1,0,0,0,6545,6543,1,
        0,0,0,6545,6546,1,0,0,0,6546,735,1,0,0,0,6547,6545,1,0,0,0,6548,
        6549,3,732,366,0,6549,6550,3,730,365,0,6550,737,1,0,0,0,6551,6552,
        5,57,0,0,6552,6553,3,740,370,0,6553,739,1,0,0,0,6554,6556,3,742,
        371,0,6555,6554,1,0,0,0,6556,6557,1,0,0,0,6557,6555,1,0,0,0,6557,
        6558,1,0,0,0,6558,741,1,0,0,0,6559,6563,3,1458,729,0,6560,6561,5,
        247,0,0,6561,6563,3,80,40,0,6562,6559,1,0,0,0,6562,6560,1,0,0,0,
        6563,743,1,0,0,0,6564,6565,5,46,0,0,6565,6566,5,41,0,0,6566,6567,
        5,2,0,0,6567,6568,3,1168,584,0,6568,6569,5,36,0,0,6569,6570,3,1168,
        584,0,6570,6571,5,3,0,0,6571,6572,5,105,0,0,6572,6573,5,211,0,0,
        6573,6575,3,674,337,0,6574,6576,3,746,373,0,6575,6574,1,0,0,0,6575,
        6576,1,0,0,0,6576,6602,1,0,0,0,6577,6578,5,46,0,0,6578,6579,5,41,
        0,0,6579,6580,5,2,0,0,6580,6581,3,1168,584,0,6581,6582,5,36,0,0,
        6582,6583,3,1168,584,0,6583,6584,5,3,0,0,6584,6585,5,379,0,0,6585,
        6587,5,211,0,0,6586,6588,3,746,373,0,6587,6586,1,0,0,0,6587,6588,
        1,0,0,0,6588,6602,1,0,0,0,6589,6590,5,46,0,0,6590,6591,5,41,0,0,
        6591,6592,5,2,0,0,6592,6593,3,1168,584,0,6593,6594,5,36,0,0,6594,
        6595,3,1168,584,0,6595,6596,5,3,0,0,6596,6597,5,105,0,0,6597,6599,
        5,400,0,0,6598,6600,3,746,373,0,6599,6598,1,0,0,0,6599,6600,1,0,
        0,0,6600,6602,1,0,0,0,6601,6564,1,0,0,0,6601,6577,1,0,0,0,6601,6589,
        1,0,0,0,6602,745,1,0,0,0,6603,6604,5,36,0,0,6604,6608,5,223,0,0,
        6605,6606,5,36,0,0,6606,6608,5,141,0,0,6607,6603,1,0,0,0,6607,6605,
        1,0,0,0,6608,747,1,0,0,0,6609,6610,5,220,0,0,6610,6611,5,396,0,0,
        6611,749,1,0,0,0,6612,6614,5,46,0,0,6613,6615,3,658,329,0,6614,6613,
        1,0,0,0,6614,6615,1,0,0,0,6615,6616,1,0,0,0,6616,6617,5,443,0,0,
        6617,6618,5,62,0,0,6618,6619,3,1168,584,0,6619,6620,5,247,0,0,6620,
        6621,3,1436,718,0,6621,6622,5,2,0,0,6622,6623,3,752,376,0,6623,6624,
        5,3,0,0,6624,751,1,0,0,0,6625,6626,5,64,0,0,6626,6627,5,461,0,0,
        6627,6628,5,105,0,0,6628,6629,5,211,0,0,6629,6630,3,674,337,0,6630,
        6631,5,6,0,0,6631,6632,5,94,0,0,6632,6633,5,461,0,0,6633,6634,5,
        105,0,0,6634,6635,5,211,0,0,6635,6636,3,674,337,0,6636,6660,1,0,
        0,0,6637,6638,5,94,0,0,6638,6639,5,461,0,0,6639,6640,5,105,0,0,6640,
        6641,5,211,0,0,6641,6642,3,674,337,0,6642,6643,5,6,0,0,6643,6644,
        5,64,0,0,6644,6645,5,461,0,0,6645,6646,5,105,0,0,6646,6647,5,211,
        0,0,6647,6648,3,674,337,0,6648,6660,1,0,0,0,6649,6650,5,64,0,0,6650,
        6651,5,461,0,0,6651,6652,5,105,0,0,6652,6653,5,211,0,0,6653,6660,
        3,674,337,0,6654,6655,5,94,0,0,6655,6656,5,461,0,0,6656,6657,5,105,
        0,0,6657,6658,5,211,0,0,6658,6660,3,674,337,0,6659,6625,1,0,0,0,
        6659,6637,1,0,0,0,6659,6649,1,0,0,0,6659,6654,1,0,0,0,6660,753,1,
        0,0,0,6661,6662,5,306,0,0,6662,6678,3,756,378,0,6663,6664,5,306,
        0,0,6664,6678,3,758,379,0,6665,6666,5,306,0,0,6666,6667,5,2,0,0,
        6667,6668,3,760,380,0,6668,6669,5,3,0,0,6669,6670,3,756,378,0,6670,
        6678,1,0,0,0,6671,6672,5,306,0,0,6672,6673,5,2,0,0,6673,6674,3,760,
        380,0,6674,6675,5,3,0,0,6675,6676,3,758,379,0,6676,6678,1,0,0,0,
        6677,6661,1,0,0,0,6677,6663,1,0,0,0,6677,6665,1,0,0,0,6677,6671,
        1,0,0,0,6678,755,1,0,0,0,6679,6681,5,226,0,0,6680,6682,3,630,315,
        0,6681,6680,1,0,0,0,6681,6682,1,0,0,0,6682,6683,1,0,0,0,6683,6690,
        3,1412,706,0,6684,6686,5,92,0,0,6685,6687,3,630,315,0,6686,6685,
        1,0,0,0,6686,6687,1,0,0,0,6687,6688,1,0,0,0,6688,6690,3,1406,703,
        0,6689,6679,1,0,0,0,6689,6684,1,0,0,0,6690,757,1,0,0,0,6691,6693,
        5,323,0,0,6692,6694,3,630,315,0,6693,6692,1,0,0,0,6693,6694,1,0,
        0,0,6694,6695,1,0,0,0,6695,6707,3,1422,711,0,6696,6698,5,349,0,0,
        6697,6699,3,630,315,0,6698,6697,1,0,0,0,6698,6699,1,0,0,0,6699,6700,
        1,0,0,0,6700,6707,3,1436,718,0,6701,6703,5,175,0,0,6702,6704,3,630,
        315,0,6703,6702,1,0,0,0,6703,6704,1,0,0,0,6704,6705,1,0,0,0,6705,
        6707,3,1420,710,0,6706,6691,1,0,0,0,6706,6696,1,0,0,0,6706,6701,
        1,0,0,0,6707,759,1,0,0,0,6708,6713,3,762,381,0,6709,6710,5,6,0,0,
        6710,6712,3,762,381,0,6711,6709,1,0,0,0,6712,6715,1,0,0,0,6713,6711,
        1,0,0,0,6713,6714,1,0,0,0,6714,761,1,0,0,0,6715,6713,1,0,0,0,6716,
        6717,5,128,0,0,6717,763,1,0,0,0,6718,6719,5,138,0,0,6719,6720,5,
        351,0,0,6720,6721,3,1402,701,0,6721,6722,5,333,0,0,6722,6723,3,132,
        66,0,6723,6731,1,0,0,0,6724,6725,5,138,0,0,6725,6726,5,351,0,0,6726,
        6727,3,1402,701,0,6727,6728,5,313,0,0,6728,6729,3,132,66,0,6729,
        6731,1,0,0,0,6730,6718,1,0,0,0,6730,6724,1,0,0,0,6731,765,1,0,0,
        0,6732,6733,5,138,0,0,6733,6734,5,136,0,0,6734,6735,3,698,349,0,
        6735,6736,5,309,0,0,6736,6737,5,94,0,0,6737,6738,3,1436,718,0,6738,
        7124,1,0,0,0,6739,6740,5,138,0,0,6740,6741,5,108,0,0,6741,6742,3,
        558,279,0,6742,6743,5,309,0,0,6743,6744,5,94,0,0,6744,6745,3,1436,
        718,0,6745,7124,1,0,0,0,6746,6747,5,138,0,0,6747,6748,5,168,0,0,
        6748,6749,3,558,279,0,6749,6750,5,309,0,0,6750,6751,5,94,0,0,6751,
        6752,3,1436,718,0,6752,7124,1,0,0,0,6753,6754,5,138,0,0,6754,6755,
        5,175,0,0,6755,6756,3,1420,710,0,6756,6757,5,309,0,0,6757,6758,5,
        94,0,0,6758,6759,3,1418,709,0,6759,7124,1,0,0,0,6760,6761,5,138,
        0,0,6761,6762,5,189,0,0,6762,6763,3,558,279,0,6763,6764,5,309,0,
        0,6764,6765,5,94,0,0,6765,6766,3,1436,718,0,6766,7124,1,0,0,0,6767,
        6768,5,138,0,0,6768,6769,5,189,0,0,6769,6770,3,558,279,0,6770,6771,
        5,309,0,0,6771,6772,5,45,0,0,6772,6773,3,1436,718,0,6773,6774,5,
        94,0,0,6774,6775,3,1436,718,0,6775,7124,1,0,0,0,6776,6777,5,138,
        0,0,6777,6778,5,63,0,0,6778,6779,5,174,0,0,6779,6780,5,381,0,0,6780,
        6781,3,1436,718,0,6781,6782,5,309,0,0,6782,6783,5,94,0,0,6783,6784,
        3,1436,718,0,6784,7124,1,0,0,0,6785,6786,5,138,0,0,6786,6787,5,211,
        0,0,6787,6788,3,674,337,0,6788,6789,5,309,0,0,6789,6790,5,94,0,0,
        6790,6791,3,1442,721,0,6791,7124,1,0,0,0,6792,6793,5,138,0,0,6793,
        6794,5,66,0,0,6794,6795,3,1468,734,0,6795,6796,5,309,0,0,6796,6797,
        5,94,0,0,6797,6798,3,1468,734,0,6798,7124,1,0,0,0,6799,6801,5,138,
        0,0,6800,6802,3,338,169,0,6801,6800,1,0,0,0,6801,6802,1,0,0,0,6802,
        6803,1,0,0,0,6803,6804,5,247,0,0,6804,6805,3,1436,718,0,6805,6806,
        5,309,0,0,6806,6807,5,94,0,0,6807,6808,3,1436,718,0,6808,7124,1,
        0,0,0,6809,6810,5,138,0,0,6810,6811,5,278,0,0,6811,6812,5,156,0,
        0,6812,6813,3,558,279,0,6813,6814,5,100,0,0,6814,6815,3,1436,718,
        0,6815,6816,5,309,0,0,6816,6817,5,94,0,0,6817,6818,3,1436,718,0,
        6818,7124,1,0,0,0,6819,6820,5,138,0,0,6820,6821,5,278,0,0,6821,6822,
        5,206,0,0,6822,6823,3,558,279,0,6823,6824,5,100,0,0,6824,6825,3,
        1436,718,0,6825,6826,5,309,0,0,6826,6827,5,94,0,0,6827,6828,3,1436,
        718,0,6828,7124,1,0,0,0,6829,6830,5,138,0,0,6830,6832,5,445,0,0,
        6831,6833,3,748,374,0,6832,6831,1,0,0,0,6832,6833,1,0,0,0,6833,6834,
        1,0,0,0,6834,6835,3,1436,718,0,6835,6836,5,80,0,0,6836,6837,3,1412,
        706,0,6837,6838,5,309,0,0,6838,6839,5,94,0,0,6839,6840,3,1436,718,
        0,6840,7124,1,0,0,0,6841,6842,5,138,0,0,6842,6843,5,296,0,0,6843,
        6844,3,670,335,0,6844,6845,5,309,0,0,6845,6846,5,94,0,0,6846,6847,
        3,1430,715,0,6847,7124,1,0,0,0,6848,6849,5,138,0,0,6849,6850,5,452,
        0,0,6850,6851,3,1436,718,0,6851,6852,5,309,0,0,6852,6853,5,94,0,
        0,6853,6854,3,1436,718,0,6854,7124,1,0,0,0,6855,6856,5,138,0,0,6856,
        6857,5,442,0,0,6857,6858,3,666,333,0,6858,6859,5,309,0,0,6859,6860,
        5,94,0,0,6860,6861,3,1436,718,0,6861,7124,1,0,0,0,6862,6863,5,138,
        0,0,6863,6864,5,323,0,0,6864,6865,3,1422,711,0,6865,6866,5,309,0,
        0,6866,6867,5,94,0,0,6867,6868,3,48,24,0,6868,7124,1,0,0,0,6869,
        6870,5,138,0,0,6870,6871,5,331,0,0,6871,6872,3,1436,718,0,6872,6873,
        5,309,0,0,6873,6874,5,94,0,0,6874,6875,3,1436,718,0,6875,7124,1,
        0,0,0,6876,6877,5,138,0,0,6877,6878,5,451,0,0,6878,6879,3,1436,718,
        0,6879,6880,5,309,0,0,6880,6881,5,94,0,0,6881,6882,3,1436,718,0,
        6882,7124,1,0,0,0,6883,6884,5,138,0,0,6884,6886,5,92,0,0,6885,6887,
        3,748,374,0,6886,6885,1,0,0,0,6886,6887,1,0,0,0,6887,6888,1,0,0,
        0,6888,6889,3,1118,559,0,6889,6890,5,309,0,0,6890,6891,5,94,0,0,
        6891,6892,3,1404,702,0,6892,7124,1,0,0,0,6893,6894,5,138,0,0,6894,
        6896,5,328,0,0,6895,6897,3,748,374,0,6896,6895,1,0,0,0,6896,6897,
        1,0,0,0,6897,6898,1,0,0,0,6898,6899,3,1412,706,0,6899,6900,5,309,
        0,0,6900,6901,5,94,0,0,6901,6902,3,1436,718,0,6902,7124,1,0,0,0,
        6903,6904,5,138,0,0,6904,6906,5,376,0,0,6905,6907,3,748,374,0,6906,
        6905,1,0,0,0,6906,6907,1,0,0,0,6907,6908,1,0,0,0,6908,6909,3,1410,
        705,0,6909,6910,5,309,0,0,6910,6911,5,94,0,0,6911,6912,3,1408,704,
        0,6912,7124,1,0,0,0,6913,6914,5,138,0,0,6914,6915,5,259,0,0,6915,
        6917,5,376,0,0,6916,6918,3,748,374,0,6917,6916,1,0,0,0,6917,6918,
        1,0,0,0,6918,6919,1,0,0,0,6919,6920,3,1410,705,0,6920,6921,5,309,
        0,0,6921,6922,5,94,0,0,6922,6923,3,1408,704,0,6923,7124,1,0,0,0,
        6924,6925,5,138,0,0,6925,6927,5,226,0,0,6926,6928,3,748,374,0,6927,
        6926,1,0,0,0,6927,6928,1,0,0,0,6928,6929,1,0,0,0,6929,6930,3,1412,
        706,0,6930,6931,5,309,0,0,6931,6932,5,94,0,0,6932,6933,3,1436,718,
        0,6933,7124,1,0,0,0,6934,6935,5,138,0,0,6935,6936,5,63,0,0,6936,
        6938,5,92,0,0,6937,6939,3,748,374,0,6938,6937,1,0,0,0,6938,6939,
        1,0,0,0,6939,6940,1,0,0,0,6940,6941,3,1118,559,0,6941,6942,5,309,
        0,0,6942,6943,5,94,0,0,6943,6944,3,1404,702,0,6944,7124,1,0,0,0,
        6945,6946,5,138,0,0,6946,6948,5,92,0,0,6947,6949,3,748,374,0,6948,
        6947,1,0,0,0,6948,6949,1,0,0,0,6949,6950,1,0,0,0,6950,6951,3,1118,
        559,0,6951,6953,5,309,0,0,6952,6954,5,44,0,0,6953,6952,1,0,0,0,6953,
        6954,1,0,0,0,6954,6955,1,0,0,0,6955,6956,3,1432,716,0,6956,6957,
        5,94,0,0,6957,6958,3,1434,717,0,6958,7124,1,0,0,0,6959,6960,5,138,
        0,0,6960,6962,5,376,0,0,6961,6963,3,748,374,0,6962,6961,1,0,0,0,
        6962,6963,1,0,0,0,6963,6964,1,0,0,0,6964,6965,3,1410,705,0,6965,
        6967,5,309,0,0,6966,6968,5,44,0,0,6967,6966,1,0,0,0,6967,6968,1,
        0,0,0,6968,6969,1,0,0,0,6969,6970,3,1432,716,0,6970,6971,5,94,0,
        0,6971,6972,3,1434,717,0,6972,7124,1,0,0,0,6973,6974,5,138,0,0,6974,
        6975,5,259,0,0,6975,6977,5,376,0,0,6976,6978,3,748,374,0,6977,6976,
        1,0,0,0,6977,6978,1,0,0,0,6978,6979,1,0,0,0,6979,6980,3,1410,705,
        0,6980,6982,5,309,0,0,6981,6983,5,44,0,0,6982,6981,1,0,0,0,6982,
        6983,1,0,0,0,6983,6984,1,0,0,0,6984,6985,3,1432,716,0,6985,6986,
        5,94,0,0,6986,6987,3,1434,717,0,6987,7124,1,0,0,0,6988,6989,5,138,
        0,0,6989,6991,5,92,0,0,6990,6992,3,748,374,0,6991,6990,1,0,0,0,6991,
        6992,1,0,0,0,6992,6993,1,0,0,0,6993,6994,3,1118,559,0,6994,6995,
        5,309,0,0,6995,6996,5,45,0,0,6996,6997,3,1436,718,0,6997,6998,5,
        94,0,0,6998,6999,3,1436,718,0,6999,7124,1,0,0,0,7000,7001,5,138,
        0,0,7001,7002,5,63,0,0,7002,7004,5,92,0,0,7003,7005,3,748,374,0,
        7004,7003,1,0,0,0,7004,7005,1,0,0,0,7005,7006,1,0,0,0,7006,7007,
        3,1118,559,0,7007,7009,5,309,0,0,7008,7010,5,44,0,0,7009,7008,1,
        0,0,0,7009,7010,1,0,0,0,7010,7011,1,0,0,0,7011,7012,3,1432,716,0,
        7012,7013,5,94,0,0,7013,7014,3,1434,717,0,7014,7124,1,0,0,0,7015,
        7016,5,138,0,0,7016,7017,5,321,0,0,7017,7018,3,1436,718,0,7018,7019,
        5,80,0,0,7019,7020,3,1412,706,0,7020,7021,5,309,0,0,7021,7022,5,
        94,0,0,7022,7023,3,1436,718,0,7023,7124,1,0,0,0,7024,7025,5,138,
        0,0,7025,7026,5,357,0,0,7026,7027,3,1436,718,0,7027,7028,5,80,0,
        0,7028,7029,3,1412,706,0,7029,7030,5,309,0,0,7030,7031,5,94,0,0,
        7031,7032,3,1436,718,0,7032,7124,1,0,0,0,7033,7034,5,138,0,0,7034,
        7035,5,198,0,0,7035,7036,5,357,0,0,7036,7037,3,1436,718,0,7037,7038,
        5,309,0,0,7038,7039,5,94,0,0,7039,7040,3,1436,718,0,7040,7124,1,
        0,0,0,7041,7042,5,138,0,0,7042,7043,5,318,0,0,7043,7044,3,1468,734,
        0,7044,7045,5,309,0,0,7045,7046,5,94,0,0,7046,7047,3,1468,734,0,
        7047,7124,1,0,0,0,7048,7049,5,138,0,0,7049,7050,5,99,0,0,7050,7051,
        3,1468,734,0,7051,7052,5,309,0,0,7052,7053,5,94,0,0,7053,7054,3,
        1468,734,0,7054,7124,1,0,0,0,7055,7056,5,138,0,0,7056,7057,5,351,
        0,0,7057,7058,3,1402,701,0,7058,7059,5,309,0,0,7059,7060,5,94,0,
        0,7060,7061,3,1400,700,0,7061,7124,1,0,0,0,7062,7063,5,138,0,0,7063,
        7064,5,342,0,0,7064,7065,3,558,279,0,7065,7066,5,309,0,0,7066,7067,
        5,94,0,0,7067,7068,3,1436,718,0,7068,7124,1,0,0,0,7069,7070,5,138,
        0,0,7070,7071,5,355,0,0,7071,7072,5,325,0,0,7072,7073,5,283,0,0,
        7073,7074,3,558,279,0,7074,7075,5,309,0,0,7075,7076,5,94,0,0,7076,
        7077,3,1436,718,0,7077,7124,1,0,0,0,7078,7079,5,138,0,0,7079,7080,
        5,355,0,0,7080,7081,5,325,0,0,7081,7082,5,185,0,0,7082,7083,3,558,
        279,0,7083,7084,5,309,0,0,7084,7085,5,94,0,0,7085,7086,3,1436,718,
        0,7086,7124,1,0,0,0,7087,7088,5,138,0,0,7088,7089,5,355,0,0,7089,
        7090,5,325,0,0,7090,7091,5,353,0,0,7091,7092,3,558,279,0,7092,7093,
        5,309,0,0,7093,7094,5,94,0,0,7094,7095,3,1436,718,0,7095,7124,1,
        0,0,0,7096,7097,5,138,0,0,7097,7098,5,355,0,0,7098,7099,5,325,0,
        0,7099,7100,5,163,0,0,7100,7101,3,558,279,0,7101,7102,5,309,0,0,
        7102,7103,5,94,0,0,7103,7104,3,1436,718,0,7104,7124,1,0,0,0,7105,
        7106,5,138,0,0,7106,7107,5,360,0,0,7107,7108,3,558,279,0,7108,7109,
        5,309,0,0,7109,7110,5,94,0,0,7110,7111,3,1436,718,0,7111,7124,1,
        0,0,0,7112,7113,5,138,0,0,7113,7114,5,360,0,0,7114,7115,3,558,279,
        0,7115,7116,5,309,0,0,7116,7117,5,143,0,0,7117,7118,3,1436,718,0,
        7118,7119,5,94,0,0,7119,7121,3,1436,718,0,7120,7122,3,124,62,0,7121,
        7120,1,0,0,0,7121,7122,1,0,0,0,7122,7124,1,0,0,0,7123,6732,1,0,0,
        0,7123,6739,1,0,0,0,7123,6746,1,0,0,0,7123,6753,1,0,0,0,7123,6760,
        1,0,0,0,7123,6767,1,0,0,0,7123,6776,1,0,0,0,7123,6785,1,0,0,0,7123,
        6792,1,0,0,0,7123,6799,1,0,0,0,7123,6809,1,0,0,0,7123,6819,1,0,0,
        0,7123,6829,1,0,0,0,7123,6841,1,0,0,0,7123,6848,1,0,0,0,7123,6855,
        1,0,0,0,7123,6862,1,0,0,0,7123,6869,1,0,0,0,7123,6876,1,0,0,0,7123,
        6883,1,0,0,0,7123,6893,1,0,0,0,7123,6903,1,0,0,0,7123,6913,1,0,0,
        0,7123,6924,1,0,0,0,7123,6934,1,0,0,0,7123,6945,1,0,0,0,7123,6959,
        1,0,0,0,7123,6973,1,0,0,0,7123,6988,1,0,0,0,7123,7000,1,0,0,0,7123,
        7015,1,0,0,0,7123,7024,1,0,0,0,7123,7033,1,0,0,0,7123,7041,1,0,0,
        0,7123,7048,1,0,0,0,7123,7055,1,0,0,0,7123,7062,1,0,0,0,7123,7069,
        1,0,0,0,7123,7078,1,0,0,0,7123,7087,1,0,0,0,7123,7096,1,0,0,0,7123,
        7105,1,0,0,0,7123,7112,1,0,0,0,7124,767,1,0,0,0,7125,7126,5,333,
        0,0,7126,7127,5,174,0,0,7127,769,1,0,0,0,7128,7129,5,138,0,0,7129,
        7130,5,211,0,0,7130,7132,3,674,337,0,7131,7133,3,772,386,0,7132,
        7131,1,0,0,0,7132,7133,1,0,0,0,7133,7134,1,0,0,0,7134,7135,5,462,
        0,0,7135,7136,5,80,0,0,7136,7137,5,204,0,0,7137,7138,3,1436,718,
        0,7138,7198,1,0,0,0,7139,7140,5,138,0,0,7140,7141,5,296,0,0,7141,
        7143,3,670,335,0,7142,7144,3,772,386,0,7143,7142,1,0,0,0,7143,7144,
        1,0,0,0,7144,7145,1,0,0,0,7145,7146,5,462,0,0,7146,7147,5,80,0,0,
        7147,7148,5,204,0,0,7148,7149,3,1436,718,0,7149,7198,1,0,0,0,7150,
        7151,5,138,0,0,7151,7152,5,442,0,0,7152,7154,3,666,333,0,7153,7155,
        3,772,386,0,7154,7153,1,0,0,0,7154,7155,1,0,0,0,7155,7156,1,0,0,
        0,7156,7157,5,462,0,0,7157,7158,5,80,0,0,7158,7159,5,204,0,0,7159,
        7160,3,1436,718,0,7160,7198,1,0,0,0,7161,7162,5,138,0,0,7162,7163,
        5,357,0,0,7163,7164,3,1436,718,0,7164,7165,5,80,0,0,7165,7167,3,
        1412,706,0,7166,7168,3,772,386,0,7167,7166,1,0,0,0,7167,7168,1,0,
        0,0,7168,7169,1,0,0,0,7169,7170,5,462,0,0,7170,7171,5,80,0,0,7171,
        7172,5,204,0,0,7172,7173,3,1436,718,0,7173,7198,1,0,0,0,7174,7175,
        5,138,0,0,7175,7176,5,259,0,0,7176,7177,5,376,0,0,7177,7179,3,1410,
        705,0,7178,7180,3,772,386,0,7179,7178,1,0,0,0,7179,7180,1,0,0,0,
        7180,7181,1,0,0,0,7181,7182,5,462,0,0,7182,7183,5,80,0,0,7183,7184,
        5,204,0,0,7184,7185,3,1436,718,0,7185,7198,1,0,0,0,7186,7187,5,138,
        0,0,7187,7188,5,226,0,0,7188,7190,3,1412,706,0,7189,7191,3,772,386,
        0,7190,7189,1,0,0,0,7190,7191,1,0,0,0,7191,7192,1,0,0,0,7192,7193,
        5,462,0,0,7193,7194,5,80,0,0,7194,7195,5,204,0,0,7195,7196,3,1436,
        718,0,7196,7198,1,0,0,0,7197,7128,1,0,0,0,7197,7139,1,0,0,0,7197,
        7150,1,0,0,0,7197,7161,1,0,0,0,7197,7174,1,0,0,0,7197,7186,1,0,0,
        0,7198,771,1,0,0,0,7199,7200,5,269,0,0,7200,773,1,0,0,0,7201,7202,
        5,138,0,0,7202,7203,5,136,0,0,7203,7204,3,698,349,0,7204,7205,5,
        333,0,0,7205,7206,5,323,0,0,7206,7207,3,1422,711,0,7207,7387,1,0,
        0,0,7208,7209,5,138,0,0,7209,7210,5,108,0,0,7210,7211,3,558,279,
        0,7211,7212,5,333,0,0,7212,7213,5,323,0,0,7213,7214,3,1422,711,0,
        7214,7387,1,0,0,0,7215,7216,5,138,0,0,7216,7217,5,168,0,0,7217,7218,
        3,558,279,0,7218,7219,5,333,0,0,7219,7220,5,323,0,0,7220,7221,3,
        1422,711,0,7221,7387,1,0,0,0,7222,7223,5,138,0,0,7223,7224,5,189,
        0,0,7224,7225,3,558,279,0,7225,7226,5,333,0,0,7226,7227,5,323,0,
        0,7227,7228,3,1422,711,0,7228,7387,1,0,0,0,7229,7230,5,138,0,0,7230,
        7231,5,204,0,0,7231,7232,3,1436,718,0,7232,7233,5,333,0,0,7233,7234,
        5,323,0,0,7234,7235,3,1422,711,0,7235,7387,1,0,0,0,7236,7237,5,138,
        0,0,7237,7238,5,211,0,0,7238,7239,3,674,337,0,7239,7240,5,333,0,
        0,7240,7241,5,323,0,0,7241,7242,3,1422,711,0,7242,7387,1,0,0,0,7243,
        7244,5,138,0,0,7244,7245,5,278,0,0,7245,7246,3,736,368,0,7246,7247,
        5,333,0,0,7247,7248,5,323,0,0,7248,7249,3,1422,711,0,7249,7387,1,
        0,0,0,7250,7251,5,138,0,0,7251,7252,5,278,0,0,7252,7253,5,156,0,
        0,7253,7254,3,558,279,0,7254,7255,5,100,0,0,7255,7256,3,1436,718,
        0,7256,7257,5,333,0,0,7257,7258,5,323,0,0,7258,7259,3,1422,711,0,
        7259,7387,1,0,0,0,7260,7261,5,138,0,0,7261,7262,5,278,0,0,7262,7263,
        5,206,0,0,7263,7264,3,558,279,0,7264,7265,5,100,0,0,7265,7266,3,
        1436,718,0,7266,7267,5,333,0,0,7267,7268,5,323,0,0,7268,7269,3,1422,
        711,0,7269,7387,1,0,0,0,7270,7271,5,138,0,0,7271,7272,5,296,0,0,
        7272,7273,3,670,335,0,7273,7274,5,333,0,0,7274,7275,5,323,0,0,7275,
        7276,3,1422,711,0,7276,7387,1,0,0,0,7277,7278,5,138,0,0,7278,7279,
        5,442,0,0,7279,7280,3,666,333,0,7280,7281,5,333,0,0,7281,7282,5,
        323,0,0,7282,7283,3,1422,711,0,7283,7387,1,0,0,0,7284,7285,5,138,
        0,0,7285,7287,5,92,0,0,7286,7288,3,748,374,0,7287,7286,1,0,0,0,7287,
        7288,1,0,0,0,7288,7289,1,0,0,0,7289,7290,3,1118,559,0,7290,7291,
        5,333,0,0,7291,7292,5,323,0,0,7292,7293,3,1422,711,0,7293,7387,1,
        0,0,0,7294,7295,5,138,0,0,7295,7296,5,342,0,0,7296,7297,3,558,279,
        0,7297,7298,5,333,0,0,7298,7299,5,323,0,0,7299,7300,3,1422,711,0,
        7300,7387,1,0,0,0,7301,7302,5,138,0,0,7302,7303,5,355,0,0,7303,7304,
        5,325,0,0,7304,7305,5,283,0,0,7305,7306,3,558,279,0,7306,7307,5,
        333,0,0,7307,7308,5,323,0,0,7308,7309,3,1422,711,0,7309,7387,1,0,
        0,0,7310,7311,5,138,0,0,7311,7312,5,355,0,0,7312,7313,5,325,0,0,
        7313,7314,5,185,0,0,7314,7315,3,558,279,0,7315,7316,5,333,0,0,7316,
        7317,5,323,0,0,7317,7318,3,1422,711,0,7318,7387,1,0,0,0,7319,7320,
        5,138,0,0,7320,7321,5,355,0,0,7321,7322,5,325,0,0,7322,7323,5,353,
        0,0,7323,7324,3,558,279,0,7324,7325,5,333,0,0,7325,7326,5,323,0,
        0,7326,7327,3,1422,711,0,7327,7387,1,0,0,0,7328,7329,5,138,0,0,7329,
        7330,5,355,0,0,7330,7331,5,325,0,0,7331,7332,5,163,0,0,7332,7333,
        3,558,279,0,7333,7334,5,333,0,0,7334,7335,5,323,0,0,7335,7336,3,
        1422,711,0,7336,7387,1,0,0,0,7337,7338,5,138,0,0,7338,7340,5,328,
        0,0,7339,7341,3,748,374,0,7340,7339,1,0,0,0,7340,7341,1,0,0,0,7341,
        7342,1,0,0,0,7342,7343,3,1412,706,0,7343,7344,5,333,0,0,7344,7345,
        5,323,0,0,7345,7346,3,1422,711,0,7346,7387,1,0,0,0,7347,7348,5,138,
        0,0,7348,7350,5,376,0,0,7349,7351,3,748,374,0,7350,7349,1,0,0,0,
        7350,7351,1,0,0,0,7351,7352,1,0,0,0,7352,7353,3,1410,705,0,7353,
        7354,5,333,0,0,7354,7355,5,323,0,0,7355,7356,3,1422,711,0,7356,7387,
        1,0,0,0,7357,7358,5,138,0,0,7358,7359,5,259,0,0,7359,7361,5,376,
        0,0,7360,7362,3,748,374,0,7361,7360,1,0,0,0,7361,7362,1,0,0,0,7362,
        7363,1,0,0,0,7363,7364,3,1410,705,0,7364,7365,5,333,0,0,7365,7366,
        5,323,0,0,7366,7367,3,1422,711,0,7367,7387,1,0,0,0,7368,7369,5,138,
        0,0,7369,7370,5,63,0,0,7370,7372,5,92,0,0,7371,7373,3,748,374,0,
        7372,7371,1,0,0,0,7372,7373,1,0,0,0,7373,7374,1,0,0,0,7374,7375,
        3,1118,559,0,7375,7376,5,333,0,0,7376,7377,5,323,0,0,7377,7378,3,
        1422,711,0,7378,7387,1,0,0,0,7379,7380,5,138,0,0,7380,7381,5,360,
        0,0,7381,7382,3,558,279,0,7382,7383,5,333,0,0,7383,7384,5,323,0,
        0,7384,7385,3,1422,711,0,7385,7387,1,0,0,0,7386,7201,1,0,0,0,7386,
        7208,1,0,0,0,7386,7215,1,0,0,0,7386,7222,1,0,0,0,7386,7229,1,0,0,
        0,7386,7236,1,0,0,0,7386,7243,1,0,0,0,7386,7250,1,0,0,0,7386,7260,
        1,0,0,0,7386,7270,1,0,0,0,7386,7277,1,0,0,0,7386,7284,1,0,0,0,7386,
        7294,1,0,0,0,7386,7301,1,0,0,0,7386,7310,1,0,0,0,7386,7319,1,0,0,
        0,7386,7328,1,0,0,0,7386,7337,1,0,0,0,7386,7347,1,0,0,0,7386,7357,
        1,0,0,0,7386,7368,1,0,0,0,7386,7379,1,0,0,0,7387,775,1,0,0,0,7388,
        7389,5,138,0,0,7389,7390,5,278,0,0,7390,7391,3,736,368,0,7391,7392,
        5,333,0,0,7392,7393,5,2,0,0,7393,7394,3,778,389,0,7394,7395,5,3,
        0,0,7395,777,1,0,0,0,7396,7401,3,780,390,0,7397,7398,5,6,0,0,7398,
        7400,3,780,390,0,7399,7397,1,0,0,0,7400,7403,1,0,0,0,7401,7399,1,
        0,0,0,7401,7402,1,0,0,0,7402,779,1,0,0,0,7403,7401,1,0,0,0,7404,
        7405,3,1490,745,0,7405,7406,5,10,0,0,7406,7407,5,407,0,0,7407,7413,
        1,0,0,0,7408,7409,3,1490,745,0,7409,7410,5,10,0,0,7410,7411,3,782,
        391,0,7411,7413,1,0,0,0,7412,7404,1,0,0,0,7412,7408,1,0,0,0,7413,
        781,1,0,0,0,7414,7420,3,688,344,0,7415,7420,3,1502,751,0,7416,7420,
        3,1324,662,0,7417,7420,3,322,161,0,7418,7420,3,1458,729,0,7419,7414,
        1,0,0,0,7419,7415,1,0,0,0,7419,7416,1,0,0,0,7419,7417,1,0,0,0,7419,
        7418,1,0,0,0,7420,783,1,0,0,0,7421,7422,5,138,0,0,7422,7423,5,360,
        0,0,7423,7424,3,558,279,0,7424,7425,5,333,0,0,7425,7426,5,2,0,0,
        7426,7427,3,778,389,0,7427,7428,5,3,0,0,7428,785,1,0,0,0,7429,7430,
        5,138,0,0,7430,7431,5,136,0,0,7431,7432,3,698,349,0,7432,7433,5,
        282,0,0,7433,7434,5,94,0,0,7434,7435,3,1470,735,0,7435,7615,1,0,
        0,0,7436,7437,5,138,0,0,7437,7438,5,108,0,0,7438,7439,3,558,279,
        0,7439,7440,5,282,0,0,7440,7441,5,94,0,0,7441,7442,3,1470,735,0,
        7442,7615,1,0,0,0,7443,7444,5,138,0,0,7444,7445,5,168,0,0,7445,7446,
        3,558,279,0,7446,7447,5,282,0,0,7447,7448,5,94,0,0,7448,7449,3,1470,
        735,0,7449,7615,1,0,0,0,7450,7451,5,138,0,0,7451,7452,5,175,0,0,
        7452,7453,3,1420,710,0,7453,7454,5,282,0,0,7454,7455,5,94,0,0,7455,
        7456,3,1470,735,0,7456,7615,1,0,0,0,7457,7458,5,138,0,0,7458,7459,
        5,189,0,0,7459,7460,3,558,279,0,7460,7461,5,282,0,0,7461,7462,5,
        94,0,0,7462,7463,3,1470,735,0,7463,7615,1,0,0,0,7464,7465,5,138,
        0,0,7465,7466,5,211,0,0,7466,7467,3,674,337,0,7467,7468,5,282,0,
        0,7468,7469,5,94,0,0,7469,7470,3,1470,735,0,7470,7615,1,0,0,0,7471,
        7473,5,138,0,0,7472,7474,3,338,169,0,7473,7472,1,0,0,0,7473,7474,
        1,0,0,0,7474,7475,1,0,0,0,7475,7476,5,247,0,0,7476,7477,3,1436,718,
        0,7477,7478,5,282,0,0,7478,7479,5,94,0,0,7479,7480,3,1470,735,0,
        7480,7615,1,0,0,0,7481,7482,5,138,0,0,7482,7483,5,248,0,0,7483,7484,
        5,274,0,0,7484,7485,3,322,161,0,7485,7486,5,282,0,0,7486,7487,5,
        94,0,0,7487,7488,3,1470,735,0,7488,7615,1,0,0,0,7489,7490,5,138,
        0,0,7490,7491,5,278,0,0,7491,7492,3,736,368,0,7492,7493,5,282,0,
        0,7493,7494,5,94,0,0,7494,7495,3,1470,735,0,7495,7615,1,0,0,0,7496,
        7497,5,138,0,0,7497,7498,5,278,0,0,7498,7499,5,156,0,0,7499,7500,
        3,558,279,0,7500,7501,5,100,0,0,7501,7502,3,1436,718,0,7502,7503,
        5,282,0,0,7503,7504,5,94,0,0,7504,7505,3,1470,735,0,7505,7615,1,
        0,0,0,7506,7507,5,138,0,0,7507,7508,5,278,0,0,7508,7509,5,206,0,
        0,7509,7510,3,558,279,0,7510,7511,5,100,0,0,7511,7512,3,1436,718,
        0,7512,7513,5,282,0,0,7513,7514,5,94,0,0,7514,7515,3,1470,735,0,
        7515,7615,1,0,0,0,7516,7517,5,138,0,0,7517,7518,5,296,0,0,7518,7519,
        3,670,335,0,7519,7520,5,282,0,0,7520,7521,5,94,0,0,7521,7522,3,1470,
        735,0,7522,7615,1,0,0,0,7523,7524,5,138,0,0,7524,7525,5,442,0,0,
        7525,7526,3,666,333,0,7526,7527,5,282,0,0,7527,7528,5,94,0,0,7528,
        7529,3,1470,735,0,7529,7615,1,0,0,0,7530,7531,5,138,0,0,7531,7532,
        5,323,0,0,7532,7533,3,1422,711,0,7533,7534,5,282,0,0,7534,7535,5,
        94,0,0,7535,7536,3,1470,735,0,7536,7615,1,0,0,0,7537,7538,5,138,
        0,0,7538,7539,5,360,0,0,7539,7540,3,558,279,0,7540,7541,5,282,0,
        0,7541,7542,5,94,0,0,7542,7543,3,1470,735,0,7543,7615,1,0,0,0,7544,
        7545,5,138,0,0,7545,7546,5,351,0,0,7546,7547,3,1402,701,0,7547,7548,
        5,282,0,0,7548,7549,5,94,0,0,7549,7550,3,1470,735,0,7550,7615,1,
        0,0,0,7551,7552,5,138,0,0,7552,7553,5,342,0,0,7553,7554,3,558,279,
        0,7554,7555,5,282,0,0,7555,7556,5,94,0,0,7556,7557,3,1470,735,0,
        7557,7615,1,0,0,0,7558,7559,5,138,0,0,7559,7560,5,355,0,0,7560,7561,
        5,325,0,0,7561,7562,5,185,0,0,7562,7563,3,558,279,0,7563,7564,5,
        282,0,0,7564,7565,5,94,0,0,7565,7566,3,1470,735,0,7566,7615,1,0,
        0,0,7567,7568,5,138,0,0,7568,7569,5,355,0,0,7569,7570,5,325,0,0,
        7570,7571,5,163,0,0,7571,7572,3,558,279,0,7572,7573,5,282,0,0,7573,
        7574,5,94,0,0,7574,7575,3,1470,735,0,7575,7615,1,0,0,0,7576,7577,
        5,138,0,0,7577,7578,5,63,0,0,7578,7579,5,174,0,0,7579,7580,5,381,
        0,0,7580,7581,3,1436,718,0,7581,7582,5,282,0,0,7582,7583,5,94,0,
        0,7583,7584,3,1470,735,0,7584,7615,1,0,0,0,7585,7586,5,138,0,0,7586,
        7587,5,331,0,0,7587,7588,3,1436,718,0,7588,7589,5,282,0,0,7589,7590,
        5,94,0,0,7590,7591,3,1470,735,0,7591,7615,1,0,0,0,7592,7593,5,138,
        0,0,7593,7594,5,198,0,0,7594,7595,5,357,0,0,7595,7596,3,1436,718,
        0,7596,7597,5,282,0,0,7597,7598,5,94,0,0,7598,7599,3,1470,735,0,
        7599,7615,1,0,0,0,7600,7601,5,138,0,0,7601,7602,5,452,0,0,7602,7603,
        3,1436,718,0,7603,7604,5,282,0,0,7604,7605,5,94,0,0,7605,7606,3,
        1470,735,0,7606,7615,1,0,0,0,7607,7608,5,138,0,0,7608,7609,5,451,
        0,0,7609,7610,3,1436,718,0,7610,7611,5,282,0,0,7611,7612,5,94,0,
        0,7612,7613,3,1470,735,0,7613,7615,1,0,0,0,7614,7429,1,0,0,0,7614,
        7436,1,0,0,0,7614,7443,1,0,0,0,7614,7450,1,0,0,0,7614,7457,1,0,0,
        0,7614,7464,1,0,0,0,7614,7471,1,0,0,0,7614,7481,1,0,0,0,7614,7489,
        1,0,0,0,7614,7496,1,0,0,0,7614,7506,1,0,0,0,7614,7516,1,0,0,0,7614,
        7523,1,0,0,0,7614,7530,1,0,0,0,7614,7537,1,0,0,0,7614,7544,1,0,0,
        0,7614,7551,1,0,0,0,7614,7558,1,0,0,0,7614,7567,1,0,0,0,7614,7576,
        1,0,0,0,7614,7585,1,0,0,0,7614,7592,1,0,0,0,7614,7600,1,0,0,0,7614,
        7607,1,0,0,0,7615,787,1,0,0,0,7616,7617,5,46,0,0,7617,7618,5,452,
        0,0,7618,7620,3,1436,718,0,7619,7621,3,790,395,0,7620,7619,1,0,0,
        0,7620,7621,1,0,0,0,7621,7623,1,0,0,0,7622,7624,3,710,355,0,7623,
        7622,1,0,0,0,7623,7624,1,0,0,0,7624,789,1,0,0,0,7625,7626,3,792,
        396,0,7626,791,1,0,0,0,7627,7628,5,62,0,0,7628,7629,5,92,0,0,7629,
        7634,3,1124,562,0,7630,7631,5,62,0,0,7631,7632,5,30,0,0,7632,7634,
        5,350,0,0,7633,7627,1,0,0,0,7633,7630,1,0,0,0,7634,793,1,0,0,0,7635,
        7636,5,138,0,0,7636,7637,5,452,0,0,7637,7638,3,1436,718,0,7638,7639,
        5,333,0,0,7639,7640,3,496,248,0,7640,7674,1,0,0,0,7641,7642,5,138,
        0,0,7642,7643,5,452,0,0,7643,7644,3,1436,718,0,7644,7645,5,133,0,
        0,7645,7646,3,1126,563,0,7646,7674,1,0,0,0,7647,7648,5,138,0,0,7648,
        7649,5,452,0,0,7649,7650,3,1436,718,0,7650,7651,5,333,0,0,7651,7652,
        3,1126,563,0,7652,7674,1,0,0,0,7653,7654,5,138,0,0,7654,7655,5,452,
        0,0,7655,7656,3,1436,718,0,7656,7657,5,191,0,0,7657,7658,3,1126,
        563,0,7658,7674,1,0,0,0,7659,7660,5,138,0,0,7660,7661,5,452,0,0,
        7661,7662,3,1436,718,0,7662,7663,5,282,0,0,7663,7664,5,94,0,0,7664,
        7665,3,1470,735,0,7665,7674,1,0,0,0,7666,7667,5,138,0,0,7667,7668,
        5,452,0,0,7668,7669,3,1436,718,0,7669,7670,5,309,0,0,7670,7671,5,
        94,0,0,7671,7672,3,1436,718,0,7672,7674,1,0,0,0,7673,7635,1,0,0,
        0,7673,7641,1,0,0,0,7673,7647,1,0,0,0,7673,7653,1,0,0,0,7673,7659,
        1,0,0,0,7673,7666,1,0,0,0,7674,795,1,0,0,0,7675,7676,5,46,0,0,7676,
        7677,5,451,0,0,7677,7678,3,1436,718,0,7678,7679,5,164,0,0,7679,7680,
        3,1458,729,0,7680,7681,5,452,0,0,7681,7683,3,798,399,0,7682,7684,
        3,710,355,0,7683,7682,1,0,0,0,7683,7684,1,0,0,0,7684,797,1,0,0,0,
        7685,7690,3,800,400,0,7686,7687,5,6,0,0,7687,7689,3,800,400,0,7688,
        7686,1,0,0,0,7689,7692,1,0,0,0,7690,7688,1,0,0,0,7690,7691,1,0,0,
        0,7691,799,1,0,0,0,7692,7690,1,0,0,0,7693,7694,3,1490,745,0,7694,
        801,1,0,0,0,7695,7696,5,138,0,0,7696,7697,5,451,0,0,7697,7698,3,
        1436,718,0,7698,7699,5,333,0,0,7699,7700,3,496,248,0,7700,7774,1,
        0,0,0,7701,7702,5,138,0,0,7702,7703,5,451,0,0,7703,7704,3,1436,718,
        0,7704,7705,5,164,0,0,7705,7706,3,1458,729,0,7706,7774,1,0,0,0,7707,
        7708,5,138,0,0,7708,7709,5,451,0,0,7709,7710,3,1436,718,0,7710,7711,
        5,305,0,0,7711,7713,5,452,0,0,7712,7714,3,710,355,0,7713,7712,1,
        0,0,0,7713,7714,1,0,0,0,7714,7774,1,0,0,0,7715,7716,5,138,0,0,7716,
        7717,5,451,0,0,7717,7718,3,1436,718,0,7718,7719,5,333,0,0,7719,7720,
        5,452,0,0,7720,7722,3,798,399,0,7721,7723,3,710,355,0,7722,7721,
        1,0,0,0,7722,7723,1,0,0,0,7723,7774,1,0,0,0,7724,7725,5,138,0,0,
        7725,7726,5,451,0,0,7726,7727,3,1436,718,0,7727,7728,5,133,0,0,7728,
        7729,5,452,0,0,7729,7731,3,798,399,0,7730,7732,3,710,355,0,7731,
        7730,1,0,0,0,7731,7732,1,0,0,0,7732,7774,1,0,0,0,7733,7734,5,138,
        0,0,7734,7735,5,451,0,0,7735,7736,3,1436,718,0,7736,7737,5,191,0,
        0,7737,7738,5,452,0,0,7738,7740,3,798,399,0,7739,7741,3,710,355,
        0,7740,7739,1,0,0,0,7740,7741,1,0,0,0,7741,7774,1,0,0,0,7742,7743,
        5,138,0,0,7743,7744,5,451,0,0,7744,7745,3,1436,718,0,7745,7746,5,
        193,0,0,7746,7774,1,0,0,0,7747,7748,5,138,0,0,7748,7749,5,451,0,
        0,7749,7750,3,1436,718,0,7750,7751,5,186,0,0,7751,7774,1,0,0,0,7752,
        7753,5,138,0,0,7753,7754,5,451,0,0,7754,7755,3,1436,718,0,7755,7756,
        5,333,0,0,7756,7757,3,496,248,0,7757,7774,1,0,0,0,7758,7759,5,138,
        0,0,7759,7760,5,451,0,0,7760,7761,3,1436,718,0,7761,7762,5,465,0,
        0,7762,7763,5,2,0,0,7763,7764,3,508,254,0,7764,7765,5,3,0,0,7765,
        7774,1,0,0,0,7766,7767,5,138,0,0,7767,7768,5,451,0,0,7768,7769,3,
        1436,718,0,7769,7770,5,282,0,0,7770,7771,5,94,0,0,7771,7772,3,1470,
        735,0,7772,7774,1,0,0,0,7773,7695,1,0,0,0,7773,7701,1,0,0,0,7773,
        7707,1,0,0,0,7773,7715,1,0,0,0,7773,7724,1,0,0,0,7773,7733,1,0,0,
        0,7773,7742,1,0,0,0,7773,7747,1,0,0,0,7773,7752,1,0,0,0,7773,7758,
        1,0,0,0,7773,7766,1,0,0,0,7774,803,1,0,0,0,7775,7777,5,46,0,0,7776,
        7778,3,658,329,0,7777,7776,1,0,0,0,7777,7778,1,0,0,0,7778,7779,1,
        0,0,0,7779,7780,5,321,0,0,7780,7781,3,1436,718,0,7781,7782,5,36,
        0,0,7782,7783,5,80,0,0,7783,7784,3,814,407,0,7784,7785,5,94,0,0,
        7785,7787,3,1412,706,0,7786,7788,3,1144,572,0,7787,7786,1,0,0,0,
        7787,7788,1,0,0,0,7788,7789,1,0,0,0,7789,7791,5,57,0,0,7790,7792,
        3,816,408,0,7791,7790,1,0,0,0,7791,7792,1,0,0,0,7792,7793,1,0,0,
        0,7793,7794,3,806,403,0,7794,805,1,0,0,0,7795,7802,5,270,0,0,7796,
        7802,3,810,405,0,7797,7798,5,2,0,0,7798,7799,3,808,404,0,7799,7800,
        5,3,0,0,7800,7802,1,0,0,0,7801,7795,1,0,0,0,7801,7796,1,0,0,0,7801,
        7797,1,0,0,0,7802,807,1,0,0,0,7803,7805,3,812,406,0,7804,7803,1,
        0,0,0,7804,7805,1,0,0,0,7805,7812,1,0,0,0,7806,7808,5,7,0,0,7807,
        7809,3,812,406,0,7808,7807,1,0,0,0,7808,7809,1,0,0,0,7809,7811,1,
        0,0,0,7810,7806,1,0,0,0,7811,7814,1,0,0,0,7812,7810,1,0,0,0,7812,
        7813,1,0,0,0,7813,809,1,0,0,0,7814,7812,1,0,0,0,7815,7821,3,1000,
        500,0,7816,7821,3,950,475,0,7817,7821,3,982,491,0,7818,7821,3,968,
        484,0,7819,7821,3,818,409,0,7820,7815,1,0,0,0,7820,7816,1,0,0,0,
        7820,7817,1,0,0,0,7820,7818,1,0,0,0,7820,7819,1,0,0,0,7821,811,1,
        0,0,0,7822,7823,3,810,405,0,7823,813,1,0,0,0,7824,7825,7,47,0,0,
        7825,815,1,0,0,0,7826,7827,7,48,0,0,7827,817,1,0,0,0,7828,7829,5,
        271,0,0,7829,7831,3,1474,737,0,7830,7832,3,820,410,0,7831,7830,1,
        0,0,0,7831,7832,1,0,0,0,7832,819,1,0,0,0,7833,7834,5,6,0,0,7834,
        7835,3,1458,729,0,7835,821,1,0,0,0,7836,7837,5,252,0,0,7837,7838,
        3,1474,737,0,7838,823,1,0,0,0,7839,7840,5,366,0,0,7840,7844,3,1474,
        737,0,7841,7842,5,366,0,0,7842,7844,5,9,0,0,7843,7839,1,0,0,0,7843,
        7841,1,0,0,0,7844,825,1,0,0,0,7845,7847,5,129,0,0,7846,7848,3,828,
        414,0,7847,7846,1,0,0,0,7847,7848,1,0,0,0,7848,7850,1,0,0,0,7849,
        7851,3,836,418,0,7850,7849,1,0,0,0,7850,7851,1,0,0,0,7851,7911,1,
        0,0,0,7852,7854,5,146,0,0,7853,7855,3,828,414,0,7854,7853,1,0,0,
        0,7854,7855,1,0,0,0,7855,7857,1,0,0,0,7856,7858,3,834,417,0,7857,
        7856,1,0,0,0,7857,7858,1,0,0,0,7858,7911,1,0,0,0,7859,7860,5,340,
        0,0,7860,7862,5,356,0,0,7861,7863,3,834,417,0,7862,7861,1,0,0,0,
        7862,7863,1,0,0,0,7863,7911,1,0,0,0,7864,7866,5,454,0,0,7865,7867,
        3,828,414,0,7866,7865,1,0,0,0,7866,7867,1,0,0,0,7867,7869,1,0,0,
        0,7868,7870,3,836,418,0,7869,7868,1,0,0,0,7869,7870,1,0,0,0,7870,
        7911,1,0,0,0,7871,7872,5,322,0,0,7872,7911,3,1474,737,0,7873,7875,
        5,308,0,0,7874,7876,5,322,0,0,7875,7874,1,0,0,0,7875,7876,1,0,0,
        0,7876,7877,1,0,0,0,7877,7911,3,1474,737,0,7878,7879,5,290,0,0,7879,
        7880,5,356,0,0,7880,7911,3,1458,729,0,7881,7882,5,161,0,0,7882,7883,
        5,291,0,0,7883,7911,3,1458,729,0,7884,7886,5,161,0,0,7885,7887,3,
        828,414,0,7886,7885,1,0,0,0,7886,7887,1,0,0,0,7887,7889,1,0,0,0,
        7888,7890,3,836,418,0,7889,7888,1,0,0,0,7889,7890,1,0,0,0,7890,7911,
        1,0,0,0,7891,7892,5,319,0,0,7892,7893,5,291,0,0,7893,7911,3,1458,
        729,0,7894,7896,5,319,0,0,7895,7897,3,828,414,0,7896,7895,1,0,0,
        0,7896,7897,1,0,0,0,7897,7898,1,0,0,0,7898,7900,5,94,0,0,7899,7901,
        5,322,0,0,7900,7899,1,0,0,0,7900,7901,1,0,0,0,7901,7902,1,0,0,0,
        7902,7911,3,1474,737,0,7903,7905,5,319,0,0,7904,7906,3,828,414,0,
        7905,7904,1,0,0,0,7905,7906,1,0,0,0,7906,7908,1,0,0,0,7907,7909,
        3,836,418,0,7908,7907,1,0,0,0,7908,7909,1,0,0,0,7909,7911,1,0,0,
        0,7910,7845,1,0,0,0,7910,7852,1,0,0,0,7910,7859,1,0,0,0,7910,7864,
        1,0,0,0,7910,7871,1,0,0,0,7910,7873,1,0,0,0,7910,7878,1,0,0,0,7910,
        7881,1,0,0,0,7910,7884,1,0,0,0,7910,7891,1,0,0,0,7910,7894,1,0,0,
        0,7910,7903,1,0,0,0,7911,827,1,0,0,0,7912,7913,7,49,0,0,7913,829,
        1,0,0,0,7914,7915,5,244,0,0,7915,7916,5,251,0,0,7916,7925,3,68,34,
        0,7917,7918,5,300,0,0,7918,7925,5,81,0,0,7919,7920,5,300,0,0,7920,
        7925,5,382,0,0,7921,7925,5,54,0,0,7922,7923,5,77,0,0,7923,7925,5,
        54,0,0,7924,7914,1,0,0,0,7924,7917,1,0,0,0,7924,7919,1,0,0,0,7924,
        7921,1,0,0,0,7924,7922,1,0,0,0,7925,831,1,0,0,0,7926,7933,3,830,
        415,0,7927,7929,5,6,0,0,7928,7927,1,0,0,0,7928,7929,1,0,0,0,7929,
        7930,1,0,0,0,7930,7932,3,830,415,0,7931,7928,1,0,0,0,7932,7935,1,
        0,0,0,7933,7931,1,0,0,0,7933,7934,1,0,0,0,7934,833,1,0,0,0,7935,
        7933,1,0,0,0,7936,7937,3,832,416,0,7937,835,1,0,0,0,7938,7940,5,
        33,0,0,7939,7941,5,269,0,0,7940,7939,1,0,0,0,7940,7941,1,0,0,0,7941,
        7942,1,0,0,0,7942,7943,5,153,0,0,7943,837,1,0,0,0,7944,7947,5,46,
        0,0,7945,7946,5,82,0,0,7946,7948,5,311,0,0,7947,7945,1,0,0,0,7947,
        7948,1,0,0,0,7948,7950,1,0,0,0,7949,7951,3,190,95,0,7950,7949,1,
        0,0,0,7950,7951,1,0,0,0,7951,7969,1,0,0,0,7952,7953,5,376,0,0,7953,
        7955,3,1408,704,0,7954,7956,3,242,121,0,7955,7954,1,0,0,0,7955,7956,
        1,0,0,0,7956,7958,1,0,0,0,7957,7959,3,134,67,0,7958,7957,1,0,0,0,
        7958,7959,1,0,0,0,7959,7970,1,0,0,0,7960,7961,5,303,0,0,7961,7962,
        5,376,0,0,7962,7963,3,1408,704,0,7963,7964,5,2,0,0,7964,7965,3,244,
        122,0,7965,7967,5,3,0,0,7966,7968,3,134,67,0,7967,7966,1,0,0,0,7967,
        7968,1,0,0,0,7968,7970,1,0,0,0,7969,7952,1,0,0,0,7969,7960,1,0,0,
        0,7970,7971,1,0,0,0,7971,7972,5,36,0,0,7972,7974,3,1000,500,0,7973,
        7975,3,840,420,0,7974,7973,1,0,0,0,7974,7975,1,0,0,0,7975,839,1,
        0,0,0,7976,7978,5,105,0,0,7977,7979,7,50,0,0,7978,7977,1,0,0,0,7978,
        7979,1,0,0,0,7979,7980,1,0,0,0,7980,7981,5,42,0,0,7981,7982,5,279,
        0,0,7982,841,1,0,0,0,7983,7984,5,253,0,0,7984,7985,3,1440,720,0,
        7985,843,1,0,0,0,7986,7987,5,46,0,0,7987,7988,5,175,0,0,7988,7990,
        3,1418,709,0,7989,7991,3,14,7,0,7990,7989,1,0,0,0,7990,7991,1,0,
        0,0,7991,7993,1,0,0,0,7992,7994,3,846,423,0,7993,7992,1,0,0,0,7993,
        7994,1,0,0,0,7994,845,1,0,0,0,7995,7996,3,848,424,0,7996,847,1,0,
        0,0,7997,7999,3,850,425,0,7998,7997,1,0,0,0,7999,8000,1,0,0,0,8000,
        7998,1,0,0,0,8000,8001,1,0,0,0,8001,849,1,0,0,0,8002,8004,3,852,
        426,0,8003,8005,3,854,427,0,8004,8003,1,0,0,0,8004,8005,1,0,0,0,
        8005,8009,1,0,0,0,8006,8010,3,1464,732,0,8007,8010,3,72,36,0,8008,
        8010,5,53,0,0,8009,8006,1,0,0,0,8009,8007,1,0,0,0,8009,8008,1,0,
        0,0,8010,851,1,0,0,0,8011,8012,5,164,0,0,8012,8020,5,74,0,0,8013,
        8020,5,194,0,0,8014,8020,5,255,0,0,8015,8020,5,282,0,0,8016,8020,
        5,351,0,0,8017,8020,5,353,0,0,8018,8020,3,1492,746,0,8019,8011,1,
        0,0,0,8019,8013,1,0,0,0,8019,8014,1,0,0,0,8019,8015,1,0,0,0,8019,
        8016,1,0,0,0,8019,8017,1,0,0,0,8019,8018,1,0,0,0,8020,853,1,0,0,
        0,8021,8022,5,10,0,0,8022,855,1,0,0,0,8023,8024,5,138,0,0,8024,8025,
        5,175,0,0,8025,8037,3,1420,710,0,8026,8027,5,333,0,0,8027,8028,5,
        351,0,0,8028,8030,3,1400,700,0,8029,8026,1,0,0,0,8029,8030,1,0,0,
        0,8030,8038,1,0,0,0,8031,8033,5,105,0,0,8032,8031,1,0,0,0,8032,8033,
        1,0,0,0,8033,8034,1,0,0,0,8034,8036,3,846,423,0,8035,8032,1,0,0,
        0,8035,8036,1,0,0,0,8036,8038,1,0,0,0,8037,8029,1,0,0,0,8037,8035,
        1,0,0,0,8038,857,1,0,0,0,8039,8040,5,138,0,0,8040,8041,5,175,0,0,
        8041,8043,3,1420,710,0,8042,8044,3,88,44,0,8043,8042,1,0,0,0,8043,
        8044,1,0,0,0,8044,859,1,0,0,0,8045,8050,3,862,431,0,8046,8047,5,
        6,0,0,8047,8049,3,862,431,0,8048,8046,1,0,0,0,8049,8052,1,0,0,0,
        8050,8048,1,0,0,0,8050,8051,1,0,0,0,8051,861,1,0,0,0,8052,8050,1,
        0,0,0,8053,8054,5,209,0,0,8054,863,1,0,0,0,8055,8056,5,138,0,0,8056,
        8057,5,108,0,0,8057,8058,3,558,279,0,8058,8059,5,305,0,0,8059,8060,
        5,375,0,0,8060,865,1,0,0,0,8061,8062,5,138,0,0,8062,8063,5,349,0,
        0,8063,8064,7,22,0,0,8064,8065,3,58,29,0,8065,867,1,0,0,0,8066,8067,
        5,46,0,0,8067,8068,5,189,0,0,8068,8070,3,558,279,0,8069,8071,3,872,
        436,0,8070,8069,1,0,0,0,8070,8071,1,0,0,0,8071,8072,1,0,0,0,8072,
        8073,3,1168,584,0,8073,8074,3,214,107,0,8074,869,1,0,0,0,8075,8076,
        5,138,0,0,8076,8077,5,189,0,0,8077,8099,3,558,279,0,8078,8100,3,
        122,61,0,8079,8080,5,191,0,0,8080,8081,5,77,0,0,8081,8100,5,78,0,
        0,8082,8083,5,333,0,0,8083,8084,5,77,0,0,8084,8100,5,78,0,0,8085,
        8086,5,133,0,0,8086,8100,3,234,117,0,8087,8088,5,191,0,0,8088,8090,
        5,45,0,0,8089,8091,3,748,374,0,8090,8089,1,0,0,0,8090,8091,1,0,0,
        0,8091,8092,1,0,0,0,8092,8094,3,1436,718,0,8093,8095,3,124,62,0,
        8094,8093,1,0,0,0,8094,8095,1,0,0,0,8095,8100,1,0,0,0,8096,8097,
        5,372,0,0,8097,8098,5,45,0,0,8098,8100,3,1436,718,0,8099,8078,1,
        0,0,0,8099,8079,1,0,0,0,8099,8082,1,0,0,0,8099,8085,1,0,0,0,8099,
        8087,1,0,0,0,8099,8096,1,0,0,0,8100,871,1,0,0,0,8101,8102,5,36,0,
        0,8102,873,1,0,0,0,8103,8104,5,138,0,0,8104,8105,5,355,0,0,8105,
        8106,5,325,0,0,8106,8107,5,185,0,0,8107,8108,3,558,279,0,8108,8109,
        3,496,248,0,8109,875,1,0,0,0,8110,8111,5,138,0,0,8111,8112,5,355,
        0,0,8112,8113,5,325,0,0,8113,8114,5,163,0,0,8114,8115,3,558,279,
        0,8115,8116,5,133,0,0,8116,8117,5,257,0,0,8117,8118,5,62,0,0,8118,
        8119,3,1416,708,0,8119,8120,3,878,439,0,8120,8121,3,552,276,0,8121,
        8174,1,0,0,0,8122,8123,5,138,0,0,8123,8124,5,355,0,0,8124,8125,5,
        325,0,0,8125,8126,5,163,0,0,8126,8127,3,558,279,0,8127,8128,5,138,
        0,0,8128,8129,5,257,0,0,8129,8130,5,62,0,0,8130,8131,3,1416,708,
        0,8131,8132,3,878,439,0,8132,8133,3,552,276,0,8133,8174,1,0,0,0,
        8134,8135,5,138,0,0,8135,8136,5,355,0,0,8136,8137,5,325,0,0,8137,
        8138,5,163,0,0,8138,8139,3,558,279,0,8139,8140,5,138,0,0,8140,8141,
        5,257,0,0,8141,8142,5,311,0,0,8142,8143,3,558,279,0,8143,8144,3,
        878,439,0,8144,8145,3,558,279,0,8145,8174,1,0,0,0,8146,8147,5,138,
        0,0,8147,8148,5,355,0,0,8148,8149,5,325,0,0,8149,8150,5,163,0,0,
        8150,8151,3,558,279,0,8151,8152,5,138,0,0,8152,8153,5,257,0,0,8153,
        8154,5,62,0,0,8154,8155,3,1416,708,0,8155,8156,5,311,0,0,8156,8157,
        3,558,279,0,8157,8158,3,878,439,0,8158,8159,3,558,279,0,8159,8174,
        1,0,0,0,8160,8161,5,138,0,0,8161,8162,5,355,0,0,8162,8163,5,325,
        0,0,8163,8164,5,163,0,0,8164,8165,3,558,279,0,8165,8166,5,191,0,
        0,8166,8168,5,257,0,0,8167,8169,3,748,374,0,8168,8167,1,0,0,0,8168,
        8169,1,0,0,0,8169,8170,1,0,0,0,8170,8171,5,62,0,0,8171,8172,3,1416,
        708,0,8172,8174,1,0,0,0,8173,8110,1,0,0,0,8173,8122,1,0,0,0,8173,
        8134,1,0,0,0,8173,8146,1,0,0,0,8173,8160,1,0,0,0,8174,877,1,0,0,
        0,8175,8176,5,105,0,0,8176,879,1,0,0,0,8177,8179,5,46,0,0,8178,8180,
        3,524,262,0,8179,8178,1,0,0,0,8179,8180,1,0,0,0,8180,8181,1,0,0,
        0,8181,8182,5,168,0,0,8182,8183,3,558,279,0,8183,8184,5,62,0,0,8184,
        8185,3,1458,729,0,8185,8186,5,94,0,0,8186,8187,3,1458,729,0,8187,
        8188,5,64,0,0,8188,8189,3,558,279,0,8189,881,1,0,0,0,8190,8192,5,
        158,0,0,8191,8193,3,908,454,0,8192,8191,1,0,0,0,8192,8193,1,0,0,
        0,8193,8194,1,0,0,0,8194,8196,3,1406,703,0,8195,8197,3,886,443,0,
        8196,8195,1,0,0,0,8196,8197,1,0,0,0,8197,8209,1,0,0,0,8198,8200,
        5,158,0,0,8199,8201,3,908,454,0,8200,8199,1,0,0,0,8200,8201,1,0,
        0,0,8201,8209,1,0,0,0,8202,8203,5,158,0,0,8203,8204,3,884,442,0,
        8204,8206,3,1406,703,0,8205,8207,3,886,443,0,8206,8205,1,0,0,0,8206,
        8207,1,0,0,0,8207,8209,1,0,0,0,8208,8190,1,0,0,0,8208,8198,1,0,0,
        0,8208,8202,1,0,0,0,8209,883,1,0,0,0,8210,8211,5,2,0,0,8211,8216,
        3,908,454,0,8212,8213,5,6,0,0,8213,8215,3,908,454,0,8214,8212,1,
        0,0,0,8215,8218,1,0,0,0,8216,8214,1,0,0,0,8216,8217,1,0,0,0,8217,
        8219,1,0,0,0,8218,8216,1,0,0,0,8219,8220,5,3,0,0,8220,885,1,0,0,
        0,8221,8222,5,100,0,0,8222,8223,3,1436,718,0,8223,887,1,0,0,0,8224,
        8226,5,370,0,0,8225,8227,3,914,457,0,8226,8225,1,0,0,0,8226,8227,
        1,0,0,0,8227,8229,1,0,0,0,8228,8230,3,916,458,0,8229,8228,1,0,0,
        0,8229,8230,1,0,0,0,8230,8232,1,0,0,0,8231,8233,3,908,454,0,8232,
        8231,1,0,0,0,8232,8233,1,0,0,0,8233,8235,1,0,0,0,8234,8236,3,902,
        451,0,8235,8234,1,0,0,0,8235,8236,1,0,0,0,8236,8238,1,0,0,0,8237,
        8239,3,924,462,0,8238,8237,1,0,0,0,8238,8239,1,0,0,0,8239,8251,1,
        0,0,0,8240,8245,5,370,0,0,8241,8242,5,2,0,0,8242,8243,3,892,446,
        0,8243,8244,5,3,0,0,8244,8246,1,0,0,0,8245,8241,1,0,0,0,8245,8246,
        1,0,0,0,8246,8248,1,0,0,0,8247,8249,3,924,462,0,8248,8247,1,0,0,
        0,8248,8249,1,0,0,0,8249,8251,1,0,0,0,8250,8224,1,0,0,0,8250,8240,
        1,0,0,0,8251,889,1,0,0,0,8252,8254,3,894,447,0,8253,8255,3,908,454,
        0,8254,8253,1,0,0,0,8254,8255,1,0,0,0,8255,8257,1,0,0,0,8256,8258,
        3,924,462,0,8257,8256,1,0,0,0,8257,8258,1,0,0,0,8258,8267,1,0,0,
        0,8259,8260,3,894,447,0,8260,8261,5,2,0,0,8261,8262,3,904,452,0,
        8262,8264,5,3,0,0,8263,8265,3,924,462,0,8264,8263,1,0,0,0,8264,8265,
        1,0,0,0,8265,8267,1,0,0,0,8266,8252,1,0,0,0,8266,8259,1,0,0,0,8267,
        891,1,0,0,0,8268,8273,3,896,448,0,8269,8270,5,6,0,0,8270,8272,3,
        896,448,0,8271,8269,1,0,0,0,8272,8275,1,0,0,0,8273,8271,1,0,0,0,
        8273,8274,1,0,0,0,8274,893,1,0,0,0,8275,8273,1,0,0,0,8276,8277,7,
        51,0,0,8277,895,1,0,0,0,8278,8280,3,898,449,0,8279,8281,3,900,450,
        0,8280,8279,1,0,0,0,8280,8281,1,0,0,0,8281,897,1,0,0,0,8282,8285,
        3,1488,744,0,8283,8285,3,894,447,0,8284,8282,1,0,0,0,8284,8283,1,
        0,0,0,8285,899,1,0,0,0,8286,8289,3,72,36,0,8287,8289,3,322,161,0,
        8288,8286,1,0,0,0,8288,8287,1,0,0,0,8289,901,1,0,0,0,8290,8291,3,
        894,447,0,8291,903,1,0,0,0,8292,8297,3,906,453,0,8293,8294,5,6,0,
        0,8294,8296,3,906,453,0,8295,8293,1,0,0,0,8296,8299,1,0,0,0,8297,
        8295,1,0,0,0,8297,8298,1,0,0,0,8298,905,1,0,0,0,8299,8297,1,0,0,
        0,8300,8304,3,908,454,0,8301,8304,3,910,455,0,8302,8304,3,912,456,
        0,8303,8300,1,0,0,0,8303,8301,1,0,0,0,8303,8302,1,0,0,0,8304,907,
        1,0,0,0,8305,8307,5,128,0,0,8306,8308,7,52,0,0,8307,8306,1,0,0,0,
        8307,8308,1,0,0,0,8308,909,1,0,0,0,8309,8311,5,547,0,0,8310,8312,
        7,52,0,0,8311,8310,1,0,0,0,8311,8312,1,0,0,0,8312,911,1,0,0,0,8313,
        8316,5,548,0,0,8314,8317,3,322,161,0,8315,8317,3,1458,729,0,8316,
        8314,1,0,0,0,8316,8315,1,0,0,0,8317,913,1,0,0,0,8318,8319,5,113,
        0,0,8319,915,1,0,0,0,8320,8321,5,112,0,0,8321,917,1,0,0,0,8322,8323,
        5,2,0,0,8323,8324,3,244,122,0,8324,8325,5,3,0,0,8325,919,1,0,0,0,
        8326,8328,3,1406,703,0,8327,8329,3,918,459,0,8328,8327,1,0,0,0,8328,
        8329,1,0,0,0,8329,921,1,0,0,0,8330,8335,3,920,460,0,8331,8332,5,
        6,0,0,8332,8334,3,920,460,0,8333,8331,1,0,0,0,8334,8337,1,0,0,0,
        8335,8333,1,0,0,0,8335,8336,1,0,0,0,8336,923,1,0,0,0,8337,8335,1,
        0,0,0,8338,8339,3,922,461,0,8339,925,1,0,0,0,8340,8341,5,203,0,0,
        8341,8359,3,928,464,0,8342,8343,5,203,0,0,8343,8345,3,894,447,0,
        8344,8346,3,908,454,0,8345,8344,1,0,0,0,8345,8346,1,0,0,0,8346,8347,
        1,0,0,0,8347,8348,3,928,464,0,8348,8359,1,0,0,0,8349,8350,5,203,
        0,0,8350,8351,5,128,0,0,8351,8359,3,928,464,0,8352,8353,5,203,0,
        0,8353,8354,5,2,0,0,8354,8355,3,930,465,0,8355,8356,5,3,0,0,8356,
        8357,3,928,464,0,8357,8359,1,0,0,0,8358,8340,1,0,0,0,8358,8342,1,
        0,0,0,8358,8349,1,0,0,0,8358,8352,1,0,0,0,8359,927,1,0,0,0,8360,
        8370,3,1000,500,0,8361,8370,3,950,475,0,8362,8370,3,982,491,0,8363,
        8370,3,968,484,0,8364,8370,3,992,496,0,8365,8370,3,294,147,0,8366,
        8370,3,300,150,0,8367,8370,3,306,153,0,8368,8370,3,944,472,0,8369,
        8360,1,0,0,0,8369,8361,1,0,0,0,8369,8362,1,0,0,0,8369,8363,1,0,0,
        0,8369,8364,1,0,0,0,8369,8365,1,0,0,0,8369,8366,1,0,0,0,8369,8367,
        1,0,0,0,8369,8368,1,0,0,0,8370,929,1,0,0,0,8371,8376,3,932,466,0,
        8372,8373,5,6,0,0,8373,8375,3,932,466,0,8374,8372,1,0,0,0,8375,8378,
        1,0,0,0,8376,8374,1,0,0,0,8376,8377,1,0,0,0,8377,931,1,0,0,0,8378,
        8376,1,0,0,0,8379,8381,3,934,467,0,8380,8382,3,936,468,0,8381,8380,
        1,0,0,0,8381,8382,1,0,0,0,8382,933,1,0,0,0,8383,8386,3,1488,744,
        0,8384,8386,3,894,447,0,8385,8383,1,0,0,0,8385,8384,1,0,0,0,8386,
        935,1,0,0,0,8387,8390,3,72,36,0,8388,8390,3,322,161,0,8389,8387,
        1,0,0,0,8389,8388,1,0,0,0,8390,937,1,0,0,0,8391,8392,5,290,0,0,8392,
        8394,3,1436,718,0,8393,8395,3,940,470,0,8394,8393,1,0,0,0,8394,8395,
        1,0,0,0,8395,8396,1,0,0,0,8396,8397,5,36,0,0,8397,8398,3,942,471,
        0,8398,939,1,0,0,0,8399,8400,5,2,0,0,8400,8401,3,1342,671,0,8401,
        8402,5,3,0,0,8402,941,1,0,0,0,8403,8408,3,1000,500,0,8404,8408,3,
        950,475,0,8405,8408,3,982,491,0,8406,8408,3,968,484,0,8407,8403,
        1,0,0,0,8407,8404,1,0,0,0,8407,8405,1,0,0,0,8407,8406,1,0,0,0,8408,
        943,1,0,0,0,8409,8410,5,202,0,0,8410,8412,3,1436,718,0,8411,8413,
        3,946,473,0,8412,8411,1,0,0,0,8412,8413,1,0,0,0,8413,8433,1,0,0,
        0,8414,8416,5,46,0,0,8415,8417,3,190,95,0,8416,8415,1,0,0,0,8416,
        8417,1,0,0,0,8417,8418,1,0,0,0,8418,8420,5,92,0,0,8419,8421,3,516,
        258,0,8420,8419,1,0,0,0,8420,8421,1,0,0,0,8421,8422,1,0,0,0,8422,
        8423,3,296,148,0,8423,8424,5,36,0,0,8424,8425,5,202,0,0,8425,8427,
        3,1436,718,0,8426,8428,3,946,473,0,8427,8426,1,0,0,0,8427,8428,1,
        0,0,0,8428,8430,1,0,0,0,8429,8431,3,298,149,0,8430,8429,1,0,0,0,
        8430,8431,1,0,0,0,8431,8433,1,0,0,0,8432,8409,1,0,0,0,8432,8414,
        1,0,0,0,8433,945,1,0,0,0,8434,8435,5,2,0,0,8435,8436,3,1328,664,
        0,8436,8437,5,3,0,0,8437,947,1,0,0,0,8438,8440,5,177,0,0,8439,8441,
        5,290,0,0,8440,8439,1,0,0,0,8440,8441,1,0,0,0,8441,8444,1,0,0,0,
        8442,8445,3,1436,718,0,8443,8445,5,30,0,0,8444,8442,1,0,0,0,8444,
        8443,1,0,0,0,8445,949,1,0,0,0,8446,8448,3,1026,513,0,8447,8446,1,
        0,0,0,8447,8448,1,0,0,0,8448,8449,1,0,0,0,8449,8450,5,241,0,0,8450,
        8451,5,71,0,0,8451,8452,3,952,476,0,8452,8454,3,954,477,0,8453,8455,
        3,962,481,0,8454,8453,1,0,0,0,8454,8455,1,0,0,0,8455,8457,1,0,0,
        0,8456,8458,3,966,483,0,8457,8456,1,0,0,0,8457,8458,1,0,0,0,8458,
        951,1,0,0,0,8459,8462,3,1406,703,0,8460,8461,5,36,0,0,8461,8463,
        3,1474,737,0,8462,8460,1,0,0,0,8462,8463,1,0,0,0,8463,953,1,0,0,
        0,8464,8465,5,2,0,0,8465,8466,3,958,479,0,8466,8467,5,3,0,0,8467,
        8469,1,0,0,0,8468,8464,1,0,0,0,8468,8469,1,0,0,0,8469,8474,1,0,0,
        0,8470,8471,5,463,0,0,8471,8472,3,956,478,0,8472,8473,5,450,0,0,
        8473,8475,1,0,0,0,8474,8470,1,0,0,0,8474,8475,1,0,0,0,8475,8478,
        1,0,0,0,8476,8479,3,1694,847,0,8477,8479,3,1000,500,0,8478,8476,
        1,0,0,0,8478,8477,1,0,0,0,8479,955,1,0,0,0,8480,8481,7,53,0,0,8481,
        957,1,0,0,0,8482,8487,3,960,480,0,8483,8484,5,6,0,0,8484,8486,3,
        960,480,0,8485,8483,1,0,0,0,8486,8489,1,0,0,0,8487,8485,1,0,0,0,
        8487,8488,1,0,0,0,8488,959,1,0,0,0,8489,8487,1,0,0,0,8490,8491,3,
        1432,716,0,8491,8492,3,1382,691,0,8492,961,1,0,0,0,8493,8494,5,80,
        0,0,8494,8496,5,464,0,0,8495,8497,3,964,482,0,8496,8495,1,0,0,0,
        8496,8497,1,0,0,0,8497,8498,1,0,0,0,8498,8506,5,57,0,0,8499,8500,
        5,369,0,0,8500,8501,5,333,0,0,8501,8503,3,984,492,0,8502,8504,3,
        1144,572,0,8503,8502,1,0,0,0,8503,8504,1,0,0,0,8504,8507,1,0,0,0,
        8505,8507,5,270,0,0,8506,8499,1,0,0,0,8506,8505,1,0,0,0,8507,963,
        1,0,0,0,8508,8509,5,2,0,0,8509,8510,3,636,318,0,8510,8512,5,3,0,
        0,8511,8513,3,1144,572,0,8512,8511,1,0,0,0,8512,8513,1,0,0,0,8513,
        8518,1,0,0,0,8514,8515,5,80,0,0,8515,8516,5,45,0,0,8516,8518,3,1436,
        718,0,8517,8508,1,0,0,0,8517,8514,1,0,0,0,8518,965,1,0,0,0,8519,
        8520,5,87,0,0,8520,8521,3,1386,693,0,8521,967,1,0,0,0,8522,8524,
        3,1026,513,0,8523,8522,1,0,0,0,8523,8524,1,0,0,0,8524,8525,1,0,0,
        0,8525,8526,5,182,0,0,8526,8527,5,64,0,0,8527,8529,3,1128,564,0,
        8528,8530,3,970,485,0,8529,8528,1,0,0,0,8529,8530,1,0,0,0,8530,8532,
        1,0,0,0,8531,8533,3,1146,573,0,8532,8531,1,0,0,0,8532,8533,1,0,0,
        0,8533,8535,1,0,0,0,8534,8536,3,966,483,0,8535,8534,1,0,0,0,8535,
        8536,1,0,0,0,8536,969,1,0,0,0,8537,8538,5,100,0,0,8538,8539,3,1104,
        552,0,8539,971,1,0,0,0,8540,8542,5,256,0,0,8541,8543,3,1034,517,
        0,8542,8541,1,0,0,0,8542,8543,1,0,0,0,8543,8544,1,0,0,0,8544,8546,
        3,1124,562,0,8545,8547,3,974,487,0,8546,8545,1,0,0,0,8546,8547,1,
        0,0,0,8547,8549,1,0,0,0,8548,8550,3,978,489,0,8549,8548,1,0,0,0,
        8549,8550,1,0,0,0,8550,973,1,0,0,0,8551,8552,5,68,0,0,8552,8553,
        3,976,488,0,8553,8554,5,263,0,0,8554,975,1,0,0,0,8555,8556,5,131,
        0,0,8556,8568,7,54,0,0,8557,8558,5,414,0,0,8558,8568,7,54,0,0,8559,
        8564,5,334,0,0,8560,8561,5,369,0,0,8561,8565,5,201,0,0,8562,8563,
        5,414,0,0,8563,8565,5,201,0,0,8564,8560,1,0,0,0,8564,8562,1,0,0,
        0,8564,8565,1,0,0,0,8565,8568,1,0,0,0,8566,8568,5,201,0,0,8567,8555,
        1,0,0,0,8567,8557,1,0,0,0,8567,8559,1,0,0,0,8567,8566,1,0,0,0,8568,
        977,1,0,0,0,8569,8570,5,272,0,0,8570,979,1,0,0,0,8571,8575,5,272,
        0,0,8572,8573,5,465,0,0,8573,8575,5,466,0,0,8574,8571,1,0,0,0,8574,
        8572,1,0,0,0,8575,981,1,0,0,0,8576,8578,3,1026,513,0,8577,8576,1,
        0,0,0,8577,8578,1,0,0,0,8578,8579,1,0,0,0,8579,8580,5,369,0,0,8580,
        8581,3,1128,564,0,8581,8582,5,333,0,0,8582,8584,3,984,492,0,8583,
        8585,3,1102,551,0,8584,8583,1,0,0,0,8584,8585,1,0,0,0,8585,8587,
        1,0,0,0,8586,8588,3,1146,573,0,8587,8586,1,0,0,0,8587,8588,1,0,0,
        0,8588,8590,1,0,0,0,8589,8591,3,966,483,0,8590,8589,1,0,0,0,8590,
        8591,1,0,0,0,8591,983,1,0,0,0,8592,8597,3,986,493,0,8593,8594,5,
        6,0,0,8594,8596,3,986,493,0,8595,8593,1,0,0,0,8596,8599,1,0,0,0,
        8597,8595,1,0,0,0,8597,8598,1,0,0,0,8598,985,1,0,0,0,8599,8597,1,
        0,0,0,8600,8601,3,988,494,0,8601,8602,5,10,0,0,8602,8603,3,1212,
        606,0,8603,8619,1,0,0,0,8604,8605,5,2,0,0,8605,8606,3,990,495,0,
        8606,8607,5,3,0,0,8607,8616,5,10,0,0,8608,8610,5,414,0,0,8609,8608,
        1,0,0,0,8609,8610,1,0,0,0,8610,8611,1,0,0,0,8611,8617,3,1212,606,
        0,8612,8613,5,2,0,0,8613,8614,3,1006,503,0,8614,8615,5,3,0,0,8615,
        8617,1,0,0,0,8616,8609,1,0,0,0,8616,8612,1,0,0,0,8617,8619,1,0,0,
        0,8618,8600,1,0,0,0,8618,8604,1,0,0,0,8619,987,1,0,0,0,8620,8621,
        3,1432,716,0,8621,8622,3,1382,691,0,8622,989,1,0,0,0,8623,8628,3,
        988,494,0,8624,8625,5,6,0,0,8625,8627,3,988,494,0,8626,8624,1,0,
        0,0,8627,8630,1,0,0,0,8628,8626,1,0,0,0,8628,8629,1,0,0,0,8629,991,
        1,0,0,0,8630,8628,1,0,0,0,8631,8632,5,178,0,0,8632,8633,3,994,497,
        0,8633,8634,3,996,498,0,8634,8635,5,172,0,0,8635,8636,3,998,499,
        0,8636,8637,5,62,0,0,8637,8638,3,1000,500,0,8638,993,1,0,0,0,8639,
        8640,3,1436,718,0,8640,995,1,0,0,0,8641,8642,5,269,0,0,8642,8647,
        5,324,0,0,8643,8647,5,324,0,0,8644,8647,5,107,0,0,8645,8647,5,240,
        0,0,8646,8641,1,0,0,0,8646,8643,1,0,0,0,8646,8644,1,0,0,0,8646,8645,
        1,0,0,0,8647,8650,1,0,0,0,8648,8646,1,0,0,0,8648,8649,1,0,0,0,8649,
        997,1,0,0,0,8650,8648,1,0,0,0,8651,8657,1,0,0,0,8652,8653,5,105,
        0,0,8653,8657,5,217,0,0,8654,8655,5,379,0,0,8655,8657,5,217,0,0,
        8656,8651,1,0,0,0,8656,8652,1,0,0,0,8656,8654,1,0,0,0,8657,999,1,
        0,0,0,8658,8661,3,1004,502,0,8659,8661,3,1002,501,0,8660,8658,1,
        0,0,0,8660,8659,1,0,0,0,8661,1001,1,0,0,0,8662,8663,5,2,0,0,8663,
        8664,3,1004,502,0,8664,8665,5,3,0,0,8665,8671,1,0,0,0,8666,8667,
        5,2,0,0,8667,8668,3,1002,501,0,8668,8669,5,3,0,0,8669,8671,1,0,0,
        0,8670,8662,1,0,0,0,8670,8666,1,0,0,0,8671,1003,1,0,0,0,8672,8674,
        3,1006,503,0,8673,8675,3,1042,521,0,8674,8673,1,0,0,0,8674,8675,
        1,0,0,0,8675,8684,1,0,0,0,8676,8678,3,1088,544,0,8677,8679,3,1052,
        526,0,8678,8677,1,0,0,0,8678,8679,1,0,0,0,8679,8685,1,0,0,0,8680,
        8682,3,1050,525,0,8681,8683,3,1090,545,0,8682,8681,1,0,0,0,8682,
        8683,1,0,0,0,8683,8685,1,0,0,0,8684,8676,1,0,0,0,8684,8680,1,0,0,
        0,8684,8685,1,0,0,0,8685,8702,1,0,0,0,8686,8687,3,1014,507,0,8687,
        8689,3,1006,503,0,8688,8690,3,1042,521,0,8689,8688,1,0,0,0,8689,
        8690,1,0,0,0,8690,8699,1,0,0,0,8691,8693,3,1088,544,0,8692,8694,
        3,1052,526,0,8693,8692,1,0,0,0,8693,8694,1,0,0,0,8694,8700,1,0,0,
        0,8695,8697,3,1050,525,0,8696,8698,3,1090,545,0,8697,8696,1,0,0,
        0,8697,8698,1,0,0,0,8698,8700,1,0,0,0,8699,8691,1,0,0,0,8699,8695,
        1,0,0,0,8699,8700,1,0,0,0,8700,8702,1,0,0,0,8701,8672,1,0,0,0,8701,
        8686,1,0,0,0,8702,1005,1,0,0,0,8703,8706,3,1008,504,0,8704,8706,
        3,1002,501,0,8705,8703,1,0,0,0,8705,8704,1,0,0,0,8706,1007,1,0,0,
        0,8707,8723,5,88,0,0,8708,8710,3,1040,520,0,8709,8708,1,0,0,0,8709,
        8710,1,0,0,0,8710,8712,1,0,0,0,8711,8713,3,1028,514,0,8712,8711,
        1,0,0,0,8712,8713,1,0,0,0,8713,8715,1,0,0,0,8714,8716,3,1384,692,
        0,8715,8714,1,0,0,0,8715,8716,1,0,0,0,8716,8724,1,0,0,0,8717,8719,
        3,1038,519,0,8718,8717,1,0,0,0,8718,8719,1,0,0,0,8719,8721,1,0,0,
        0,8720,8722,3,1386,693,0,8721,8720,1,0,0,0,8721,8722,1,0,0,0,8722,
        8724,1,0,0,0,8723,8709,1,0,0,0,8723,8718,1,0,0,0,8724,8726,1,0,0,
        0,8725,8727,3,1028,514,0,8726,8725,1,0,0,0,8726,8727,1,0,0,0,8727,
        8729,1,0,0,0,8728,8730,3,1102,551,0,8729,8728,1,0,0,0,8729,8730,
        1,0,0,0,8730,8732,1,0,0,0,8731,8733,3,1144,572,0,8732,8731,1,0,0,
        0,8732,8733,1,0,0,0,8733,8735,1,0,0,0,8734,8736,3,1072,536,0,8735,
        8734,1,0,0,0,8735,8736,1,0,0,0,8736,8738,1,0,0,0,8737,8739,3,1086,
        543,0,8738,8737,1,0,0,0,8738,8739,1,0,0,0,8739,8741,1,0,0,0,8740,
        8742,3,1288,644,0,8741,8740,1,0,0,0,8741,8742,1,0,0,0,8742,8753,
        1,0,0,0,8743,8753,3,1100,550,0,8744,8745,5,92,0,0,8745,8753,3,1118,
        559,0,8746,8747,3,1002,501,0,8747,8750,3,1012,506,0,8748,8751,3,
        1008,504,0,8749,8751,3,1002,501,0,8750,8748,1,0,0,0,8750,8749,1,
        0,0,0,8751,8753,1,0,0,0,8752,8707,1,0,0,0,8752,8743,1,0,0,0,8752,
        8744,1,0,0,0,8752,8746,1,0,0,0,8753,8761,1,0,0,0,8754,8757,3,1012,
        506,0,8755,8758,3,1008,504,0,8756,8758,3,1002,501,0,8757,8755,1,
        0,0,0,8757,8756,1,0,0,0,8758,8760,1,0,0,0,8759,8754,1,0,0,0,8760,
        8763,1,0,0,0,8761,8759,1,0,0,0,8761,8762,1,0,0,0,8762,1009,1,0,0,
        0,8763,8761,1,0,0,0,8764,8768,5,97,0,0,8765,8768,5,70,0,0,8766,8768,
        5,59,0,0,8767,8764,1,0,0,0,8767,8765,1,0,0,0,8767,8766,1,0,0,0,8768,
        1011,1,0,0,0,8769,8771,3,1010,505,0,8770,8772,3,1036,518,0,8771,
        8770,1,0,0,0,8771,8772,1,0,0,0,8772,1013,1,0,0,0,8773,8775,5,105,
        0,0,8774,8776,5,303,0,0,8775,8774,1,0,0,0,8775,8776,1,0,0,0,8776,
        8777,1,0,0,0,8777,8778,3,1016,508,0,8778,1015,1,0,0,0,8779,8784,
        3,1018,509,0,8780,8781,5,6,0,0,8781,8783,3,1018,509,0,8782,8780,
        1,0,0,0,8783,8786,1,0,0,0,8784,8782,1,0,0,0,8784,8785,1,0,0,0,8785,
        1017,1,0,0,0,8786,8784,1,0,0,0,8787,8789,3,1436,718,0,8788,8790,
        3,918,459,0,8789,8788,1,0,0,0,8789,8790,1,0,0,0,8790,8791,1,0,0,
        0,8791,8793,5,36,0,0,8792,8794,3,1024,512,0,8793,8792,1,0,0,0,8793,
        8794,1,0,0,0,8794,8795,1,0,0,0,8795,8796,5,2,0,0,8796,8797,3,942,
        471,0,8797,8799,5,3,0,0,8798,8800,3,1020,510,0,8799,8798,1,0,0,0,
        8799,8800,1,0,0,0,8800,8802,1,0,0,0,8801,8803,3,1022,511,0,8802,
        8801,1,0,0,0,8802,8803,1,0,0,0,8803,1019,1,0,0,0,8804,8805,5,325,
        0,0,8805,8806,7,55,0,0,8806,8807,5,207,0,0,8807,8808,5,147,0,0,8808,
        8809,3,244,122,0,8809,8810,5,333,0,0,8810,8811,3,1432,716,0,8811,
        1021,1,0,0,0,8812,8813,5,173,0,0,8813,8814,3,244,122,0,8814,8815,
        5,333,0,0,8815,8821,3,1432,716,0,8816,8817,5,94,0,0,8817,8818,3,
        1436,718,0,8818,8819,5,53,0,0,8819,8820,3,1436,718,0,8820,8822,1,
        0,0,0,8821,8816,1,0,0,0,8821,8822,1,0,0,0,8822,8823,1,0,0,0,8823,
        8824,5,100,0,0,8824,8825,3,1432,716,0,8825,1023,1,0,0,0,8826,8830,
        5,259,0,0,8827,8828,5,77,0,0,8828,8830,5,259,0,0,8829,8826,1,0,0,
        0,8829,8827,1,0,0,0,8830,1025,1,0,0,0,8831,8832,3,1014,507,0,8832,
        1027,1,0,0,0,8833,8838,5,71,0,0,8834,8835,3,1030,515,0,8835,8836,
        3,1032,516,0,8836,8839,1,0,0,0,8837,8839,3,1674,837,0,8838,8834,
        1,0,0,0,8838,8837,1,0,0,0,8839,1029,1,0,0,0,8840,8843,1,0,0,0,8841,
        8843,5,346,0,0,8842,8840,1,0,0,0,8842,8841,1,0,0,0,8843,1031,1,0,
        0,0,8844,8846,7,56,0,0,8845,8844,1,0,0,0,8845,8846,1,0,0,0,8846,
        8847,1,0,0,0,8847,8849,7,25,0,0,8848,8850,3,1034,517,0,8849,8848,
        1,0,0,0,8849,8850,1,0,0,0,8850,8851,1,0,0,0,8851,8861,3,1404,702,
        0,8852,8854,5,367,0,0,8853,8855,3,1034,517,0,8854,8853,1,0,0,0,8854,
        8855,1,0,0,0,8855,8856,1,0,0,0,8856,8861,3,1404,702,0,8857,8858,
        5,92,0,0,8858,8861,3,1404,702,0,8859,8861,3,1404,702,0,8860,8845,
        1,0,0,0,8860,8852,1,0,0,0,8860,8857,1,0,0,0,8860,8859,1,0,0,0,8861,
        1033,1,0,0,0,8862,8863,5,92,0,0,8863,1035,1,0,0,0,8864,8865,7,57,
        0,0,8865,1037,1,0,0,0,8866,8872,5,56,0,0,8867,8868,5,80,0,0,8868,
        8869,5,2,0,0,8869,8870,3,1328,664,0,8870,8871,5,3,0,0,8871,8873,
        1,0,0,0,8872,8867,1,0,0,0,8872,8873,1,0,0,0,8873,1039,1,0,0,0,8874,
        8875,5,30,0,0,8875,1041,1,0,0,0,8876,8877,3,1044,522,0,8877,1043,
        1,0,0,0,8878,8879,5,83,0,0,8879,8880,5,147,0,0,8880,8881,3,1046,
        523,0,8881,1045,1,0,0,0,8882,8887,3,1048,524,0,8883,8884,5,6,0,0,
        8884,8886,3,1048,524,0,8885,8883,1,0,0,0,8886,8889,1,0,0,0,8887,
        8885,1,0,0,0,8887,8888,1,0,0,0,8888,1047,1,0,0,0,8889,8887,1,0,0,
        0,8890,8894,3,1336,668,0,8891,8892,5,100,0,0,8892,8895,3,1324,662,
        0,8893,8895,3,650,325,0,8894,8891,1,0,0,0,8894,8893,1,0,0,0,8894,
        8895,1,0,0,0,8895,8897,1,0,0,0,8896,8898,3,652,326,0,8897,8896,1,
        0,0,0,8897,8898,1,0,0,0,8898,1049,1,0,0,0,8899,8901,3,1054,527,0,
        8900,8902,3,1058,529,0,8901,8900,1,0,0,0,8901,8902,1,0,0,0,8902,
        8912,1,0,0,0,8903,8905,3,1058,529,0,8904,8906,3,1056,528,0,8905,
        8904,1,0,0,0,8905,8906,1,0,0,0,8906,8912,1,0,0,0,8907,8909,3,1056,
        528,0,8908,8910,3,1058,529,0,8909,8908,1,0,0,0,8909,8910,1,0,0,0,
        8910,8912,1,0,0,0,8911,8899,1,0,0,0,8911,8903,1,0,0,0,8911,8907,
        1,0,0,0,8912,1051,1,0,0,0,8913,8914,3,1050,525,0,8914,1053,1,0,0,
        0,8915,8916,5,74,0,0,8916,8919,3,1060,530,0,8917,8918,5,6,0,0,8918,
        8920,3,1062,531,0,8919,8917,1,0,0,0,8919,8920,1,0,0,0,8920,1055,
        1,0,0,0,8921,8922,5,61,0,0,8922,8936,3,1070,535,0,8923,8924,3,1064,
        532,0,8924,8928,3,1068,534,0,8925,8929,5,81,0,0,8926,8927,5,105,
        0,0,8927,8929,5,467,0,0,8928,8925,1,0,0,0,8928,8926,1,0,0,0,8929,
        8937,1,0,0,0,8930,8934,3,1068,534,0,8931,8935,5,81,0,0,8932,8933,
        5,105,0,0,8933,8935,5,467,0,0,8934,8931,1,0,0,0,8934,8932,1,0,0,
        0,8935,8937,1,0,0,0,8936,8923,1,0,0,0,8936,8930,1,0,0,0,8937,1057,
        1,0,0,0,8938,8943,5,79,0,0,8939,8940,3,1064,532,0,8940,8941,3,1068,
        534,0,8941,8944,1,0,0,0,8942,8944,3,1062,531,0,8943,8939,1,0,0,0,
        8943,8942,1,0,0,0,8944,1059,1,0,0,0,8945,8948,3,1212,606,0,8946,
        8948,5,30,0,0,8947,8945,1,0,0,0,8947,8946,1,0,0,0,8948,1061,1,0,
        0,0,8949,8950,3,1212,606,0,8950,1063,1,0,0,0,8951,8952,5,12,0,0,
        8952,8957,3,1066,533,0,8953,8954,5,13,0,0,8954,8957,3,1066,533,0,
        8955,8957,3,1254,627,0,8956,8951,1,0,0,0,8956,8953,1,0,0,0,8956,
        8955,1,0,0,0,8957,1065,1,0,0,0,8958,8961,3,1456,728,0,8959,8961,
        3,1454,727,0,8960,8958,1,0,0,0,8960,8959,1,0,0,0,8961,1067,1,0,0,
        0,8962,8963,7,58,0,0,8963,1069,1,0,0,0,8964,8965,7,59,0,0,8965,1071,
        1,0,0,0,8966,8967,5,66,0,0,8967,8969,5,147,0,0,8968,8970,3,1036,
        518,0,8969,8968,1,0,0,0,8969,8970,1,0,0,0,8970,8971,1,0,0,0,8971,
        8972,3,1074,537,0,8972,1073,1,0,0,0,8973,8978,3,1076,538,0,8974,
        8975,5,6,0,0,8975,8977,3,1076,538,0,8976,8974,1,0,0,0,8977,8980,
        1,0,0,0,8978,8976,1,0,0,0,8978,8979,1,0,0,0,8979,1075,1,0,0,0,8980,
        8978,1,0,0,0,8981,8991,3,1336,668,0,8982,8991,3,1078,539,0,8983,
        8991,3,1082,541,0,8984,8991,3,1080,540,0,8985,8991,3,1084,542,0,
        8986,8987,5,2,0,0,8987,8988,3,1330,665,0,8988,8989,5,3,0,0,8989,
        8991,1,0,0,0,8990,8981,1,0,0,0,8990,8982,1,0,0,0,8990,8983,1,0,0,
        0,8990,8984,1,0,0,0,8990,8985,1,0,0,0,8990,8986,1,0,0,0,8991,1077,
        1,0,0,0,8992,8993,5,2,0,0,8993,8994,5,3,0,0,8994,1079,1,0,0,0,8995,
        8996,5,468,0,0,8996,8997,5,2,0,0,8997,8998,3,1330,665,0,8998,8999,
        5,3,0,0,8999,1081,1,0,0,0,9000,9001,5,469,0,0,9001,9002,5,2,0,0,
        9002,9003,3,1330,665,0,9003,9004,5,3,0,0,9004,1083,1,0,0,0,9005,
        9006,5,470,0,0,9006,9007,5,471,0,0,9007,9008,5,2,0,0,9008,9009,3,
        1074,537,0,9009,9010,5,3,0,0,9010,1085,1,0,0,0,9011,9012,5,67,0,
        0,9012,9013,3,1212,606,0,9013,1087,1,0,0,0,9014,9019,3,1092,546,
        0,9015,9016,5,62,0,0,9016,9017,5,300,0,0,9017,9019,5,81,0,0,9018,
        9014,1,0,0,0,9018,9015,1,0,0,0,9019,1089,1,0,0,0,9020,9021,3,1088,
        544,0,9021,1091,1,0,0,0,9022,9024,3,1094,547,0,9023,9022,1,0,0,0,
        9024,9025,1,0,0,0,9025,9023,1,0,0,0,9025,9026,1,0,0,0,9026,1093,
        1,0,0,0,9027,9029,3,1096,548,0,9028,9030,3,1098,549,0,9029,9028,
        1,0,0,0,9029,9030,1,0,0,0,9030,9032,1,0,0,0,9031,9033,3,980,490,
        0,9032,9031,1,0,0,0,9032,9033,1,0,0,0,9033,1095,1,0,0,0,9034,9044,
        5,62,0,0,9035,9036,5,269,0,0,9036,9038,5,245,0,0,9037,9035,1,0,0,
        0,9037,9038,1,0,0,0,9038,9039,1,0,0,0,9039,9045,5,369,0,0,9040,9042,
        5,245,0,0,9041,9040,1,0,0,0,9041,9042,1,0,0,0,9042,9043,1,0,0,0,
        9043,9045,5,334,0,0,9044,9037,1,0,0,0,9044,9041,1,0,0,0,9045,1097,
        1,0,0,0,9046,9047,5,275,0,0,9047,9048,3,1390,695,0,9048,1099,1,0,
        0,0,9049,9050,5,422,0,0,9050,9051,5,2,0,0,9051,9052,3,1328,664,0,
        9052,9060,5,3,0,0,9053,9054,5,6,0,0,9054,9055,5,2,0,0,9055,9056,
        3,1328,664,0,9056,9057,5,3,0,0,9057,9059,1,0,0,0,9058,9053,1,0,0,
        0,9059,9062,1,0,0,0,9060,9058,1,0,0,0,9060,9061,1,0,0,0,9061,1101,
        1,0,0,0,9062,9060,1,0,0,0,9063,9064,5,64,0,0,9064,9065,3,1104,552,
        0,9065,1103,1,0,0,0,9066,9071,3,1106,553,0,9067,9068,5,6,0,0,9068,
        9070,3,1106,553,0,9069,9067,1,0,0,0,9070,9073,1,0,0,0,9071,9069,
        1,0,0,0,9071,9072,1,0,0,0,9072,1105,1,0,0,0,9073,9071,1,0,0,0,9074,
        9077,3,1118,559,0,9075,9077,3,1120,560,0,9076,9074,1,0,0,0,9076,
        9075,1,0,0,0,9077,9079,1,0,0,0,9078,9080,3,1110,555,0,9079,9078,
        1,0,0,0,9079,9080,1,0,0,0,9080,9082,1,0,0,0,9081,9083,3,1130,565,
        0,9082,9081,1,0,0,0,9082,9083,1,0,0,0,9083,9136,1,0,0,0,9084,9086,
        3,1134,567,0,9085,9087,3,1112,556,0,9086,9085,1,0,0,0,9086,9087,
        1,0,0,0,9087,9136,1,0,0,0,9088,9090,3,1154,577,0,9089,9091,3,1110,
        555,0,9090,9089,1,0,0,0,9090,9091,1,0,0,0,9091,9136,1,0,0,0,9092,
        9094,3,1002,501,0,9093,9095,3,1110,555,0,9094,9093,1,0,0,0,9094,
        9095,1,0,0,0,9095,9136,1,0,0,0,9096,9109,5,72,0,0,9097,9099,3,1154,
        577,0,9098,9100,3,1110,555,0,9099,9098,1,0,0,0,9099,9100,1,0,0,0,
        9100,9110,1,0,0,0,9101,9103,3,1134,567,0,9102,9104,3,1112,556,0,
        9103,9102,1,0,0,0,9103,9104,1,0,0,0,9104,9110,1,0,0,0,9105,9107,
        3,1002,501,0,9106,9108,3,1110,555,0,9107,9106,1,0,0,0,9107,9108,
        1,0,0,0,9108,9110,1,0,0,0,9109,9097,1,0,0,0,9109,9101,1,0,0,0,9109,
        9105,1,0,0,0,9110,9136,1,0,0,0,9111,9112,5,2,0,0,9112,9129,3,1106,
        553,0,9113,9114,5,110,0,0,9114,9115,5,118,0,0,9115,9130,3,1106,553,
        0,9116,9118,5,121,0,0,9117,9119,3,1114,557,0,9118,9117,1,0,0,0,9118,
        9119,1,0,0,0,9119,9120,1,0,0,0,9120,9121,5,118,0,0,9121,9130,3,1106,
        553,0,9122,9124,3,1114,557,0,9123,9122,1,0,0,0,9123,9124,1,0,0,0,
        9124,9125,1,0,0,0,9125,9126,5,118,0,0,9126,9127,3,1106,553,0,9127,
        9128,3,1116,558,0,9128,9130,1,0,0,0,9129,9113,1,0,0,0,9129,9116,
        1,0,0,0,9129,9123,1,0,0,0,9129,9130,1,0,0,0,9130,9131,1,0,0,0,9131,
        9133,5,3,0,0,9132,9134,3,1110,555,0,9133,9132,1,0,0,0,9133,9134,
        1,0,0,0,9134,9136,1,0,0,0,9135,9076,1,0,0,0,9135,9084,1,0,0,0,9135,
        9088,1,0,0,0,9135,9092,1,0,0,0,9135,9096,1,0,0,0,9135,9111,1,0,0,
        0,9136,9155,1,0,0,0,9137,9138,5,110,0,0,9138,9139,5,118,0,0,9139,
        9154,3,1106,553,0,9140,9142,5,121,0,0,9141,9143,3,1114,557,0,9142,
        9141,1,0,0,0,9142,9143,1,0,0,0,9143,9144,1,0,0,0,9144,9145,5,118,
        0,0,9145,9154,3,1106,553,0,9146,9148,3,1114,557,0,9147,9146,1,0,
        0,0,9147,9148,1,0,0,0,9148,9149,1,0,0,0,9149,9150,5,118,0,0,9150,
        9151,3,1106,553,0,9151,9152,3,1116,558,0,9152,9154,1,0,0,0,9153,
        9137,1,0,0,0,9153,9140,1,0,0,0,9153,9147,1,0,0,0,9154,9157,1,0,0,
        0,9155,9153,1,0,0,0,9155,9156,1,0,0,0,9156,1107,1,0,0,0,9157,9155,
        1,0,0,0,9158,9160,5,36,0,0,9159,9158,1,0,0,0,9159,9160,1,0,0,0,9160,
        9161,1,0,0,0,9161,9166,3,1474,737,0,9162,9163,5,2,0,0,9163,9164,
        3,1416,708,0,9164,9165,5,3,0,0,9165,9167,1,0,0,0,9166,9162,1,0,0,
        0,9166,9167,1,0,0,0,9167,1109,1,0,0,0,9168,9169,3,1108,554,0,9169,
        1111,1,0,0,0,9170,9183,3,1108,554,0,9171,9173,5,36,0,0,9172,9174,
        3,1474,737,0,9173,9172,1,0,0,0,9173,9174,1,0,0,0,9174,9177,1,0,0,
        0,9175,9177,3,1474,737,0,9176,9171,1,0,0,0,9176,9175,1,0,0,0,9177,
        9178,1,0,0,0,9178,9179,5,2,0,0,9179,9180,3,1150,575,0,9180,9181,
        5,3,0,0,9181,9183,1,0,0,0,9182,9170,1,0,0,0,9182,9176,1,0,0,0,9183,
        1113,1,0,0,0,9184,9186,7,60,0,0,9185,9187,5,123,0,0,9186,9185,1,
        0,0,0,9186,9187,1,0,0,0,9187,1115,1,0,0,0,9188,9189,5,100,0,0,9189,
        9190,5,2,0,0,9190,9191,3,244,122,0,9191,9192,5,3,0,0,9192,9196,1,
        0,0,0,9193,9194,5,80,0,0,9194,9196,3,1212,606,0,9195,9188,1,0,0,
        0,9195,9193,1,0,0,0,9196,1117,1,0,0,0,9197,9199,5,81,0,0,9198,9197,
        1,0,0,0,9198,9199,1,0,0,0,9199,9200,1,0,0,0,9200,9202,3,1406,703,
        0,9201,9203,5,9,0,0,9202,9201,1,0,0,0,9202,9203,1,0,0,0,9203,9219,
        1,0,0,0,9204,9210,5,81,0,0,9205,9211,3,1406,703,0,9206,9207,5,2,
        0,0,9207,9208,3,1406,703,0,9208,9209,5,3,0,0,9209,9211,1,0,0,0,9210,
        9205,1,0,0,0,9210,9206,1,0,0,0,9211,9219,1,0,0,0,9212,9213,5,68,
        0,0,9213,9216,5,323,0,0,9214,9217,3,1422,711,0,9215,9217,5,111,0,
        0,9216,9214,1,0,0,0,9216,9215,1,0,0,0,9217,9219,1,0,0,0,9218,9198,
        1,0,0,0,9218,9204,1,0,0,0,9218,9212,1,0,0,0,9219,1119,1,0,0,0,9220,
        9222,5,81,0,0,9221,9220,1,0,0,0,9221,9222,1,0,0,0,9222,9223,1,0,
        0,0,9223,9225,3,1410,705,0,9224,9226,5,9,0,0,9225,9224,1,0,0,0,9225,
        9226,1,0,0,0,9226,9228,1,0,0,0,9227,9229,3,244,122,0,9228,9227,1,
        0,0,0,9228,9229,1,0,0,0,9229,9231,1,0,0,0,9230,9232,3,1144,572,0,
        9231,9230,1,0,0,0,9231,9232,1,0,0,0,9232,1121,1,0,0,0,9233,9235,
        5,92,0,0,9234,9236,5,81,0,0,9235,9234,1,0,0,0,9235,9236,1,0,0,0,
        9236,9237,1,0,0,0,9237,9239,3,1406,703,0,9238,9240,5,9,0,0,9239,
        9238,1,0,0,0,9239,9240,1,0,0,0,9240,9245,1,0,0,0,9241,9242,5,2,0,
        0,9242,9243,3,244,122,0,9243,9244,5,3,0,0,9244,9246,1,0,0,0,9245,
        9241,1,0,0,0,9245,9246,1,0,0,0,9246,9248,1,0,0,0,9247,9249,3,1144,
        572,0,9248,9247,1,0,0,0,9248,9249,1,0,0,0,9249,9267,1,0,0,0,9250,
        9251,5,92,0,0,9251,9257,5,81,0,0,9252,9258,3,1406,703,0,9253,9254,
        5,2,0,0,9254,9255,3,1406,703,0,9255,9256,5,3,0,0,9256,9258,1,0,0,
        0,9257,9252,1,0,0,0,9257,9253,1,0,0,0,9258,9267,1,0,0,0,9259,9260,
        5,350,0,0,9260,9261,5,68,0,0,9261,9264,5,323,0,0,9262,9265,3,1422,
        711,0,9263,9265,5,111,0,0,9264,9262,1,0,0,0,9264,9263,1,0,0,0,9265,
        9267,1,0,0,0,9266,9233,1,0,0,0,9266,9250,1,0,0,0,9266,9259,1,0,0,
        0,9267,1123,1,0,0,0,9268,9273,3,1118,559,0,9269,9270,5,6,0,0,9270,
        9272,3,1118,559,0,9271,9269,1,0,0,0,9272,9275,1,0,0,0,9273,9271,
        1,0,0,0,9273,9274,1,0,0,0,9274,1125,1,0,0,0,9275,9273,1,0,0,0,9276,
        9281,3,1122,561,0,9277,9278,5,6,0,0,9278,9280,3,1122,561,0,9279,
        9277,1,0,0,0,9280,9283,1,0,0,0,9281,9279,1,0,0,0,9281,9282,1,0,0,
        0,9282,1127,1,0,0,0,9283,9281,1,0,0,0,9284,9289,3,1118,559,0,9285,
        9287,5,36,0,0,9286,9285,1,0,0,0,9286,9287,1,0,0,0,9287,9288,1,0,
        0,0,9288,9290,3,1474,737,0,9289,9286,1,0,0,0,9289,9290,1,0,0,0,9290,
        1129,1,0,0,0,9291,9292,5,472,0,0,9292,9293,3,1444,722,0,9293,9294,
        5,2,0,0,9294,9295,3,1328,664,0,9295,9297,5,3,0,0,9296,9298,3,1132,
        566,0,9297,9296,1,0,0,0,9297,9298,1,0,0,0,9298,1131,1,0,0,0,9299,
        9300,5,310,0,0,9300,9301,5,2,0,0,9301,9302,3,1212,606,0,9302,9303,
        5,3,0,0,9303,1133,1,0,0,0,9304,9306,3,1262,631,0,9305,9307,3,1142,
        571,0,9306,9305,1,0,0,0,9306,9307,1,0,0,0,9307,9317,1,0,0,0,9308,
        9309,5,320,0,0,9309,9310,5,64,0,0,9310,9311,5,2,0,0,9311,9312,3,
        1138,569,0,9312,9314,5,3,0,0,9313,9315,3,1142,571,0,9314,9313,1,
        0,0,0,9314,9315,1,0,0,0,9315,9317,1,0,0,0,9316,9304,1,0,0,0,9316,
        9308,1,0,0,0,9317,1135,1,0,0,0,9318,9320,3,1262,631,0,9319,9321,
        3,1140,570,0,9320,9319,1,0,0,0,9320,9321,1,0,0,0,9321,1137,1,0,0,
        0,9322,9327,3,1136,568,0,9323,9324,5,6,0,0,9324,9326,3,1136,568,
        0,9325,9323,1,0,0,0,9326,9329,1,0,0,0,9327,9325,1,0,0,0,9327,9328,
        1,0,0,0,9328,1139,1,0,0,0,9329,9327,1,0,0,0,9330,9331,5,36,0,0,9331,
        9332,5,2,0,0,9332,9333,3,1150,575,0,9333,9334,5,3,0,0,9334,1141,
        1,0,0,0,9335,9336,5,105,0,0,9336,9337,5,473,0,0,9337,1143,1,0,0,
        0,9338,9339,5,103,0,0,9339,9340,3,1336,668,0,9340,1145,1,0,0,0,9341,
        9346,5,103,0,0,9342,9343,5,434,0,0,9343,9344,5,275,0,0,9344,9347,
        3,994,497,0,9345,9347,3,1212,606,0,9346,9342,1,0,0,0,9346,9345,1,
        0,0,0,9347,1147,1,0,0,0,9348,9349,3,1150,575,0,9349,1149,1,0,0,0,
        9350,9355,3,1152,576,0,9351,9352,5,6,0,0,9352,9354,3,1152,576,0,
        9353,9351,1,0,0,0,9354,9357,1,0,0,0,9355,9353,1,0,0,0,9355,9356,
        1,0,0,0,9356,1151,1,0,0,0,9357,9355,1,0,0,0,9358,9359,3,1474,737,
        0,9359,9361,3,1168,584,0,9360,9362,3,126,63,0,9361,9360,1,0,0,0,
        9361,9362,1,0,0,0,9362,1153,1,0,0,0,9363,9364,5,474,0,0,9364,9380,
        5,2,0,0,9365,9366,3,1254,627,0,9366,9367,3,1280,640,0,9367,9368,
        5,475,0,0,9368,9369,3,1156,578,0,9369,9381,1,0,0,0,9370,9371,5,476,
        0,0,9371,9372,5,2,0,0,9372,9373,3,1164,582,0,9373,9374,5,3,0,0,9374,
        9375,5,6,0,0,9375,9376,3,1254,627,0,9376,9377,3,1280,640,0,9377,
        9378,5,475,0,0,9378,9379,3,1156,578,0,9379,9381,1,0,0,0,9380,9365,
        1,0,0,0,9380,9370,1,0,0,0,9381,9382,1,0,0,0,9382,9383,5,3,0,0,9383,
        1155,1,0,0,0,9384,9389,3,1158,579,0,9385,9386,5,6,0,0,9386,9388,
        3,1158,579,0,9387,9385,1,0,0,0,9388,9391,1,0,0,0,9389,9387,1,0,0,
        0,9389,9390,1,0,0,0,9390,1157,1,0,0,0,9391,9389,1,0,0,0,9392,9399,
        3,1474,737,0,9393,9395,3,1168,584,0,9394,9396,3,1160,580,0,9395,
        9394,1,0,0,0,9395,9396,1,0,0,0,9396,9400,1,0,0,0,9397,9398,5,62,
        0,0,9398,9400,5,473,0,0,9399,9393,1,0,0,0,9399,9397,1,0,0,0,9400,
        1159,1,0,0,0,9401,9403,3,1162,581,0,9402,9401,1,0,0,0,9403,9404,
        1,0,0,0,9404,9402,1,0,0,0,9404,9405,1,0,0,0,9405,1161,1,0,0,0,9406,
        9407,5,53,0,0,9407,9415,3,1212,606,0,9408,9409,3,1492,746,0,9409,
        9410,3,1212,606,0,9410,9415,1,0,0,0,9411,9412,5,77,0,0,9412,9415,
        5,78,0,0,9413,9415,5,78,0,0,9414,9406,1,0,0,0,9414,9408,1,0,0,0,
        9414,9411,1,0,0,0,9414,9413,1,0,0,0,9415,1163,1,0,0,0,9416,9421,
        3,1166,583,0,9417,9418,5,6,0,0,9418,9420,3,1166,583,0,9419,9417,
        1,0,0,0,9420,9423,1,0,0,0,9421,9419,1,0,0,0,9421,9422,1,0,0,0,9422,
        1165,1,0,0,0,9423,9421,1,0,0,0,9424,9425,3,1252,626,0,9425,9426,
        5,36,0,0,9426,9427,3,1490,745,0,9427,9431,1,0,0,0,9428,9429,5,53,
        0,0,9429,9431,3,1252,626,0,9430,9424,1,0,0,0,9430,9428,1,0,0,0,9431,
        1167,1,0,0,0,9432,9434,5,415,0,0,9433,9432,1,0,0,0,9433,9434,1,0,
        0,0,9434,9435,1,0,0,0,9435,9444,3,1172,586,0,9436,9445,3,1170,585,
        0,9437,9442,5,35,0,0,9438,9439,5,4,0,0,9439,9440,3,1456,728,0,9440,
        9441,5,5,0,0,9441,9443,1,0,0,0,9442,9438,1,0,0,0,9442,9443,1,0,0,
        0,9443,9445,1,0,0,0,9444,9436,1,0,0,0,9444,9437,1,0,0,0,9445,9451,
        1,0,0,0,9446,9447,3,1412,706,0,9447,9448,5,27,0,0,9448,9449,7,61,
        0,0,9449,9451,1,0,0,0,9450,9433,1,0,0,0,9450,9446,1,0,0,0,9451,1169,
        1,0,0,0,9452,9454,5,4,0,0,9453,9455,3,1456,728,0,9454,9453,1,0,0,
        0,9454,9455,1,0,0,0,9455,9456,1,0,0,0,9456,9458,5,5,0,0,9457,9452,
        1,0,0,0,9458,9461,1,0,0,0,9459,9457,1,0,0,0,9459,9460,1,0,0,0,9460,
        1171,1,0,0,0,9461,9459,1,0,0,0,9462,9478,3,1176,588,0,9463,9478,
        3,1180,590,0,9464,9478,3,1184,592,0,9465,9478,3,1192,596,0,9466,
        9478,3,1200,600,0,9467,9475,3,1202,601,0,9468,9470,3,1206,603,0,
        9469,9468,1,0,0,0,9469,9470,1,0,0,0,9470,9476,1,0,0,0,9471,9472,
        5,2,0,0,9472,9473,3,1456,728,0,9473,9474,5,3,0,0,9474,9476,1,0,0,
        0,9475,9469,1,0,0,0,9475,9471,1,0,0,0,9476,9478,1,0,0,0,9477,9462,
        1,0,0,0,9477,9463,1,0,0,0,9477,9464,1,0,0,0,9477,9465,1,0,0,0,9477,
        9466,1,0,0,0,9477,9467,1,0,0,0,9478,1173,1,0,0,0,9479,9484,3,1180,
        590,0,9480,9484,3,1186,593,0,9481,9484,3,1194,597,0,9482,9484,3,
        1200,600,0,9483,9479,1,0,0,0,9483,9480,1,0,0,0,9483,9481,1,0,0,0,
        9483,9482,1,0,0,0,9484,1175,1,0,0,0,9485,9487,3,1482,741,0,9486,
        9488,3,560,280,0,9487,9486,1,0,0,0,9487,9488,1,0,0,0,9488,9490,1,
        0,0,0,9489,9491,3,1178,589,0,9490,9489,1,0,0,0,9490,9491,1,0,0,0,
        9491,1177,1,0,0,0,9492,9493,5,2,0,0,9493,9494,3,1328,664,0,9494,
        9495,5,3,0,0,9495,1179,1,0,0,0,9496,9521,5,401,0,0,9497,9521,5,402,
        0,0,9498,9521,5,416,0,0,9499,9521,5,388,0,0,9500,9521,5,413,0,0,
        9501,9503,5,398,0,0,9502,9504,3,1182,591,0,9503,9502,1,0,0,0,9503,
        9504,1,0,0,0,9504,9521,1,0,0,0,9505,9506,5,190,0,0,9506,9521,5,412,
        0,0,9507,9509,5,395,0,0,9508,9510,3,1178,589,0,9509,9508,1,0,0,0,
        9509,9510,1,0,0,0,9510,9521,1,0,0,0,9511,9513,5,394,0,0,9512,9514,
        3,1178,589,0,9513,9512,1,0,0,0,9513,9514,1,0,0,0,9514,9521,1,0,0,
        0,9515,9517,5,409,0,0,9516,9518,3,1178,589,0,9517,9516,1,0,0,0,9517,
        9518,1,0,0,0,9518,9521,1,0,0,0,9519,9521,5,390,0,0,9520,9496,1,0,
        0,0,9520,9497,1,0,0,0,9520,9498,1,0,0,0,9520,9499,1,0,0,0,9520,9500,
        1,0,0,0,9520,9501,1,0,0,0,9520,9505,1,0,0,0,9520,9507,1,0,0,0,9520,
        9511,1,0,0,0,9520,9515,1,0,0,0,9520,9519,1,0,0,0,9521,1181,1,0,0,
        0,9522,9523,5,2,0,0,9523,9524,3,1456,728,0,9524,9525,5,3,0,0,9525,
        1183,1,0,0,0,9526,9529,3,1188,594,0,9527,9529,3,1190,595,0,9528,
        9526,1,0,0,0,9528,9527,1,0,0,0,9529,1185,1,0,0,0,9530,9533,3,1188,
        594,0,9531,9533,3,1190,595,0,9532,9530,1,0,0,0,9532,9531,1,0,0,0,
        9533,1187,1,0,0,0,9534,9536,5,389,0,0,9535,9537,3,1198,599,0,9536,
        9535,1,0,0,0,9536,9537,1,0,0,0,9537,9538,1,0,0,0,9538,9539,5,2,0,
        0,9539,9540,3,1328,664,0,9540,9541,5,3,0,0,9541,1189,1,0,0,0,9542,
        9544,5,389,0,0,9543,9545,3,1198,599,0,9544,9543,1,0,0,0,9544,9545,
        1,0,0,0,9545,1191,1,0,0,0,9546,9551,3,1196,598,0,9547,9548,5,2,0,
        0,9548,9549,3,1456,728,0,9549,9550,5,3,0,0,9550,9552,1,0,0,0,9551,
        9547,1,0,0,0,9551,9552,1,0,0,0,9552,1193,1,0,0,0,9553,9558,3,1196,
        598,0,9554,9555,5,2,0,0,9555,9556,3,1456,728,0,9556,9557,5,3,0,0,
        9557,9559,1,0,0,0,9558,9554,1,0,0,0,9558,9559,1,0,0,0,9559,1195,
        1,0,0,0,9560,9562,7,62,0,0,9561,9563,3,1198,599,0,9562,9561,1,0,
        0,0,9562,9563,1,0,0,0,9563,9571,1,0,0,0,9564,9571,5,423,0,0,9565,
        9566,5,405,0,0,9566,9568,7,63,0,0,9567,9569,3,1198,599,0,9568,9567,
        1,0,0,0,9568,9569,1,0,0,0,9569,9571,1,0,0,0,9570,9560,1,0,0,0,9570,
        9564,1,0,0,0,9570,9565,1,0,0,0,9571,1197,1,0,0,0,9572,9573,5,374,
        0,0,9573,1199,1,0,0,0,9574,9579,7,64,0,0,9575,9576,5,2,0,0,9576,
        9577,3,1456,728,0,9577,9578,5,3,0,0,9578,9580,1,0,0,0,9579,9575,
        1,0,0,0,9579,9580,1,0,0,0,9580,9582,1,0,0,0,9581,9583,3,1204,602,
        0,9582,9581,1,0,0,0,9582,9583,1,0,0,0,9583,1201,1,0,0,0,9584,9585,
        5,403,0,0,9585,1203,1,0,0,0,9586,9587,5,105,0,0,9587,9588,5,418,
        0,0,9588,9593,5,386,0,0,9589,9590,5,379,0,0,9590,9591,5,418,0,0,
        9591,9593,5,386,0,0,9592,9586,1,0,0,0,9592,9589,1,0,0,0,9593,1205,
        1,0,0,0,9594,9620,5,384,0,0,9595,9620,5,264,0,0,9596,9620,5,176,
        0,0,9597,9620,5,218,0,0,9598,9620,5,261,0,0,9599,9620,3,1208,604,
        0,9600,9601,5,384,0,0,9601,9602,5,94,0,0,9602,9620,5,264,0,0,9603,
        9604,5,176,0,0,9604,9608,5,94,0,0,9605,9609,5,218,0,0,9606,9609,
        5,261,0,0,9607,9609,3,1208,604,0,9608,9605,1,0,0,0,9608,9606,1,0,
        0,0,9608,9607,1,0,0,0,9609,9620,1,0,0,0,9610,9611,5,218,0,0,9611,
        9614,5,94,0,0,9612,9615,5,261,0,0,9613,9615,3,1208,604,0,9614,9612,
        1,0,0,0,9614,9613,1,0,0,0,9615,9620,1,0,0,0,9616,9617,5,261,0,0,
        9617,9618,5,94,0,0,9618,9620,3,1208,604,0,9619,9594,1,0,0,0,9619,
        9595,1,0,0,0,9619,9596,1,0,0,0,9619,9597,1,0,0,0,9619,9598,1,0,0,
        0,9619,9599,1,0,0,0,9619,9600,1,0,0,0,9619,9603,1,0,0,0,9619,9610,
        1,0,0,0,9619,9616,1,0,0,0,9620,1207,1,0,0,0,9621,9626,5,326,0,0,
        9622,9623,5,2,0,0,9623,9624,3,1456,728,0,9624,9625,5,3,0,0,9625,
        9627,1,0,0,0,9626,9622,1,0,0,0,9626,9627,1,0,0,0,9627,1209,1,0,0,
        0,9628,9629,5,197,0,0,9629,9630,3,1212,606,0,9630,1211,1,0,0,0,9631,
        9632,3,1214,607,0,9632,1213,1,0,0,0,9633,9635,3,1216,608,0,9634,
        9636,3,1322,661,0,9635,9634,1,0,0,0,9635,9636,1,0,0,0,9636,1215,
        1,0,0,0,9637,9642,3,1218,609,0,9638,9639,7,65,0,0,9639,9641,3,1218,
        609,0,9640,9638,1,0,0,0,9641,9644,1,0,0,0,9642,9640,1,0,0,0,9642,
        9643,1,0,0,0,9643,1217,1,0,0,0,9644,9642,1,0,0,0,9645,9650,3,1220,
        610,0,9646,9647,5,82,0,0,9647,9649,3,1220,610,0,9648,9646,1,0,0,
        0,9649,9652,1,0,0,0,9650,9648,1,0,0,0,9650,9651,1,0,0,0,9651,1219,
        1,0,0,0,9652,9650,1,0,0,0,9653,9658,3,1222,611,0,9654,9655,5,33,
        0,0,9655,9657,3,1222,611,0,9656,9654,1,0,0,0,9657,9660,1,0,0,0,9658,
        9656,1,0,0,0,9658,9659,1,0,0,0,9659,1221,1,0,0,0,9660,9658,1,0,0,
        0,9661,9667,3,1224,612,0,9662,9664,5,77,0,0,9663,9662,1,0,0,0,9663,
        9664,1,0,0,0,9664,9665,1,0,0,0,9665,9666,5,68,0,0,9666,9668,3,1362,
        681,0,9667,9663,1,0,0,0,9667,9668,1,0,0,0,9668,1223,1,0,0,0,9669,
        9671,5,77,0,0,9670,9669,1,0,0,0,9670,9671,1,0,0,0,9671,9672,1,0,
        0,0,9672,9673,3,1226,613,0,9673,1225,1,0,0,0,9674,9676,3,1228,614,
        0,9675,9677,7,66,0,0,9676,9675,1,0,0,0,9676,9677,1,0,0,0,9677,1227,
        1,0,0,0,9678,9702,3,1230,615,0,9679,9681,5,116,0,0,9680,9682,5,77,
        0,0,9681,9680,1,0,0,0,9681,9682,1,0,0,0,9682,9700,1,0,0,0,9683,9701,
        5,78,0,0,9684,9701,5,96,0,0,9685,9701,5,60,0,0,9686,9701,5,365,0,
        0,9687,9688,5,56,0,0,9688,9689,5,64,0,0,9689,9701,3,1212,606,0,9690,
        9691,5,275,0,0,9691,9692,5,2,0,0,9692,9693,3,1342,671,0,9693,9694,
        5,3,0,0,9694,9701,1,0,0,0,9695,9701,5,188,0,0,9696,9698,3,1352,676,
        0,9697,9696,1,0,0,0,9697,9698,1,0,0,0,9698,9699,1,0,0,0,9699,9701,
        5,478,0,0,9700,9683,1,0,0,0,9700,9684,1,0,0,0,9700,9685,1,0,0,0,
        9700,9686,1,0,0,0,9700,9687,1,0,0,0,9700,9690,1,0,0,0,9700,9695,
        1,0,0,0,9700,9697,1,0,0,0,9701,9703,1,0,0,0,9702,9679,1,0,0,0,9702,
        9703,1,0,0,0,9703,1229,1,0,0,0,9704,9716,3,1232,616,0,9705,9706,
        7,67,0,0,9706,9717,3,1232,616,0,9707,9708,3,1326,663,0,9708,9714,
        3,1316,658,0,9709,9715,3,1002,501,0,9710,9711,5,2,0,0,9711,9712,
        3,1212,606,0,9712,9713,5,3,0,0,9713,9715,1,0,0,0,9714,9709,1,0,0,
        0,9714,9710,1,0,0,0,9715,9717,1,0,0,0,9716,9705,1,0,0,0,9716,9707,
        1,0,0,0,9716,9717,1,0,0,0,9717,1231,1,0,0,0,9718,9736,3,1234,617,
        0,9719,9721,5,77,0,0,9720,9719,1,0,0,0,9720,9721,1,0,0,0,9721,9730,
        1,0,0,0,9722,9731,5,120,0,0,9723,9731,5,114,0,0,9724,9725,5,127,
        0,0,9725,9731,5,94,0,0,9726,9728,5,387,0,0,9727,9729,5,91,0,0,9728,
        9727,1,0,0,0,9728,9729,1,0,0,0,9729,9731,1,0,0,0,9730,9722,1,0,0,
        0,9730,9723,1,0,0,0,9730,9724,1,0,0,0,9730,9726,1,0,0,0,9731,9732,
        1,0,0,0,9732,9734,3,1234,617,0,9733,9735,3,1210,605,0,9734,9733,
        1,0,0,0,9734,9735,1,0,0,0,9735,9737,1,0,0,0,9736,9720,1,0,0,0,9736,
        9737,1,0,0,0,9737,1233,1,0,0,0,9738,9744,3,1236,618,0,9739,9740,
        3,1322,661,0,9740,9741,3,1236,618,0,9741,9743,1,0,0,0,9742,9739,
        1,0,0,0,9743,9746,1,0,0,0,9744,9742,1,0,0,0,9744,9745,1,0,0,0,9745,
        1235,1,0,0,0,9746,9744,1,0,0,0,9747,9749,3,1322,661,0,9748,9747,
        1,0,0,0,9748,9749,1,0,0,0,9749,9750,1,0,0,0,9750,9751,3,1238,619,
        0,9751,1237,1,0,0,0,9752,9757,3,1240,620,0,9753,9754,7,68,0,0,9754,
        9756,3,1240,620,0,9755,9753,1,0,0,0,9756,9759,1,0,0,0,9757,9755,
        1,0,0,0,9757,9758,1,0,0,0,9758,1239,1,0,0,0,9759,9757,1,0,0,0,9760,
        9765,3,1242,621,0,9761,9762,7,69,0,0,9762,9764,3,1242,621,0,9763,
        9761,1,0,0,0,9764,9767,1,0,0,0,9765,9763,1,0,0,0,9765,9766,1,0,0,
        0,9766,1241,1,0,0,0,9767,9765,1,0,0,0,9768,9771,3,1244,622,0,9769,
        9770,5,15,0,0,9770,9772,3,1212,606,0,9771,9769,1,0,0,0,9771,9772,
        1,0,0,0,9772,1243,1,0,0,0,9773,9775,7,68,0,0,9774,9773,1,0,0,0,9774,
        9775,1,0,0,0,9775,9776,1,0,0,0,9776,9777,3,1246,623,0,9777,1245,
        1,0,0,0,9778,9783,3,1248,624,0,9779,9780,5,142,0,0,9780,9781,5,418,
        0,0,9781,9782,5,386,0,0,9782,9784,3,1212,606,0,9783,9779,1,0,0,0,
        9783,9784,1,0,0,0,9784,1247,1,0,0,0,9785,9788,3,1250,625,0,9786,
        9787,5,43,0,0,9787,9789,3,558,279,0,9788,9786,1,0,0,0,9788,9789,
        1,0,0,0,9789,1249,1,0,0,0,9790,9795,3,1254,627,0,9791,9792,5,26,
        0,0,9792,9794,3,1168,584,0,9793,9791,1,0,0,0,9794,9797,1,0,0,0,9795,
        9793,1,0,0,0,9795,9796,1,0,0,0,9796,1251,1,0,0,0,9797,9795,1,0,0,
        0,9798,9799,6,626,-1,0,9799,9806,3,1254,627,0,9800,9801,7,68,0,0,
        9801,9806,3,1252,626,9,9802,9803,3,1322,661,0,9803,9804,3,1252,626,
        3,9804,9806,1,0,0,0,9805,9798,1,0,0,0,9805,9800,1,0,0,0,9805,9802,
        1,0,0,0,9806,9846,1,0,0,0,9807,9808,10,8,0,0,9808,9809,5,15,0,0,
        9809,9845,3,1252,626,9,9810,9811,10,7,0,0,9811,9812,7,69,0,0,9812,
        9845,3,1252,626,8,9813,9814,10,6,0,0,9814,9815,7,68,0,0,9815,9845,
        3,1252,626,7,9816,9817,10,5,0,0,9817,9818,3,1322,661,0,9818,9819,
        3,1252,626,6,9819,9845,1,0,0,0,9820,9821,10,4,0,0,9821,9822,7,67,
        0,0,9822,9845,3,1252,626,5,9823,9824,10,10,0,0,9824,9825,5,26,0,
        0,9825,9845,3,1168,584,0,9826,9827,10,2,0,0,9827,9845,3,1322,661,
        0,9828,9829,10,1,0,0,9829,9831,5,116,0,0,9830,9832,5,77,0,0,9831,
        9830,1,0,0,0,9831,9832,1,0,0,0,9832,9842,1,0,0,0,9833,9834,5,56,
        0,0,9834,9835,5,64,0,0,9835,9843,3,1252,626,0,9836,9837,5,275,0,
        0,9837,9838,5,2,0,0,9838,9839,3,1342,671,0,9839,9840,5,3,0,0,9840,
        9843,1,0,0,0,9841,9843,5,188,0,0,9842,9833,1,0,0,0,9842,9836,1,0,
        0,0,9842,9841,1,0,0,0,9843,9845,1,0,0,0,9844,9807,1,0,0,0,9844,9810,
        1,0,0,0,9844,9813,1,0,0,0,9844,9816,1,0,0,0,9844,9820,1,0,0,0,9844,
        9823,1,0,0,0,9844,9826,1,0,0,0,9844,9828,1,0,0,0,9845,9848,1,0,0,
        0,9846,9844,1,0,0,0,9846,9847,1,0,0,0,9847,1253,1,0,0,0,9848,9846,
        1,0,0,0,9849,9850,5,396,0,0,9850,9886,3,1002,501,0,9851,9854,5,35,
        0,0,9852,9855,3,1002,501,0,9853,9855,3,1344,672,0,9854,9852,1,0,
        0,0,9854,9853,1,0,0,0,9855,9886,1,0,0,0,9856,9857,5,28,0,0,9857,
        9886,3,1382,691,0,9858,9859,5,470,0,0,9859,9860,5,2,0,0,9860,9861,
        3,1328,664,0,9861,9862,5,3,0,0,9862,9886,1,0,0,0,9863,9864,5,98,
        0,0,9864,9886,3,1002,501,0,9865,9886,3,1448,724,0,9866,9886,3,1256,
        628,0,9867,9868,5,2,0,0,9868,9869,3,1212,606,0,9869,9870,5,3,0,0,
        9870,9871,3,1382,691,0,9871,9886,1,0,0,0,9872,9886,3,1364,682,0,
        9873,9886,3,1260,630,0,9874,9876,3,1002,501,0,9875,9877,3,1380,690,
        0,9876,9875,1,0,0,0,9876,9877,1,0,0,0,9877,9886,1,0,0,0,9878,9886,
        3,1312,656,0,9879,9886,3,1314,657,0,9880,9881,3,1310,655,0,9881,
        9882,5,125,0,0,9882,9883,3,1310,655,0,9883,9886,1,0,0,0,9884,9886,
        3,1374,687,0,9885,9849,1,0,0,0,9885,9851,1,0,0,0,9885,9856,1,0,0,
        0,9885,9858,1,0,0,0,9885,9863,1,0,0,0,9885,9865,1,0,0,0,9885,9866,
        1,0,0,0,9885,9867,1,0,0,0,9885,9872,1,0,0,0,9885,9873,1,0,0,0,9885,
        9874,1,0,0,0,9885,9878,1,0,0,0,9885,9879,1,0,0,0,9885,9880,1,0,0,
        0,9885,9884,1,0,0,0,9886,1255,1,0,0,0,9887,9888,5,574,0,0,9888,1257,
        1,0,0,0,9889,9915,3,1444,722,0,9890,9912,5,2,0,0,9891,9895,3,1338,
        669,0,9892,9893,5,6,0,0,9893,9894,5,101,0,0,9894,9896,3,1340,670,
        0,9895,9892,1,0,0,0,9895,9896,1,0,0,0,9896,9898,1,0,0,0,9897,9899,
        3,1042,521,0,9898,9897,1,0,0,0,9898,9899,1,0,0,0,9899,9913,1,0,0,
        0,9900,9901,5,101,0,0,9901,9903,3,1340,670,0,9902,9904,3,1042,521,
        0,9903,9902,1,0,0,0,9903,9904,1,0,0,0,9904,9913,1,0,0,0,9905,9906,
        7,57,0,0,9906,9908,3,1338,669,0,9907,9909,3,1042,521,0,9908,9907,
        1,0,0,0,9908,9909,1,0,0,0,9909,9913,1,0,0,0,9910,9913,5,9,0,0,9911,
        9913,1,0,0,0,9912,9891,1,0,0,0,9912,9900,1,0,0,0,9912,9905,1,0,0,
        0,9912,9910,1,0,0,0,9912,9911,1,0,0,0,9913,9914,1,0,0,0,9914,9916,
        5,3,0,0,9915,9890,1,0,0,0,9915,9916,1,0,0,0,9916,1259,1,0,0,0,9917,
        9919,3,1258,629,0,9918,9920,3,1284,642,0,9919,9918,1,0,0,0,9919,
        9920,1,0,0,0,9920,9922,1,0,0,0,9921,9923,3,1286,643,0,9922,9921,
        1,0,0,0,9922,9923,1,0,0,0,9923,9925,1,0,0,0,9924,9926,3,1294,647,
        0,9925,9924,1,0,0,0,9925,9926,1,0,0,0,9926,9929,1,0,0,0,9927,9929,
        3,1264,632,0,9928,9917,1,0,0,0,9928,9927,1,0,0,0,9929,1261,1,0,0,
        0,9930,9933,3,1258,629,0,9931,9933,3,1264,632,0,9932,9930,1,0,0,
        0,9932,9931,1,0,0,0,9933,1263,1,0,0,0,9934,9935,5,108,0,0,9935,9936,
        5,62,0,0,9936,9937,5,2,0,0,9937,9938,3,1212,606,0,9938,9939,5,3,
        0,0,9939,10119,1,0,0,0,9940,10119,5,48,0,0,9941,9946,5,50,0,0,9942,
        9943,5,2,0,0,9943,9944,3,1456,728,0,9944,9945,5,3,0,0,9945,9947,
        1,0,0,0,9946,9942,1,0,0,0,9946,9947,1,0,0,0,9947,10119,1,0,0,0,9948,
        9953,5,51,0,0,9949,9950,5,2,0,0,9950,9951,3,1456,728,0,9951,9952,
        5,3,0,0,9952,9954,1,0,0,0,9953,9949,1,0,0,0,9953,9954,1,0,0,0,9954,
        10119,1,0,0,0,9955,9960,5,75,0,0,9956,9957,5,2,0,0,9957,9958,3,1456,
        728,0,9958,9959,5,3,0,0,9959,9961,1,0,0,0,9960,9956,1,0,0,0,9960,
        9961,1,0,0,0,9961,10119,1,0,0,0,9962,9967,5,76,0,0,9963,9964,5,2,
        0,0,9964,9965,3,1456,728,0,9965,9966,5,3,0,0,9966,9968,1,0,0,0,9967,
        9963,1,0,0,0,9967,9968,1,0,0,0,9968,10119,1,0,0,0,9969,10119,5,49,
        0,0,9970,10119,5,52,0,0,9971,10119,5,89,0,0,9972,10119,5,99,0,0,
        9973,10119,5,47,0,0,9974,10119,5,111,0,0,9975,9976,5,41,0,0,9976,
        9977,5,2,0,0,9977,9978,3,1212,606,0,9978,9979,5,36,0,0,9979,9980,
        3,1168,584,0,9980,9981,5,3,0,0,9981,10119,1,0,0,0,9982,9983,5,397,
        0,0,9983,9985,5,2,0,0,9984,9986,3,1348,674,0,9985,9984,1,0,0,0,9985,
        9986,1,0,0,0,9986,9987,1,0,0,0,9987,10119,5,3,0,0,9988,9989,5,489,
        0,0,9989,9990,5,2,0,0,9990,9993,3,1212,606,0,9991,9992,5,6,0,0,9992,
        9994,3,1352,676,0,9993,9991,1,0,0,0,9993,9994,1,0,0,0,9994,9995,
        1,0,0,0,9995,9996,5,3,0,0,9996,10119,1,0,0,0,9997,9998,5,410,0,0,
        9998,9999,5,2,0,0,9999,10000,3,1354,677,0,10000,10001,5,3,0,0,10001,
        10119,1,0,0,0,10002,10003,5,411,0,0,10003,10005,5,2,0,0,10004,10006,
        3,1356,678,0,10005,10004,1,0,0,0,10005,10006,1,0,0,0,10006,10007,
        1,0,0,0,10007,10119,5,3,0,0,10008,10009,5,417,0,0,10009,10011,5,
        2,0,0,10010,10012,3,1358,679,0,10011,10010,1,0,0,0,10011,10012,1,
        0,0,0,10012,10013,1,0,0,0,10013,10119,5,3,0,0,10014,10015,5,420,
        0,0,10015,10016,5,2,0,0,10016,10017,3,1212,606,0,10017,10018,5,36,
        0,0,10018,10019,3,1168,584,0,10019,10020,5,3,0,0,10020,10119,1,0,
        0,0,10021,10022,5,421,0,0,10022,10024,5,2,0,0,10023,10025,7,70,0,
        0,10024,10023,1,0,0,0,10024,10025,1,0,0,0,10025,10026,1,0,0,0,10026,
        10027,3,1360,680,0,10027,10028,5,3,0,0,10028,10119,1,0,0,0,10029,
        10030,5,408,0,0,10030,10031,5,2,0,0,10031,10032,3,1212,606,0,10032,
        10033,5,6,0,0,10033,10034,3,1212,606,0,10034,10035,5,3,0,0,10035,
        10119,1,0,0,0,10036,10037,5,393,0,0,10037,10038,5,2,0,0,10038,10039,
        3,1328,664,0,10039,10040,5,3,0,0,10040,10119,1,0,0,0,10041,10042,
        5,399,0,0,10042,10043,5,2,0,0,10043,10044,3,1328,664,0,10044,10045,
        5,3,0,0,10045,10119,1,0,0,0,10046,10047,5,404,0,0,10047,10048,5,
        2,0,0,10048,10049,3,1328,664,0,10049,10050,5,3,0,0,10050,10119,1,
        0,0,0,10051,10052,5,425,0,0,10052,10053,5,2,0,0,10053,10054,3,1328,
        664,0,10054,10055,5,3,0,0,10055,10119,1,0,0,0,10056,10057,5,426,
        0,0,10057,10058,5,2,0,0,10058,10059,5,266,0,0,10059,10065,3,1490,
        745,0,10060,10063,5,6,0,0,10061,10064,3,1270,635,0,10062,10064,3,
        1328,664,0,10063,10061,1,0,0,0,10063,10062,1,0,0,0,10064,10066,1,
        0,0,0,10065,10060,1,0,0,0,10065,10066,1,0,0,0,10066,10067,1,0,0,
        0,10067,10068,5,3,0,0,10068,10119,1,0,0,0,10069,10070,5,427,0,0,
        10070,10071,5,2,0,0,10071,10072,3,1254,627,0,10072,10073,3,1280,
        640,0,10073,10074,5,3,0,0,10074,10119,1,0,0,0,10075,10076,5,428,
        0,0,10076,10077,5,2,0,0,10077,10078,3,1272,636,0,10078,10079,5,3,
        0,0,10079,10119,1,0,0,0,10080,10081,5,429,0,0,10081,10082,5,2,0,
        0,10082,10083,3,1276,638,0,10083,10085,3,1212,606,0,10084,10086,
        3,1278,639,0,10085,10084,1,0,0,0,10085,10086,1,0,0,0,10086,10087,
        1,0,0,0,10087,10088,5,3,0,0,10088,10119,1,0,0,0,10089,10090,5,430,
        0,0,10090,10091,5,2,0,0,10091,10092,5,266,0,0,10092,10095,3,1490,
        745,0,10093,10094,5,6,0,0,10094,10096,3,1212,606,0,10095,10093,1,
        0,0,0,10095,10096,1,0,0,0,10096,10097,1,0,0,0,10097,10098,5,3,0,
        0,10098,10119,1,0,0,0,10099,10100,5,431,0,0,10100,10101,5,2,0,0,
        10101,10102,5,383,0,0,10102,10103,3,1212,606,0,10103,10104,5,6,0,
        0,10104,10106,3,1266,633,0,10105,10107,3,1268,634,0,10106,10105,
        1,0,0,0,10106,10107,1,0,0,0,10107,10108,1,0,0,0,10108,10109,5,3,
        0,0,10109,10119,1,0,0,0,10110,10111,5,432,0,0,10111,10112,5,2,0,
        0,10112,10113,3,1276,638,0,10113,10114,3,1212,606,0,10114,10115,
        5,36,0,0,10115,10116,3,1172,586,0,10116,10117,5,3,0,0,10117,10119,
        1,0,0,0,10118,9934,1,0,0,0,10118,9940,1,0,0,0,10118,9941,1,0,0,0,
        10118,9948,1,0,0,0,10118,9955,1,0,0,0,10118,9962,1,0,0,0,10118,9969,
        1,0,0,0,10118,9970,1,0,0,0,10118,9971,1,0,0,0,10118,9972,1,0,0,0,
        10118,9973,1,0,0,0,10118,9974,1,0,0,0,10118,9975,1,0,0,0,10118,9982,
        1,0,0,0,10118,9988,1,0,0,0,10118,9997,1,0,0,0,10118,10002,1,0,0,
        0,10118,10008,1,0,0,0,10118,10014,1,0,0,0,10118,10021,1,0,0,0,10118,
        10029,1,0,0,0,10118,10036,1,0,0,0,10118,10041,1,0,0,0,10118,10046,
        1,0,0,0,10118,10051,1,0,0,0,10118,10056,1,0,0,0,10118,10069,1,0,
        0,0,10118,10075,1,0,0,0,10118,10080,1,0,0,0,10118,10089,1,0,0,0,
        10118,10099,1,0,0,0,10118,10110,1,0,0,0,10119,1265,1,0,0,0,10120,
        10121,5,375,0,0,10121,10126,3,1212,606,0,10122,10123,5,375,0,0,10123,
        10124,5,269,0,0,10124,10126,5,450,0,0,10125,10120,1,0,0,0,10125,
        10122,1,0,0,0,10126,1267,1,0,0,0,10127,10128,5,6,0,0,10128,10129,
        5,339,0,0,10129,10138,5,385,0,0,10130,10131,5,6,0,0,10131,10132,
        5,339,0,0,10132,10138,5,269,0,0,10133,10134,5,6,0,0,10134,10135,
        5,339,0,0,10135,10136,5,269,0,0,10136,10138,5,450,0,0,10137,10127,
        1,0,0,0,10137,10130,1,0,0,0,10137,10133,1,0,0,0,10138,1269,1,0,0,
        0,10139,10140,5,424,0,0,10140,10141,5,2,0,0,10141,10142,3,1272,636,
        0,10142,10143,5,3,0,0,10143,1271,1,0,0,0,10144,10149,3,1274,637,
        0,10145,10146,5,6,0,0,10146,10148,3,1274,637,0,10147,10145,1,0,0,
        0,10148,10151,1,0,0,0,10149,10147,1,0,0,0,10149,10150,1,0,0,0,10150,
        1273,1,0,0,0,10151,10149,1,0,0,0,10152,10155,3,1212,606,0,10153,
        10154,5,36,0,0,10154,10156,3,1490,745,0,10155,10153,1,0,0,0,10155,
        10156,1,0,0,0,10156,1275,1,0,0,0,10157,10158,7,71,0,0,10158,1277,
        1,0,0,0,10159,10160,5,292,0,0,10160,10164,5,378,0,0,10161,10162,
        5,347,0,0,10162,10164,5,378,0,0,10163,10159,1,0,0,0,10163,10161,
        1,0,0,0,10164,1279,1,0,0,0,10165,10166,5,286,0,0,10166,10181,3,1254,
        627,0,10167,10168,5,286,0,0,10168,10169,3,1254,627,0,10169,10170,
        3,1282,641,0,10170,10181,1,0,0,0,10171,10172,5,286,0,0,10172,10173,
        3,1282,641,0,10173,10174,3,1254,627,0,10174,10181,1,0,0,0,10175,
        10176,5,286,0,0,10176,10177,3,1282,641,0,10177,10178,3,1254,627,
        0,10178,10179,3,1282,641,0,10179,10181,1,0,0,0,10180,10165,1,0,0,
        0,10180,10167,1,0,0,0,10180,10171,1,0,0,0,10180,10175,1,0,0,0,10181,
        1281,1,0,0,0,10182,10183,5,147,0,0,10183,10184,7,72,0,0,10184,1283,
        1,0,0,0,10185,10186,5,479,0,0,10186,10187,5,66,0,0,10187,10188,5,
        2,0,0,10188,10189,3,1044,522,0,10189,10190,5,3,0,0,10190,1285,1,
        0,0,0,10191,10192,5,480,0,0,10192,10193,5,2,0,0,10193,10194,5,103,
        0,0,10194,10195,3,1212,606,0,10195,10196,5,3,0,0,10196,1287,1,0,
        0,0,10197,10198,5,104,0,0,10198,10199,3,1290,645,0,10199,1289,1,
        0,0,0,10200,10205,3,1292,646,0,10201,10202,5,6,0,0,10202,10204,3,
        1292,646,0,10203,10201,1,0,0,0,10204,10207,1,0,0,0,10205,10203,1,
        0,0,0,10205,10206,1,0,0,0,10206,1291,1,0,0,0,10207,10205,1,0,0,0,
        10208,10209,3,1474,737,0,10209,10210,5,36,0,0,10210,10211,3,1296,
        648,0,10211,1293,1,0,0,0,10212,10215,5,124,0,0,10213,10216,3,1296,
        648,0,10214,10216,3,1474,737,0,10215,10213,1,0,0,0,10215,10214,1,
        0,0,0,10216,1295,1,0,0,0,10217,10219,5,2,0,0,10218,10220,3,1298,
        649,0,10219,10218,1,0,0,0,10219,10220,1,0,0,0,10220,10222,1,0,0,
        0,10221,10223,3,1300,650,0,10222,10221,1,0,0,0,10222,10223,1,0,0,
        0,10223,10225,1,0,0,0,10224,10226,3,1042,521,0,10225,10224,1,0,0,
        0,10225,10226,1,0,0,0,10226,10228,1,0,0,0,10227,10229,3,1302,651,
        0,10228,10227,1,0,0,0,10228,10229,1,0,0,0,10229,10230,1,0,0,0,10230,
        10231,5,3,0,0,10231,1297,1,0,0,0,10232,10233,3,1474,737,0,10233,
        1299,1,0,0,0,10234,10235,5,285,0,0,10235,10236,5,147,0,0,10236,10237,
        3,1328,664,0,10237,1301,1,0,0,0,10238,10239,5,299,0,0,10239,10241,
        3,1304,652,0,10240,10242,3,1308,654,0,10241,10240,1,0,0,0,10241,
        10242,1,0,0,0,10242,10254,1,0,0,0,10243,10244,5,320,0,0,10244,10246,
        3,1304,652,0,10245,10247,3,1308,654,0,10246,10245,1,0,0,0,10246,
        10247,1,0,0,0,10247,10254,1,0,0,0,10248,10249,5,481,0,0,10249,10251,
        3,1304,652,0,10250,10252,3,1308,654,0,10251,10250,1,0,0,0,10251,
        10252,1,0,0,0,10252,10254,1,0,0,0,10253,10238,1,0,0,0,10253,10243,
        1,0,0,0,10253,10248,1,0,0,0,10254,1303,1,0,0,0,10255,10262,3,1306,
        653,0,10256,10257,5,387,0,0,10257,10258,3,1306,653,0,10258,10259,
        5,33,0,0,10259,10260,3,1306,653,0,10260,10262,1,0,0,0,10261,10255,
        1,0,0,0,10261,10256,1,0,0,0,10262,1305,1,0,0,0,10263,10264,5,362,
        0,0,10264,10271,7,73,0,0,10265,10266,5,434,0,0,10266,10271,5,414,
        0,0,10267,10268,3,1212,606,0,10268,10269,7,73,0,0,10269,10271,1,
        0,0,0,10270,10263,1,0,0,0,10270,10265,1,0,0,0,10270,10267,1,0,0,
        0,10271,1307,1,0,0,0,10272,10279,5,199,0,0,10273,10274,5,434,0,0,
        10274,10280,5,414,0,0,10275,10280,5,66,0,0,10276,10280,5,467,0,0,
        10277,10278,5,269,0,0,10278,10280,5,482,0,0,10279,10273,1,0,0,0,
        10279,10275,1,0,0,0,10279,10276,1,0,0,0,10279,10277,1,0,0,0,10280,
        1309,1,0,0,0,10281,10282,5,414,0,0,10282,10284,5,2,0,0,10283,10285,
        3,1328,664,0,10284,10283,1,0,0,0,10284,10285,1,0,0,0,10285,10286,
        1,0,0,0,10286,10294,5,3,0,0,10287,10288,5,2,0,0,10288,10289,3,1328,
        664,0,10289,10290,5,6,0,0,10290,10291,3,1212,606,0,10291,10292,5,
        3,0,0,10292,10294,1,0,0,0,10293,10281,1,0,0,0,10293,10287,1,0,0,
        0,10294,1311,1,0,0,0,10295,10296,5,414,0,0,10296,10298,5,2,0,0,10297,
        10299,3,1328,664,0,10298,10297,1,0,0,0,10298,10299,1,0,0,0,10299,
        10300,1,0,0,0,10300,10301,5,3,0,0,10301,1313,1,0,0,0,10302,10303,
        5,2,0,0,10303,10304,3,1212,606,0,10304,10305,5,6,0,0,10305,10306,
        3,1328,664,0,10306,10307,5,3,0,0,10307,1315,1,0,0,0,10308,10309,
        7,74,0,0,10309,1317,1,0,0,0,10310,10313,5,29,0,0,10311,10313,3,1320,
        660,0,10312,10310,1,0,0,0,10312,10311,1,0,0,0,10313,1319,1,0,0,0,
        10314,10315,7,75,0,0,10315,1321,1,0,0,0,10316,10323,5,29,0,0,10317,
        10318,5,278,0,0,10318,10319,5,2,0,0,10319,10320,3,732,366,0,10320,
        10321,5,3,0,0,10321,10323,1,0,0,0,10322,10316,1,0,0,0,10322,10317,
        1,0,0,0,10323,1323,1,0,0,0,10324,10331,3,1318,659,0,10325,10326,
        5,278,0,0,10326,10327,5,2,0,0,10327,10328,3,732,366,0,10328,10329,
        5,3,0,0,10329,10331,1,0,0,0,10330,10324,1,0,0,0,10330,10325,1,0,
        0,0,10331,1325,1,0,0,0,10332,10345,3,1318,659,0,10333,10334,5,278,
        0,0,10334,10335,5,2,0,0,10335,10336,3,732,366,0,10336,10337,5,3,
        0,0,10337,10345,1,0,0,0,10338,10345,5,120,0,0,10339,10340,5,77,0,
        0,10340,10345,5,120,0,0,10341,10345,5,114,0,0,10342,10343,5,77,0,
        0,10343,10345,5,114,0,0,10344,10332,1,0,0,0,10344,10333,1,0,0,0,
        10344,10338,1,0,0,0,10344,10339,1,0,0,0,10344,10341,1,0,0,0,10344,
        10342,1,0,0,0,10345,1327,1,0,0,0,10346,10351,3,1212,606,0,10347,
        10348,5,6,0,0,10348,10350,3,1212,606,0,10349,10347,1,0,0,0,10350,
        10353,1,0,0,0,10351,10349,1,0,0,0,10351,10352,1,0,0,0,10352,1329,
        1,0,0,0,10353,10351,1,0,0,0,10354,10359,3,1336,668,0,10355,10356,
        5,6,0,0,10356,10358,3,1336,668,0,10357,10355,1,0,0,0,10358,10361,
        1,0,0,0,10359,10357,1,0,0,0,10359,10360,1,0,0,0,10360,1331,1,0,0,
        0,10361,10359,1,0,0,0,10362,10367,3,1334,667,0,10363,10364,5,6,0,
        0,10364,10366,3,1334,667,0,10365,10363,1,0,0,0,10366,10369,1,0,0,
        0,10367,10365,1,0,0,0,10367,10368,1,0,0,0,10368,1333,1,0,0,0,10369,
        10367,1,0,0,0,10370,10371,5,2,0,0,10371,10372,3,1212,606,0,10372,
        10373,5,3,0,0,10373,10376,1,0,0,0,10374,10376,3,1432,716,0,10375,
        10370,1,0,0,0,10375,10374,1,0,0,0,10376,1335,1,0,0,0,10377,10380,
        3,1212,606,0,10378,10380,3,1432,716,0,10379,10377,1,0,0,0,10379,
        10378,1,0,0,0,10380,1337,1,0,0,0,10381,10386,3,1340,670,0,10382,
        10383,5,6,0,0,10383,10385,3,1340,670,0,10384,10382,1,0,0,0,10385,
        10388,1,0,0,0,10386,10384,1,0,0,0,10386,10387,1,0,0,0,10387,1339,
        1,0,0,0,10388,10386,1,0,0,0,10389,10395,3,1212,606,0,10390,10391,
        3,684,342,0,10391,10392,7,76,0,0,10392,10393,3,1212,606,0,10393,
        10395,1,0,0,0,10394,10389,1,0,0,0,10394,10390,1,0,0,0,10395,1341,
        1,0,0,0,10396,10401,3,1168,584,0,10397,10398,5,6,0,0,10398,10400,
        3,1168,584,0,10399,10397,1,0,0,0,10400,10403,1,0,0,0,10401,10399,
        1,0,0,0,10401,10402,1,0,0,0,10402,1343,1,0,0,0,10403,10401,1,0,0,
        0,10404,10407,5,4,0,0,10405,10408,3,1328,664,0,10406,10408,3,1346,
        673,0,10407,10405,1,0,0,0,10407,10406,1,0,0,0,10407,10408,1,0,0,
        0,10408,10409,1,0,0,0,10409,10410,5,5,0,0,10410,1345,1,0,0,0,10411,
        10416,3,1344,672,0,10412,10413,5,6,0,0,10413,10415,3,1344,672,0,
        10414,10412,1,0,0,0,10415,10418,1,0,0,0,10416,10414,1,0,0,0,10416,
        10417,1,0,0,0,10417,1347,1,0,0,0,10418,10416,1,0,0,0,10419,10420,
        3,1350,675,0,10420,10421,5,64,0,0,10421,10422,3,1212,606,0,10422,
        1349,1,0,0,0,10423,10432,3,1492,746,0,10424,10432,5,384,0,0,10425,
        10432,5,264,0,0,10426,10432,5,176,0,0,10427,10432,5,218,0,0,10428,
        10432,5,261,0,0,10429,10432,5,326,0,0,10430,10432,3,1458,729,0,10431,
        10423,1,0,0,0,10431,10424,1,0,0,0,10431,10425,1,0,0,0,10431,10426,
        1,0,0,0,10431,10427,1,0,0,0,10431,10428,1,0,0,0,10431,10429,1,0,
        0,0,10431,10430,1,0,0,0,10432,1351,1,0,0,0,10433,10434,7,77,0,0,
        10434,1353,1,0,0,0,10435,10436,3,1212,606,0,10436,10437,5,84,0,0,
        10437,10438,3,1212,606,0,10438,10439,5,64,0,0,10439,10442,3,1212,
        606,0,10440,10441,5,62,0,0,10441,10443,3,1212,606,0,10442,10440,
        1,0,0,0,10442,10443,1,0,0,0,10443,1355,1,0,0,0,10444,10445,3,1252,
        626,0,10445,10446,5,68,0,0,10446,10447,3,1252,626,0,10447,1357,1,
        0,0,0,10448,10449,3,1212,606,0,10449,10450,5,64,0,0,10450,10451,
        3,1212,606,0,10451,10452,5,62,0,0,10452,10453,3,1212,606,0,10453,
        10476,1,0,0,0,10454,10455,3,1212,606,0,10455,10456,5,62,0,0,10456,
        10457,3,1212,606,0,10457,10458,5,64,0,0,10458,10459,3,1212,606,0,
        10459,10476,1,0,0,0,10460,10461,3,1212,606,0,10461,10462,5,64,0,
        0,10462,10463,3,1212,606,0,10463,10476,1,0,0,0,10464,10465,3,1212,
        606,0,10465,10466,5,62,0,0,10466,10467,3,1212,606,0,10467,10476,
        1,0,0,0,10468,10469,3,1212,606,0,10469,10470,5,127,0,0,10470,10471,
        3,1212,606,0,10471,10472,5,197,0,0,10472,10473,3,1212,606,0,10473,
        10476,1,0,0,0,10474,10476,3,1328,664,0,10475,10448,1,0,0,0,10475,
        10454,1,0,0,0,10475,10460,1,0,0,0,10475,10464,1,0,0,0,10475,10468,
        1,0,0,0,10475,10474,1,0,0,0,10476,1359,1,0,0,0,10477,10478,3,1212,
        606,0,10478,10479,5,64,0,0,10479,10480,3,1328,664,0,10480,10485,
        1,0,0,0,10481,10482,5,64,0,0,10482,10485,3,1328,664,0,10483,10485,
        3,1328,664,0,10484,10477,1,0,0,0,10484,10481,1,0,0,0,10484,10483,
        1,0,0,0,10485,1361,1,0,0,0,10486,10492,3,1002,501,0,10487,10488,
        5,2,0,0,10488,10489,3,1328,664,0,10489,10490,5,3,0,0,10490,10492,
        1,0,0,0,10491,10486,1,0,0,0,10491,10487,1,0,0,0,10492,1363,1,0,0,
        0,10493,10495,5,40,0,0,10494,10496,3,1372,686,0,10495,10494,1,0,
        0,0,10495,10496,1,0,0,0,10496,10497,1,0,0,0,10497,10499,3,1366,683,
        0,10498,10500,3,1370,685,0,10499,10498,1,0,0,0,10499,10500,1,0,0,
        0,10500,10501,1,0,0,0,10501,10502,5,454,0,0,10502,1365,1,0,0,0,10503,
        10505,3,1368,684,0,10504,10503,1,0,0,0,10505,10506,1,0,0,0,10506,
        10504,1,0,0,0,10506,10507,1,0,0,0,10507,1367,1,0,0,0,10508,10509,
        5,102,0,0,10509,10510,3,1212,606,0,10510,10511,5,93,0,0,10511,10512,
        3,1212,606,0,10512,1369,1,0,0,0,10513,10514,5,58,0,0,10514,10515,
        3,1212,606,0,10515,1371,1,0,0,0,10516,10517,3,1212,606,0,10517,1373,
        1,0,0,0,10518,10520,3,1474,737,0,10519,10521,3,1380,690,0,10520,
        10519,1,0,0,0,10520,10521,1,0,0,0,10521,1375,1,0,0,0,10522,10525,
        5,11,0,0,10523,10526,3,1438,719,0,10524,10526,5,9,0,0,10525,10523,
        1,0,0,0,10525,10524,1,0,0,0,10526,10540,1,0,0,0,10527,10536,5,4,
        0,0,10528,10537,3,1212,606,0,10529,10531,3,1378,689,0,10530,10529,
        1,0,0,0,10530,10531,1,0,0,0,10531,10532,1,0,0,0,10532,10534,5,8,
        0,0,10533,10535,3,1378,689,0,10534,10533,1,0,0,0,10534,10535,1,0,
        0,0,10535,10537,1,0,0,0,10536,10528,1,0,0,0,10536,10530,1,0,0,0,
        10537,10538,1,0,0,0,10538,10540,5,5,0,0,10539,10522,1,0,0,0,10539,
        10527,1,0,0,0,10540,1377,1,0,0,0,10541,10542,3,1212,606,0,10542,
        1379,1,0,0,0,10543,10545,3,1376,688,0,10544,10543,1,0,0,0,10545,
        10546,1,0,0,0,10546,10544,1,0,0,0,10546,10547,1,0,0,0,10547,1381,
        1,0,0,0,10548,10550,3,1376,688,0,10549,10548,1,0,0,0,10550,10553,
        1,0,0,0,10551,10549,1,0,0,0,10551,10552,1,0,0,0,10552,1383,1,0,0,
        0,10553,10551,1,0,0,0,10554,10555,3,1386,693,0,10555,1385,1,0,0,
        0,10556,10561,3,1388,694,0,10557,10558,5,6,0,0,10558,10560,3,1388,
        694,0,10559,10557,1,0,0,0,10560,10563,1,0,0,0,10561,10559,1,0,0,
        0,10561,10562,1,0,0,0,10562,1387,1,0,0,0,10563,10561,1,0,0,0,10564,
        10569,3,1336,668,0,10565,10566,5,36,0,0,10566,10570,3,1490,745,0,
        10567,10570,3,1492,746,0,10568,10570,1,0,0,0,10569,10565,1,0,0,0,
        10569,10567,1,0,0,0,10569,10568,1,0,0,0,10570,10573,1,0,0,0,10571,
        10573,5,9,0,0,10572,10564,1,0,0,0,10572,10571,1,0,0,0,10573,1389,
        1,0,0,0,10574,10579,3,1412,706,0,10575,10576,5,6,0,0,10576,10578,
        3,1412,706,0,10577,10575,1,0,0,0,10578,10581,1,0,0,0,10579,10577,
        1,0,0,0,10579,10580,1,0,0,0,10580,1391,1,0,0,0,10581,10579,1,0,0,
        0,10582,10587,3,1406,703,0,10583,10584,5,6,0,0,10584,10586,3,1406,
        703,0,10585,10583,1,0,0,0,10586,10589,1,0,0,0,10587,10585,1,0,0,
        0,10587,10588,1,0,0,0,10588,1393,1,0,0,0,10589,10587,1,0,0,0,10590,
        10595,3,1422,711,0,10591,10592,5,6,0,0,10592,10594,3,1422,711,0,
        10593,10591,1,0,0,0,10594,10597,1,0,0,0,10595,10593,1,0,0,0,10595,
        10596,1,0,0,0,10596,1395,1,0,0,0,10597,10595,1,0,0,0,10598,10603,
        3,1420,710,0,10599,10600,5,6,0,0,10600,10602,3,1420,710,0,10601,
        10599,1,0,0,0,10602,10605,1,0,0,0,10603,10601,1,0,0,0,10603,10604,
        1,0,0,0,10604,1397,1,0,0,0,10605,10603,1,0,0,0,10606,10611,3,1428,
        714,0,10607,10608,5,6,0,0,10608,10610,3,1428,714,0,10609,10607,1,
        0,0,0,10610,10613,1,0,0,0,10611,10609,1,0,0,0,10611,10612,1,0,0,
        0,10612,1399,1,0,0,0,10613,10611,1,0,0,0,10614,10616,3,1474,737,
        0,10615,10617,3,1380,690,0,10616,10615,1,0,0,0,10616,10617,1,0,0,
        0,10617,1401,1,0,0,0,10618,10620,3,1474,737,0,10619,10621,3,1380,
        690,0,10620,10619,1,0,0,0,10620,10621,1,0,0,0,10621,1403,1,0,0,0,
        10622,10624,3,1474,737,0,10623,10625,3,1380,690,0,10624,10623,1,
        0,0,0,10624,10625,1,0,0,0,10625,1405,1,0,0,0,10626,10628,3,1474,
        737,0,10627,10629,3,1380,690,0,10628,10627,1,0,0,0,10628,10629,1,
        0,0,0,10629,1407,1,0,0,0,10630,10632,3,1474,737,0,10631,10633,3,
        1380,690,0,10632,10631,1,0,0,0,10632,10633,1,0,0,0,10633,1409,1,
        0,0,0,10634,10636,3,1474,737,0,10635,10637,3,560,280,0,10636,10635,
        1,0,0,0,10636,10637,1,0,0,0,10637,1411,1,0,0,0,10638,10640,3,1474,
        737,0,10639,10641,3,1380,690,0,10640,10639,1,0,0,0,10640,10641,1,
        0,0,0,10641,1413,1,0,0,0,10642,10647,3,1402,701,0,10643,10644,5,
        6,0,0,10644,10646,3,1402,701,0,10645,10643,1,0,0,0,10646,10649,1,
        0,0,0,10647,10645,1,0,0,0,10647,10648,1,0,0,0,10648,1415,1,0,0,0,
        10649,10647,1,0,0,0,10650,10655,3,1436,718,0,10651,10652,5,6,0,0,
        10652,10654,3,1436,718,0,10653,10651,1,0,0,0,10654,10657,1,0,0,0,
        10655,10653,1,0,0,0,10655,10656,1,0,0,0,10656,1417,1,0,0,0,10657,
        10655,1,0,0,0,10658,10660,3,1474,737,0,10659,10661,3,560,280,0,10660,
        10659,1,0,0,0,10660,10661,1,0,0,0,10661,1419,1,0,0,0,10662,10664,
        3,1474,737,0,10663,10665,3,560,280,0,10664,10663,1,0,0,0,10664,10665,
        1,0,0,0,10665,1421,1,0,0,0,10666,10668,3,1474,737,0,10667,10669,
        3,560,280,0,10668,10667,1,0,0,0,10668,10669,1,0,0,0,10669,1423,1,
        0,0,0,10670,10671,3,1474,737,0,10671,1425,1,0,0,0,10672,10673,3,
        1474,737,0,10673,1427,1,0,0,0,10674,10679,3,1482,741,0,10675,10676,
        3,1474,737,0,10676,10677,3,1380,690,0,10677,10679,1,0,0,0,10678,
        10674,1,0,0,0,10678,10675,1,0,0,0,10679,1429,1,0,0,0,10680,10685,
        3,1482,741,0,10681,10682,3,1474,737,0,10682,10683,3,1380,690,0,10683,
        10685,1,0,0,0,10684,10680,1,0,0,0,10684,10681,1,0,0,0,10685,1431,
        1,0,0,0,10686,10690,3,1474,737,0,10687,10689,3,1376,688,0,10688,
        10687,1,0,0,0,10689,10692,1,0,0,0,10690,10688,1,0,0,0,10690,10691,
        1,0,0,0,10691,10695,1,0,0,0,10692,10690,1,0,0,0,10693,10695,4,716,
        8,0,10694,10686,1,0,0,0,10694,10693,1,0,0,0,10695,1433,1,0,0,0,10696,
        10697,3,1474,737,0,10697,1435,1,0,0,0,10698,10699,3,1474,737,0,10699,
        1437,1,0,0,0,10700,10701,3,1490,745,0,10701,1439,1,0,0,0,10702,10703,
        3,1458,729,0,10703,1441,1,0,0,0,10704,10709,3,1482,741,0,10705,10706,
        3,1474,737,0,10706,10707,3,1380,690,0,10707,10709,1,0,0,0,10708,
        10704,1,0,0,0,10708,10705,1,0,0,0,10709,1443,1,0,0,0,10710,10715,
        3,1482,741,0,10711,10712,3,1474,737,0,10712,10713,3,1380,690,0,10713,
        10715,1,0,0,0,10714,10710,1,0,0,0,10714,10711,1,0,0,0,10715,1445,
        1,0,0,0,10716,10721,3,1484,742,0,10717,10718,3,1474,737,0,10718,
        10719,3,1380,690,0,10719,10721,1,0,0,0,10720,10716,1,0,0,0,10720,
        10717,1,0,0,0,10721,1447,1,0,0,0,10722,10758,3,1456,728,0,10723,
        10758,3,1454,727,0,10724,10758,3,1458,729,0,10725,10758,3,1452,726,
        0,10726,10758,3,1450,725,0,10727,10737,3,1444,722,0,10728,10738,
        3,1458,729,0,10729,10730,5,2,0,0,10730,10732,3,1338,669,0,10731,
        10733,3,1042,521,0,10732,10731,1,0,0,0,10732,10733,1,0,0,0,10733,
        10734,1,0,0,0,10734,10735,5,3,0,0,10735,10736,3,1458,729,0,10736,
        10738,1,0,0,0,10737,10728,1,0,0,0,10737,10729,1,0,0,0,10738,10758,
        1,0,0,0,10739,10740,3,1174,587,0,10740,10741,3,1458,729,0,10741,
        10758,1,0,0,0,10742,10752,3,1202,601,0,10743,10745,3,1458,729,0,
        10744,10746,3,1206,603,0,10745,10744,1,0,0,0,10745,10746,1,0,0,0,
        10746,10753,1,0,0,0,10747,10748,5,2,0,0,10748,10749,3,1456,728,0,
        10749,10750,5,3,0,0,10750,10751,3,1458,729,0,10751,10753,1,0,0,0,
        10752,10743,1,0,0,0,10752,10747,1,0,0,0,10753,10758,1,0,0,0,10754,
        10758,5,96,0,0,10755,10758,5,60,0,0,10756,10758,5,78,0,0,10757,10722,
        1,0,0,0,10757,10723,1,0,0,0,10757,10724,1,0,0,0,10757,10725,1,0,
        0,0,10757,10726,1,0,0,0,10757,10727,1,0,0,0,10757,10739,1,0,0,0,
        10757,10742,1,0,0,0,10757,10754,1,0,0,0,10757,10755,1,0,0,0,10757,
        10756,1,0,0,0,10758,1449,1,0,0,0,10759,10760,5,567,0,0,10760,1451,
        1,0,0,0,10761,10762,5,563,0,0,10762,1453,1,0,0,0,10763,10764,5,573,
        0,0,10764,1455,1,0,0,0,10765,10766,5,571,0,0,10766,1457,1,0,0,0,
        10767,10769,3,1460,730,0,10768,10770,3,1462,731,0,10769,10768,1,
        0,0,0,10769,10770,1,0,0,0,10770,1459,1,0,0,0,10771,10783,5,558,0,
        0,10772,10783,5,560,0,0,10773,10777,5,562,0,0,10774,10776,5,588,
        0,0,10775,10774,1,0,0,0,10776,10779,1,0,0,0,10777,10775,1,0,0,0,
        10777,10778,1,0,0,0,10778,10780,1,0,0,0,10779,10777,1,0,0,0,10780,
        10783,5,589,0,0,10781,10783,5,584,0,0,10782,10771,1,0,0,0,10782,
        10772,1,0,0,0,10782,10773,1,0,0,0,10782,10781,1,0,0,0,10783,1461,
        1,0,0,0,10784,10785,5,487,0,0,10785,10786,3,1460,730,0,10786,1463,
        1,0,0,0,10787,10793,3,1456,728,0,10788,10789,5,12,0,0,10789,10793,
        3,1456,728,0,10790,10791,5,13,0,0,10791,10793,3,1456,728,0,10792,
        10787,1,0,0,0,10792,10788,1,0,0,0,10792,10790,1,0,0,0,10793,1465,
        1,0,0,0,10794,10795,3,1470,735,0,10795,1467,1,0,0,0,10796,10797,
        3,1470,735,0,10797,1469,1,0,0,0,10798,10804,3,1488,744,0,10799,10804,
        5,52,0,0,10800,10804,5,49,0,0,10801,10804,5,89,0,0,10802,10804,5,
        524,0,0,10803,10798,1,0,0,0,10803,10799,1,0,0,0,10803,10800,1,0,
        0,0,10803,10801,1,0,0,0,10803,10802,1,0,0,0,10804,1471,1,0,0,0,10805,
        10810,3,1470,735,0,10806,10807,5,6,0,0,10807,10809,3,1470,735,0,
        10808,10806,1,0,0,0,10809,10812,1,0,0,0,10810,10808,1,0,0,0,10810,
        10811,1,0,0,0,10811,1473,1,0,0,0,10812,10810,1,0,0,0,10813,10818,
        3,1492,746,0,10814,10818,3,1496,748,0,10815,10818,3,1498,749,0,10816,
        10818,3,1734,867,0,10817,10813,1,0,0,0,10817,10814,1,0,0,0,10817,
        10815,1,0,0,0,10817,10816,1,0,0,0,10818,1475,1,0,0,0,10819,10820,
        3,1492,746,0,10820,1477,1,0,0,0,10821,10834,3,710,355,0,10822,10823,
        5,2,0,0,10823,10824,3,1212,606,0,10824,10825,5,3,0,0,10825,10826,
        1,0,0,0,10826,10828,3,1492,746,0,10827,10829,3,650,325,0,10828,10827,
        1,0,0,0,10828,10829,1,0,0,0,10829,10831,1,0,0,0,10830,10832,3,652,
        326,0,10831,10830,1,0,0,0,10831,10832,1,0,0,0,10832,10834,1,0,0,
        0,10833,10821,1,0,0,0,10833,10822,1,0,0,0,10834,1479,1,0,0,0,10835,
        10836,5,105,0,0,10836,10838,3,132,66,0,10837,10835,1,0,0,0,10837,
        10838,1,0,0,0,10838,10840,1,0,0,0,10839,10841,3,286,143,0,10840,
        10839,1,0,0,0,10840,10841,1,0,0,0,10841,1481,1,0,0,0,10842,10847,
        3,1492,746,0,10843,10847,3,1496,748,0,10844,10847,3,1734,867,0,10845,
        10847,3,1500,750,0,10846,10842,1,0,0,0,10846,10843,1,0,0,0,10846,
        10844,1,0,0,0,10846,10845,1,0,0,0,10847,1483,1,0,0,0,10848,10853,
        3,1492,746,0,10849,10853,3,1496,748,0,10850,10853,3,1734,867,0,10851,
        10853,3,1500,750,0,10852,10848,1,0,0,0,10852,10849,1,0,0,0,10852,
        10850,1,0,0,0,10852,10851,1,0,0,0,10853,1485,1,0,0,0,10854,10857,
        3,1432,716,0,10855,10857,3,1500,750,0,10856,10854,1,0,0,0,10856,
        10855,1,0,0,0,10857,1487,1,0,0,0,10858,10863,3,1492,746,0,10859,
        10863,3,1496,748,0,10860,10863,3,1498,749,0,10861,10863,3,1500,750,
        0,10862,10858,1,0,0,0,10862,10859,1,0,0,0,10862,10860,1,0,0,0,10862,
        10861,1,0,0,0,10863,1489,1,0,0,0,10864,10871,3,1492,746,0,10865,
        10871,3,1734,867,0,10866,10871,3,1496,748,0,10867,10871,3,1498,749,
        0,10868,10871,3,1500,750,0,10869,10871,3,1502,751,0,10870,10864,
        1,0,0,0,10870,10865,1,0,0,0,10870,10866,1,0,0,0,10870,10867,1,0,
        0,0,10870,10868,1,0,0,0,10870,10869,1,0,0,0,10871,1491,1,0,0,0,10872,
        10874,5,549,0,0,10873,10875,3,1462,731,0,10874,10873,1,0,0,0,10874,
        10875,1,0,0,0,10875,10883,1,0,0,0,10876,10883,3,1458,729,0,10877,
        10883,5,550,0,0,10878,10883,5,554,0,0,10879,10883,3,1256,628,0,10880,
        10883,3,1494,747,0,10881,10883,3,1734,867,0,10882,10872,1,0,0,0,
        10882,10876,1,0,0,0,10882,10877,1,0,0,0,10882,10878,1,0,0,0,10882,
        10879,1,0,0,0,10882,10880,1,0,0,0,10882,10881,1,0,0,0,10883,1493,
        1,0,0,0,10884,10885,5,575,0,0,10885,1495,1,0,0,0,10886,10887,7,78,
        0,0,10887,1497,1,0,0,0,10888,10940,5,387,0,0,10889,10940,5,388,0,
        0,10890,10940,3,1184,592,0,10891,10940,5,390,0,0,10892,10940,5,391,
        0,0,10893,10940,3,1192,596,0,10894,10940,5,393,0,0,10895,10940,5,
        394,0,0,10896,10940,5,395,0,0,10897,10940,5,396,0,0,10898,10940,
        5,397,0,0,10899,10940,5,398,0,0,10900,10940,5,399,0,0,10901,10940,
        5,470,0,0,10902,10940,5,400,0,0,10903,10940,5,401,0,0,10904,10940,
        5,402,0,0,10905,10940,5,403,0,0,10906,10940,5,404,0,0,10907,10940,
        5,405,0,0,10908,10940,5,406,0,0,10909,10940,5,407,0,0,10910,10940,
        5,489,0,0,10911,10940,5,408,0,0,10912,10940,3,1180,590,0,10913,10940,
        5,453,0,0,10914,10940,5,410,0,0,10915,10940,5,411,0,0,10916,10940,
        5,412,0,0,10917,10940,5,413,0,0,10918,10940,5,414,0,0,10919,10940,
        5,415,0,0,10920,10940,5,416,0,0,10921,10940,5,417,0,0,10922,10940,
        5,418,0,0,10923,10940,5,419,0,0,10924,10940,5,420,0,0,10925,10940,
        5,421,0,0,10926,10940,5,422,0,0,10927,10940,5,423,0,0,10928,10940,
        5,424,0,0,10929,10940,5,425,0,0,10930,10940,5,426,0,0,10931,10940,
        5,427,0,0,10932,10940,5,428,0,0,10933,10940,5,476,0,0,10934,10940,
        5,429,0,0,10935,10940,5,430,0,0,10936,10940,5,431,0,0,10937,10940,
        5,432,0,0,10938,10940,5,474,0,0,10939,10888,1,0,0,0,10939,10889,
        1,0,0,0,10939,10890,1,0,0,0,10939,10891,1,0,0,0,10939,10892,1,0,
        0,0,10939,10893,1,0,0,0,10939,10894,1,0,0,0,10939,10895,1,0,0,0,
        10939,10896,1,0,0,0,10939,10897,1,0,0,0,10939,10898,1,0,0,0,10939,
        10899,1,0,0,0,10939,10900,1,0,0,0,10939,10901,1,0,0,0,10939,10902,
        1,0,0,0,10939,10903,1,0,0,0,10939,10904,1,0,0,0,10939,10905,1,0,
        0,0,10939,10906,1,0,0,0,10939,10907,1,0,0,0,10939,10908,1,0,0,0,
        10939,10909,1,0,0,0,10939,10910,1,0,0,0,10939,10911,1,0,0,0,10939,
        10912,1,0,0,0,10939,10913,1,0,0,0,10939,10914,1,0,0,0,10939,10915,
        1,0,0,0,10939,10916,1,0,0,0,10939,10917,1,0,0,0,10939,10918,1,0,
        0,0,10939,10919,1,0,0,0,10939,10920,1,0,0,0,10939,10921,1,0,0,0,
        10939,10922,1,0,0,0,10939,10923,1,0,0,0,10939,10924,1,0,0,0,10939,
        10925,1,0,0,0,10939,10926,1,0,0,0,10939,10927,1,0,0,0,10939,10928,
        1,0,0,0,10939,10929,1,0,0,0,10939,10930,1,0,0,0,10939,10931,1,0,
        0,0,10939,10932,1,0,0,0,10939,10933,1,0,0,0,10939,10934,1,0,0,0,
        10939,10935,1,0,0,0,10939,10936,1,0,0,0,10939,10937,1,0,0,0,10939,
        10938,1,0,0,0,10940,1499,1,0,0,0,10941,10942,7,79,0,0,10942,1501,
        1,0,0,0,10943,10944,7,80,0,0,10944,1503,1,0,0,0,10945,10946,3,1506,
        753,0,10946,10947,3,1516,758,0,10947,10948,3,1514,757,0,10948,1505,
        1,0,0,0,10949,10951,3,1508,754,0,10950,10949,1,0,0,0,10951,10954,
        1,0,0,0,10952,10950,1,0,0,0,10952,10953,1,0,0,0,10953,1507,1,0,0,
        0,10954,10952,1,0,0,0,10955,10956,3,1510,755,0,10956,10957,5,279,
        0,0,10957,10958,5,490,0,0,10958,10976,1,0,0,0,10959,10960,3,1510,
        755,0,10960,10961,5,491,0,0,10961,10962,3,1512,756,0,10962,10976,
        1,0,0,0,10963,10964,3,1510,755,0,10964,10965,5,492,0,0,10965,10966,
        5,493,0,0,10966,10976,1,0,0,0,10967,10968,3,1510,755,0,10968,10969,
        5,492,0,0,10969,10970,5,494,0,0,10970,10976,1,0,0,0,10971,10972,
        3,1510,755,0,10972,10973,5,492,0,0,10973,10974,5,495,0,0,10974,10976,
        1,0,0,0,10975,10955,1,0,0,0,10975,10959,1,0,0,0,10975,10963,1,0,
        0,0,10975,10967,1,0,0,0,10975,10971,1,0,0,0,10976,1509,1,0,0,0,10977,
        10978,5,29,0,0,10978,1511,1,0,0,0,10979,10984,3,1458,729,0,10980,
        10984,3,1502,751,0,10981,10984,3,1734,867,0,10982,10984,3,1496,748,
        0,10983,10979,1,0,0,0,10983,10980,1,0,0,0,10983,10981,1,0,0,0,10983,
        10982,1,0,0,0,10984,1513,1,0,0,0,10985,10988,1,0,0,0,10986,10988,
        5,7,0,0,10987,10985,1,0,0,0,10987,10986,1,0,0,0,10988,1515,1,0,0,
        0,10989,10990,3,1518,759,0,10990,10991,5,146,0,0,10991,10992,3,1560,
        780,0,10992,10993,3,1714,857,0,10993,10994,5,454,0,0,10994,10995,
        3,1728,864,0,10995,1517,1,0,0,0,10996,11001,3,1724,862,0,10997,10999,
        3,1520,760,0,10998,11000,3,1522,761,0,10999,10998,1,0,0,0,10999,
        11000,1,0,0,0,11000,11002,1,0,0,0,11001,10997,1,0,0,0,11001,11002,
        1,0,0,0,11002,1519,1,0,0,0,11003,11004,5,178,0,0,11004,1521,1,0,
        0,0,11005,11007,3,1526,763,0,11006,11005,1,0,0,0,11007,11008,1,0,
        0,0,11008,11006,1,0,0,0,11008,11009,1,0,0,0,11009,1523,1,0,0,0,11010,
        11011,5,18,0,0,11011,11012,3,1732,866,0,11012,11013,5,19,0,0,11013,
        1525,1,0,0,0,11014,11018,3,1528,764,0,11015,11018,5,178,0,0,11016,
        11018,3,1524,762,0,11017,11014,1,0,0,0,11017,11015,1,0,0,0,11017,
        11016,1,0,0,0,11018,1527,1,0,0,0,11019,11035,3,1544,772,0,11020,
        11021,5,496,0,0,11021,11022,5,62,0,0,11022,11036,3,1542,771,0,11023,
        11024,3,1546,773,0,11024,11025,3,1548,774,0,11025,11026,3,1550,775,
        0,11026,11027,3,1552,776,0,11027,11028,3,1554,777,0,11028,11036,
        1,0,0,0,11029,11030,3,1530,765,0,11030,11031,5,172,0,0,11031,11032,
        3,1534,767,0,11032,11033,3,1540,770,0,11033,11034,3,1532,766,0,11034,
        11036,1,0,0,0,11035,11020,1,0,0,0,11035,11023,1,0,0,0,11035,11029,
        1,0,0,0,11036,11037,1,0,0,0,11037,11038,5,7,0,0,11038,1529,1,0,0,
        0,11039,11044,1,0,0,0,11040,11041,5,269,0,0,11041,11044,5,324,0,
        0,11042,11044,5,324,0,0,11043,11039,1,0,0,0,11043,11040,1,0,0,0,
        11043,11042,1,0,0,0,11044,1531,1,0,0,0,11045,11046,3,1000,500,0,
        11046,1533,1,0,0,0,11047,11053,1,0,0,0,11048,11049,5,2,0,0,11049,
        11050,3,1536,768,0,11050,11051,5,3,0,0,11051,11053,1,0,0,0,11052,
        11047,1,0,0,0,11052,11048,1,0,0,0,11053,1535,1,0,0,0,11054,11059,
        3,1538,769,0,11055,11056,5,6,0,0,11056,11058,3,1538,769,0,11057,
        11055,1,0,0,0,11058,11061,1,0,0,0,11059,11057,1,0,0,0,11059,11060,
        1,0,0,0,11060,1537,1,0,0,0,11061,11059,1,0,0,0,11062,11063,3,1544,
        772,0,11063,11064,3,1548,774,0,11064,1539,1,0,0,0,11065,11066,7,
        81,0,0,11066,1541,1,0,0,0,11067,11070,5,28,0,0,11068,11070,3,1474,
        737,0,11069,11067,1,0,0,0,11069,11068,1,0,0,0,11070,1543,1,0,0,0,
        11071,11072,3,1732,866,0,11072,1545,1,0,0,0,11073,11076,1,0,0,0,
        11074,11076,5,497,0,0,11075,11073,1,0,0,0,11075,11074,1,0,0,0,11076,
        1547,1,0,0,0,11077,11078,3,1168,584,0,11078,1549,1,0,0,0,11079,11083,
        1,0,0,0,11080,11081,5,43,0,0,11081,11083,3,558,279,0,11082,11079,
        1,0,0,0,11082,11080,1,0,0,0,11083,1551,1,0,0,0,11084,11088,1,0,0,
        0,11085,11086,5,77,0,0,11086,11088,5,78,0,0,11087,11084,1,0,0,0,
        11087,11085,1,0,0,0,11088,1553,1,0,0,0,11089,11094,1,0,0,0,11090,
        11091,3,1556,778,0,11091,11092,3,1736,868,0,11092,11094,1,0,0,0,
        11093,11089,1,0,0,0,11093,11090,1,0,0,0,11094,1555,1,0,0,0,11095,
        11098,3,1558,779,0,11096,11098,5,53,0,0,11097,11095,1,0,0,0,11097,
        11096,1,0,0,0,11098,1557,1,0,0,0,11099,11100,7,82,0,0,11100,1559,
        1,0,0,0,11101,11103,3,1562,781,0,11102,11101,1,0,0,0,11103,11106,
        1,0,0,0,11104,11102,1,0,0,0,11104,11105,1,0,0,0,11105,1561,1,0,0,
        0,11106,11104,1,0,0,0,11107,11108,3,1516,758,0,11108,11109,5,7,0,
        0,11109,11135,1,0,0,0,11110,11135,3,1628,814,0,11111,11135,3,1632,
        816,0,11112,11135,3,1570,785,0,11113,11135,3,1586,793,0,11114,11135,
        3,1592,796,0,11115,11135,3,1602,801,0,11116,11135,3,1604,802,0,11117,
        11135,3,1606,803,0,11118,11135,3,1620,810,0,11119,11135,3,1624,812,
        0,11120,11135,3,1644,822,0,11121,11135,3,1650,825,0,11122,11135,
        3,1652,826,0,11123,11135,3,1564,782,0,11124,11135,3,1566,783,0,11125,
        11135,3,1572,786,0,11126,11135,3,1660,830,0,11127,11135,3,1672,836,
        0,11128,11135,3,1680,840,0,11129,11135,3,1700,850,0,11130,11135,
        3,1702,851,0,11131,11135,3,1704,852,0,11132,11135,3,1706,853,0,11133,
        11135,3,1710,855,0,11134,11107,1,0,0,0,11134,11110,1,0,0,0,11134,
        11111,1,0,0,0,11134,11112,1,0,0,0,11134,11113,1,0,0,0,11134,11114,
        1,0,0,0,11134,11115,1,0,0,0,11134,11116,1,0,0,0,11134,11117,1,0,
        0,0,11134,11118,1,0,0,0,11134,11119,1,0,0,0,11134,11120,1,0,0,0,
        11134,11121,1,0,0,0,11134,11122,1,0,0,0,11134,11123,1,0,0,0,11134,
        11124,1,0,0,0,11134,11125,1,0,0,0,11134,11126,1,0,0,0,11134,11127,
        1,0,0,0,11134,11128,1,0,0,0,11134,11129,1,0,0,0,11134,11130,1,0,
        0,0,11134,11131,1,0,0,0,11134,11132,1,0,0,0,11134,11133,1,0,0,0,
        11135,1563,1,0,0,0,11136,11137,5,498,0,0,11137,11138,3,1740,870,
        0,11138,11139,5,7,0,0,11139,1565,1,0,0,0,11140,11141,5,433,0,0,11141,
        11147,3,1732,866,0,11142,11143,5,2,0,0,11143,11144,3,1568,784,0,
        11144,11145,5,3,0,0,11145,11146,5,7,0,0,11146,11148,1,0,0,0,11147,
        11142,1,0,0,0,11147,11148,1,0,0,0,11148,11157,1,0,0,0,11149,11150,
        5,57,0,0,11150,11151,3,1732,866,0,11151,11152,5,2,0,0,11152,11153,
        3,1568,784,0,11153,11154,5,3,0,0,11154,11155,5,7,0,0,11155,11157,
        1,0,0,0,11156,11140,1,0,0,0,11156,11149,1,0,0,0,11157,1567,1,0,0,
        0,11158,11161,1,0,0,0,11159,11161,3,1328,664,0,11160,11158,1,0,0,
        0,11160,11159,1,0,0,0,11161,1569,1,0,0,0,11162,11163,3,1584,792,
        0,11163,11164,3,1558,779,0,11164,11165,3,1736,868,0,11165,11166,
        5,7,0,0,11166,1571,1,0,0,0,11167,11168,5,499,0,0,11168,11169,3,1574,
        787,0,11169,11170,5,500,0,0,11170,11171,3,1576,788,0,11171,11172,
        5,7,0,0,11172,1573,1,0,0,0,11173,11177,1,0,0,0,11174,11177,5,434,
        0,0,11175,11177,5,501,0,0,11176,11173,1,0,0,0,11176,11174,1,0,0,
        0,11176,11175,1,0,0,0,11177,1575,1,0,0,0,11178,11183,3,1578,789,
        0,11179,11180,5,6,0,0,11180,11182,3,1578,789,0,11181,11179,1,0,0,
        0,11182,11185,1,0,0,0,11183,11181,1,0,0,0,11183,11184,1,0,0,0,11184,
        1577,1,0,0,0,11185,11183,1,0,0,0,11186,11187,3,1582,791,0,11187,
        11188,3,1558,779,0,11188,11189,3,1580,790,0,11189,1579,1,0,0,0,11190,
        11191,3,1474,737,0,11191,1581,1,0,0,0,11192,11193,3,1584,792,0,11193,
        1583,1,0,0,0,11194,11197,3,558,279,0,11195,11197,5,28,0,0,11196,
        11194,1,0,0,0,11196,11195,1,0,0,0,11197,11204,1,0,0,0,11198,11199,
        5,4,0,0,11199,11200,3,1742,871,0,11200,11201,5,5,0,0,11201,11203,
        1,0,0,0,11202,11198,1,0,0,0,11203,11206,1,0,0,0,11204,11202,1,0,
        0,0,11204,11205,1,0,0,0,11205,1585,1,0,0,0,11206,11204,1,0,0,0,11207,
        11208,5,220,0,0,11208,11209,3,1738,869,0,11209,11210,5,93,0,0,11210,
        11211,3,1560,780,0,11211,11212,3,1588,794,0,11212,11213,3,1590,795,
        0,11213,11214,5,454,0,0,11214,11215,5,220,0,0,11215,11216,5,7,0,
        0,11216,1587,1,0,0,0,11217,11218,5,502,0,0,11218,11219,3,1212,606,
        0,11219,11220,5,93,0,0,11220,11221,3,1560,780,0,11221,11223,1,0,
        0,0,11222,11217,1,0,0,0,11223,11226,1,0,0,0,11224,11222,1,0,0,0,
        11224,11225,1,0,0,0,11225,1589,1,0,0,0,11226,11224,1,0,0,0,11227,
        11231,1,0,0,0,11228,11229,5,58,0,0,11229,11231,3,1560,780,0,11230,
        11227,1,0,0,0,11230,11228,1,0,0,0,11231,1591,1,0,0,0,11232,11233,
        5,40,0,0,11233,11234,3,1594,797,0,11234,11235,3,1596,798,0,11235,
        11236,3,1600,800,0,11236,11237,5,454,0,0,11237,11238,5,40,0,0,11238,
        11239,5,7,0,0,11239,1593,1,0,0,0,11240,11243,1,0,0,0,11241,11243,
        3,1736,868,0,11242,11240,1,0,0,0,11242,11241,1,0,0,0,11243,1595,
        1,0,0,0,11244,11246,3,1598,799,0,11245,11244,1,0,0,0,11246,11247,
        1,0,0,0,11247,11245,1,0,0,0,11247,11248,1,0,0,0,11248,1597,1,0,0,
        0,11249,11250,5,102,0,0,11250,11251,3,1328,664,0,11251,11252,5,93,
        0,0,11252,11253,3,1560,780,0,11253,1599,1,0,0,0,11254,11258,1,0,
        0,0,11255,11256,5,58,0,0,11256,11258,3,1560,780,0,11257,11254,1,
        0,0,0,11257,11255,1,0,0,0,11258,1601,1,0,0,0,11259,11260,3,1726,
        863,0,11260,11261,3,1648,824,0,11261,1603,1,0,0,0,11262,11263,3,
        1726,863,0,11263,11264,5,503,0,0,11264,11265,3,1744,872,0,11265,
        11266,3,1648,824,0,11266,1605,1,0,0,0,11267,11268,3,1726,863,0,11268,
        11269,5,62,0,0,11269,11270,3,1608,804,0,11270,11271,3,1648,824,0,
        11271,1607,1,0,0,0,11272,11273,3,1618,809,0,11273,11289,5,68,0,0,
        11274,11275,3,994,497,0,11275,11276,3,1612,806,0,11276,11290,1,0,
        0,0,11277,11290,3,1000,500,0,11278,11290,3,926,463,0,11279,11280,
        5,202,0,0,11280,11281,3,1212,606,0,11281,11282,3,1610,805,0,11282,
        11290,1,0,0,0,11283,11284,3,1614,807,0,11284,11285,3,1212,606,0,
        11285,11286,5,24,0,0,11286,11287,3,1212,606,0,11287,11288,3,1616,
        808,0,11288,11290,1,0,0,0,11289,11274,1,0,0,0,11289,11277,1,0,0,
        0,11289,11278,1,0,0,0,11289,11279,1,0,0,0,11289,11283,1,0,0,0,11290,
        1609,1,0,0,0,11291,11295,1,0,0,0,11292,11293,5,100,0,0,11293,11295,
        3,1328,664,0,11294,11291,1,0,0,0,11294,11292,1,0,0,0,11295,1611,
        1,0,0,0,11296,11309,1,0,0,0,11297,11298,5,2,0,0,11298,11303,3,1212,
        606,0,11299,11300,5,6,0,0,11300,11302,3,1212,606,0,11301,11299,1,
        0,0,0,11302,11305,1,0,0,0,11303,11301,1,0,0,0,11303,11304,1,0,0,
        0,11304,11306,1,0,0,0,11305,11303,1,0,0,0,11306,11307,5,3,0,0,11307,
        11309,1,0,0,0,11308,11296,1,0,0,0,11308,11297,1,0,0,0,11309,1613,
        1,0,0,0,11310,11313,1,0,0,0,11311,11313,5,504,0,0,11312,11310,1,
        0,0,0,11312,11311,1,0,0,0,11313,1615,1,0,0,0,11314,11318,1,0,0,0,
        11315,11316,5,147,0,0,11316,11318,3,1212,606,0,11317,11314,1,0,0,
        0,11317,11315,1,0,0,0,11318,1617,1,0,0,0,11319,11320,3,552,276,0,
        11320,1619,1,0,0,0,11321,11322,3,1726,863,0,11322,11323,5,505,0,
        0,11323,11324,3,1618,809,0,11324,11325,3,1622,811,0,11325,11326,
        5,68,0,0,11326,11327,5,35,0,0,11327,11328,3,1212,606,0,11328,11329,
        3,1648,824,0,11329,1621,1,0,0,0,11330,11334,1,0,0,0,11331,11332,
        5,506,0,0,11332,11334,3,1456,728,0,11333,11330,1,0,0,0,11333,11331,
        1,0,0,0,11334,1623,1,0,0,0,11335,11336,3,1626,813,0,11336,11338,
        3,1728,864,0,11337,11339,3,1730,865,0,11338,11337,1,0,0,0,11338,
        11339,1,0,0,0,11339,11340,1,0,0,0,11340,11341,5,7,0,0,11341,1625,
        1,0,0,0,11342,11343,7,83,0,0,11343,1627,1,0,0,0,11344,11356,5,508,
        0,0,11345,11346,5,268,0,0,11346,11357,3,1736,868,0,11347,11353,5,
        509,0,0,11348,11349,5,202,0,0,11349,11350,3,1212,606,0,11350,11351,
        3,1610,805,0,11351,11354,1,0,0,0,11352,11354,3,1000,500,0,11353,
        11348,1,0,0,0,11353,11352,1,0,0,0,11354,11357,1,0,0,0,11355,11357,
        3,1630,815,0,11356,11345,1,0,0,0,11356,11347,1,0,0,0,11356,11355,
        1,0,0,0,11357,11358,1,0,0,0,11358,11359,5,7,0,0,11359,1629,1,0,0,
        0,11360,11363,1,0,0,0,11361,11363,3,1736,868,0,11362,11360,1,0,0,
        0,11362,11361,1,0,0,0,11363,1631,1,0,0,0,11364,11366,5,510,0,0,11365,
        11367,3,1634,817,0,11366,11365,1,0,0,0,11366,11367,1,0,0,0,11367,
        11368,1,0,0,0,11368,11369,3,1458,729,0,11369,11370,3,1636,818,0,
        11370,11371,3,1638,819,0,11371,11372,5,7,0,0,11372,11399,1,0,0,0,
        11373,11375,5,510,0,0,11374,11376,3,1634,817,0,11375,11374,1,0,0,
        0,11375,11376,1,0,0,0,11376,11377,1,0,0,0,11377,11378,3,1492,746,
        0,11378,11379,3,1638,819,0,11379,11380,5,7,0,0,11380,11399,1,0,0,
        0,11381,11383,5,510,0,0,11382,11384,3,1634,817,0,11383,11382,1,0,
        0,0,11383,11384,1,0,0,0,11384,11385,1,0,0,0,11385,11386,5,511,0,
        0,11386,11387,3,1458,729,0,11387,11388,3,1638,819,0,11388,11389,
        5,7,0,0,11389,11399,1,0,0,0,11390,11392,5,510,0,0,11391,11393,3,
        1634,817,0,11392,11391,1,0,0,0,11392,11393,1,0,0,0,11393,11394,1,
        0,0,0,11394,11395,3,1638,819,0,11395,11396,5,7,0,0,11396,11399,1,
        0,0,0,11397,11399,5,510,0,0,11398,11364,1,0,0,0,11398,11373,1,0,
        0,0,11398,11381,1,0,0,0,11398,11390,1,0,0,0,11398,11397,1,0,0,0,
        11399,1633,1,0,0,0,11400,11401,7,84,0,0,11401,1635,1,0,0,0,11402,
        11410,1,0,0,0,11403,11404,5,6,0,0,11404,11406,3,1212,606,0,11405,
        11403,1,0,0,0,11406,11407,1,0,0,0,11407,11405,1,0,0,0,11407,11408,
        1,0,0,0,11408,11410,1,0,0,0,11409,11402,1,0,0,0,11409,11405,1,0,
        0,0,11410,1637,1,0,0,0,11411,11415,1,0,0,0,11412,11413,5,100,0,0,
        11413,11415,3,1642,821,0,11414,11411,1,0,0,0,11414,11412,1,0,0,0,
        11415,1639,1,0,0,0,11416,11417,3,1492,746,0,11417,11418,5,10,0,0,
        11418,11419,3,1212,606,0,11419,1641,1,0,0,0,11420,11425,3,1640,820,
        0,11421,11422,5,6,0,0,11422,11424,3,1640,820,0,11423,11421,1,0,0,
        0,11424,11427,1,0,0,0,11425,11423,1,0,0,0,11425,11426,1,0,0,0,11426,
        1643,1,0,0,0,11427,11425,1,0,0,0,11428,11429,5,518,0,0,11429,11430,
        3,1736,868,0,11430,11431,3,1646,823,0,11431,11432,5,7,0,0,11432,
        1645,1,0,0,0,11433,11437,1,0,0,0,11434,11435,5,6,0,0,11435,11437,
        3,1736,868,0,11436,11433,1,0,0,0,11436,11434,1,0,0,0,11437,1647,
        1,0,0,0,11438,11439,5,519,0,0,11439,11440,3,1560,780,0,11440,11441,
        5,454,0,0,11441,11442,5,519,0,0,11442,11443,3,1728,864,0,11443,11444,
        5,7,0,0,11444,1649,1,0,0,0,11445,11446,3,1746,873,0,11446,11447,
        5,7,0,0,11447,1651,1,0,0,0,11448,11449,5,202,0,0,11449,11457,3,1212,
        606,0,11450,11451,3,1658,829,0,11451,11452,3,1654,827,0,11452,11458,
        1,0,0,0,11453,11454,3,1654,827,0,11454,11455,3,1658,829,0,11455,
        11458,1,0,0,0,11456,11458,1,0,0,0,11457,11450,1,0,0,0,11457,11453,
        1,0,0,0,11457,11456,1,0,0,0,11458,11459,1,0,0,0,11459,11460,5,7,
        0,0,11460,1653,1,0,0,0,11461,11465,1,0,0,0,11462,11463,5,100,0,0,
        11463,11465,3,1656,828,0,11464,11461,1,0,0,0,11464,11462,1,0,0,0,
        11465,1655,1,0,0,0,11466,11471,3,1212,606,0,11467,11468,5,6,0,0,
        11468,11470,3,1212,606,0,11469,11467,1,0,0,0,11470,11473,1,0,0,0,
        11471,11469,1,0,0,0,11471,11472,1,0,0,0,11472,1657,1,0,0,0,11473,
        11471,1,0,0,0,11474,11481,1,0,0,0,11475,11477,5,71,0,0,11476,11478,
        5,346,0,0,11477,11476,1,0,0,0,11477,11478,1,0,0,0,11478,11479,1,
        0,0,0,11479,11481,3,1674,837,0,11480,11474,1,0,0,0,11480,11475,1,
        0,0,0,11481,1659,1,0,0,0,11482,11500,5,520,0,0,11483,11484,3,1712,
        856,0,11484,11485,3,1668,834,0,11485,11491,5,62,0,0,11486,11492,
        3,1000,500,0,11487,11488,5,202,0,0,11488,11489,3,1736,868,0,11489,
        11490,3,1666,833,0,11490,11492,1,0,0,0,11491,11486,1,0,0,0,11491,
        11487,1,0,0,0,11492,11501,1,0,0,0,11493,11498,3,1474,737,0,11494,
        11495,5,2,0,0,11495,11496,3,1664,832,0,11496,11497,5,3,0,0,11497,
        11499,1,0,0,0,11498,11494,1,0,0,0,11498,11499,1,0,0,0,11499,11501,
        1,0,0,0,11500,11483,1,0,0,0,11500,11493,1,0,0,0,11501,11502,1,0,
        0,0,11502,11503,5,7,0,0,11503,1661,1,0,0,0,11504,11505,3,1474,737,
        0,11505,11506,5,20,0,0,11506,11507,3,1212,606,0,11507,11510,1,0,
        0,0,11508,11510,3,1212,606,0,11509,11504,1,0,0,0,11509,11508,1,0,
        0,0,11510,1663,1,0,0,0,11511,11516,3,1662,831,0,11512,11513,5,6,
        0,0,11513,11515,3,1662,831,0,11514,11512,1,0,0,0,11515,11518,1,0,
        0,0,11516,11514,1,0,0,0,11516,11517,1,0,0,0,11517,1665,1,0,0,0,11518,
        11516,1,0,0,0,11519,11523,1,0,0,0,11520,11521,5,100,0,0,11521,11523,
        3,1328,664,0,11522,11519,1,0,0,0,11522,11520,1,0,0,0,11523,1667,
        1,0,0,0,11524,11529,1,0,0,0,11525,11526,3,1670,835,0,11526,11527,
        5,324,0,0,11527,11529,1,0,0,0,11528,11524,1,0,0,0,11528,11525,1,
        0,0,0,11529,1669,1,0,0,0,11530,11533,1,0,0,0,11531,11533,5,269,0,
        0,11532,11530,1,0,0,0,11532,11531,1,0,0,0,11533,1671,1,0,0,0,11534,
        11536,5,61,0,0,11535,11537,3,1678,839,0,11536,11535,1,0,0,0,11536,
        11537,1,0,0,0,11537,11538,1,0,0,0,11538,11539,3,1676,838,0,11539,
        11540,3,1712,856,0,11540,11541,5,71,0,0,11541,11542,3,1674,837,0,
        11542,11543,5,7,0,0,11543,1673,1,0,0,0,11544,11545,3,1328,664,0,
        11545,1675,1,0,0,0,11546,11550,1,0,0,0,11547,11550,5,64,0,0,11548,
        11550,5,68,0,0,11549,11546,1,0,0,0,11549,11547,1,0,0,0,11549,11548,
        1,0,0,0,11550,1677,1,0,0,0,11551,11567,5,268,0,0,11552,11567,5,293,
        0,0,11553,11567,5,207,0,0,11554,11567,5,249,0,0,11555,11556,5,130,
        0,0,11556,11567,3,1212,606,0,11557,11558,5,307,0,0,11558,11567,3,
        1212,606,0,11559,11567,3,1212,606,0,11560,11567,5,30,0,0,11561,11564,
        7,85,0,0,11562,11565,3,1212,606,0,11563,11565,5,30,0,0,11564,11562,
        1,0,0,0,11564,11563,1,0,0,0,11564,11565,1,0,0,0,11565,11567,1,0,
        0,0,11566,11551,1,0,0,0,11566,11552,1,0,0,0,11566,11553,1,0,0,0,
        11566,11554,1,0,0,0,11566,11555,1,0,0,0,11566,11557,1,0,0,0,11566,
        11559,1,0,0,0,11566,11560,1,0,0,0,11566,11561,1,0,0,0,11567,1679,
        1,0,0,0,11568,11570,5,265,0,0,11569,11571,3,1678,839,0,11570,11569,
        1,0,0,0,11570,11571,1,0,0,0,11571,11572,1,0,0,0,11572,11573,3,1712,
        856,0,11573,11574,5,7,0,0,11574,1681,1,0,0,0,11575,11577,3,1014,
        507,0,11576,11575,1,0,0,0,11576,11577,1,0,0,0,11577,11578,1,0,0,
        0,11578,11579,5,525,0,0,11579,11581,5,71,0,0,11580,11582,5,81,0,
        0,11581,11580,1,0,0,0,11581,11582,1,0,0,0,11582,11583,1,0,0,0,11583,
        11585,3,1406,703,0,11584,11586,5,9,0,0,11585,11584,1,0,0,0,11585,
        11586,1,0,0,0,11586,11591,1,0,0,0,11587,11589,5,36,0,0,11588,11587,
        1,0,0,0,11588,11589,1,0,0,0,11589,11590,1,0,0,0,11590,11592,3,1474,
        737,0,11591,11588,1,0,0,0,11591,11592,1,0,0,0,11592,11593,1,0,0,
        0,11593,11594,5,100,0,0,11594,11595,3,1684,842,0,11595,11596,5,80,
        0,0,11596,11598,3,1686,843,0,11597,11599,3,1688,844,0,11598,11597,
        1,0,0,0,11599,11600,1,0,0,0,11600,11598,1,0,0,0,11600,11601,1,0,
        0,0,11601,1683,1,0,0,0,11602,11604,5,81,0,0,11603,11602,1,0,0,0,
        11603,11604,1,0,0,0,11604,11605,1,0,0,0,11605,11607,3,1406,703,0,
        11606,11608,5,9,0,0,11607,11606,1,0,0,0,11607,11608,1,0,0,0,11608,
        11614,1,0,0,0,11609,11612,3,1004,502,0,11610,11612,3,1100,550,0,
        11611,11609,1,0,0,0,11611,11610,1,0,0,0,11612,11614,1,0,0,0,11613,
        11603,1,0,0,0,11613,11611,1,0,0,0,11614,11619,1,0,0,0,11615,11617,
        5,36,0,0,11616,11615,1,0,0,0,11616,11617,1,0,0,0,11617,11618,1,0,
        0,0,11618,11620,3,1474,737,0,11619,11616,1,0,0,0,11619,11620,1,0,
        0,0,11620,1685,1,0,0,0,11621,11622,3,1212,606,0,11622,1687,1,0,0,
        0,11623,11624,5,102,0,0,11624,11627,5,526,0,0,11625,11626,5,33,0,
        0,11626,11628,3,1212,606,0,11627,11625,1,0,0,0,11627,11628,1,0,0,
        0,11628,11629,1,0,0,0,11629,11634,5,93,0,0,11630,11635,3,1692,846,
        0,11631,11635,5,182,0,0,11632,11633,5,57,0,0,11633,11635,5,270,0,
        0,11634,11630,1,0,0,0,11634,11631,1,0,0,0,11634,11632,1,0,0,0,11635,
        11650,1,0,0,0,11636,11637,5,102,0,0,11637,11638,5,77,0,0,11638,11641,
        5,526,0,0,11639,11640,5,33,0,0,11640,11642,3,1212,606,0,11641,11639,
        1,0,0,0,11641,11642,1,0,0,0,11642,11643,1,0,0,0,11643,11647,5,93,
        0,0,11644,11648,3,1690,845,0,11645,11646,5,57,0,0,11646,11648,5,
        270,0,0,11647,11644,1,0,0,0,11647,11645,1,0,0,0,11648,11650,1,0,
        0,0,11649,11623,1,0,0,0,11649,11636,1,0,0,0,11650,1689,1,0,0,0,11651,
        11656,5,241,0,0,11652,11653,5,2,0,0,11653,11654,3,244,122,0,11654,
        11655,5,3,0,0,11655,11657,1,0,0,0,11656,11652,1,0,0,0,11656,11657,
        1,0,0,0,11657,11661,1,0,0,0,11658,11659,5,463,0,0,11659,11660,7,
        53,0,0,11660,11662,5,450,0,0,11661,11658,1,0,0,0,11661,11662,1,0,
        0,0,11662,11663,1,0,0,0,11663,11664,3,1694,847,0,11664,1691,1,0,
        0,0,11665,11666,5,369,0,0,11666,11679,5,333,0,0,11667,11668,3,1432,
        716,0,11668,11669,5,10,0,0,11669,11670,3,1698,849,0,11670,11680,
        1,0,0,0,11671,11672,5,2,0,0,11672,11673,3,244,122,0,11673,11674,
        5,3,0,0,11674,11675,5,10,0,0,11675,11676,5,2,0,0,11676,11677,3,1696,
        848,0,11677,11678,5,3,0,0,11678,11680,1,0,0,0,11679,11667,1,0,0,
        0,11679,11671,1,0,0,0,11680,11681,1,0,0,0,11681,11679,1,0,0,0,11681,
        11682,1,0,0,0,11682,1693,1,0,0,0,11683,11684,5,422,0,0,11684,11688,
        3,1696,848,0,11685,11686,5,53,0,0,11686,11688,5,422,0,0,11687,11683,
        1,0,0,0,11687,11685,1,0,0,0,11688,1695,1,0,0,0,11689,11690,5,2,0,
        0,11690,11695,3,1698,849,0,11691,11692,5,6,0,0,11692,11694,3,1698,
        849,0,11693,11691,1,0,0,0,11694,11697,1,0,0,0,11695,11693,1,0,0,
        0,11695,11696,1,0,0,0,11696,11698,1,0,0,0,11697,11695,1,0,0,0,11698,
        11699,5,3,0,0,11699,1697,1,0,0,0,11700,11703,3,1048,524,0,11701,
        11703,5,53,0,0,11702,11700,1,0,0,0,11702,11701,1,0,0,0,11703,1699,
        1,0,0,0,11704,11705,5,157,0,0,11705,11706,3,1712,856,0,11706,11707,
        5,7,0,0,11707,1701,1,0,0,0,11708,11709,5,78,0,0,11709,11710,5,7,
        0,0,11710,1703,1,0,0,0,11711,11713,5,161,0,0,11712,11714,3,1708,
        854,0,11713,11712,1,0,0,0,11713,11714,1,0,0,0,11714,11715,1,0,0,
        0,11715,11716,5,7,0,0,11716,1705,1,0,0,0,11717,11719,5,319,0,0,11718,
        11720,3,1708,854,0,11719,11718,1,0,0,0,11719,11720,1,0,0,0,11720,
        11721,1,0,0,0,11721,11722,5,7,0,0,11722,1707,1,0,0,0,11723,11725,
        5,33,0,0,11724,11726,5,269,0,0,11725,11724,1,0,0,0,11725,11726,1,
        0,0,0,11726,11727,1,0,0,0,11727,11728,5,153,0,0,11728,1709,1,0,0,
        0,11729,11730,5,333,0,0,11730,11731,3,558,279,0,11731,11732,5,94,
        0,0,11732,11733,5,53,0,0,11733,11734,5,7,0,0,11734,11742,1,0,0,0,
        11735,11738,5,313,0,0,11736,11739,3,558,279,0,11737,11739,5,30,0,
        0,11738,11736,1,0,0,0,11738,11737,1,0,0,0,11739,11740,1,0,0,0,11740,
        11742,5,7,0,0,11741,11729,1,0,0,0,11741,11735,1,0,0,0,11742,1711,
        1,0,0,0,11743,11746,3,1474,737,0,11744,11746,5,28,0,0,11745,11743,
        1,0,0,0,11745,11744,1,0,0,0,11746,1713,1,0,0,0,11747,11751,1,0,0,
        0,11748,11749,5,517,0,0,11749,11751,3,1716,858,0,11750,11747,1,0,
        0,0,11750,11748,1,0,0,0,11751,1715,1,0,0,0,11752,11754,3,1718,859,
        0,11753,11752,1,0,0,0,11754,11755,1,0,0,0,11755,11753,1,0,0,0,11755,
        11756,1,0,0,0,11756,1717,1,0,0,0,11757,11758,5,102,0,0,11758,11759,
        3,1720,860,0,11759,11760,5,93,0,0,11760,11761,3,1560,780,0,11761,
        1719,1,0,0,0,11762,11767,3,1722,861,0,11763,11764,5,82,0,0,11764,
        11766,3,1722,861,0,11765,11763,1,0,0,0,11766,11769,1,0,0,0,11767,
        11765,1,0,0,0,11767,11768,1,0,0,0,11768,1721,1,0,0,0,11769,11767,
        1,0,0,0,11770,11774,3,1732,866,0,11771,11772,5,511,0,0,11772,11774,
        3,1458,729,0,11773,11770,1,0,0,0,11773,11771,1,0,0,0,11774,1723,
        1,0,0,0,11775,11778,1,0,0,0,11776,11778,3,1524,762,0,11777,11775,
        1,0,0,0,11777,11776,1,0,0,0,11778,1725,1,0,0,0,11779,11782,1,0,0,
        0,11780,11782,3,1524,762,0,11781,11779,1,0,0,0,11781,11780,1,0,0,
        0,11782,1727,1,0,0,0,11783,11786,1,0,0,0,11784,11786,3,1732,866,
        0,11785,11783,1,0,0,0,11785,11784,1,0,0,0,11786,1729,1,0,0,0,11787,
        11788,5,102,0,0,11788,11789,3,1740,870,0,11789,1731,1,0,0,0,11790,
        11793,3,1474,737,0,11791,11793,3,1734,867,0,11792,11790,1,0,0,0,
        11792,11791,1,0,0,0,11793,1733,1,0,0,0,11794,11795,7,86,0,0,11795,
        1735,1,0,0,0,11796,11798,3,1384,692,0,11797,11796,1,0,0,0,11797,
        11798,1,0,0,0,11798,11800,1,0,0,0,11799,11801,3,1028,514,0,11800,
        11799,1,0,0,0,11800,11801,1,0,0,0,11801,11803,1,0,0,0,11802,11804,
        3,1102,551,0,11803,11802,1,0,0,0,11803,11804,1,0,0,0,11804,11806,
        1,0,0,0,11805,11807,3,1144,572,0,11806,11805,1,0,0,0,11806,11807,
        1,0,0,0,11807,11809,1,0,0,0,11808,11810,3,1072,536,0,11809,11808,
        1,0,0,0,11809,11810,1,0,0,0,11810,11812,1,0,0,0,11811,11813,3,1086,
        543,0,11812,11811,1,0,0,0,11812,11813,1,0,0,0,11813,11815,1,0,0,
        0,11814,11816,3,1288,644,0,11815,11814,1,0,0,0,11815,11816,1,0,0,
        0,11816,1737,1,0,0,0,11817,11818,3,1736,868,0,11818,1739,1,0,0,0,
        11819,11820,3,1736,868,0,11820,1741,1,0,0,0,11821,11822,3,1212,606,
        0,11822,1743,1,0,0,0,11823,11824,3,1212,606,0,11824,1745,1,0,0,0,
        11825,11827,3,6,3,0,11826,11828,3,1748,874,0,11827,11826,1,0,0,0,
        11827,11828,1,0,0,0,11828,1747,1,0,0,0,11829,11830,5,71,0,0,11830,
        11831,3,1030,515,0,11831,11832,3,1674,837,0,11832,1749,1,0,0,0,1282,
        1753,1762,1881,1885,1894,1903,1909,1915,1947,1959,1965,1973,1981,
        1987,1996,2002,2014,2020,2026,2033,2037,2042,2046,2059,2070,2076,
        2092,2095,2100,2106,2111,2120,2124,2136,2140,2143,2147,2158,2176,
        2183,2191,2196,2203,2209,2215,2222,2233,2237,2241,2245,2258,2262,
        2267,2272,2284,2293,2305,2310,2321,2327,2332,2342,2347,2354,2359,
        2364,2375,2381,2386,2394,2403,2418,2424,2430,2435,2442,2454,2462,
        2470,2488,2497,2511,2515,2530,2538,2548,2588,2591,2595,2599,2602,
        2607,2614,2623,2629,2633,2642,2650,2659,2668,2672,2679,2685,2689,
        2693,2698,2701,2705,2711,2718,2734,2748,2758,2760,2765,2769,2772,
        2778,2780,2808,2818,2831,2838,2843,2847,2853,2858,2861,2863,2868,
        2872,2876,2880,2884,2887,2891,2899,2903,2907,2916,2923,2928,2935,
        2940,2947,2952,2970,2975,2987,2992,3001,3008,3015,3019,3024,3028,
        3031,3034,3037,3040,3043,3048,3051,3054,3057,3060,3063,3069,3073,
        3076,3079,3082,3085,3087,3096,3111,3119,3125,3129,3134,3137,3140,
        3144,3148,3162,3167,3174,3179,3183,3186,3190,3193,3195,3202,3205,
        3209,3215,3218,3225,3234,3241,3246,3249,3252,3255,3259,3266,3271,
        3284,3294,3307,3310,3313,3320,3328,3331,3334,3341,3345,3351,3354,
        3357,3360,3372,3375,3378,3382,3400,3408,3424,3435,3450,3467,3469,
        3490,3495,3498,3502,3505,3511,3514,3516,3527,3536,3542,3545,3548,
        3562,3565,3568,3573,3581,3590,3594,3600,3604,3607,3610,3613,3616,
        3622,3626,3631,3637,3641,3644,3647,3650,3658,3662,3666,3670,3674,
        3679,3693,3702,3719,3724,3727,3729,3739,3746,3751,3754,3757,3764,
        3767,3769,3775,3784,3794,3799,3807,3811,3818,3828,3839,3947,3955,
        3958,3968,3973,3983,3994,4006,4019,4029,4041,4045,4048,4055,4063,
        4073,4075,4081,4086,4090,4095,4101,4108,4114,4116,4123,4131,4136,
        4147,4154,4158,4175,4178,4181,4184,4187,4195,4198,4201,4207,4215,
        4219,4231,4237,4240,4245,4249,4256,4267,4290,4310,4319,4322,4325,
        4335,4338,4347,4351,4354,4362,4368,4372,4383,4393,4401,4406,4418,
        4435,4439,4445,4452,4460,4474,4500,4507,4521,4532,4535,4548,4557,
        4582,4593,4635,4643,4649,4660,4666,4674,4685,4699,4708,4713,4724,
        4735,4743,4753,4760,4763,4769,4772,4787,4800,4829,4836,4851,4863,
        4867,4872,4876,4881,4885,4891,4895,4900,4904,4910,4914,4919,4923,
        4928,4932,4937,4941,4948,4952,4959,4963,4970,4974,4981,4985,4991,
        4995,5001,5005,5010,5014,5021,5025,5029,5033,5037,5042,5046,5051,
        5055,5060,5064,5069,5075,5080,5086,5091,5097,5102,5106,5111,5115,
        5121,5125,5130,5138,5144,5150,5156,5162,5169,5174,5178,5183,5187,
        5192,5198,5205,5210,5217,5227,5231,5237,5239,5246,5250,5255,5273,
        5288,5306,5315,5324,5328,5334,5341,5346,5353,5358,5361,5364,5368,
        5439,5535,5539,5544,5555,5566,5577,5588,5599,5611,5622,5633,5643,
        5650,5657,5663,5671,5676,5681,5686,5692,5699,5705,5711,5716,5722,
        5729,5734,5740,5747,5750,5763,5772,5784,5786,5804,5811,5821,5826,
        5830,5834,5838,5840,5900,5907,5913,5924,5927,5934,5937,5947,5950,
        5952,5971,5983,5992,6001,6013,6015,6021,6025,6028,6031,6036,6042,
        6045,6048,6051,6054,6070,6074,6077,6080,6083,6086,6091,6094,6096,
        6109,6121,6135,6139,6145,6155,6157,6162,6170,6180,6189,6197,6206,
        6208,6215,6224,6226,6233,6242,6244,6248,6257,6262,6268,6273,6277,
        6282,6300,6305,6320,6329,6340,6346,6383,6403,6410,6421,6435,6442,
        6450,6455,6462,6466,6471,6475,6480,6484,6486,6491,6495,6500,6504,
        6528,6535,6545,6557,6562,6575,6587,6599,6601,6607,6614,6659,6677,
        6681,6686,6689,6693,6698,6703,6706,6713,6730,6801,6832,6886,6896,
        6906,6917,6927,6938,6948,6953,6962,6967,6977,6982,6991,7004,7009,
        7121,7123,7132,7143,7154,7167,7179,7190,7197,7287,7340,7350,7361,
        7372,7386,7401,7412,7419,7473,7614,7620,7623,7633,7673,7683,7690,
        7713,7722,7731,7740,7773,7777,7787,7791,7801,7804,7808,7812,7820,
        7831,7843,7847,7850,7854,7857,7862,7866,7869,7875,7886,7889,7896,
        7900,7905,7908,7910,7924,7928,7933,7940,7947,7950,7955,7958,7967,
        7969,7974,7978,7990,7993,8000,8004,8009,8019,8029,8032,8035,8037,
        8043,8050,8070,8090,8094,8099,8168,8173,8179,8192,8196,8200,8206,
        8208,8216,8226,8229,8232,8235,8238,8245,8248,8250,8254,8257,8264,
        8266,8273,8280,8284,8288,8297,8303,8307,8311,8316,8328,8335,8345,
        8358,8369,8376,8381,8385,8389,8394,8407,8412,8416,8420,8427,8430,
        8432,8440,8444,8447,8454,8457,8462,8468,8474,8478,8487,8496,8503,
        8506,8512,8517,8523,8529,8532,8535,8542,8546,8549,8564,8567,8574,
        8577,8584,8587,8590,8597,8609,8616,8618,8628,8646,8648,8656,8660,
        8670,8674,8678,8682,8684,8689,8693,8697,8699,8701,8705,8709,8712,
        8715,8718,8721,8723,8726,8729,8732,8735,8738,8741,8750,8752,8757,
        8761,8767,8771,8775,8784,8789,8793,8799,8802,8821,8829,8838,8842,
        8845,8849,8854,8860,8872,8887,8894,8897,8901,8905,8909,8911,8919,
        8928,8934,8936,8943,8947,8956,8960,8969,8978,8990,9018,9025,9029,
        9032,9037,9041,9044,9060,9071,9076,9079,9082,9086,9090,9094,9099,
        9103,9107,9109,9118,9123,9129,9133,9135,9142,9147,9153,9155,9159,
        9166,9173,9176,9182,9186,9195,9198,9202,9210,9216,9218,9221,9225,
        9228,9231,9235,9239,9245,9248,9257,9264,9266,9273,9281,9286,9289,
        9297,9306,9314,9316,9320,9327,9346,9355,9361,9380,9389,9395,9399,
        9404,9414,9421,9430,9433,9442,9444,9450,9454,9459,9469,9475,9477,
        9483,9487,9490,9503,9509,9513,9517,9520,9528,9532,9536,9544,9551,
        9558,9562,9568,9570,9579,9582,9592,9608,9614,9619,9626,9635,9642,
        9650,9658,9663,9667,9670,9676,9681,9697,9700,9702,9714,9716,9720,
        9728,9730,9734,9736,9744,9748,9757,9765,9771,9774,9783,9788,9795,
        9805,9831,9842,9844,9846,9854,9876,9885,9895,9898,9903,9908,9912,
        9915,9919,9922,9925,9928,9932,9946,9953,9960,9967,9985,9993,10005,
        10011,10024,10063,10065,10085,10095,10106,10118,10125,10137,10149,
        10155,10163,10180,10205,10215,10219,10222,10225,10228,10241,10246,
        10251,10253,10261,10270,10279,10284,10293,10298,10312,10322,10330,
        10344,10351,10359,10367,10375,10379,10386,10394,10401,10407,10416,
        10431,10442,10475,10484,10491,10495,10499,10506,10520,10525,10530,
        10534,10536,10539,10546,10551,10561,10569,10572,10579,10587,10595,
        10603,10611,10616,10620,10624,10628,10632,10636,10640,10647,10655,
        10660,10664,10668,10678,10684,10690,10694,10708,10714,10720,10732,
        10737,10745,10752,10757,10769,10777,10782,10792,10803,10810,10817,
        10828,10831,10833,10837,10840,10846,10852,10856,10862,10870,10874,
        10882,10939,10952,10975,10983,10987,10999,11001,11008,11017,11035,
        11043,11052,11059,11069,11075,11082,11087,11093,11097,11104,11134,
        11147,11156,11160,11176,11183,11196,11204,11224,11230,11242,11247,
        11257,11289,11294,11303,11308,11312,11317,11333,11338,11353,11356,
        11362,11366,11375,11383,11392,11398,11407,11409,11414,11425,11436,
        11457,11464,11471,11477,11480,11491,11498,11500,11509,11516,11522,
        11528,11532,11536,11549,11564,11566,11570,11576,11581,11585,11588,
        11591,11600,11603,11607,11611,11613,11616,11619,11627,11634,11641,
        11647,11649,11656,11661,11679,11681,11687,11695,11702,11713,11719,
        11725,11738,11741,11745,11750,11755,11767,11773,11777,11781,11785,
        11792,11797,11800,11803,11806,11809,11812,11815,11827
    ];

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

        return PostgreSqlParser.__ATN;
    }


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

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

    private static readonly decisionsToDFA = PostgreSqlParser._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(PostgreSqlParser.EOF, 0)!;
    }
    public singleStmt(): SingleStmtContext[];
    public singleStmt(i: number): SingleStmtContext | null;
    public singleStmt(i?: number): SingleStmtContext[] | SingleStmtContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SingleStmtContext);
        }

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


export class PlsqlrootContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public pl_function(): Pl_functionContext {
        return this.getRuleContext(0, Pl_functionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_plsqlroot;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPlsqlroot) {
             listener.enterPlsqlroot(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPlsqlroot) {
             listener.exitPlsqlroot(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPlsqlroot) {
            return visitor.visitPlsqlroot(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SingleStmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public stmt(): StmtContext {
        return this.getRuleContext(0, StmtContext)!;
    }
    public SEMI(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.SEMI, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_singleStmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSingleStmt) {
             listener.enterSingleStmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSingleStmt) {
             listener.exitSingleStmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSingleStmt) {
            return visitor.visitSingleStmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public altereventtrigstmt(): AltereventtrigstmtContext | null {
        return this.getRuleContext(0, AltereventtrigstmtContext);
    }
    public altercollationstmt(): AltercollationstmtContext | null {
        return this.getRuleContext(0, AltercollationstmtContext);
    }
    public alterdatabasestmt(): AlterdatabasestmtContext | null {
        return this.getRuleContext(0, AlterdatabasestmtContext);
    }
    public alterdatabasesetstmt(): AlterdatabasesetstmtContext | null {
        return this.getRuleContext(0, AlterdatabasesetstmtContext);
    }
    public alterdefaultprivilegesstmt(): AlterdefaultprivilegesstmtContext | null {
        return this.getRuleContext(0, AlterdefaultprivilegesstmtContext);
    }
    public alterdomainstmt(): AlterdomainstmtContext | null {
        return this.getRuleContext(0, AlterdomainstmtContext);
    }
    public alterenumstmt(): AlterenumstmtContext | null {
        return this.getRuleContext(0, AlterenumstmtContext);
    }
    public alterextensionstmt(): AlterextensionstmtContext | null {
        return this.getRuleContext(0, AlterextensionstmtContext);
    }
    public alterextensioncontentsstmt(): AlterextensioncontentsstmtContext | null {
        return this.getRuleContext(0, AlterextensioncontentsstmtContext);
    }
    public alterfdwstmt(): AlterfdwstmtContext | null {
        return this.getRuleContext(0, AlterfdwstmtContext);
    }
    public alterforeignserverstmt(): AlterforeignserverstmtContext | null {
        return this.getRuleContext(0, AlterforeignserverstmtContext);
    }
    public alterfunctionstmt(): AlterfunctionstmtContext | null {
        return this.getRuleContext(0, AlterfunctionstmtContext);
    }
    public altergroupstmt(): AltergroupstmtContext | null {
        return this.getRuleContext(0, AltergroupstmtContext);
    }
    public alterobjectdependsstmt(): AlterobjectdependsstmtContext | null {
        return this.getRuleContext(0, AlterobjectdependsstmtContext);
    }
    public alterobjectschemastmt(): AlterobjectschemastmtContext | null {
        return this.getRuleContext(0, AlterobjectschemastmtContext);
    }
    public alterownerstmt(): AlterownerstmtContext | null {
        return this.getRuleContext(0, AlterownerstmtContext);
    }
    public alteroperatorstmt(): AlteroperatorstmtContext | null {
        return this.getRuleContext(0, AlteroperatorstmtContext);
    }
    public altertypestmt(): AltertypestmtContext | null {
        return this.getRuleContext(0, AltertypestmtContext);
    }
    public alterpolicystmt(): AlterpolicystmtContext | null {
        return this.getRuleContext(0, AlterpolicystmtContext);
    }
    public alterprocedurestmt(): AlterprocedurestmtContext | null {
        return this.getRuleContext(0, AlterprocedurestmtContext);
    }
    public alterseqstmt(): AlterseqstmtContext | null {
        return this.getRuleContext(0, AlterseqstmtContext);
    }
    public altersystemstmt(): AltersystemstmtContext | null {
        return this.getRuleContext(0, AltersystemstmtContext);
    }
    public altertablestmt(): AltertablestmtContext | null {
        return this.getRuleContext(0, AltertablestmtContext);
    }
    public altertblspcstmt(): AltertblspcstmtContext | null {
        return this.getRuleContext(0, AltertblspcstmtContext);
    }
    public altercompositetypestmt(): AltercompositetypestmtContext | null {
        return this.getRuleContext(0, AltercompositetypestmtContext);
    }
    public alterpublicationstmt(): AlterpublicationstmtContext | null {
        return this.getRuleContext(0, AlterpublicationstmtContext);
    }
    public alterrolesetstmt(): AlterrolesetstmtContext | null {
        return this.getRuleContext(0, AlterrolesetstmtContext);
    }
    public alterroutinestmt(): AlterroutinestmtContext | null {
        return this.getRuleContext(0, AlterroutinestmtContext);
    }
    public alterrolestmt(): AlterrolestmtContext | null {
        return this.getRuleContext(0, AlterrolestmtContext);
    }
    public altersubscriptionstmt(): AltersubscriptionstmtContext | null {
        return this.getRuleContext(0, AltersubscriptionstmtContext);
    }
    public alterstatsstmt(): AlterstatsstmtContext | null {
        return this.getRuleContext(0, AlterstatsstmtContext);
    }
    public altertsconfigurationstmt(): AltertsconfigurationstmtContext | null {
        return this.getRuleContext(0, AltertsconfigurationstmtContext);
    }
    public altertsdictionarystmt(): AltertsdictionarystmtContext | null {
        return this.getRuleContext(0, AltertsdictionarystmtContext);
    }
    public alterusermappingstmt(): AlterusermappingstmtContext | null {
        return this.getRuleContext(0, AlterusermappingstmtContext);
    }
    public analyzestmt(): AnalyzestmtContext | null {
        return this.getRuleContext(0, AnalyzestmtContext);
    }
    public callstmt(): CallstmtContext | null {
        return this.getRuleContext(0, CallstmtContext);
    }
    public checkpointstmt(): CheckpointstmtContext | null {
        return this.getRuleContext(0, CheckpointstmtContext);
    }
    public closeportalstmt(): CloseportalstmtContext | null {
        return this.getRuleContext(0, CloseportalstmtContext);
    }
    public clusterstmt(): ClusterstmtContext | null {
        return this.getRuleContext(0, ClusterstmtContext);
    }
    public commentstmt(): CommentstmtContext | null {
        return this.getRuleContext(0, CommentstmtContext);
    }
    public constraintssetstmt(): ConstraintssetstmtContext | null {
        return this.getRuleContext(0, ConstraintssetstmtContext);
    }
    public copystmt(): CopystmtContext | null {
        return this.getRuleContext(0, CopystmtContext);
    }
    public createamstmt(): CreateamstmtContext | null {
        return this.getRuleContext(0, CreateamstmtContext);
    }
    public createasstmt(): CreateasstmtContext | null {
        return this.getRuleContext(0, CreateasstmtContext);
    }
    public createassertionstmt(): CreateassertionstmtContext | null {
        return this.getRuleContext(0, CreateassertionstmtContext);
    }
    public createcaststmt(): CreatecaststmtContext | null {
        return this.getRuleContext(0, CreatecaststmtContext);
    }
    public createconversionstmt(): CreateconversionstmtContext | null {
        return this.getRuleContext(0, CreateconversionstmtContext);
    }
    public createdomainstmt(): CreatedomainstmtContext | null {
        return this.getRuleContext(0, CreatedomainstmtContext);
    }
    public createextensionstmt(): CreateextensionstmtContext | null {
        return this.getRuleContext(0, CreateextensionstmtContext);
    }
    public createfdwstmt(): CreatefdwstmtContext | null {
        return this.getRuleContext(0, CreatefdwstmtContext);
    }
    public createforeignserverstmt(): CreateforeignserverstmtContext | null {
        return this.getRuleContext(0, CreateforeignserverstmtContext);
    }
    public createforeigntablestmt(): CreateforeigntablestmtContext | null {
        return this.getRuleContext(0, CreateforeigntablestmtContext);
    }
    public createfunctionstmt(): CreatefunctionstmtContext | null {
        return this.getRuleContext(0, CreatefunctionstmtContext);
    }
    public creategroupstmt(): CreategroupstmtContext | null {
        return this.getRuleContext(0, CreategroupstmtContext);
    }
    public creatematviewstmt(): CreatematviewstmtContext | null {
        return this.getRuleContext(0, CreatematviewstmtContext);
    }
    public createopclassstmt(): CreateopclassstmtContext | null {
        return this.getRuleContext(0, CreateopclassstmtContext);
    }
    public createopfamilystmt(): CreateopfamilystmtContext | null {
        return this.getRuleContext(0, CreateopfamilystmtContext);
    }
    public createpublicationstmt(): CreatepublicationstmtContext | null {
        return this.getRuleContext(0, CreatepublicationstmtContext);
    }
    public alteropfamilystmt(): AlteropfamilystmtContext | null {
        return this.getRuleContext(0, AlteropfamilystmtContext);
    }
    public createpolicystmt(): CreatepolicystmtContext | null {
        return this.getRuleContext(0, CreatepolicystmtContext);
    }
    public createplangstmt(): CreateplangstmtContext | null {
        return this.getRuleContext(0, CreateplangstmtContext);
    }
    public createschemastmt(): CreateschemastmtContext | null {
        return this.getRuleContext(0, CreateschemastmtContext);
    }
    public createseqstmt(): CreateseqstmtContext | null {
        return this.getRuleContext(0, CreateseqstmtContext);
    }
    public createstmt(): CreatestmtContext | null {
        return this.getRuleContext(0, CreatestmtContext);
    }
    public createsubscriptionstmt(): CreatesubscriptionstmtContext | null {
        return this.getRuleContext(0, CreatesubscriptionstmtContext);
    }
    public createstatsstmt(): CreatestatsstmtContext | null {
        return this.getRuleContext(0, CreatestatsstmtContext);
    }
    public createtablespacestmt(): CreatetablespacestmtContext | null {
        return this.getRuleContext(0, CreatetablespacestmtContext);
    }
    public createtransformstmt(): CreatetransformstmtContext | null {
        return this.getRuleContext(0, CreatetransformstmtContext);
    }
    public createtrigstmt(): CreatetrigstmtContext | null {
        return this.getRuleContext(0, CreatetrigstmtContext);
    }
    public createeventtrigstmt(): CreateeventtrigstmtContext | null {
        return this.getRuleContext(0, CreateeventtrigstmtContext);
    }
    public createrolestmt(): CreaterolestmtContext | null {
        return this.getRuleContext(0, CreaterolestmtContext);
    }
    public createuserstmt(): CreateuserstmtContext | null {
        return this.getRuleContext(0, CreateuserstmtContext);
    }
    public createusermappingstmt(): CreateusermappingstmtContext | null {
        return this.getRuleContext(0, CreateusermappingstmtContext);
    }
    public createdbstmt(): CreatedbstmtContext | null {
        return this.getRuleContext(0, CreatedbstmtContext);
    }
    public deallocatestmt(): DeallocatestmtContext | null {
        return this.getRuleContext(0, DeallocatestmtContext);
    }
    public declarecursorstmt(): DeclarecursorstmtContext | null {
        return this.getRuleContext(0, DeclarecursorstmtContext);
    }
    public definestmt(): DefinestmtContext | null {
        return this.getRuleContext(0, DefinestmtContext);
    }
    public deletestmt(): DeletestmtContext | null {
        return this.getRuleContext(0, DeletestmtContext);
    }
    public discardstmt(): DiscardstmtContext | null {
        return this.getRuleContext(0, DiscardstmtContext);
    }
    public dostmt(): DostmtContext | null {
        return this.getRuleContext(0, DostmtContext);
    }
    public dropstmt(): DropstmtContext | null {
        return this.getRuleContext(0, DropstmtContext);
    }
    public executestmt(): ExecutestmtContext | null {
        return this.getRuleContext(0, ExecutestmtContext);
    }
    public explainstmt(): ExplainstmtContext | null {
        return this.getRuleContext(0, ExplainstmtContext);
    }
    public fetchstmt(): FetchstmtContext | null {
        return this.getRuleContext(0, FetchstmtContext);
    }
    public grantstmt(): GrantstmtContext | null {
        return this.getRuleContext(0, GrantstmtContext);
    }
    public grantrolestmt(): GrantrolestmtContext | null {
        return this.getRuleContext(0, GrantrolestmtContext);
    }
    public mergestmt(): MergestmtContext | null {
        return this.getRuleContext(0, MergestmtContext);
    }
    public importforeignschemastmt(): ImportforeignschemastmtContext | null {
        return this.getRuleContext(0, ImportforeignschemastmtContext);
    }
    public indexstmt(): IndexstmtContext | null {
        return this.getRuleContext(0, IndexstmtContext);
    }
    public insertstmt(): InsertstmtContext | null {
        return this.getRuleContext(0, InsertstmtContext);
    }
    public listenstmt(): ListenstmtContext | null {
        return this.getRuleContext(0, ListenstmtContext);
    }
    public refreshmatviewstmt(): RefreshmatviewstmtContext | null {
        return this.getRuleContext(0, RefreshmatviewstmtContext);
    }
    public loadstmt(): LoadstmtContext | null {
        return this.getRuleContext(0, LoadstmtContext);
    }
    public lockstmt(): LockstmtContext | null {
        return this.getRuleContext(0, LockstmtContext);
    }
    public notifystmt(): NotifystmtContext | null {
        return this.getRuleContext(0, NotifystmtContext);
    }
    public preparestmt(): PreparestmtContext | null {
        return this.getRuleContext(0, PreparestmtContext);
    }
    public reassignownedstmt(): ReassignownedstmtContext | null {
        return this.getRuleContext(0, ReassignownedstmtContext);
    }
    public reindexstmt(): ReindexstmtContext | null {
        return this.getRuleContext(0, ReindexstmtContext);
    }
    public removeaggrstmt(): RemoveaggrstmtContext | null {
        return this.getRuleContext(0, RemoveaggrstmtContext);
    }
    public removefuncstmt(): RemovefuncstmtContext | null {
        return this.getRuleContext(0, RemovefuncstmtContext);
    }
    public removeoperstmt(): RemoveoperstmtContext | null {
        return this.getRuleContext(0, RemoveoperstmtContext);
    }
    public renamestmt(): RenamestmtContext | null {
        return this.getRuleContext(0, RenamestmtContext);
    }
    public revokestmt(): RevokestmtContext | null {
        return this.getRuleContext(0, RevokestmtContext);
    }
    public revokerolestmt(): RevokerolestmtContext | null {
        return this.getRuleContext(0, RevokerolestmtContext);
    }
    public rulestmt(): RulestmtContext | null {
        return this.getRuleContext(0, RulestmtContext);
    }
    public seclabelstmt(): SeclabelstmtContext | null {
        return this.getRuleContext(0, SeclabelstmtContext);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public transactionstmt(): TransactionstmtContext | null {
        return this.getRuleContext(0, TransactionstmtContext);
    }
    public truncatestmt(): TruncatestmtContext | null {
        return this.getRuleContext(0, TruncatestmtContext);
    }
    public unlistenstmt(): UnlistenstmtContext | null {
        return this.getRuleContext(0, UnlistenstmtContext);
    }
    public updatestmt(): UpdatestmtContext | null {
        return this.getRuleContext(0, UpdatestmtContext);
    }
    public vacuumstmt(): VacuumstmtContext | null {
        return this.getRuleContext(0, VacuumstmtContext);
    }
    public variableresetstmt(): VariableresetstmtContext | null {
        return this.getRuleContext(0, VariableresetstmtContext);
    }
    public variablesetstmt(): VariablesetstmtContext | null {
        return this.getRuleContext(0, VariablesetstmtContext);
    }
    public variableshowstmt(): VariableshowstmtContext | null {
        return this.getRuleContext(0, VariableshowstmtContext);
    }
    public viewstmt(): ViewstmtContext | null {
        return this.getRuleContext(0, ViewstmtContext);
    }
    public plsqlconsolecommand(): PlsqlconsolecommandContext | null {
        return this.getRuleContext(0, PlsqlconsolecommandContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt) {
             listener.enterStmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt) {
             listener.exitStmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt) {
            return visitor.visitStmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PlsqlconsolecommandContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public MetaCommand(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.MetaCommand, 0)!;
    }
    public EndMetaCommand(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EndMetaCommand, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_plsqlconsolecommand;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPlsqlconsolecommand) {
             listener.enterPlsqlconsolecommand(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPlsqlconsolecommand) {
             listener.exitPlsqlconsolecommand(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPlsqlconsolecommand) {
            return visitor.visitPlsqlconsolecommand(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CallstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CALL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CALL, 0)!;
    }
    public func_application(): Func_applicationContext {
        return this.getRuleContext(0, Func_applicationContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_callstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCallstmt) {
             listener.enterCallstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCallstmt) {
             listener.exitCallstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCallstmt) {
            return visitor.visitCallstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreaterolestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_ROLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0)!;
    }
    public roleid(): RoleidContext {
        return this.getRuleContext(0, RoleidContext)!;
    }
    public optrolelist(): OptrolelistContext {
        return this.getRuleContext(0, OptrolelistContext)!;
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createrolestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreaterolestmt) {
             listener.enterCreaterolestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreaterolestmt) {
             listener.exitCreaterolestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreaterolestmt) {
            return visitor.visitCreaterolestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_withContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_with;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_with) {
             listener.enterOpt_with(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_with) {
             listener.exitOpt_with(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_with) {
            return visitor.visitOpt_with(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, CreateoptroleelemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optrolelist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptrolelist) {
             listener.enterOptrolelist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptrolelist) {
             listener.exitOptrolelist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptrolelist) {
            return visitor.visitOptrolelist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, AlteroptroleelemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alteroptrolelist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlteroptrolelist) {
             listener.enterAlteroptrolelist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlteroptrolelist) {
             listener.exitAlteroptrolelist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlteroptrolelist) {
            return visitor.visitAlteroptrolelist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlteroptroleelemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PASSWORD, 0);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_ENCRYPTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENCRYPTED, 0);
    }
    public KW_UNENCRYPTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNENCRYPTED, 0);
    }
    public KW_INHERIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INHERIT, 0);
    }
    public KW_NOINHERIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOINHERIT, 0);
    }
    public KW_CREATEUSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CREATEUSER, 0);
    }
    public KW_NOCREATEUSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOCREATEUSER, 0);
    }
    public KW_CREATEROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CREATEROLE, 0);
    }
    public KW_NOCREATEROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOCREATEROLE, 0);
    }
    public KW_CREATEDB(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CREATEDB, 0);
    }
    public KW_NOCREATEDB(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOCREATEDB, 0);
    }
    public KW_SUPERUSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUPERUSER, 0);
    }
    public KW_NOSUPERUSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOSUPERUSER, 0);
    }
    public KW_LOGIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOGIN, 0);
    }
    public KW_NOLOGIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOLOGIN, 0);
    }
    public KW_REPLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPLICATION, 0);
    }
    public KW_NOREPLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOREPLICATION, 0);
    }
    public KW_BYPASSRLS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BYPASSRLS, 0);
    }
    public KW_NOBYPASSRLS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOBYPASSRLS, 0);
    }
    public KW_CONNECTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONNECTION, 0);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LIMIT, 0);
    }
    public signediconst(): SignediconstContext | null {
        return this.getRuleContext(0, SignediconstContext);
    }
    public KW_VALID(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALID, 0);
    }
    public KW_UNTIL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNTIL, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public name_list(): Name_listContext | null {
        return this.getRuleContext(0, Name_listContext);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0);
    }
    public role_list(): Role_listContext | null {
        return this.getRuleContext(0, Role_listContext);
    }
    public KW_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADMIN, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alteroptroleelem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlteroptroleelem) {
             listener.enterAlteroptroleelem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlteroptroleelem) {
             listener.exitAlteroptroleelem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlteroptroleelem) {
            return visitor.visitAlteroptroleelem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateoptroleelemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public alteroptroleelem(): AlteroptroleelemContext | null {
        return this.getRuleContext(0, AlteroptroleelemContext);
    }
    public KW_SYSID(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYSID, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public KW_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADMIN, 0);
    }
    public role_list(): Role_listContext | null {
        return this.getRuleContext(0, Role_listContext);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createoptroleelem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateoptroleelem) {
             listener.enterCreateoptroleelem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateoptroleelem) {
             listener.exitCreateoptroleelem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateoptroleelem) {
            return visitor.visitCreateoptroleelem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateuserstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USER, 0)!;
    }
    public roleid(): RoleidContext {
        return this.getRuleContext(0, RoleidContext)!;
    }
    public optrolelist(): OptrolelistContext {
        return this.getRuleContext(0, OptrolelistContext)!;
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createuserstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateuserstmt) {
             listener.enterCreateuserstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateuserstmt) {
             listener.exitCreateuserstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateuserstmt) {
            return visitor.visitCreateuserstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterrolestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public alteroptrolelist(): AlteroptrolelistContext {
        return this.getRuleContext(0, AlteroptrolelistContext)!;
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterrolestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterrolestmt) {
             listener.enterAlterrolestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterrolestmt) {
             listener.exitAlterrolestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterrolestmt) {
            return visitor.visitAlterrolestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_in_databaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public database_name(): Database_nameContext | null {
        return this.getRuleContext(0, Database_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_in_database;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_in_database) {
             listener.enterOpt_in_database(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_in_database) {
             listener.exitOpt_in_database(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_in_database) {
            return visitor.visitOpt_in_database(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterrolesetstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public opt_in_database(): Opt_in_databaseContext {
        return this.getRuleContext(0, Opt_in_databaseContext)!;
    }
    public setresetclause(): SetresetclauseContext {
        return this.getRuleContext(0, SetresetclauseContext)!;
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterrolesetstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterrolesetstmt) {
             listener.enterAlterrolesetstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterrolesetstmt) {
             listener.exitAlterrolesetstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterrolesetstmt) {
            return visitor.visitAlterrolesetstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterroutinestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_ROUTINE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0)!;
    }
    public routine_name(): Routine_nameContext {
        return this.getRuleContext(0, Routine_nameContext)!;
    }
    public alter_routine_cluase(): Alter_routine_cluaseContext {
        return this.getRuleContext(0, Alter_routine_cluaseContext)!;
    }
    public func_args(): Func_argsContext | null {
        return this.getRuleContext(0, Func_argsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterroutinestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterroutinestmt) {
             listener.enterAlterroutinestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterroutinestmt) {
             listener.exitAlterroutinestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterroutinestmt) {
            return visitor.visitAlterroutinestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_routine_cluaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public routine_action_list(): Routine_action_listContext | null {
        return this.getRuleContext(0, Routine_action_listContext);
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTRICT, 0);
    }
    public KW_RENAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RENAME, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public routine_name_create(): Routine_name_createContext | null {
        return this.getRuleContext(0, Routine_name_createContext);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name_create(): Schema_name_createContext | null {
        return this.getRuleContext(0, Schema_name_createContext);
    }
    public KW_DEPENDS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEPENDS, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public KW_EXTENSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_routine_cluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_routine_cluase) {
             listener.enterAlter_routine_cluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_routine_cluase) {
             listener.exitAlter_routine_cluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_routine_cluase) {
            return visitor.visitAlter_routine_cluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Routine_actionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_routine_action_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoutine_action_list) {
             listener.enterRoutine_action_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoutine_action_list) {
             listener.exitRoutine_action_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutine_action_list) {
            return visitor.visitRoutine_action_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Routine_actionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IMMUTABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMMUTABLE, 0);
    }
    public KW_STABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STABLE, 0);
    }
    public KW_VOLATILE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VOLATILE, 0);
    }
    public KW_LEAKPROOF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEAKPROOF, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SECURITY, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INVOKER, 0);
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFINER, 0);
    }
    public KW_EXTERNAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTERNAL, 0);
    }
    public KW_PARALLEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARALLEL, 0);
    }
    public KW_UNSAFE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNSAFE, 0);
    }
    public KW_RESTRICTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTRICTED, 0);
    }
    public KW_SAFE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SAFE, 0);
    }
    public KW_COST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COST, 0);
    }
    public attr_name(): Attr_nameContext | null {
        return this.getRuleContext(0, Attr_nameContext);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWS, 0);
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_routine_action;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoutine_action) {
             listener.enterRoutine_action(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoutine_action) {
             listener.exitRoutine_action(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutine_action) {
            return visitor.visitRoutine_action(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreategroupstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0)!;
    }
    public groupname(): GroupnameContext {
        return this.getRuleContext(0, GroupnameContext)!;
    }
    public optrolelist(): OptrolelistContext {
        return this.getRuleContext(0, OptrolelistContext)!;
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_creategroupstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreategroupstmt) {
             listener.enterCreategroupstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreategroupstmt) {
             listener.exitCreategroupstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreategroupstmt) {
            return visitor.visitCreategroupstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltergroupstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0)!;
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public add_drop(): Add_dropContext {
        return this.getRuleContext(0, Add_dropContext)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USER, 0)!;
    }
    public role_list(): Role_listContext {
        return this.getRuleContext(0, Role_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altergroupstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltergroupstmt) {
             listener.enterAltergroupstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltergroupstmt) {
             listener.exitAltergroupstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltergroupstmt) {
            return visitor.visitAltergroupstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Add_dropContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_add_drop;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAdd_drop) {
             listener.enterAdd_drop(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAdd_drop) {
             listener.exitAdd_drop(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAdd_drop) {
            return visitor.visitAdd_drop(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateschemastmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_SCHEMA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0)!;
    }
    public optschemaeltlist(): OptschemaeltlistContext {
        return this.getRuleContext(0, OptschemaeltlistContext)!;
    }
    public KW_AUTHORIZATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AUTHORIZATION, 0);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public schema_name_create(): Schema_name_createContext | null {
        return this.getRuleContext(0, Schema_name_createContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createschemastmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateschemastmt) {
             listener.enterCreateschemastmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateschemastmt) {
             listener.exitCreateschemastmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateschemastmt) {
            return visitor.visitCreateschemastmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Schema_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_schema_name_create;
    }
    public override copyFrom(ctx: Schema_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class SchemaNameCreateContext extends Schema_name_createContext {
    public constructor(ctx: Schema_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSchemaNameCreate) {
             listener.enterSchemaNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSchemaNameCreate) {
             listener.exitSchemaNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSchemaNameCreate) {
            return visitor.visitSchemaNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Schema_stmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optschemaeltlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptschemaeltlist) {
             listener.enterOptschemaeltlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptschemaeltlist) {
             listener.exitOptschemaeltlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptschemaeltlist) {
            return visitor.visitOptschemaeltlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Schema_stmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public createstmt(): CreatestmtContext | null {
        return this.getRuleContext(0, CreatestmtContext);
    }
    public indexstmt(): IndexstmtContext | null {
        return this.getRuleContext(0, IndexstmtContext);
    }
    public createseqstmt(): CreateseqstmtContext | null {
        return this.getRuleContext(0, CreateseqstmtContext);
    }
    public createtrigstmt(): CreatetrigstmtContext | null {
        return this.getRuleContext(0, CreatetrigstmtContext);
    }
    public grantstmt(): GrantstmtContext | null {
        return this.getRuleContext(0, GrantstmtContext);
    }
    public viewstmt(): ViewstmtContext | null {
        return this.getRuleContext(0, ViewstmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_schema_stmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSchema_stmt) {
             listener.enterSchema_stmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSchema_stmt) {
             listener.exitSchema_stmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSchema_stmt) {
            return visitor.visitSchema_stmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class VariablesetstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public set_rest(): Set_restContext {
        return this.getRuleContext(0, Set_restContext)!;
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCAL, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_variablesetstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVariablesetstmt) {
             listener.enterVariablesetstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVariablesetstmt) {
             listener.exitVariablesetstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVariablesetstmt) {
            return visitor.visitVariablesetstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Set_restContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSACTION, 0);
    }
    public transaction_mode_list(): Transaction_mode_listContext | null {
        return this.getRuleContext(0, Transaction_mode_listContext);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION, 0);
    }
    public KW_CHARACTERISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHARACTERISTICS, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public set_rest_more(): Set_rest_moreContext | null {
        return this.getRuleContext(0, Set_rest_moreContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_rest;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSet_rest) {
             listener.enterSet_rest(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSet_rest) {
             listener.exitSet_rest(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSet_rest) {
            return visitor.visitSet_rest(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Generic_setContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public var_name(): Var_nameContext | null {
        return this.getRuleContext(0, Var_nameContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public var_list(): Var_listContext | null {
        return this.getRuleContext(0, Var_listContext);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generic_set;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGeneric_set) {
             listener.enterGeneric_set(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGeneric_set) {
             listener.exitGeneric_set(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGeneric_set) {
            return visitor.visitGeneric_set(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Set_rest_moreContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIME, 0);
    }
    public KW_ZONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ZONE, 0);
    }
    public zone_value(): Zone_valueContext | null {
        return this.getRuleContext(0, Zone_valueContext);
    }
    public KW_CATALOG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CATALOG, 0);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public KW_NAMES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NAMES, 0);
    }
    public opt_encoding(): Opt_encodingContext | null {
        return this.getRuleContext(0, Opt_encodingContext);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext | null {
        return this.getRuleContext(0, Nonreservedword_or_sconstContext);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION, 0);
    }
    public KW_AUTHORIZATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AUTHORIZATION, 0);
    }
    public KW_XML(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XML, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0);
    }
    public document_or_content(): Document_or_contentContext | null {
        return this.getRuleContext(0, Document_or_contentContext);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSACTION, 0);
    }
    public KW_SNAPSHOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SNAPSHOT, 0);
    }
    public var_name(): Var_nameContext | null {
        return this.getRuleContext(0, Var_nameContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public generic_set(): Generic_setContext | null {
        return this.getRuleContext(0, Generic_setContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_rest_more;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSet_rest_more) {
             listener.enterSet_rest_more(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSet_rest_more) {
             listener.exitSet_rest_more(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSet_rest_more) {
            return visitor.visitSet_rest_more(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, ColidContext);
    }
    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(PostgreSqlParser.DOT);
    	} else {
    		return this.getToken(PostgreSqlParser.DOT, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_var_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVar_name) {
             listener.enterVar_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVar_name) {
             listener.exitVar_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVar_name) {
            return visitor.visitVar_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Var_valueContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_var_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVar_list) {
             listener.enterVar_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVar_list) {
             listener.exitVar_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVar_list) {
            return visitor.visitVar_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Var_valueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_boolean_or_string(): Opt_boolean_or_stringContext | null {
        return this.getRuleContext(0, Opt_boolean_or_stringContext);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_var_value;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVar_value) {
             listener.enterVar_value(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVar_value) {
             listener.exitVar_value(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVar_value) {
            return visitor.visitVar_value(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Iso_levelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_READ, 0);
    }
    public KW_UNCOMMITTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNCOMMITTED, 0);
    }
    public KW_COMMITTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMITTED, 0);
    }
    public KW_REPEATABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPEATABLE, 0);
    }
    public KW_SERIALIZABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERIALIZABLE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_iso_level;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIso_level) {
             listener.enterIso_level(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIso_level) {
             listener.exitIso_level(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIso_level) {
            return visitor.visitIso_level(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_boolean_or_string_columnContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUE, 0);
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FALSE, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public nonreservedword_or_sconst_column(): Nonreservedword_or_sconst_columnContext | null {
        return this.getRuleContext(0, Nonreservedword_or_sconst_columnContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_boolean_or_string_column;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_boolean_or_string_column) {
             listener.enterOpt_boolean_or_string_column(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_boolean_or_string_column) {
             listener.exitOpt_boolean_or_string_column(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_boolean_or_string_column) {
            return visitor.visitOpt_boolean_or_string_column(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_boolean_or_stringContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUE, 0);
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FALSE, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext | null {
        return this.getRuleContext(0, Nonreservedword_or_sconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_boolean_or_string;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_boolean_or_string) {
             listener.enterOpt_boolean_or_string(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_boolean_or_string) {
             listener.exitOpt_boolean_or_string(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_boolean_or_string) {
            return visitor.visitOpt_boolean_or_string(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Zone_valueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public constinterval(): ConstintervalContext | null {
        return this.getRuleContext(0, ConstintervalContext);
    }
    public opt_interval(): Opt_intervalContext | null {
        return this.getRuleContext(0, Opt_intervalContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCAL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_zone_value;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterZone_value) {
             listener.enterZone_value(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitZone_value) {
             listener.exitZone_value(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitZone_value) {
            return visitor.visitZone_value(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_encodingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_encoding;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_encoding) {
             listener.enterOpt_encoding(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_encoding) {
             listener.exitOpt_encoding(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_encoding) {
            return visitor.visitOpt_encoding(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Nonreservedword_or_sconst_columnContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public nonreservedword_column(): Nonreservedword_columnContext | null {
        return this.getRuleContext(0, Nonreservedword_columnContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_nonreservedword_or_sconst_column;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNonreservedword_or_sconst_column) {
             listener.enterNonreservedword_or_sconst_column(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNonreservedword_or_sconst_column) {
             listener.exitNonreservedword_or_sconst_column(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNonreservedword_or_sconst_column) {
            return visitor.visitNonreservedword_or_sconst_column(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Nonreservedword_or_sconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public nonreservedword(): NonreservedwordContext | null {
        return this.getRuleContext(0, NonreservedwordContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_nonreservedword_or_sconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNonreservedword_or_sconst) {
             listener.enterNonreservedword_or_sconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNonreservedword_or_sconst) {
             listener.exitNonreservedword_or_sconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNonreservedword_or_sconst) {
            return visitor.visitNonreservedword_or_sconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class VariableresetstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RESET, 0)!;
    }
    public reset_rest(): Reset_restContext {
        return this.getRuleContext(0, Reset_restContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_variableresetstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVariableresetstmt) {
             listener.enterVariableresetstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVariableresetstmt) {
             listener.exitVariableresetstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVariableresetstmt) {
            return visitor.visitVariableresetstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Reset_restContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIME, 0);
    }
    public KW_ZONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ZONE, 0);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSACTION, 0);
    }
    public KW_ISOLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ISOLATION, 0);
    }
    public KW_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEVEL, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION, 0);
    }
    public KW_AUTHORIZATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AUTHORIZATION, 0);
    }
    public generic_reset(): Generic_resetContext | null {
        return this.getRuleContext(0, Generic_resetContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reset_rest;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReset_rest) {
             listener.enterReset_rest(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReset_rest) {
             listener.exitReset_rest(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReset_rest) {
            return visitor.visitReset_rest(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Generic_resetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public var_name(): Var_nameContext | null {
        return this.getRuleContext(0, Var_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generic_reset;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGeneric_reset) {
             listener.enterGeneric_reset(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGeneric_reset) {
             listener.exitGeneric_reset(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGeneric_reset) {
            return visitor.visitGeneric_reset(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetresetclauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public set_rest(): Set_restContext | null {
        return this.getRuleContext(0, Set_restContext);
    }
    public variableresetstmt(): VariableresetstmtContext | null {
        return this.getRuleContext(0, VariableresetstmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_setresetclause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSetresetclause) {
             listener.enterSetresetclause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSetresetclause) {
             listener.exitSetresetclause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetresetclause) {
            return visitor.visitSetresetclause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FunctionsetresetclauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public set_rest_more(): Set_rest_moreContext | null {
        return this.getRuleContext(0, Set_rest_moreContext);
    }
    public variableresetstmt(): VariableresetstmtContext | null {
        return this.getRuleContext(0, VariableresetstmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_functionsetresetclause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunctionsetresetclause) {
             listener.enterFunctionsetresetclause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunctionsetresetclause) {
             listener.exitFunctionsetresetclause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionsetresetclause) {
            return visitor.visitFunctionsetresetclause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class VariableshowstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SHOW, 0)!;
    }
    public var_name(): Var_nameContext | null {
        return this.getRuleContext(0, Var_nameContext);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIME, 0);
    }
    public KW_ZONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ZONE, 0);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSACTION, 0);
    }
    public KW_ISOLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ISOLATION, 0);
    }
    public KW_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEVEL, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION, 0);
    }
    public KW_AUTHORIZATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AUTHORIZATION, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_variableshowstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVariableshowstmt) {
             listener.enterVariableshowstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVariableshowstmt) {
             listener.exitVariableshowstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVariableshowstmt) {
            return visitor.visitVariableshowstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstraintssetstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public KW_CONSTRAINTS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINTS, 0)!;
    }
    public constraints_set_list(): Constraints_set_listContext {
        return this.getRuleContext(0, Constraints_set_listContext)!;
    }
    public constraints_set_mode(): Constraints_set_modeContext {
        return this.getRuleContext(0, Constraints_set_modeContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constraintssetstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstraintssetstmt) {
             listener.enterConstraintssetstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstraintssetstmt) {
             listener.exitConstraintssetstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstraintssetstmt) {
            return visitor.visitConstraintssetstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Constraints_set_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public qualified_name_list(): Qualified_name_listContext | null {
        return this.getRuleContext(0, Qualified_name_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constraints_set_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstraints_set_list) {
             listener.enterConstraints_set_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstraints_set_list) {
             listener.exitConstraints_set_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstraints_set_list) {
            return visitor.visitConstraints_set_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Constraints_set_modeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEFERRED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFERRED, 0);
    }
    public KW_IMMEDIATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMMEDIATE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constraints_set_mode;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstraints_set_mode) {
             listener.enterConstraints_set_mode(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstraints_set_mode) {
             listener.exitConstraints_set_mode(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstraints_set_mode) {
            return visitor.visitConstraints_set_mode(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CheckpointstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHECKPOINT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CHECKPOINT, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_checkpointstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCheckpointstmt) {
             listener.enterCheckpointstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCheckpointstmt) {
             listener.exitCheckpointstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCheckpointstmt) {
            return visitor.visitCheckpointstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DiscardstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DISCARD(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DISCARD, 0)!;
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_TEMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMP, 0);
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPORARY, 0);
    }
    public KW_PLANS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PLANS, 0);
    }
    public KW_SEQUENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCES, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_discardstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDiscardstmt) {
             listener.enterDiscardstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDiscardstmt) {
             listener.exitDiscardstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDiscardstmt) {
            return visitor.visitDiscardstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltertablestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public relation_expr(): Relation_exprContext | null {
        return this.getRuleContext(0, Relation_exprContext);
    }
    public alter_table_cmds(): Alter_table_cmdsContext | null {
        return this.getRuleContext(0, Alter_table_cmdsContext);
    }
    public partition_cmd(): Partition_cmdContext | null {
        return this.getRuleContext(0, Partition_cmdContext);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode[];
    public KW_TABLESPACE(i: number): antlr.TerminalNode | null;
    public KW_TABLESPACE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_TABLESPACE);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_TABLESPACE, i);
    	}
    }
    public tablespace_name(): Tablespace_nameContext[];
    public tablespace_name(i: number): Tablespace_nameContext | null;
    public tablespace_name(i?: number): Tablespace_nameContext[] | Tablespace_nameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Tablespace_nameContext);
        }

        return this.getRuleContext(i, Tablespace_nameContext);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public tablespace_name_create(): Tablespace_name_createContext | null {
        return this.getRuleContext(0, Tablespace_name_createContext);
    }
    public KW_OWNED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNED, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public role_list(): Role_listContext | null {
        return this.getRuleContext(0, Role_listContext);
    }
    public opt_nowait(): Opt_nowaitContext | null {
        return this.getRuleContext(0, Opt_nowaitContext);
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public KW_ATTACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ATTACH, 0);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_VALUES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUES, 0);
    }
    public partition_bound_spec(): Partition_bound_specContext | null {
        return this.getRuleContext(0, Partition_bound_specContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public KW_DETACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DETACH, 0);
    }
    public KW_CONCURRENTLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONCURRENTLY, 0);
    }
    public KW_FINALIZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FINALIZE, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public index_partition_cmd(): Index_partition_cmdContext | null {
        return this.getRuleContext(0, Index_partition_cmdContext);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public view_name(): View_nameContext | null {
        return this.getRuleContext(0, View_nameContext);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altertablestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltertablestmt) {
             listener.enterAltertablestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltertablestmt) {
             listener.exitAltertablestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltertablestmt) {
            return visitor.visitAltertablestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Alter_table_cmdContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_table_cmds;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_table_cmds) {
             listener.enterAlter_table_cmds(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_table_cmds) {
             listener.exitAlter_table_cmds(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_table_cmds) {
            return visitor.visitAlter_table_cmds(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Partition_bound_specContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public opt_type_modifiers(): Opt_type_modifiersContext | null {
        return this.getRuleContext(0, Opt_type_modifiersContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public partition_bound_cluase(): Partition_bound_cluaseContext[];
    public partition_bound_cluase(i: number): Partition_bound_cluaseContext | null;
    public partition_bound_cluase(i?: number): Partition_bound_cluaseContext[] | Partition_bound_cluaseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Partition_bound_cluaseContext);
        }

        return this.getRuleContext(i, Partition_bound_cluaseContext);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public partition_with_cluase(): Partition_with_cluaseContext | null {
        return this.getRuleContext(0, Partition_with_cluaseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_partition_bound_spec;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPartition_bound_spec) {
             listener.enterPartition_bound_spec(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPartition_bound_spec) {
             listener.exitPartition_bound_spec(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartition_bound_spec) {
            return visitor.visitPartition_bound_spec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Partition_bound_cluaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public partition_bound_choose(): Partition_bound_chooseContext[];
    public partition_bound_choose(i: number): Partition_bound_chooseContext | null;
    public partition_bound_choose(i?: number): Partition_bound_chooseContext[] | Partition_bound_chooseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Partition_bound_chooseContext);
        }

        return this.getRuleContext(i, Partition_bound_chooseContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_partition_bound_cluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPartition_bound_cluase) {
             listener.enterPartition_bound_cluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPartition_bound_cluase) {
             listener.exitPartition_bound_cluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartition_bound_cluase) {
            return visitor.visitPartition_bound_cluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Partition_bound_chooseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_type_modifiers(): Opt_type_modifiersContext | null {
        return this.getRuleContext(0, Opt_type_modifiersContext);
    }
    public KW_MINVALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MINVALUE, 0);
    }
    public KW_MAXVALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MAXVALUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_partition_bound_choose;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPartition_bound_choose) {
             listener.enterPartition_bound_choose(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPartition_bound_choose) {
             listener.exitPartition_bound_choose(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartition_bound_choose) {
            return visitor.visitPartition_bound_choose(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Partition_with_cluaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public KW_MODULUS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MODULUS, 0)!;
    }
    public numericonly(): NumericonlyContext[];
    public numericonly(i: number): NumericonlyContext | null;
    public numericonly(i?: number): NumericonlyContext[] | NumericonlyContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NumericonlyContext);
        }

        return this.getRuleContext(i, NumericonlyContext);
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.COMMA, 0)!;
    }
    public KW_REMAINDER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REMAINDER, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_partition_with_cluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPartition_with_cluase) {
             listener.enterPartition_with_cluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPartition_with_cluase) {
             listener.exitPartition_with_cluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartition_with_cluase) {
            return visitor.visitPartition_with_cluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Partition_cmdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ATTACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ATTACH, 0);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public partitionboundspec(): PartitionboundspecContext | null {
        return this.getRuleContext(0, PartitionboundspecContext);
    }
    public KW_DETACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DETACH, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_partition_cmd;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPartition_cmd) {
             listener.enterPartition_cmd(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPartition_cmd) {
             listener.exitPartition_cmd(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartition_cmd) {
            return visitor.visitPartition_cmd(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Index_partition_cmdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ATTACH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ATTACH, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_partition_cmd;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_partition_cmd) {
             listener.enterIndex_partition_cmd(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_partition_cmd) {
             listener.exitIndex_partition_cmd(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_partition_cmd) {
            return visitor.visitIndex_partition_cmd(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_table_cmdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public constraintelem(): ConstraintelemContext | null {
        return this.getRuleContext(0, ConstraintelemContext);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_ALTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0);
    }
    public constraintattributespec(): ConstraintattributespecContext | null {
        return this.getRuleContext(0, ConstraintattributespecContext);
    }
    public KW_VALIDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALIDATE, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITHOUT, 0);
    }
    public KW_OIDS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OIDS, 0);
    }
    public KW_CLUSTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLUSTER, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public KW_LOGGED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOGGED, 0);
    }
    public KW_UNLOGGED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNLOGGED, 0);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENABLE, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPLICA, 0);
    }
    public KW_ALWAYS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALWAYS, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISABLE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public KW_RULE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RULE, 0);
    }
    public KW_INHERIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INHERIT, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public tablespace_name_create(): Tablespace_name_createContext | null {
        return this.getRuleContext(0, Tablespace_name_createContext);
    }
    public reloptions(): ReloptionsContext | null {
        return this.getRuleContext(0, ReloptionsContext);
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public KW_IDENTITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IDENTITY, 0);
    }
    public replica_identity(): Replica_identityContext | null {
        return this.getRuleContext(0, Replica_identityContext);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public KW_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEVEL, 0);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SECURITY, 0);
    }
    public KW_FORCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FORCE, 0);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLUMN, 0);
    }
    public column_def(): Column_defContext | null {
        return this.getRuleContext(0, Column_defContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public alter_column_default(): Alter_column_defaultContext | null {
        return this.getRuleContext(0, Alter_column_defaultContext);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_EXPRESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXPRESSION, 0);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public signediconst(): SignediconstContext | null {
        return this.getRuleContext(0, SignediconstContext);
    }
    public KW_STORAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STORAGE, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public KW_GENERATED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GENERATED, 0);
    }
    public generated_when(): Generated_whenContext | null {
        return this.getRuleContext(0, Generated_whenContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public optparenthesizedseqoptlist(): OptparenthesizedseqoptlistContext | null {
        return this.getRuleContext(0, OptparenthesizedseqoptlistContext);
    }
    public alter_identity_column_option_list(): Alter_identity_column_option_listContext | null {
        return this.getRuleContext(0, Alter_identity_column_option_listContext);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public opt_set_data(): Opt_set_dataContext | null {
        return this.getRuleContext(0, Opt_set_dataContext);
    }
    public opt_collate_clause(): Opt_collate_clauseContext | null {
        return this.getRuleContext(0, Opt_collate_clauseContext);
    }
    public alter_using(): Alter_usingContext | null {
        return this.getRuleContext(0, Alter_usingContext);
    }
    public alter_generic_options(): Alter_generic_optionsContext | null {
        return this.getRuleContext(0, Alter_generic_optionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_table_cmd;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_table_cmd) {
             listener.enterAlter_table_cmd(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_table_cmd) {
             listener.exitAlter_table_cmd(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_table_cmd) {
            return visitor.visitAlter_table_cmd(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_column_defaultContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0)!;
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_column_default;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_column_default) {
             listener.enterAlter_column_default(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_column_default) {
             listener.exitAlter_column_default(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_column_default) {
            return visitor.visitAlter_column_default(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_drop_behaviorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CASCADE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CASCADE, 0);
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTRICT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_drop_behavior;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_drop_behavior) {
             listener.enterOpt_drop_behavior(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_drop_behavior) {
             listener.exitOpt_drop_behavior(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_drop_behavior) {
            return visitor.visitOpt_drop_behavior(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_collate_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COLLATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COLLATE, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_collate_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_collate_clause) {
             listener.enterOpt_collate_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_collate_clause) {
             listener.exitOpt_collate_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_collate_clause) {
            return visitor.visitOpt_collate_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_usingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_using;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_using) {
             listener.enterAlter_using(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_using) {
             listener.exitAlter_using(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_using) {
            return visitor.visitAlter_using(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Replica_identityContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOTHING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTHING, 0);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FULL, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_replica_identity;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReplica_identity) {
             listener.enterReplica_identity(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReplica_identity) {
             listener.exitReplica_identity(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReplica_identity) {
            return visitor.visitReplica_identity(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReloptionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public reloption_list(): Reloption_listContext {
        return this.getRuleContext(0, Reloption_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reloptions;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReloptions) {
             listener.enterReloptions(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReloptions) {
             listener.exitReloptions(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReloptions) {
            return visitor.visitReloptions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_reloptionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public reloptions(): ReloptionsContext {
        return this.getRuleContext(0, ReloptionsContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_reloptions;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_reloptions) {
             listener.enterOpt_reloptions(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_reloptions) {
             listener.exitOpt_reloptions(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_reloptions) {
            return visitor.visitOpt_reloptions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Reloption_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reloption_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReloption_list) {
             listener.enterReloption_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReloption_list) {
             listener.exitReloption_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReloption_list) {
            return visitor.visitReloption_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, CollabelContext);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public def_arg(): Def_argContext | null {
        return this.getRuleContext(0, Def_argContext);
    }
    public DOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.DOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reloption_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReloption_elem) {
             listener.enterReloption_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReloption_elem) {
             listener.exitReloption_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReloption_elem) {
            return visitor.visitReloption_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Alter_identity_column_optionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_identity_column_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_identity_column_option_list) {
             listener.enterAlter_identity_column_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_identity_column_option_list) {
             listener.exitAlter_identity_column_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_identity_column_option_list) {
            return visitor.visitAlter_identity_column_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_identity_column_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESTART(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTART, 0);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public seqoptelem(): SeqoptelemContext | null {
        return this.getRuleContext(0, SeqoptelemContext);
    }
    public KW_GENERATED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GENERATED, 0);
    }
    public generated_when(): Generated_whenContext | null {
        return this.getRuleContext(0, Generated_whenContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_identity_column_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_identity_column_option) {
             listener.enterAlter_identity_column_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_identity_column_option) {
             listener.exitAlter_identity_column_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_identity_column_option) {
            return visitor.visitAlter_identity_column_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionboundspecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_VALUES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUES, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode[];
    public OPEN_PAREN(i: number): antlr.TerminalNode | null;
    public OPEN_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.OPEN_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.OPEN_PAREN, i);
    	}
    }
    public hash_partbound(): Hash_partboundContext | null {
        return this.getRuleContext(0, Hash_partboundContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode[];
    public CLOSE_PAREN(i: number): antlr.TerminalNode | null;
    public CLOSE_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.CLOSE_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.CLOSE_PAREN, i);
    	}
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public expr_list(): Expr_listContext[];
    public expr_list(i: number): Expr_listContext | null;
    public expr_list(i?: number): Expr_listContext[] | Expr_listContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Expr_listContext);
        }

        return this.getRuleContext(i, Expr_listContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_partitionboundspec;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPartitionboundspec) {
             listener.enterPartitionboundspec(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPartitionboundspec) {
             listener.exitPartitionboundspec(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionboundspec) {
            return visitor.visitPartitionboundspec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Hash_partbound_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public nonreservedword(): NonreservedwordContext {
        return this.getRuleContext(0, NonreservedwordContext)!;
    }
    public iconst(): IconstContext {
        return this.getRuleContext(0, IconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_hash_partbound_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterHash_partbound_elem) {
             listener.enterHash_partbound_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitHash_partbound_elem) {
             listener.exitHash_partbound_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitHash_partbound_elem) {
            return visitor.visitHash_partbound_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Hash_partbound_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_hash_partbound;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterHash_partbound) {
             listener.enterHash_partbound(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitHash_partbound) {
             listener.exitHash_partbound(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitHash_partbound) {
            return visitor.visitHash_partbound(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltercompositetypestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_TYPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public alter_type_cmds(): Alter_type_cmdsContext {
        return this.getRuleContext(0, Alter_type_cmdsContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altercompositetypestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltercompositetypestmt) {
             listener.enterAltercompositetypestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltercompositetypestmt) {
             listener.exitAltercompositetypestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltercompositetypestmt) {
            return visitor.visitAltercompositetypestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Alter_type_cmdContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_type_cmds;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_type_cmds) {
             listener.enterAlter_type_cmds(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_type_cmds) {
             listener.exitAlter_type_cmds(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_type_cmds) {
            return visitor.visitAlter_type_cmds(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_type_cmdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public KW_ATTRIBUTE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ATTRIBUTE, 0)!;
    }
    public tablefuncelement(): TablefuncelementContext | null {
        return this.getRuleContext(0, TablefuncelementContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public KW_ALTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public opt_set_data(): Opt_set_dataContext | null {
        return this.getRuleContext(0, Opt_set_dataContext);
    }
    public opt_collate_clause(): Opt_collate_clauseContext | null {
        return this.getRuleContext(0, Opt_collate_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_type_cmd;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_type_cmd) {
             listener.enterAlter_type_cmd(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_type_cmd) {
             listener.exitAlter_type_cmd(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_type_cmd) {
            return visitor.visitAlter_type_cmd(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CloseportalstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CLOSE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CLOSE, 0)!;
    }
    public cursor_name(): Cursor_nameContext | null {
        return this.getRuleContext(0, Cursor_nameContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_closeportalstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCloseportalstmt) {
             listener.enterCloseportalstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCloseportalstmt) {
             listener.exitCloseportalstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCloseportalstmt) {
            return visitor.visitCloseportalstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CopystmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COPY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COPY, 0)!;
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public copy_from(): Copy_fromContext | null {
        return this.getRuleContext(0, Copy_fromContext);
    }
    public copy_file_name(): Copy_file_nameContext {
        return this.getRuleContext(0, Copy_file_nameContext)!;
    }
    public copy_options(): Copy_optionsContext {
        return this.getRuleContext(0, Copy_optionsContext)!;
    }
    public opt_binary(): Opt_binaryContext | null {
        return this.getRuleContext(0, Opt_binaryContext);
    }
    public opt_column_list(): Opt_column_listContext | null {
        return this.getRuleContext(0, Opt_column_listContext);
    }
    public opt_program(): Opt_programContext | null {
        return this.getRuleContext(0, Opt_programContext);
    }
    public copy_delimiter(): Copy_delimiterContext | null {
        return this.getRuleContext(0, Copy_delimiterContext);
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public preparablestmt(): PreparablestmtContext | null {
        return this.getRuleContext(0, PreparablestmtContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copystmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopystmt) {
             listener.enterCopystmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopystmt) {
             listener.exitCopystmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopystmt) {
            return visitor.visitCopystmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_fromContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_from;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_from) {
             listener.enterCopy_from(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_from) {
             listener.exitCopy_from(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_from) {
            return visitor.visitCopy_from(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_programContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PROGRAM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PROGRAM, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_program;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_program) {
             listener.enterOpt_program(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_program) {
             listener.exitOpt_program(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_program) {
            return visitor.visitOpt_program(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_file_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_STDIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STDIN, 0);
    }
    public KW_STDOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STDOUT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_file_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_file_name) {
             listener.enterCopy_file_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_file_name) {
             listener.exitCopy_file_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_file_name) {
            return visitor.visitCopy_file_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_optionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public copy_opt_list(): Copy_opt_listContext | null {
        return this.getRuleContext(0, Copy_opt_listContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public copy_generic_opt_list(): Copy_generic_opt_listContext | null {
        return this.getRuleContext(0, Copy_generic_opt_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_options) {
             listener.enterCopy_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_options) {
             listener.exitCopy_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_options) {
            return visitor.visitCopy_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Copy_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_opt_list) {
             listener.enterCopy_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_opt_list) {
             listener.exitCopy_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_opt_list) {
            return visitor.visitCopy_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_opt_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BINARY, 0);
    }
    public KW_FREEZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FREEZE, 0);
    }
    public KW_DELIMITER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELIMITER, 0);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public opt_as(): Opt_asContext | null {
        return this.getRuleContext(0, Opt_asContext);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_CSV(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CSV, 0);
    }
    public KW_HEADER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HEADER, 0);
    }
    public KW_QUOTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_QUOTE, 0);
    }
    public KW_ESCAPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ESCAPE, 0);
    }
    public KW_FORCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FORCE, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_ENCODING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENCODING, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_opt_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_opt_item) {
             listener.enterCopy_opt_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_opt_item) {
             listener.exitCopy_opt_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_opt_item) {
            return visitor.visitCopy_opt_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_binaryContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BINARY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BINARY, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_binary;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_binary) {
             listener.enterOpt_binary(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_binary) {
             listener.exitOpt_binary(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_binary) {
            return visitor.visitOpt_binary(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_delimiterContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DELIMITERS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DELIMITERS, 0)!;
    }
    public sconst(): SconstContext {
        return this.getRuleContext(0, SconstContext)!;
    }
    public opt_using(): Opt_usingContext | null {
        return this.getRuleContext(0, Opt_usingContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_delimiter;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_delimiter) {
             listener.enterCopy_delimiter(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_delimiter) {
             listener.exitCopy_delimiter(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_delimiter) {
            return visitor.visitCopy_delimiter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_usingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_using;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_using) {
             listener.enterOpt_using(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_using) {
             listener.exitOpt_using(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_using) {
            return visitor.visitOpt_using(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Copy_generic_opt_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_generic_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_generic_opt_list) {
             listener.enterCopy_generic_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_generic_opt_list) {
             listener.exitCopy_generic_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_generic_opt_list) {
            return visitor.visitCopy_generic_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_generic_opt_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public collabel(): CollabelContext {
        return this.getRuleContext(0, CollabelContext)!;
    }
    public copy_generic_opt_arg(): Copy_generic_opt_argContext | null {
        return this.getRuleContext(0, Copy_generic_opt_argContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_generic_opt_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_generic_opt_elem) {
             listener.enterCopy_generic_opt_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_generic_opt_elem) {
             listener.exitCopy_generic_opt_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_generic_opt_elem) {
            return visitor.visitCopy_generic_opt_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_generic_opt_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_boolean_or_string(): Opt_boolean_or_stringContext | null {
        return this.getRuleContext(0, Opt_boolean_or_stringContext);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public copy_generic_opt_arg_list(): Copy_generic_opt_arg_listContext | null {
        return this.getRuleContext(0, Copy_generic_opt_arg_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_generic_opt_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_generic_opt_arg) {
             listener.enterCopy_generic_opt_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_generic_opt_arg) {
             listener.exitCopy_generic_opt_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_generic_opt_arg) {
            return visitor.visitCopy_generic_opt_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Copy_generic_opt_arg_list_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_generic_opt_arg_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_generic_opt_arg_list) {
             listener.enterCopy_generic_opt_arg_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_generic_opt_arg_list) {
             listener.exitCopy_generic_opt_arg_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_generic_opt_arg_list) {
            return visitor.visitCopy_generic_opt_arg_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Copy_generic_opt_arg_list_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_boolean_or_string_column(): Opt_boolean_or_string_columnContext {
        return this.getRuleContext(0, Opt_boolean_or_string_columnContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_copy_generic_opt_arg_list_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCopy_generic_opt_arg_list_item) {
             listener.enterCopy_generic_opt_arg_list_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCopy_generic_opt_arg_list_item) {
             listener.exitCopy_generic_opt_arg_list_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopy_generic_opt_arg_list_item) {
            return visitor.visitCopy_generic_opt_arg_list_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createstmt;
    }
    public override copyFrom(ctx: CreatestmtContext): void {
        super.copyFrom(ctx);
    }
}
export class ColumnCreateTableContext extends CreatestmtContext {
    public constructor(ctx: CreatestmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0)!;
    }
    public table_name_create(): Table_name_createContext {
        return this.getRuleContext(0, Table_name_createContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public partitionboundspec(): PartitionboundspecContext | null {
        return this.getRuleContext(0, PartitionboundspecContext);
    }
    public opttemp(): OpttempContext | null {
        return this.getRuleContext(0, OpttempContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public table_column_list(): Table_column_listContext | null {
        return this.getRuleContext(0, Table_column_listContext);
    }
    public optinherit(): OptinheritContext | null {
        return this.getRuleContext(0, OptinheritContext);
    }
    public optpartitionspec(): OptpartitionspecContext | null {
        return this.getRuleContext(0, OptpartitionspecContext);
    }
    public table_access_method_clause(): Table_access_method_clauseContext | null {
        return this.getRuleContext(0, Table_access_method_clauseContext);
    }
    public optwith(): OptwithContext | null {
        return this.getRuleContext(0, OptwithContext);
    }
    public oncommitoption(): OncommitoptionContext | null {
        return this.getRuleContext(0, OncommitoptionContext);
    }
    public opttablespace(): OpttablespaceContext | null {
        return this.getRuleContext(0, OpttablespaceContext);
    }
    public opttypedtableelementlist(): OpttypedtableelementlistContext | null {
        return this.getRuleContext(0, OpttypedtableelementlistContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumnCreateTable) {
             listener.enterColumnCreateTable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumnCreateTable) {
             listener.exitColumnCreateTable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnCreateTable) {
            return visitor.visitColumnCreateTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OpttempContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPORARY, 0);
    }
    public KW_TEMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMP, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCAL, 0);
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GLOBAL, 0);
    }
    public KW_UNLOGGED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNLOGGED, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opttemp;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpttemp) {
             listener.enterOpttemp(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpttemp) {
             listener.exitOpttemp(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpttemp) {
            return visitor.visitOpttemp(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Table_column_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableelementlist(): TableelementlistContext {
        return this.getRuleContext(0, TableelementlistContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_column_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTable_column_list) {
             listener.enterTable_column_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTable_column_list) {
             listener.exitTable_column_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTable_column_list) {
            return visitor.visitTable_column_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OpttableelementlistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableelementlist(): TableelementlistContext {
        return this.getRuleContext(0, TableelementlistContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opttableelementlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpttableelementlist) {
             listener.enterOpttableelementlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpttableelementlist) {
             listener.exitOpttableelementlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpttableelementlist) {
            return visitor.visitOpttableelementlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OpttypedtableelementlistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public typedtableelementlist(): TypedtableelementlistContext {
        return this.getRuleContext(0, TypedtableelementlistContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opttypedtableelementlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpttypedtableelementlist) {
             listener.enterOpttypedtableelementlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpttypedtableelementlist) {
             listener.exitOpttypedtableelementlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpttypedtableelementlist) {
            return visitor.visitOpttypedtableelementlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TableelementContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tableelementlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTableelementlist) {
             listener.enterTableelementlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTableelementlist) {
             listener.exitTableelementlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableelementlist) {
            return visitor.visitTableelementlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TypedtableelementContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_typedtableelementlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTypedtableelementlist) {
             listener.enterTypedtableelementlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTypedtableelementlist) {
             listener.exitTypedtableelementlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTypedtableelementlist) {
            return visitor.visitTypedtableelementlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableelementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_def(): Column_defContext | null {
        return this.getRuleContext(0, Column_defContext);
    }
    public tablelikeclause(): TablelikeclauseContext | null {
        return this.getRuleContext(0, TablelikeclauseContext);
    }
    public tableconstraint(): TableconstraintContext | null {
        return this.getRuleContext(0, TableconstraintContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tableelement;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTableelement) {
             listener.enterTableelement(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTableelement) {
             listener.exitTableelement(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableelement) {
            return visitor.visitTableelement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TypedtableelementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public columnOptions(): ColumnOptionsContext | null {
        return this.getRuleContext(0, ColumnOptionsContext);
    }
    public tableconstraint(): TableconstraintContext | null {
        return this.getRuleContext(0, TableconstraintContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_typedtableelement;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTypedtableelement) {
             listener.enterTypedtableelement(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTypedtableelement) {
             listener.exitTypedtableelement(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTypedtableelement) {
            return visitor.visitTypedtableelement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Column_defContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name_create(): Column_name_createContext {
        return this.getRuleContext(0, Column_name_createContext)!;
    }
    public typename(): TypenameContext {
        return this.getRuleContext(0, TypenameContext)!;
    }
    public colquallist(): ColquallistContext {
        return this.getRuleContext(0, ColquallistContext)!;
    }
    public create_generic_options(): Create_generic_optionsContext | null {
        return this.getRuleContext(0, Create_generic_optionsContext);
    }
    public storageCluase(): StorageCluaseContext | null {
        return this.getRuleContext(0, StorageCluaseContext);
    }
    public compressionCluase(): CompressionCluaseContext | null {
        return this.getRuleContext(0, CompressionCluaseContext);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATE, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public KW_OPTIONS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTIONS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_def;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumn_def) {
             listener.enterColumn_def(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumn_def) {
             listener.exitColumn_def(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumn_def) {
            return visitor.visitColumn_def(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CompressionCluaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COMPRESSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COMPRESSION, 0)!;
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_compressionCluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCompressionCluase) {
             listener.enterCompressionCluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCompressionCluase) {
             listener.exitCompressionCluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCompressionCluase) {
            return visitor.visitCompressionCluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StorageCluaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_STORAGE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_STORAGE, 0)!;
    }
    public KW_PLAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PLAIN, 0);
    }
    public KW_EXTERNAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTERNAL, 0);
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTENDED, 0);
    }
    public KW_MAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MAIN, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_storageCluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStorageCluase) {
             listener.enterStorageCluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStorageCluase) {
             listener.exitStorageCluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStorageCluase) {
            return visitor.visitStorageCluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColumnOptionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name_create(): Column_name_createContext {
        return this.getRuleContext(0, Column_name_createContext)!;
    }
    public colquallist(): ColquallistContext {
        return this.getRuleContext(0, ColquallistContext)!;
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public KW_OPTIONS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTIONS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_columnOptions;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumnOptions) {
             listener.enterColumnOptions(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumnOptions) {
             listener.exitColumnOptions(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnOptions) {
            return visitor.visitColumnOptions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, ColconstraintContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_colquallist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColquallist) {
             listener.enterColquallist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColquallist) {
             listener.exitColquallist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColquallist) {
            return visitor.visitColquallist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColconstraintContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colconstraintelem(): ColconstraintelemContext {
        return this.getRuleContext(0, ColconstraintelemContext)!;
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public deferrable_trigger(): Deferrable_triggerContext | null {
        return this.getRuleContext(0, Deferrable_triggerContext);
    }
    public initially_trigger(): Initially_triggerContext | null {
        return this.getRuleContext(0, Initially_triggerContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_colconstraint;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColconstraint) {
             listener.enterColconstraint(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColconstraint) {
             listener.exitColconstraint(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColconstraint) {
            return visitor.visitColconstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColconstraintelemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_UNIQUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNIQUE, 0);
    }
    public opt_definition(): Opt_definitionContext | null {
        return this.getRuleContext(0, Opt_definitionContext);
    }
    public optconstablespace(): OptconstablespaceContext | null {
        return this.getRuleContext(0, OptconstablespaceContext);
    }
    public index_paramenters_create(): Index_paramenters_createContext | null {
        return this.getRuleContext(0, Index_paramenters_createContext);
    }
    public nulls_distinct(): Nulls_distinctContext | null {
        return this.getRuleContext(0, Nulls_distinctContext);
    }
    public KW_PRIMARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIMARY, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_KEY, 0);
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHECK, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public opt_no_inherit(): Opt_no_inheritContext | null {
        return this.getRuleContext(0, Opt_no_inheritContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public b_expr(): B_exprContext | null {
        return this.getRuleContext(0, B_exprContext);
    }
    public KW_GENERATED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GENERATED, 0);
    }
    public generated_when(): Generated_whenContext | null {
        return this.getRuleContext(0, Generated_whenContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public KW_IDENTITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IDENTITY, 0);
    }
    public KW_STORED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STORED, 0);
    }
    public optparenthesizedseqoptlist(): OptparenthesizedseqoptlistContext | null {
        return this.getRuleContext(0, OptparenthesizedseqoptlistContext);
    }
    public KW_REFERENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REFERENCES, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public opt_column_list(): Opt_column_listContext | null {
        return this.getRuleContext(0, Opt_column_listContext);
    }
    public key_match(): Key_matchContext | null {
        return this.getRuleContext(0, Key_matchContext);
    }
    public key_actions(): Key_actionsContext | null {
        return this.getRuleContext(0, Key_actionsContext);
    }
    public opt_collate(): Opt_collateContext | null {
        return this.getRuleContext(0, Opt_collateContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_colconstraintelem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColconstraintelem) {
             listener.enterColconstraintelem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColconstraintelem) {
             listener.exitColconstraintelem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColconstraintelem) {
            return visitor.visitColconstraintelem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Nulls_distinctContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NULLS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NULLS, 0)!;
    }
    public KW_DISTINCT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DISTINCT, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_nulls_distinct;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNulls_distinct) {
             listener.enterNulls_distinct(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNulls_distinct) {
             listener.exitNulls_distinct(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNulls_distinct) {
            return visitor.visitNulls_distinct(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Generated_whenContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALWAYS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALWAYS, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generated_when;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGenerated_when) {
             listener.enterGenerated_when(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGenerated_when) {
             listener.exitGenerated_when(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGenerated_when) {
            return visitor.visitGenerated_when(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Deferrable_triggerContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEFERRABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DEFERRABLE, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_deferrable_trigger;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDeferrable_trigger) {
             listener.enterDeferrable_trigger(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDeferrable_trigger) {
             listener.exitDeferrable_trigger(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeferrable_trigger) {
            return visitor.visitDeferrable_trigger(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Initially_triggerContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INITIALLY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INITIALLY, 0)!;
    }
    public KW_DEFERRED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFERRED, 0);
    }
    public KW_IMMEDIATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMMEDIATE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_initially_trigger;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInitially_trigger) {
             listener.enterInitially_trigger(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInitially_trigger) {
             listener.exitInitially_trigger(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInitially_trigger) {
            return visitor.visitInitially_trigger(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TablelikeclauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LIKE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LIKE, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public tablelikeoptionlist(): TablelikeoptionlistContext {
        return this.getRuleContext(0, TablelikeoptionlistContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablelikeclause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablelikeclause) {
             listener.enterTablelikeclause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablelikeclause) {
             listener.exitTablelikeclause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablelikeclause) {
            return visitor.visitTablelikeclause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TablelikeoptionContext);
    }
    public KW_INCLUDING(): antlr.TerminalNode[];
    public KW_INCLUDING(i: number): antlr.TerminalNode | null;
    public KW_INCLUDING(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_INCLUDING);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_INCLUDING, i);
    	}
    }
    public KW_EXCLUDING(): antlr.TerminalNode[];
    public KW_EXCLUDING(i: number): antlr.TerminalNode | null;
    public KW_EXCLUDING(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_EXCLUDING);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_EXCLUDING, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablelikeoptionlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablelikeoptionlist) {
             listener.enterTablelikeoptionlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablelikeoptionlist) {
             listener.exitTablelikeoptionlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablelikeoptionlist) {
            return visitor.visitTablelikeoptionlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TablelikeoptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COMMENTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMENTS, 0);
    }
    public KW_CONSTRAINTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINTS, 0);
    }
    public KW_DEFAULTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULTS, 0);
    }
    public KW_IDENTITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IDENTITY, 0);
    }
    public KW_GENERATED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GENERATED, 0);
    }
    public KW_INDEXES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEXES, 0);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public KW_STORAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STORAGE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablelikeoption;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablelikeoption) {
             listener.enterTablelikeoption(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablelikeoption) {
             listener.exitTablelikeoption(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablelikeoption) {
            return visitor.visitTablelikeoption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableconstraintContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public constraintelem(): ConstraintelemContext {
        return this.getRuleContext(0, ConstraintelemContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tableconstraint;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTableconstraint) {
             listener.enterTableconstraint(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTableconstraint) {
             listener.exitTableconstraint(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableconstraint) {
            return visitor.visitTableconstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstraintelemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHECK, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public constraintattributespec(): ConstraintattributespecContext | null {
        return this.getRuleContext(0, ConstraintattributespecContext);
    }
    public KW_UNIQUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNIQUE, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public existingindex(): ExistingindexContext | null {
        return this.getRuleContext(0, ExistingindexContext);
    }
    public opt_c_include(): Opt_c_includeContext | null {
        return this.getRuleContext(0, Opt_c_includeContext);
    }
    public opt_definition(): Opt_definitionContext | null {
        return this.getRuleContext(0, Opt_definitionContext);
    }
    public optconstablespace(): OptconstablespaceContext | null {
        return this.getRuleContext(0, OptconstablespaceContext);
    }
    public KW_PRIMARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIMARY, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_KEY, 0);
    }
    public KW_EXCLUDE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCLUDE, 0);
    }
    public exclusionconstraintlist(): ExclusionconstraintlistContext | null {
        return this.getRuleContext(0, ExclusionconstraintlistContext);
    }
    public access_method_clause(): Access_method_clauseContext | null {
        return this.getRuleContext(0, Access_method_clauseContext);
    }
    public exclusionwhereclause(): ExclusionwhereclauseContext | null {
        return this.getRuleContext(0, ExclusionwhereclauseContext);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_REFERENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REFERENCES, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public opt_column_list(): Opt_column_listContext | null {
        return this.getRuleContext(0, Opt_column_listContext);
    }
    public key_match(): Key_matchContext | null {
        return this.getRuleContext(0, Key_matchContext);
    }
    public key_actions(): Key_actionsContext | null {
        return this.getRuleContext(0, Key_actionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constraintelem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstraintelem) {
             listener.enterConstraintelem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstraintelem) {
             listener.exitConstraintelem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstraintelem) {
            return visitor.visitConstraintelem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_no_inheritContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NO, 0)!;
    }
    public KW_INHERIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INHERIT, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_no_inherit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_no_inherit) {
             listener.enterOpt_no_inherit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_no_inherit) {
             listener.exitOpt_no_inherit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_no_inherit) {
            return visitor.visitOpt_no_inherit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_column_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public column_list(): Column_listContext {
        return this.getRuleContext(0, Column_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_column_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_column_list) {
             listener.enterOpt_column_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_column_list) {
             listener.exitOpt_column_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_column_list) {
            return visitor.visitOpt_column_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_column_list_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public column_list_create(): Column_list_createContext {
        return this.getRuleContext(0, Column_list_createContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_column_list_create;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_column_list_create) {
             listener.enterOpt_column_list_create(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_column_list_create) {
             listener.exitOpt_column_list_create(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_column_list_create) {
            return visitor.visitOpt_column_list_create(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Column_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumn_list) {
             listener.enterColumn_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumn_list) {
             listener.exitColumn_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumn_list) {
            return visitor.visitColumn_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Column_name_createContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_list_create;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumn_list_create) {
             listener.enterColumn_list_create(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumn_list_create) {
             listener.exitColumn_list_create(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumn_list_create) {
            return visitor.visitColumn_list_create(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_c_includeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INCLUDE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INCLUDE, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public column_list(): Column_listContext {
        return this.getRuleContext(0, Column_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_c_include;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_c_include) {
             listener.enterOpt_c_include(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_c_include) {
             listener.exitOpt_c_include(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_c_include) {
            return visitor.visitOpt_c_include(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Key_matchContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MATCH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MATCH, 0)!;
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FULL, 0);
    }
    public KW_PARTIAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARTIAL, 0);
    }
    public KW_SIMPLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SIMPLE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_key_match;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterKey_match) {
             listener.enterKey_match(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitKey_match) {
             listener.exitKey_match(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitKey_match) {
            return visitor.visitKey_match(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, ExclusionconstraintelemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exclusionconstraintlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExclusionconstraintlist) {
             listener.enterExclusionconstraintlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExclusionconstraintlist) {
             listener.exitExclusionconstraintlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExclusionconstraintlist) {
            return visitor.visitExclusionconstraintlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExclusionconstraintelemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public index_elem(): Index_elemContext {
        return this.getRuleContext(0, Index_elemContext)!;
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public any_operator(): Any_operatorContext | null {
        return this.getRuleContext(0, Any_operatorContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exclusionconstraintelem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExclusionconstraintelem) {
             listener.enterExclusionconstraintelem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExclusionconstraintelem) {
             listener.exitExclusionconstraintelem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExclusionconstraintelem) {
            return visitor.visitExclusionconstraintelem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExclusionwhereclauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHERE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHERE, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exclusionwhereclause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExclusionwhereclause) {
             listener.enterExclusionwhereclause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExclusionwhereclause) {
             listener.exitExclusionwhereclause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExclusionwhereclause) {
            return visitor.visitExclusionwhereclause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Key_actionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public key_update(): Key_updateContext | null {
        return this.getRuleContext(0, Key_updateContext);
    }
    public key_delete(): Key_deleteContext | null {
        return this.getRuleContext(0, Key_deleteContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_key_actions;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterKey_actions) {
             listener.enterKey_actions(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitKey_actions) {
             listener.exitKey_actions(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitKey_actions) {
            return visitor.visitKey_actions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Key_updateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public KW_UPDATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0)!;
    }
    public key_action(): Key_actionContext {
        return this.getRuleContext(0, Key_actionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_key_update;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterKey_update) {
             listener.enterKey_update(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitKey_update) {
             listener.exitKey_update(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitKey_update) {
            return visitor.visitKey_update(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Key_deleteContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public KW_DELETE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0)!;
    }
    public key_action(): Key_actionContext {
        return this.getRuleContext(0, Key_actionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_key_delete;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterKey_delete) {
             listener.enterKey_delete(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitKey_delete) {
             listener.exitKey_delete(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitKey_delete) {
            return visitor.visitKey_delete(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Key_actionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_ACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ACTION, 0);
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTRICT, 0);
    }
    public KW_CASCADE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CASCADE, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_key_action;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterKey_action) {
             listener.enterKey_action(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitKey_action) {
             listener.exitKey_action(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitKey_action) {
            return visitor.visitKey_action(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptinheritContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INHERITS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INHERITS, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public qualified_name_list(): Qualified_name_listContext {
        return this.getRuleContext(0, Qualified_name_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optinherit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptinherit) {
             listener.enterOptinherit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptinherit) {
             listener.exitOptinherit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptinherit) {
            return visitor.visitOptinherit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptpartitionspecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public partitionspec(): PartitionspecContext {
        return this.getRuleContext(0, PartitionspecContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optpartitionspec;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptpartitionspec) {
             listener.enterOptpartitionspec(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptpartitionspec) {
             listener.exitOptpartitionspec(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptpartitionspec) {
            return visitor.visitOptpartitionspec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionspecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public part_params(): Part_paramsContext {
        return this.getRuleContext(0, Part_paramsContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_partitionspec;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPartitionspec) {
             listener.enterPartitionspec(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPartitionspec) {
             listener.exitPartitionspec(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionspec) {
            return visitor.visitPartitionspec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Part_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_part_params;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPart_params) {
             listener.enterPart_params(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPart_params) {
             listener.exitPart_params(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPart_params) {
            return visitor.visitPart_params(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Part_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public opt_collate(): Opt_collateContext | null {
        return this.getRuleContext(0, Opt_collateContext);
    }
    public opt_class(): Opt_classContext | null {
        return this.getRuleContext(0, Opt_classContext);
    }
    public func_expr_windowless(): Func_expr_windowlessContext | null {
        return this.getRuleContext(0, Func_expr_windowlessContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_part_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPart_elem) {
             listener.enterPart_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPart_elem) {
             listener.exitPart_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPart_elem) {
            return visitor.visitPart_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Table_access_method_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_access_method_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTable_access_method_clause) {
             listener.enterTable_access_method_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTable_access_method_clause) {
             listener.exitTable_access_method_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTable_access_method_clause) {
            return visitor.visitTable_access_method_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptwithContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public reloptions(): ReloptionsContext | null {
        return this.getRuleContext(0, ReloptionsContext);
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITHOUT, 0);
    }
    public KW_OIDS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OIDS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optwith;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptwith) {
             listener.enterOptwith(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptwith) {
             listener.exitOptwith(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptwith) {
            return visitor.visitOptwith(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OncommitoptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public KW_COMMIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COMMIT, 0)!;
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWS, 0);
    }
    public KW_PRESERVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRESERVE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_oncommitoption;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOncommitoption) {
             listener.enterOncommitoption(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOncommitoption) {
             listener.exitOncommitoption(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOncommitoption) {
            return visitor.visitOncommitoption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OpttablespaceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespace_name(): Tablespace_nameContext {
        return this.getRuleContext(0, Tablespace_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opttablespace;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpttablespace) {
             listener.enterOpttablespace(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpttablespace) {
             listener.exitOpttablespace(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpttablespace) {
            return visitor.visitOpttablespace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Index_paramenters_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_include(): Opt_includeContext | null {
        return this.getRuleContext(0, Opt_includeContext);
    }
    public with_clause(): With_clauseContext | null {
        return this.getRuleContext(0, With_clauseContext);
    }
    public optconstablespace(): OptconstablespaceContext | null {
        return this.getRuleContext(0, OptconstablespaceContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_paramenters_create;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_paramenters_create) {
             listener.enterIndex_paramenters_create(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_paramenters_create) {
             listener.exitIndex_paramenters_create(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_paramenters_create) {
            return visitor.visitIndex_paramenters_create(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptconstablespaceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespace_name(): Tablespace_nameContext {
        return this.getRuleContext(0, Tablespace_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optconstablespace;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptconstablespace) {
             listener.enterOptconstablespace(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptconstablespace) {
             listener.exitOptconstablespace(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptconstablespace) {
            return visitor.visitOptconstablespace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExistingindexContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_existingindex;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExistingindex) {
             listener.enterExistingindex(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExistingindex) {
             listener.exitExistingindex(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExistingindex) {
            return visitor.visitExistingindex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatestatsstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_STATISTICS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public from_list(): From_listContext {
        return this.getRuleContext(0, From_listContext)!;
    }
    public column_expr_list(): Column_expr_listContext | null {
        return this.getRuleContext(0, Column_expr_listContext);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public opt_name_list(): Opt_name_listContext | null {
        return this.getRuleContext(0, Opt_name_listContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createstatsstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatestatsstmt) {
             listener.enterCreatestatsstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatestatsstmt) {
             listener.exitCreatestatsstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatestatsstmt) {
            return visitor.visitCreatestatsstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterstatsstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_STATISTICS(): antlr.TerminalNode[];
    public KW_STATISTICS(i: number): antlr.TerminalNode | null;
    public KW_STATISTICS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_STATISTICS);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_STATISTICS, i);
    	}
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public signediconst(): SignediconstContext {
        return this.getRuleContext(0, SignediconstContext)!;
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterstatsstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterstatsstmt) {
             listener.enterAlterstatsstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterstatsstmt) {
             listener.exitAlterstatsstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterstatsstmt) {
            return visitor.visitAlterstatsstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateasstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createasstmt;
    }
    public override copyFrom(ctx: CreateasstmtContext): void {
        super.copyFrom(ctx);
    }
}
export class QueryCreateTableContext extends CreateasstmtContext {
    public constructor(ctx: CreateasstmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0)!;
    }
    public create_as_target(): Create_as_targetContext {
        return this.getRuleContext(0, Create_as_targetContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public selectstmt(): SelectstmtContext {
        return this.getRuleContext(0, SelectstmtContext)!;
    }
    public opttemp(): OpttempContext | null {
        return this.getRuleContext(0, OpttempContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opt_with_data(): Opt_with_dataContext | null {
        return this.getRuleContext(0, Opt_with_dataContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterQueryCreateTable) {
             listener.enterQueryCreateTable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitQueryCreateTable) {
             listener.exitQueryCreateTable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitQueryCreateTable) {
            return visitor.visitQueryCreateTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Create_as_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public table_name_create(): Table_name_createContext {
        return this.getRuleContext(0, Table_name_createContext)!;
    }
    public opt_column_list_create(): Opt_column_list_createContext | null {
        return this.getRuleContext(0, Opt_column_list_createContext);
    }
    public table_access_method_clause(): Table_access_method_clauseContext | null {
        return this.getRuleContext(0, Table_access_method_clauseContext);
    }
    public optwith(): OptwithContext | null {
        return this.getRuleContext(0, OptwithContext);
    }
    public oncommitoption(): OncommitoptionContext | null {
        return this.getRuleContext(0, OncommitoptionContext);
    }
    public opttablespace(): OpttablespaceContext | null {
        return this.getRuleContext(0, OpttablespaceContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_create_as_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreate_as_target) {
             listener.enterCreate_as_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreate_as_target) {
             listener.exitCreate_as_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreate_as_target) {
            return visitor.visitCreate_as_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_with_dataContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATA, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_with_data;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_with_data) {
             listener.enterOpt_with_data(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_with_data) {
             listener.exitOpt_with_data(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_with_data) {
            return visitor.visitOpt_with_data(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatematviewstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_creatematviewstmt;
    }
    public override copyFrom(ctx: CreatematviewstmtContext): void {
        super.copyFrom(ctx);
    }
}
export class CreateMaterializedViewContext extends CreatematviewstmtContext {
    public constructor(ctx: CreatematviewstmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_MATERIALIZED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0)!;
    }
    public KW_VIEW(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0)!;
    }
    public create_mv_target(): Create_mv_targetContext {
        return this.getRuleContext(0, Create_mv_targetContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public selectstmt(): SelectstmtContext {
        return this.getRuleContext(0, SelectstmtContext)!;
    }
    public optnolog(): OptnologContext | null {
        return this.getRuleContext(0, OptnologContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opt_with_data(): Opt_with_dataContext | null {
        return this.getRuleContext(0, Opt_with_dataContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateMaterializedView) {
             listener.enterCreateMaterializedView(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateMaterializedView) {
             listener.exitCreateMaterializedView(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateMaterializedView) {
            return visitor.visitCreateMaterializedView(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Create_mv_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public view_name_create(): View_name_createContext {
        return this.getRuleContext(0, View_name_createContext)!;
    }
    public opt_column_list_create(): Opt_column_list_createContext | null {
        return this.getRuleContext(0, Opt_column_list_createContext);
    }
    public table_access_method_clause(): Table_access_method_clauseContext | null {
        return this.getRuleContext(0, Table_access_method_clauseContext);
    }
    public opt_reloptions(): Opt_reloptionsContext | null {
        return this.getRuleContext(0, Opt_reloptionsContext);
    }
    public opttablespace(): OpttablespaceContext | null {
        return this.getRuleContext(0, OpttablespaceContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_create_mv_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreate_mv_target) {
             listener.enterCreate_mv_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreate_mv_target) {
             listener.exitCreate_mv_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreate_mv_target) {
            return visitor.visitCreate_mv_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptnologContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNLOGGED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UNLOGGED, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optnolog;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptnolog) {
             listener.enterOptnolog(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptnolog) {
             listener.exitOptnolog(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptnolog) {
            return visitor.visitOptnolog(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RefreshmatviewstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REFRESH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REFRESH, 0)!;
    }
    public KW_MATERIALIZED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0)!;
    }
    public KW_VIEW(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0)!;
    }
    public view_name(): View_nameContext {
        return this.getRuleContext(0, View_nameContext)!;
    }
    public opt_concurrently(): Opt_concurrentlyContext | null {
        return this.getRuleContext(0, Opt_concurrentlyContext);
    }
    public opt_with_data(): Opt_with_dataContext | null {
        return this.getRuleContext(0, Opt_with_dataContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_refreshmatviewstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRefreshmatviewstmt) {
             listener.enterRefreshmatviewstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRefreshmatviewstmt) {
             listener.exitRefreshmatviewstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRefreshmatviewstmt) {
            return visitor.visitRefreshmatviewstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateseqstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_SEQUENCE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public opttemp(): OpttempContext | null {
        return this.getRuleContext(0, OpttempContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public optseqoptlist(): OptseqoptlistContext | null {
        return this.getRuleContext(0, OptseqoptlistContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createseqstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateseqstmt) {
             listener.enterCreateseqstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateseqstmt) {
             listener.exitCreateseqstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateseqstmt) {
            return visitor.visitCreateseqstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterseqstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_SEQUENCE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public seqoptlist(): SeqoptlistContext {
        return this.getRuleContext(0, SeqoptlistContext)!;
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterseqstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterseqstmt) {
             listener.enterAlterseqstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterseqstmt) {
             listener.exitAlterseqstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterseqstmt) {
            return visitor.visitAlterseqstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptseqoptlistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public seqoptlist(): SeqoptlistContext {
        return this.getRuleContext(0, SeqoptlistContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optseqoptlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptseqoptlist) {
             listener.enterOptseqoptlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptseqoptlist) {
             listener.exitOptseqoptlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptseqoptlist) {
            return visitor.visitOptseqoptlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptparenthesizedseqoptlistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public seqoptlist(): SeqoptlistContext {
        return this.getRuleContext(0, SeqoptlistContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optparenthesizedseqoptlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptparenthesizedseqoptlist) {
             listener.enterOptparenthesizedseqoptlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptparenthesizedseqoptlist) {
             listener.exitOptparenthesizedseqoptlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptparenthesizedseqoptlist) {
            return visitor.visitOptparenthesizedseqoptlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, SeqoptelemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_seqoptlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSeqoptlist) {
             listener.enterSeqoptlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSeqoptlist) {
             listener.exitSeqoptlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSeqoptlist) {
            return visitor.visitSeqoptlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SeqoptelemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public simpletypename(): SimpletypenameContext | null {
        return this.getRuleContext(0, SimpletypenameContext);
    }
    public KW_CACHE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CACHE, 0);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public KW_CYCLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CYCLE, 0);
    }
    public KW_INCREMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INCREMENT, 0);
    }
    public opt_by(): Opt_byContext | null {
        return this.getRuleContext(0, Opt_byContext);
    }
    public KW_MAXVALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MAXVALUE, 0);
    }
    public KW_MINVALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MINVALUE, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_OWNED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNED, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public KW_NAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NAME, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_START(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_START, 0);
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public KW_RESTART(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTART, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_seqoptelem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSeqoptelem) {
             listener.enterSeqoptelem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSeqoptelem) {
             listener.exitSeqoptelem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSeqoptelem) {
            return visitor.visitSeqoptelem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_byContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_by;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_by) {
             listener.enterOpt_by(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_by) {
             listener.exitOpt_by(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_by) {
            return visitor.visitOpt_by(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class NumericonlyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fconst(): FconstContext | null {
        return this.getRuleContext(0, FconstContext);
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PLUS, 0);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.MINUS, 0);
    }
    public signediconst(): SignediconstContext | null {
        return this.getRuleContext(0, SignediconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_numericonly;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNumericonly) {
             listener.enterNumericonly(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNumericonly) {
             listener.exitNumericonly(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNumericonly) {
            return visitor.visitNumericonly(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, NumericonlyContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_numericonly_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNumericonly_list) {
             listener.enterNumericonly_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNumericonly_list) {
             listener.exitNumericonly_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNumericonly_list) {
            return visitor.visitNumericonly_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateplangstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_LANGUAGE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public opt_or_replace(): Opt_or_replaceContext | null {
        return this.getRuleContext(0, Opt_or_replaceContext);
    }
    public opt_trusted(): Opt_trustedContext | null {
        return this.getRuleContext(0, Opt_trustedContext);
    }
    public opt_procedural(): Opt_proceduralContext | null {
        return this.getRuleContext(0, Opt_proceduralContext);
    }
    public KW_HANDLER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HANDLER, 0);
    }
    public handler_name(): Handler_nameContext | null {
        return this.getRuleContext(0, Handler_nameContext);
    }
    public opt_inline_handler(): Opt_inline_handlerContext | null {
        return this.getRuleContext(0, Opt_inline_handlerContext);
    }
    public opt_validator(): Opt_validatorContext | null {
        return this.getRuleContext(0, Opt_validatorContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createplangstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateplangstmt) {
             listener.enterCreateplangstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateplangstmt) {
             listener.exitCreateplangstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateplangstmt) {
            return visitor.visitCreateplangstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_trustedContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TRUSTED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TRUSTED, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_trusted;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_trusted) {
             listener.enterOpt_trusted(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_trusted) {
             listener.exitOpt_trusted(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_trusted) {
            return visitor.visitOpt_trusted(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Handler_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_handler_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterHandler_name) {
             listener.enterHandler_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitHandler_name) {
             listener.exitHandler_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandler_name) {
            return visitor.visitHandler_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_inline_handlerContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INLINE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INLINE, 0)!;
    }
    public handler_name(): Handler_nameContext {
        return this.getRuleContext(0, Handler_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_inline_handler;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_inline_handler) {
             listener.enterOpt_inline_handler(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_inline_handler) {
             listener.exitOpt_inline_handler(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_inline_handler) {
            return visitor.visitOpt_inline_handler(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Validator_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VALIDATOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VALIDATOR, 0)!;
    }
    public handler_name(): Handler_nameContext | null {
        return this.getRuleContext(0, Handler_nameContext);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_validator_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterValidator_clause) {
             listener.enterValidator_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitValidator_clause) {
             listener.exitValidator_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitValidator_clause) {
            return visitor.visitValidator_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_validatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public validator_clause(): Validator_clauseContext {
        return this.getRuleContext(0, Validator_clauseContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_validator;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_validator) {
             listener.enterOpt_validator(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_validator) {
             listener.exitOpt_validator(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_validator) {
            return visitor.visitOpt_validator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_proceduralContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PROCEDURAL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PROCEDURAL, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_procedural;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_procedural) {
             listener.enterOpt_procedural(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_procedural) {
             listener.exitOpt_procedural(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_procedural) {
            return visitor.visitOpt_procedural(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatetablespacestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespace_name(): Tablespace_nameContext {
        return this.getRuleContext(0, Tablespace_nameContext)!;
    }
    public KW_LOCATION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LOCATION, 0)!;
    }
    public sconst(): SconstContext {
        return this.getRuleContext(0, SconstContext)!;
    }
    public opttablespaceowner(): OpttablespaceownerContext | null {
        return this.getRuleContext(0, OpttablespaceownerContext);
    }
    public opt_reloptions(): Opt_reloptionsContext | null {
        return this.getRuleContext(0, Opt_reloptionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createtablespacestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatetablespacestmt) {
             listener.enterCreatetablespacestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatetablespacestmt) {
             listener.exitCreatetablespacestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatetablespacestmt) {
            return visitor.visitCreatetablespacestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OpttablespaceownerContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OWNER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0)!;
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opttablespaceowner;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpttablespaceowner) {
             listener.enterOpttablespaceowner(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpttablespaceowner) {
             listener.exitOpttablespaceowner(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpttablespaceowner) {
            return visitor.visitOpttablespaceowner(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateextensionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_EXTENSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public create_extension_opt_list(): Create_extension_opt_listContext {
        return this.getRuleContext(0, Create_extension_opt_listContext)!;
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createextensionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateextensionstmt) {
             listener.enterCreateextensionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateextensionstmt) {
             listener.exitCreateextensionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateextensionstmt) {
            return visitor.visitCreateextensionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Create_extension_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_create_extension_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreate_extension_opt_list) {
             listener.enterCreate_extension_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreate_extension_opt_list) {
             listener.exitCreate_extension_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreate_extension_opt_list) {
            return visitor.visitCreate_extension_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Create_extension_opt_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public KW_VERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VERSION, 0);
    }
    public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext | null {
        return this.getRuleContext(0, Nonreservedword_or_sconstContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_CASCADE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CASCADE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_create_extension_opt_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreate_extension_opt_item) {
             listener.enterCreate_extension_opt_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreate_extension_opt_item) {
             listener.exitCreate_extension_opt_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreate_extension_opt_item) {
            return visitor.visitCreate_extension_opt_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterextensionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_EXTENSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_UPDATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0)!;
    }
    public alter_extension_opt_list(): Alter_extension_opt_listContext {
        return this.getRuleContext(0, Alter_extension_opt_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterextensionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterextensionstmt) {
             listener.enterAlterextensionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterextensionstmt) {
             listener.exitAlterextensionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterextensionstmt) {
            return visitor.visitAlterextensionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Alter_extension_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_extension_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_extension_opt_list) {
             listener.enterAlter_extension_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_extension_opt_list) {
             listener.exitAlter_extension_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_extension_opt_list) {
            return visitor.visitAlter_extension_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_extension_opt_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
        return this.getRuleContext(0, Nonreservedword_or_sconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_extension_opt_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_extension_opt_item) {
             listener.enterAlter_extension_opt_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_extension_opt_item) {
             listener.exitAlter_extension_opt_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_extension_opt_item) {
            return visitor.visitAlter_extension_opt_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterextensioncontentsstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_EXTENSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0)!;
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public add_drop(): Add_dropContext {
        return this.getRuleContext(0, Add_dropContext)!;
    }
    public object_type_name(): Object_type_nameContext | null {
        return this.getRuleContext(0, Object_type_nameContext);
    }
    public object_type_any_name(): Object_type_any_nameContext | null {
        return this.getRuleContext(0, Object_type_any_nameContext);
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public aggregate_with_argtypes(): Aggregate_with_argtypesContext | null {
        return this.getRuleContext(0, Aggregate_with_argtypesContext);
    }
    public KW_CAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CAST, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public typename(): TypenameContext[];
    public typename(i: number): TypenameContext | null;
    public typename(i?: number): TypenameContext[] | TypenameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TypenameContext);
        }

        return this.getRuleContext(i, TypenameContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public operator_with_argtypes(): Operator_with_argtypesContext | null {
        return this.getRuleContext(0, Operator_with_argtypesContext);
    }
    public KW_CLASS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_FAMILY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public KW_TRANSFORM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSFORM, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterextensioncontentsstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterextensioncontentsstmt) {
             listener.enterAlterextensioncontentsstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterextensioncontentsstmt) {
             listener.exitAlterextensioncontentsstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterextensioncontentsstmt) {
            return visitor.visitAlterextensioncontentsstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatefdwstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DATA, 0)!;
    }
    public KW_WRAPPER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public opt_fdw_options(): Opt_fdw_optionsContext | null {
        return this.getRuleContext(0, Opt_fdw_optionsContext);
    }
    public create_generic_options(): Create_generic_optionsContext | null {
        return this.getRuleContext(0, Create_generic_optionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createfdwstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatefdwstmt) {
             listener.enterCreatefdwstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatefdwstmt) {
             listener.exitCreatefdwstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatefdwstmt) {
            return visitor.visitCreatefdwstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Fdw_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HANDLER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HANDLER, 0);
    }
    public handler_name(): Handler_nameContext | null {
        return this.getRuleContext(0, Handler_nameContext);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_VALIDATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALIDATOR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_fdw_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFdw_option) {
             listener.enterFdw_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFdw_option) {
             listener.exitFdw_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFdw_option) {
            return visitor.visitFdw_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Fdw_optionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_fdw_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFdw_options) {
             listener.enterFdw_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFdw_options) {
             listener.exitFdw_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFdw_options) {
            return visitor.visitFdw_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_fdw_optionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fdw_options(): Fdw_optionsContext {
        return this.getRuleContext(0, Fdw_optionsContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_fdw_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_fdw_options) {
             listener.enterOpt_fdw_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_fdw_options) {
             listener.exitOpt_fdw_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_fdw_options) {
            return visitor.visitOpt_fdw_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterfdwstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DATA, 0)!;
    }
    public KW_WRAPPER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public alter_generic_options(): Alter_generic_optionsContext | null {
        return this.getRuleContext(0, Alter_generic_optionsContext);
    }
    public opt_fdw_options(): Opt_fdw_optionsContext | null {
        return this.getRuleContext(0, Opt_fdw_optionsContext);
    }
    public fdw_options(): Fdw_optionsContext | null {
        return this.getRuleContext(0, Fdw_optionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterfdwstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterfdwstmt) {
             listener.enterAlterfdwstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterfdwstmt) {
             listener.exitAlterfdwstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterfdwstmt) {
            return visitor.visitAlterfdwstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Create_generic_optionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OPTIONS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPTIONS, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public generic_option_list(): Generic_option_listContext {
        return this.getRuleContext(0, Generic_option_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_create_generic_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreate_generic_options) {
             listener.enterCreate_generic_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreate_generic_options) {
             listener.exitCreate_generic_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreate_generic_options) {
            return visitor.visitCreate_generic_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Generic_option_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generic_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGeneric_option_list) {
             listener.enterGeneric_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGeneric_option_list) {
             listener.exitGeneric_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGeneric_option_list) {
            return visitor.visitGeneric_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_generic_optionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OPTIONS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPTIONS, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public alter_generic_option_list(): Alter_generic_option_listContext {
        return this.getRuleContext(0, Alter_generic_option_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_generic_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_generic_options) {
             listener.enterAlter_generic_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_generic_options) {
             listener.exitAlter_generic_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_generic_options) {
            return visitor.visitAlter_generic_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Alter_generic_option_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_generic_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_generic_option_list) {
             listener.enterAlter_generic_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_generic_option_list) {
             listener.exitAlter_generic_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_generic_option_list) {
            return visitor.visitAlter_generic_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alter_generic_option_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public generic_option_elem(): Generic_option_elemContext {
        return this.getRuleContext(0, Generic_option_elemContext)!;
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alter_generic_option_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlter_generic_option_elem) {
             listener.enterAlter_generic_option_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlter_generic_option_elem) {
             listener.exitAlter_generic_option_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlter_generic_option_elem) {
            return visitor.visitAlter_generic_option_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Generic_option_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public generic_option_name(): Generic_option_nameContext {
        return this.getRuleContext(0, Generic_option_nameContext)!;
    }
    public generic_option_arg(): Generic_option_argContext {
        return this.getRuleContext(0, Generic_option_argContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generic_option_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGeneric_option_elem) {
             listener.enterGeneric_option_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGeneric_option_elem) {
             listener.exitGeneric_option_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGeneric_option_elem) {
            return visitor.visitGeneric_option_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Generic_option_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public collabel(): CollabelContext {
        return this.getRuleContext(0, CollabelContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generic_option_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGeneric_option_name) {
             listener.enterGeneric_option_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGeneric_option_name) {
             listener.exitGeneric_option_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGeneric_option_name) {
            return visitor.visitGeneric_option_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Generic_option_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext {
        return this.getRuleContext(0, SconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generic_option_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGeneric_option_arg) {
             listener.enterGeneric_option_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGeneric_option_arg) {
             listener.exitGeneric_option_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGeneric_option_arg) {
            return visitor.visitGeneric_option_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateforeignserverstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0)!;
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DATA, 0)!;
    }
    public KW_WRAPPER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0)!;
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opt_type(): Opt_typeContext | null {
        return this.getRuleContext(0, Opt_typeContext);
    }
    public opt_foreign_server_version(): Opt_foreign_server_versionContext | null {
        return this.getRuleContext(0, Opt_foreign_server_versionContext);
    }
    public create_generic_options(): Create_generic_optionsContext | null {
        return this.getRuleContext(0, Create_generic_optionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createforeignserverstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateforeignserverstmt) {
             listener.enterCreateforeignserverstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateforeignserverstmt) {
             listener.exitCreateforeignserverstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateforeignserverstmt) {
            return visitor.visitCreateforeignserverstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TYPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0)!;
    }
    public sconst(): SconstContext {
        return this.getRuleContext(0, SconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_type) {
             listener.enterOpt_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_type) {
             listener.exitOpt_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_type) {
            return visitor.visitOpt_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Foreign_server_versionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VERSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VERSION, 0)!;
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_foreign_server_version;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterForeign_server_version) {
             listener.enterForeign_server_version(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitForeign_server_version) {
             listener.exitForeign_server_version(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitForeign_server_version) {
            return visitor.visitForeign_server_version(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_foreign_server_versionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public foreign_server_version(): Foreign_server_versionContext {
        return this.getRuleContext(0, Foreign_server_versionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_foreign_server_version;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_foreign_server_version) {
             listener.enterOpt_foreign_server_version(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_foreign_server_version) {
             listener.exitOpt_foreign_server_version(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_foreign_server_version) {
            return visitor.visitOpt_foreign_server_version(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterforeignserverstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public alter_generic_options(): Alter_generic_optionsContext | null {
        return this.getRuleContext(0, Alter_generic_optionsContext);
    }
    public foreign_server_version(): Foreign_server_versionContext | null {
        return this.getRuleContext(0, Foreign_server_versionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterforeignserverstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterforeignserverstmt) {
             listener.enterAlterforeignserverstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterforeignserverstmt) {
             listener.exitAlterforeignserverstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterforeignserverstmt) {
            return visitor.visitAlterforeignserverstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateforeigntablestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createforeigntablestmt;
    }
    public override copyFrom(ctx: CreateforeigntablestmtContext): void {
        super.copyFrom(ctx);
    }
}
export class CreateForeignTableContext extends CreateforeigntablestmtContext {
    public constructor(ctx: CreateforeigntablestmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0)!;
    }
    public table_name_create(): Table_name_createContext {
        return this.getRuleContext(0, Table_name_createContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opttableelementlist(): OpttableelementlistContext | null {
        return this.getRuleContext(0, OpttableelementlistContext);
    }
    public optinherit(): OptinheritContext | null {
        return this.getRuleContext(0, OptinheritContext);
    }
    public create_generic_options(): Create_generic_optionsContext | null {
        return this.getRuleContext(0, Create_generic_optionsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateForeignTable) {
             listener.enterCreateForeignTable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateForeignTable) {
             listener.exitCreateForeignTable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateForeignTable) {
            return visitor.visitCreateForeignTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CreatePartitionForeignTableContext extends CreateforeigntablestmtContext {
    public constructor(ctx: CreateforeigntablestmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0)!;
    }
    public table_name_create(): Table_name_createContext {
        return this.getRuleContext(0, Table_name_createContext)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0)!;
    }
    public KW_OF(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OF, 0)!;
    }
    public table_name(): Table_nameContext {
        return this.getRuleContext(0, Table_nameContext)!;
    }
    public partitionboundspec(): PartitionboundspecContext {
        return this.getRuleContext(0, PartitionboundspecContext)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opttypedtableelementlist(): OpttypedtableelementlistContext | null {
        return this.getRuleContext(0, OpttypedtableelementlistContext);
    }
    public create_generic_options(): Create_generic_optionsContext | null {
        return this.getRuleContext(0, Create_generic_optionsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatePartitionForeignTable) {
             listener.enterCreatePartitionForeignTable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatePartitionForeignTable) {
             listener.exitCreatePartitionForeignTable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatePartitionForeignTable) {
            return visitor.visitCreatePartitionForeignTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ImportforeignschemastmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IMPORT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IMPORT, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0)!;
    }
    public KW_SCHEMA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0)!;
    }
    public schema_name(): Schema_nameContext {
        return this.getRuleContext(0, Schema_nameContext)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0)!;
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTO, 0)!;
    }
    public import_qualification(): Import_qualificationContext | null {
        return this.getRuleContext(0, Import_qualificationContext);
    }
    public create_generic_options(): Create_generic_optionsContext | null {
        return this.getRuleContext(0, Create_generic_optionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_importforeignschemastmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterImportforeignschemastmt) {
             listener.enterImportforeignschemastmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitImportforeignschemastmt) {
             listener.exitImportforeignschemastmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitImportforeignschemastmt) {
            return visitor.visitImportforeignschemastmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Import_qualification_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LIMIT, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public KW_EXCEPT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCEPT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_import_qualification_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterImport_qualification_type) {
             listener.enterImport_qualification_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitImport_qualification_type) {
             listener.exitImport_qualification_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitImport_qualification_type) {
            return visitor.visitImport_qualification_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Import_qualificationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public import_qualification_type(): Import_qualification_typeContext {
        return this.getRuleContext(0, Import_qualification_typeContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public relation_expr_list(): Relation_expr_listContext {
        return this.getRuleContext(0, Relation_expr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_import_qualification;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterImport_qualification) {
             listener.enterImport_qualification(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitImport_qualification) {
             listener.exitImport_qualification(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitImport_qualification) {
            return visitor.visitImport_qualification(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateusermappingstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USER, 0)!;
    }
    public KW_MAPPING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MAPPING, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public auth_ident(): Auth_identContext {
        return this.getRuleContext(0, Auth_identContext)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public create_generic_options(): Create_generic_optionsContext | null {
        return this.getRuleContext(0, Create_generic_optionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createusermappingstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateusermappingstmt) {
             listener.enterCreateusermappingstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateusermappingstmt) {
             listener.exitCreateusermappingstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateusermappingstmt) {
            return visitor.visitCreateusermappingstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Auth_identContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_auth_ident;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAuth_ident) {
             listener.enterAuth_ident(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAuth_ident) {
             listener.exitAuth_ident(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAuth_ident) {
            return visitor.visitAuth_ident(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterusermappingstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USER, 0)!;
    }
    public KW_MAPPING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MAPPING, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public auth_ident(): Auth_identContext {
        return this.getRuleContext(0, Auth_identContext)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public alter_generic_options(): Alter_generic_optionsContext {
        return this.getRuleContext(0, Alter_generic_optionsContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterusermappingstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterusermappingstmt) {
             listener.enterAlterusermappingstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterusermappingstmt) {
             listener.exitAlterusermappingstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterusermappingstmt) {
            return visitor.visitAlterusermappingstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatepolicystmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_POLICY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_POLICY, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public rowsecuritydefaultpermissive(): RowsecuritydefaultpermissiveContext | null {
        return this.getRuleContext(0, RowsecuritydefaultpermissiveContext);
    }
    public rowsecuritydefaultforcmd(): RowsecuritydefaultforcmdContext | null {
        return this.getRuleContext(0, RowsecuritydefaultforcmdContext);
    }
    public rowsecuritydefaulttorole(): RowsecuritydefaulttoroleContext | null {
        return this.getRuleContext(0, RowsecuritydefaulttoroleContext);
    }
    public rowsecurityoptionalexpr(): RowsecurityoptionalexprContext | null {
        return this.getRuleContext(0, RowsecurityoptionalexprContext);
    }
    public rowsecurityoptionalwithcheck(): RowsecurityoptionalwithcheckContext | null {
        return this.getRuleContext(0, RowsecurityoptionalwithcheckContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createpolicystmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatepolicystmt) {
             listener.enterCreatepolicystmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatepolicystmt) {
             listener.exitCreatepolicystmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatepolicystmt) {
            return visitor.visitCreatepolicystmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterpolicystmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_POLICY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_POLICY, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public rowsecurityoptionaltorole(): RowsecurityoptionaltoroleContext | null {
        return this.getRuleContext(0, RowsecurityoptionaltoroleContext);
    }
    public rowsecurityoptionalexpr(): RowsecurityoptionalexprContext | null {
        return this.getRuleContext(0, RowsecurityoptionalexprContext);
    }
    public rowsecurityoptionalwithcheck(): RowsecurityoptionalwithcheckContext | null {
        return this.getRuleContext(0, RowsecurityoptionalwithcheckContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterpolicystmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterpolicystmt) {
             listener.enterAlterpolicystmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterpolicystmt) {
             listener.exitAlterpolicystmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterpolicystmt) {
            return visitor.visitAlterpolicystmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterprocedurestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_PROCEDURE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0)!;
    }
    public procedure_name(): Procedure_nameContext {
        return this.getRuleContext(0, Procedure_nameContext)!;
    }
    public procedure_cluase(): Procedure_cluaseContext {
        return this.getRuleContext(0, Procedure_cluaseContext)!;
    }
    public func_args(): Func_argsContext | null {
        return this.getRuleContext(0, Func_argsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterprocedurestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterprocedurestmt) {
             listener.enterAlterprocedurestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterprocedurestmt) {
             listener.exitAlterprocedurestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterprocedurestmt) {
            return visitor.visitAlterprocedurestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Procedure_actionContext);
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTRICT, 0);
    }
    public KW_RENAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RENAME, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public procedure_name_create(): Procedure_name_createContext | null {
        return this.getRuleContext(0, Procedure_name_createContext);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name_create(): Schema_name_createContext | null {
        return this.getRuleContext(0, Schema_name_createContext);
    }
    public KW_DEPENDS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEPENDS, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public KW_EXTENSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_procedure_cluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProcedure_cluase) {
             listener.enterProcedure_cluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProcedure_cluase) {
             listener.exitProcedure_cluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedure_cluase) {
            return visitor.visitProcedure_cluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Procedure_actionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SECURITY, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INVOKER, 0);
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFINER, 0);
    }
    public KW_EXTERNAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTERNAL, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_procedure_action;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProcedure_action) {
             listener.enterProcedure_action(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProcedure_action) {
             listener.exitProcedure_action(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedure_action) {
            return visitor.visitProcedure_action(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowsecurityoptionalexprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsecurityoptionalexpr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsecurityoptionalexpr) {
             listener.enterRowsecurityoptionalexpr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsecurityoptionalexpr) {
             listener.exitRowsecurityoptionalexpr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsecurityoptionalexpr) {
            return visitor.visitRowsecurityoptionalexpr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowsecurityoptionalwithcheckContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public KW_CHECK(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CHECK, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsecurityoptionalwithcheck;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsecurityoptionalwithcheck) {
             listener.enterRowsecurityoptionalwithcheck(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsecurityoptionalwithcheck) {
             listener.exitRowsecurityoptionalwithcheck(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsecurityoptionalwithcheck) {
            return visitor.visitRowsecurityoptionalwithcheck(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowsecuritydefaulttoroleContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public role_list(): Role_listContext {
        return this.getRuleContext(0, Role_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsecuritydefaulttorole;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsecuritydefaulttorole) {
             listener.enterRowsecuritydefaulttorole(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsecuritydefaulttorole) {
             listener.exitRowsecuritydefaulttorole(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsecuritydefaulttorole) {
            return visitor.visitRowsecuritydefaulttorole(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowsecurityoptionaltoroleContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public role_list(): Role_listContext {
        return this.getRuleContext(0, Role_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsecurityoptionaltorole;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsecurityoptionaltorole) {
             listener.enterRowsecurityoptionaltorole(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsecurityoptionaltorole) {
             listener.exitRowsecurityoptionaltorole(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsecurityoptionaltorole) {
            return visitor.visitRowsecurityoptionaltorole(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowsecuritydefaultpermissiveContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public KW_PERMISSIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PERMISSIVE, 0);
    }
    public KW_RESTRICTIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTRICTIVE, 0);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsecuritydefaultpermissive;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsecuritydefaultpermissive) {
             listener.enterRowsecuritydefaultpermissive(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsecuritydefaultpermissive) {
             listener.exitRowsecuritydefaultpermissive(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsecuritydefaultpermissive) {
            return visitor.visitRowsecuritydefaultpermissive(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowsecuritydefaultforcmdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public row_security_cmd(): Row_security_cmdContext {
        return this.getRuleContext(0, Row_security_cmdContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsecuritydefaultforcmd;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsecuritydefaultforcmd) {
             listener.enterRowsecuritydefaultforcmd(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsecuritydefaultforcmd) {
             listener.exitRowsecuritydefaultforcmd(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsecuritydefaultforcmd) {
            return visitor.visitRowsecuritydefaultforcmd(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Row_security_cmdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_SELECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SELECT, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_row_security_cmd;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRow_security_cmd) {
             listener.enterRow_security_cmd(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRow_security_cmd) {
             listener.exitRow_security_cmd(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRow_security_cmd) {
            return visitor.visitRow_security_cmd(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateamstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_ACCESS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ACCESS, 0)!;
    }
    public KW_METHOD(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_METHOD, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_TYPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0)!;
    }
    public am_type(): Am_typeContext {
        return this.getRuleContext(0, Am_typeContext)!;
    }
    public KW_HANDLER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_HANDLER, 0)!;
    }
    public handler_name(): Handler_nameContext {
        return this.getRuleContext(0, Handler_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createamstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateamstmt) {
             listener.enterCreateamstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateamstmt) {
             listener.exitCreateamstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateamstmt) {
            return visitor.visitCreateamstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Am_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_am_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAm_type) {
             listener.enterAm_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAm_type) {
             listener.exitAm_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAm_type) {
            return visitor.visitAm_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatetrigstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_TRIGGER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public triggeractiontime(): TriggeractiontimeContext {
        return this.getRuleContext(0, TriggeractiontimeContext)!;
    }
    public triggerevents(): TriggereventsContext {
        return this.getRuleContext(0, TriggereventsContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public table_name(): Table_nameContext {
        return this.getRuleContext(0, Table_nameContext)!;
    }
    public KW_EXECUTE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0)!;
    }
    public function_or_procedure(): Function_or_procedureContext {
        return this.getRuleContext(0, Function_or_procedureContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public triggerfuncargs(): TriggerfuncargsContext {
        return this.getRuleContext(0, TriggerfuncargsContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public opt_or_replace(): Opt_or_replaceContext | null {
        return this.getRuleContext(0, Opt_or_replaceContext);
    }
    public triggerreferencing(): TriggerreferencingContext | null {
        return this.getRuleContext(0, TriggerreferencingContext);
    }
    public triggerforspec(): TriggerforspecContext | null {
        return this.getRuleContext(0, TriggerforspecContext);
    }
    public triggerwhen(): TriggerwhenContext | null {
        return this.getRuleContext(0, TriggerwhenContext);
    }
    public constraintattributespec(): ConstraintattributespecContext | null {
        return this.getRuleContext(0, ConstraintattributespecContext);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public optconstrfromtable(): OptconstrfromtableContext | null {
        return this.getRuleContext(0, OptconstrfromtableContext);
    }
    public foreachrow(): ForeachrowContext | null {
        return this.getRuleContext(0, ForeachrowContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createtrigstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatetrigstmt) {
             listener.enterCreatetrigstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatetrigstmt) {
             listener.exitCreatetrigstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatetrigstmt) {
            return visitor.visitCreatetrigstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggeractiontimeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BEFORE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BEFORE, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AFTER, 0);
    }
    public KW_INSTEAD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSTEAD, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggeractiontime;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggeractiontime) {
             listener.enterTriggeractiontime(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggeractiontime) {
             listener.exitTriggeractiontime(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggeractiontime) {
            return visitor.visitTriggeractiontime(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ForeachrowContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public roworstatment(): RoworstatmentContext {
        return this.getRuleContext(0, RoworstatmentContext)!;
    }
    public KW_EACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EACH, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_foreachrow;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterForeachrow) {
             listener.enterForeachrow(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitForeachrow) {
             listener.exitForeachrow(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitForeachrow) {
            return visitor.visitForeachrow(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RoworstatmentContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public KW_STATEMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATEMENT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_roworstatment;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoworstatment) {
             listener.enterRoworstatment(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoworstatment) {
             listener.exitRoworstatment(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoworstatment) {
            return visitor.visitRoworstatment(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TriggeroneeventContext);
    }
    public KW_OR(): antlr.TerminalNode[];
    public KW_OR(i: number): antlr.TerminalNode | null;
    public KW_OR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_OR);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_OR, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerevents;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerevents) {
             listener.enterTriggerevents(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerevents) {
             listener.exitTriggerevents(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerevents) {
            return visitor.visitTriggerevents(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggeroneeventContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public KW_TRUNCATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUNCATE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggeroneevent;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggeroneevent) {
             listener.enterTriggeroneevent(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggeroneevent) {
             listener.exitTriggeroneevent(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggeroneevent) {
            return visitor.visitTriggeroneevent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggerreferencingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REFERENCING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REFERENCING, 0)!;
    }
    public triggertransitions(): TriggertransitionsContext {
        return this.getRuleContext(0, TriggertransitionsContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerreferencing;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerreferencing) {
             listener.enterTriggerreferencing(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerreferencing) {
             listener.exitTriggerreferencing(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerreferencing) {
            return visitor.visitTriggerreferencing(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TriggertransitionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggertransitions;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggertransitions) {
             listener.enterTriggertransitions(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggertransitions) {
             listener.exitTriggertransitions(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggertransitions) {
            return visitor.visitTriggertransitions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggertransitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public transitionoldornew(): TransitionoldornewContext {
        return this.getRuleContext(0, TransitionoldornewContext)!;
    }
    public transitionrowortable(): TransitionrowortableContext {
        return this.getRuleContext(0, TransitionrowortableContext)!;
    }
    public transitionrelname(): TransitionrelnameContext {
        return this.getRuleContext(0, TransitionrelnameContext)!;
    }
    public opt_as(): Opt_asContext | null {
        return this.getRuleContext(0, Opt_asContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggertransition;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggertransition) {
             listener.enterTriggertransition(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggertransition) {
             listener.exitTriggertransition(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggertransition) {
            return visitor.visitTriggertransition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransitionoldornewContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEW, 0);
    }
    public KW_OLD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OLD, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transitionoldornew;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransitionoldornew) {
             listener.enterTransitionoldornew(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransitionoldornew) {
             listener.exitTransitionoldornew(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransitionoldornew) {
            return visitor.visitTransitionoldornew(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransitionrowortableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transitionrowortable;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransitionrowortable) {
             listener.enterTransitionrowortable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransitionrowortable) {
             listener.exitTransitionrowortable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransitionrowortable) {
            return visitor.visitTransitionrowortable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransitionrelnameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transitionrelname;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransitionrelname) {
             listener.enterTransitionrelname(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransitionrelname) {
             listener.exitTransitionrelname(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransitionrelname) {
            return visitor.visitTransitionrelname(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggerforspecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public triggerfortype(): TriggerfortypeContext {
        return this.getRuleContext(0, TriggerfortypeContext)!;
    }
    public triggerforopteach(): TriggerforopteachContext | null {
        return this.getRuleContext(0, TriggerforopteachContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerforspec;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerforspec) {
             listener.enterTriggerforspec(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerforspec) {
             listener.exitTriggerforspec(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerforspec) {
            return visitor.visitTriggerforspec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggerforopteachContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EACH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EACH, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerforopteach;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerforopteach) {
             listener.enterTriggerforopteach(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerforopteach) {
             listener.exitTriggerforopteach(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerforopteach) {
            return visitor.visitTriggerforopteach(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggerfortypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public KW_STATEMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATEMENT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerfortype;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerfortype) {
             listener.enterTriggerfortype(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerfortype) {
             listener.exitTriggerfortype(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerfortype) {
            return visitor.visitTriggerfortype(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggerwhenContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerwhen;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerwhen) {
             listener.enterTriggerwhen(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerwhen) {
             listener.exitTriggerwhen(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerwhen) {
            return visitor.visitTriggerwhen(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Function_or_procedureContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_name(): Function_nameContext | null {
        return this.getRuleContext(0, Function_nameContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_name(): Procedure_nameContext | null {
        return this.getRuleContext(0, Procedure_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_function_or_procedure;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunction_or_procedure) {
             listener.enterFunction_or_procedure(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunction_or_procedure) {
             listener.exitFunction_or_procedure(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunction_or_procedure) {
            return visitor.visitFunction_or_procedure(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TriggerfuncargContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerfuncargs;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerfuncargs) {
             listener.enterTriggerfuncargs(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerfuncargs) {
             listener.exitTriggerfuncargs(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerfuncargs) {
            return visitor.visitTriggerfuncargs(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TriggerfuncargContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public fconst(): FconstContext | null {
        return this.getRuleContext(0, FconstContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public collabel(): CollabelContext | null {
        return this.getRuleContext(0, CollabelContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_triggerfuncarg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTriggerfuncarg) {
             listener.enterTriggerfuncarg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTriggerfuncarg) {
             listener.exitTriggerfuncarg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTriggerfuncarg) {
            return visitor.visitTriggerfuncarg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptconstrfromtableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_optconstrfromtable;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOptconstrfromtable) {
             listener.enterOptconstrfromtable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOptconstrfromtable) {
             listener.exitOptconstrfromtable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptconstrfromtable) {
            return visitor.visitOptconstrfromtable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, ConstraintattributeElemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constraintattributespec;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstraintattributespec) {
             listener.enterConstraintattributespec(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstraintattributespec) {
             listener.exitConstraintattributespec(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstraintattributespec) {
            return visitor.visitConstraintattributespec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstraintattributeElemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_DEFERRABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFERRABLE, 0);
    }
    public KW_INITIALLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INITIALLY, 0);
    }
    public KW_IMMEDIATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMMEDIATE, 0);
    }
    public KW_DEFERRED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFERRED, 0);
    }
    public KW_VALID(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALID, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_INHERIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INHERIT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constraintattributeElem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstraintattributeElem) {
             listener.enterConstraintattributeElem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstraintattributeElem) {
             listener.exitConstraintattributeElem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstraintattributeElem) {
            return visitor.visitConstraintattributeElem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateeventtrigstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_EVENT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EVENT, 0)!;
    }
    public KW_TRIGGER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public collabel(): CollabelContext {
        return this.getRuleContext(0, CollabelContext)!;
    }
    public KW_EXECUTE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0)!;
    }
    public function_or_procedure(): Function_or_procedureContext {
        return this.getRuleContext(0, Function_or_procedureContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public KW_WHEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0);
    }
    public event_trigger_when_list(): Event_trigger_when_listContext | null {
        return this.getRuleContext(0, Event_trigger_when_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createeventtrigstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateeventtrigstmt) {
             listener.enterCreateeventtrigstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateeventtrigstmt) {
             listener.exitCreateeventtrigstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateeventtrigstmt) {
            return visitor.visitCreateeventtrigstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Event_trigger_when_itemContext);
    }
    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(PostgreSqlParser.KW_AND);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_AND, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_event_trigger_when_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterEvent_trigger_when_list) {
             listener.enterEvent_trigger_when_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitEvent_trigger_when_list) {
             listener.exitEvent_trigger_when_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitEvent_trigger_when_list) {
            return visitor.visitEvent_trigger_when_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Event_trigger_when_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IN, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public event_trigger_value_list(): Event_trigger_value_listContext {
        return this.getRuleContext(0, Event_trigger_value_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_event_trigger_when_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterEvent_trigger_when_item) {
             listener.enterEvent_trigger_when_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitEvent_trigger_when_item) {
             listener.exitEvent_trigger_when_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitEvent_trigger_when_item) {
            return visitor.visitEvent_trigger_when_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, SconstContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_event_trigger_value_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterEvent_trigger_value_list) {
             listener.enterEvent_trigger_value_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitEvent_trigger_value_list) {
             listener.exitEvent_trigger_value_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitEvent_trigger_value_list) {
            return visitor.visitEvent_trigger_value_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltereventtrigstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_EVENT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EVENT, 0)!;
    }
    public KW_TRIGGER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public enable_trigger(): Enable_triggerContext {
        return this.getRuleContext(0, Enable_triggerContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altereventtrigstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltereventtrigstmt) {
             listener.enterAltereventtrigstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltereventtrigstmt) {
             listener.exitAltereventtrigstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltereventtrigstmt) {
            return visitor.visitAltereventtrigstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Enable_triggerContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENABLE, 0);
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPLICA, 0);
    }
    public KW_ALWAYS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALWAYS, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISABLE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_enable_trigger;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterEnable_trigger) {
             listener.enterEnable_trigger(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitEnable_trigger) {
             listener.exitEnable_trigger(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitEnable_trigger) {
            return visitor.visitEnable_trigger(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateassertionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_ASSERTION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ASSERTION, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_CHECK(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CHECK, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public constraintattributespec(): ConstraintattributespecContext {
        return this.getRuleContext(0, ConstraintattributespecContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createassertionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateassertionstmt) {
             listener.enterCreateassertionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateassertionstmt) {
             listener.exitCreateassertionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateassertionstmt) {
            return visitor.visitCreateassertionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DefinestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public function_name(): Function_nameContext | null {
        return this.getRuleContext(0, Function_nameContext);
    }
    public aggr_args(): Aggr_argsContext | null {
        return this.getRuleContext(0, Aggr_argsContext);
    }
    public definition(): DefinitionContext | null {
        return this.getRuleContext(0, DefinitionContext);
    }
    public opt_or_replace(): Opt_or_replaceContext | null {
        return this.getRuleContext(0, Opt_or_replaceContext);
    }
    public old_aggr_definition(): Old_aggr_definitionContext | null {
        return this.getRuleContext(0, Old_aggr_definitionContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public any_operator(): Any_operatorContext | null {
        return this.getRuleContext(0, Any_operatorContext);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public any_name(): Any_nameContext[];
    public any_name(i: number): Any_nameContext | null;
    public any_name(i?: number): Any_nameContext[] | Any_nameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Any_nameContext);
        }

        return this.getRuleContext(i, Any_nameContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public opttablefuncelementlist(): OpttablefuncelementlistContext | null {
        return this.getRuleContext(0, OpttablefuncelementlistContext);
    }
    public KW_ENUM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENUM, 0);
    }
    public opt_enum_val_list(): Opt_enum_val_listContext | null {
        return this.getRuleContext(0, Opt_enum_val_listContext);
    }
    public KW_RANGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RANGE, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0);
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARSER, 0);
    }
    public KW_DICTIONARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0);
    }
    public KW_TEMPLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPLATE, 0);
    }
    public KW_CONFIGURATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_definestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDefinestmt) {
             listener.enterDefinestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDefinestmt) {
             listener.exitDefinestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefinestmt) {
            return visitor.visitDefinestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DefinitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public def_list(): Def_listContext {
        return this.getRuleContext(0, Def_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_definition;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDefinition) {
             listener.enterDefinition(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDefinition) {
             listener.exitDefinition(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefinition) {
            return visitor.visitDefinition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Def_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_def_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDef_list) {
             listener.enterDef_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDef_list) {
             listener.exitDef_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDef_list) {
            return visitor.visitDef_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Def_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public collabel(): CollabelContext {
        return this.getRuleContext(0, CollabelContext)!;
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public def_arg(): Def_argContext | null {
        return this.getRuleContext(0, Def_argContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_def_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDef_elem) {
             listener.enterDef_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDef_elem) {
             listener.exitDef_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDef_elem) {
            return visitor.visitDef_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Def_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_type(): Func_typeContext | null {
        return this.getRuleContext(0, Func_typeContext);
    }
    public reserved_keyword(): Reserved_keywordContext | null {
        return this.getRuleContext(0, Reserved_keywordContext);
    }
    public qual_all_op(): Qual_all_opContext | null {
        return this.getRuleContext(0, Qual_all_opContext);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NONE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_def_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDef_arg) {
             listener.enterDef_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDef_arg) {
             listener.exitDef_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDef_arg) {
            return visitor.visitDef_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Old_aggr_definitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public old_aggr_list(): Old_aggr_listContext {
        return this.getRuleContext(0, Old_aggr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_old_aggr_definition;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOld_aggr_definition) {
             listener.enterOld_aggr_definition(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOld_aggr_definition) {
             listener.exitOld_aggr_definition(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOld_aggr_definition) {
            return visitor.visitOld_aggr_definition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Old_aggr_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_old_aggr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOld_aggr_list) {
             listener.enterOld_aggr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOld_aggr_list) {
             listener.exitOld_aggr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOld_aggr_list) {
            return visitor.visitOld_aggr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Old_aggr_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext {
        return this.getRuleContext(0, IdentifierContext)!;
    }
    public EQUAL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.EQUAL, 0)!;
    }
    public def_arg(): Def_argContext {
        return this.getRuleContext(0, Def_argContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_old_aggr_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOld_aggr_elem) {
             listener.enterOld_aggr_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOld_aggr_elem) {
             listener.exitOld_aggr_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOld_aggr_elem) {
            return visitor.visitOld_aggr_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_enum_val_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public enum_val_list(): Enum_val_listContext {
        return this.getRuleContext(0, Enum_val_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_enum_val_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_enum_val_list) {
             listener.enterOpt_enum_val_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_enum_val_list) {
             listener.exitOpt_enum_val_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_enum_val_list) {
            return visitor.visitOpt_enum_val_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, SconstContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_enum_val_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterEnum_val_list) {
             listener.enterEnum_val_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitEnum_val_list) {
             listener.exitEnum_val_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitEnum_val_list) {
            return visitor.visitEnum_val_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterenumstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_TYPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public KW_VALUE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VALUE, 0)!;
    }
    public sconst(): SconstContext[];
    public sconst(i: number): SconstContext | null;
    public sconst(i?: number): SconstContext[] | SconstContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SconstContext);
        }

        return this.getRuleContext(i, SconstContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public KW_BEFORE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BEFORE, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AFTER, 0);
    }
    public KW_RENAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RENAME, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterenumstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterenumstmt) {
             listener.enterAlterenumstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterenumstmt) {
             listener.exitAlterenumstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterenumstmt) {
            return visitor.visitAlterenumstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_if_not_existsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IF(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IF, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NOT, 0)!;
    }
    public KW_EXISTS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXISTS, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_if_not_exists;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_if_not_exists) {
             listener.enterOpt_if_not_exists(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_if_not_exists) {
             listener.exitOpt_if_not_exists(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_if_not_exists) {
            return visitor.visitOpt_if_not_exists(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateopclassstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_OPERATOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0)!;
    }
    public KW_CLASS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public KW_TYPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0)!;
    }
    public typename(): TypenameContext {
        return this.getRuleContext(0, TypenameContext)!;
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public opclass_item_list(): Opclass_item_listContext {
        return this.getRuleContext(0, Opclass_item_listContext)!;
    }
    public opt_default(): Opt_defaultContext | null {
        return this.getRuleContext(0, Opt_defaultContext);
    }
    public opt_opfamily(): Opt_opfamilyContext | null {
        return this.getRuleContext(0, Opt_opfamilyContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createopclassstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateopclassstmt) {
             listener.enterCreateopclassstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateopclassstmt) {
             listener.exitCreateopclassstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateopclassstmt) {
            return visitor.visitCreateopclassstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Opclass_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opclass_item_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpclass_item_list) {
             listener.enterOpclass_item_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpclass_item_list) {
             listener.exitOpclass_item_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpclass_item_list) {
            return visitor.visitOpclass_item_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opclass_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public any_operator(): Any_operatorContext | null {
        return this.getRuleContext(0, Any_operatorContext);
    }
    public opclass_purpose(): Opclass_purposeContext | null {
        return this.getRuleContext(0, Opclass_purposeContext);
    }
    public opt_recheck(): Opt_recheckContext | null {
        return this.getRuleContext(0, Opt_recheckContext);
    }
    public operator_with_argtypes(): Operator_with_argtypesContext | null {
        return this.getRuleContext(0, Operator_with_argtypesContext);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public type_list(): Type_listContext | null {
        return this.getRuleContext(0, Type_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_STORAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STORAGE, 0);
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opclass_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpclass_item) {
             listener.enterOpclass_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpclass_item) {
             listener.exitOpclass_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpclass_item) {
            return visitor.visitOpclass_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_defaultContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEFAULT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_default;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_default) {
             listener.enterOpt_default(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_default) {
             listener.exitOpt_default(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_default) {
            return visitor.visitOpt_default(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_opfamilyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FAMILY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_opfamily;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_opfamily) {
             listener.enterOpt_opfamily(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_opfamily) {
             listener.exitOpt_opfamily(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_opfamily) {
            return visitor.visitOpt_opfamily(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opclass_purposeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_ORDER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ORDER, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opclass_purpose;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpclass_purpose) {
             listener.enterOpclass_purpose(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpclass_purpose) {
             listener.exitOpclass_purpose(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpclass_purpose) {
            return visitor.visitOpclass_purpose(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_recheckContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RECHECK(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RECHECK, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_recheck;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_recheck) {
             listener.enterOpt_recheck(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_recheck) {
             listener.exitOpt_recheck(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_recheck) {
            return visitor.visitOpt_recheck(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateopfamilystmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_OPERATOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0)!;
    }
    public KW_FAMILY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createopfamilystmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateopfamilystmt) {
             listener.enterCreateopfamilystmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateopfamilystmt) {
             listener.exitCreateopfamilystmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateopfamilystmt) {
            return visitor.visitCreateopfamilystmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlteropfamilystmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_OPERATOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0)!;
    }
    public KW_FAMILY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public opclass_item_list(): Opclass_item_listContext | null {
        return this.getRuleContext(0, Opclass_item_listContext);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public opclass_drop_list(): Opclass_drop_listContext | null {
        return this.getRuleContext(0, Opclass_drop_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alteropfamilystmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlteropfamilystmt) {
             listener.enterAlteropfamilystmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlteropfamilystmt) {
             listener.exitAlteropfamilystmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlteropfamilystmt) {
            return visitor.visitAlteropfamilystmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Opclass_dropContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opclass_drop_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpclass_drop_list) {
             listener.enterOpclass_drop_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpclass_drop_list) {
             listener.exitOpclass_drop_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpclass_drop_list) {
            return visitor.visitOpclass_drop_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opclass_dropContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public iconst(): IconstContext {
        return this.getRuleContext(0, IconstContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public type_list(): Type_listContext {
        return this.getRuleContext(0, Type_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opclass_drop;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpclass_drop) {
             listener.enterOpclass_drop(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpclass_drop) {
             listener.exitOpclass_drop(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpclass_drop) {
            return visitor.visitOpclass_drop(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReassignownedstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REASSIGN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REASSIGN, 0)!;
    }
    public KW_OWNED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OWNED, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public role_list(): Role_listContext {
        return this.getRuleContext(0, Role_listContext)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reassignownedstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReassignownedstmt) {
             listener.enterReassignownedstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReassignownedstmt) {
             listener.exitReassignownedstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReassignownedstmt) {
            return visitor.visitReassignownedstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DROP, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public table_name_list(): Table_name_listContext | null {
        return this.getRuleContext(0, Table_name_listContext);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public name_list(): Name_listContext | null {
        return this.getRuleContext(0, Name_listContext);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public view_nameList(): View_nameListContext | null {
        return this.getRuleContext(0, View_nameListContext);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public KW_CONVERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONVERSION, 0);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0);
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARSER, 0);
    }
    public KW_DICTIONARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0);
    }
    public KW_TEMPLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPLATE, 0);
    }
    public KW_CONFIGURATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0);
    }
    public KW_ACCESS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ACCESS, 0);
    }
    public KW_METHOD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_METHOD, 0);
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EVENT, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_EXTENSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATA, 0);
    }
    public KW_WRAPPER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public opt_procedural(): Opt_proceduralContext | null {
        return this.getRuleContext(0, Opt_proceduralContext);
    }
    public KW_PUBLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0);
    }
    public KW_SERVER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name_list(): Schema_name_listContext | null {
        return this.getRuleContext(0, Schema_name_listContext);
    }
    public KW_POLICY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_POLICY, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_RULE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RULE, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public type_name_list(): Type_name_listContext | null {
        return this.getRuleContext(0, Type_name_listContext);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_CONCURRENTLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONCURRENTLY, 0);
    }
    public any_name_list(): Any_name_listContext | null {
        return this.getRuleContext(0, Any_name_listContext);
    }
    public KW_CAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CAST, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public typename(): TypenameContext[];
    public typename(i: number): TypenameContext | null;
    public typename(i?: number): TypenameContext[] | TypenameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TypenameContext);
        }

        return this.getRuleContext(i, TypenameContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public KW_CLASS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_FAMILY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0);
    }
    public KW_OWNED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNED, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public role_list(): Role_listContext | null {
        return this.getRuleContext(0, Role_listContext);
    }
    public KW_SUBSCRIPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUBSCRIPTION, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public tablespace_name(): Tablespace_nameContext | null {
        return this.getRuleContext(0, Tablespace_nameContext);
    }
    public KW_TRANSFORM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSFORM, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0);
    }
    public KW_MAPPING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MAPPING, 0);
    }
    public auth_ident(): Auth_identContext | null {
        return this.getRuleContext(0, Auth_identContext);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public database_name(): Database_nameContext | null {
        return this.getRuleContext(0, Database_nameContext);
    }
    public drop_option_list(): Drop_option_listContext | null {
        return this.getRuleContext(0, Drop_option_listContext);
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_dropstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDropstmt) {
             listener.enterDropstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDropstmt) {
             listener.exitDropstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropstmt) {
            return visitor.visitDropstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, View_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_view_nameList;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterView_nameList) {
             listener.enterView_nameList(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitView_nameList) {
             listener.exitView_nameList(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitView_nameList) {
            return visitor.visitView_nameList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Object_type_any_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public view_name(): View_nameContext | null {
        return this.getRuleContext(0, View_nameContext);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public KW_CONVERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONVERSION, 0);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0);
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARSER, 0);
    }
    public KW_DICTIONARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0);
    }
    public KW_TEMPLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPLATE, 0);
    }
    public KW_CONFIGURATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_object_type_any_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterObject_type_any_name) {
             listener.enterObject_type_any_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitObject_type_any_name) {
             listener.exitObject_type_any_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitObject_type_any_name) {
            return visitor.visitObject_type_any_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Object_type_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ACCESS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ACCESS, 0);
    }
    public KW_METHOD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_METHOD, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EVENT, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_EXTENSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATA, 0);
    }
    public KW_WRAPPER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public opt_procedural(): Opt_proceduralContext | null {
        return this.getRuleContext(0, Opt_proceduralContext);
    }
    public KW_PUBLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public KW_SERVER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public database_name(): Database_nameContext | null {
        return this.getRuleContext(0, Database_nameContext);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public KW_SUBSCRIPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUBSCRIPTION, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public tablespace_name(): Tablespace_nameContext | null {
        return this.getRuleContext(0, Tablespace_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_object_type_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterObject_type_name) {
             listener.enterObject_type_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitObject_type_name) {
             listener.exitObject_type_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitObject_type_name) {
            return visitor.visitObject_type_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Object_type_name_on_any_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_POLICY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_POLICY, 0);
    }
    public KW_RULE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RULE, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_object_type_name_on_any_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterObject_type_name_on_any_name) {
             listener.enterObject_type_name_on_any_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitObject_type_name_on_any_name) {
             listener.exitObject_type_name_on_any_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitObject_type_name_on_any_name) {
            return visitor.visitObject_type_name_on_any_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Any_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_any_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAny_name_list) {
             listener.enterAny_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAny_name_list) {
             listener.exitAny_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAny_name_list) {
            return visitor.visitAny_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Relation_column_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public relation_name(): Relation_nameContext {
        return this.getRuleContext(0, Relation_nameContext)!;
    }
    public DOT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.DOT, 0)!;
    }
    public column_name(): Column_nameContext {
        return this.getRuleContext(0, Column_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_relation_column_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRelation_column_name) {
             listener.enterRelation_column_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRelation_column_name) {
             listener.exitRelation_column_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRelation_column_name) {
            return visitor.visitRelation_column_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Relation_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_relation_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRelation_name) {
             listener.enterRelation_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRelation_name) {
             listener.exitRelation_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRelation_name) {
            return visitor.visitRelation_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Any_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_any_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAny_name) {
             listener.enterAny_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAny_name) {
             listener.exitAny_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAny_name) {
            return visitor.visitAny_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AttrsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    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(PostgreSqlParser.DOT);
    	} else {
    		return this.getToken(PostgreSqlParser.DOT, i);
    	}
    }
    public attr_name(): Attr_nameContext[];
    public attr_name(i: number): Attr_nameContext | null;
    public attr_name(i?: number): Attr_nameContext[] | Attr_nameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Attr_nameContext);
        }

        return this.getRuleContext(i, Attr_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_attrs;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAttrs) {
             listener.enterAttrs(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAttrs) {
             listener.exitAttrs(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAttrs) {
            return visitor.visitAttrs(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TypenameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_type_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterType_name_list) {
             listener.enterType_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitType_name_list) {
             listener.exitType_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitType_name_list) {
            return visitor.visitType_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TruncatestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TRUNCATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TRUNCATE, 0)!;
    }
    public truncate_table(): Truncate_tableContext[];
    public truncate_table(i: number): Truncate_tableContext | null;
    public truncate_table(i?: number): Truncate_tableContext[] | Truncate_tableContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Truncate_tableContext);
        }

        return this.getRuleContext(i, Truncate_tableContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public KW_IDENTITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IDENTITY, 0);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_CONTINUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONTINUE, 0);
    }
    public KW_RESTART(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTART, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_truncatestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTruncatestmt) {
             listener.enterTruncatestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTruncatestmt) {
             listener.exitTruncatestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTruncatestmt) {
            return visitor.visitTruncatestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Truncate_tableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public table_name(): Table_nameContext {
        return this.getRuleContext(0, Table_nameContext)!;
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_truncate_table;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTruncate_table) {
             listener.enterTruncate_table(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTruncate_table) {
             listener.exitTruncate_table(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTruncate_table) {
            return visitor.visitTruncate_table(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CommentstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COMMENT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COMMENT, 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(PostgreSqlParser.KW_ON);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_ON, i);
    	}
    }
    public object_type_any_name(): Object_type_any_nameContext | null {
        return this.getRuleContext(0, Object_type_any_nameContext);
    }
    public KW_IS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IS, 0)!;
    }
    public comment_text(): Comment_textContext {
        return this.getRuleContext(0, Comment_textContext)!;
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLUMN, 0);
    }
    public relation_column_name(): Relation_column_nameContext | null {
        return this.getRuleContext(0, Relation_column_nameContext);
    }
    public object_type_name(): Object_type_nameContext | null {
        return this.getRuleContext(0, Object_type_nameContext);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public typename(): TypenameContext[];
    public typename(i: number): TypenameContext | null;
    public typename(i?: number): TypenameContext[] | TypenameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TypenameContext);
        }

        return this.getRuleContext(i, TypenameContext);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public aggregate_with_argtypes(): Aggregate_with_argtypesContext | null {
        return this.getRuleContext(0, Aggregate_with_argtypesContext);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public operator_with_argtypes(): Operator_with_argtypesContext | null {
        return this.getRuleContext(0, Operator_with_argtypesContext);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_POLICY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_POLICY, 0);
    }
    public KW_RULE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RULE, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public KW_TRANSFORM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSFORM, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public KW_CLASS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_FAMILY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0);
    }
    public KW_LARGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LARGE, 0);
    }
    public KW_OBJECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OBJECT, 0);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public KW_CAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CAST, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_commentstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCommentstmt) {
             listener.enterCommentstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCommentstmt) {
             listener.exitCommentstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCommentstmt) {
            return visitor.visitCommentstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Comment_textContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_comment_text;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterComment_text) {
             listener.enterComment_text(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitComment_text) {
             listener.exitComment_text(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitComment_text) {
            return visitor.visitComment_text(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SeclabelstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SECURITY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SECURITY, 0)!;
    }
    public KW_LABEL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LABEL, 0)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLUMN, 0);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public KW_IS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IS, 0)!;
    }
    public security_label(): Security_labelContext {
        return this.getRuleContext(0, Security_labelContext)!;
    }
    public opt_provider(): Opt_providerContext | null {
        return this.getRuleContext(0, Opt_providerContext);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public aggregate_with_argtypes(): Aggregate_with_argtypesContext | null {
        return this.getRuleContext(0, Aggregate_with_argtypesContext);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public KW_LARGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LARGE, 0);
    }
    public KW_OBJECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OBJECT, 0);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public object_type_any_name(): Object_type_any_nameContext | null {
        return this.getRuleContext(0, Object_type_any_nameContext);
    }
    public object_type_name(): Object_type_nameContext | null {
        return this.getRuleContext(0, Object_type_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_seclabelstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSeclabelstmt) {
             listener.enterSeclabelstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSeclabelstmt) {
             listener.exitSeclabelstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSeclabelstmt) {
            return visitor.visitSeclabelstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_providerContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
        return this.getRuleContext(0, Nonreservedword_or_sconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_provider;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_provider) {
             listener.enterOpt_provider(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_provider) {
             listener.exitOpt_provider(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_provider) {
            return visitor.visitOpt_provider(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Security_labelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_security_label;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSecurity_label) {
             listener.enterSecurity_label(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSecurity_label) {
             listener.exitSecurity_label(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSecurity_label) {
            return visitor.visitSecurity_label(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FetchstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FETCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FETCH, 0);
    }
    public fetch_args(): Fetch_argsContext {
        return this.getRuleContext(0, Fetch_argsContext)!;
    }
    public KW_MOVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MOVE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_fetchstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFetchstmt) {
             listener.enterFetchstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFetchstmt) {
             listener.exitFetchstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFetchstmt) {
            return visitor.visitFetchstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Fetch_argsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public cursor_name(): Cursor_nameContext {
        return this.getRuleContext(0, Cursor_nameContext)!;
    }
    public from_in(): From_inContext | null {
        return this.getRuleContext(0, From_inContext);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEXT, 0);
    }
    public opt_from_in(): Opt_from_inContext | null {
        return this.getRuleContext(0, Opt_from_inContext);
    }
    public KW_PRIOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIOR, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FIRST, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LAST, 0);
    }
    public KW_ABSOLUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ABSOLUTE, 0);
    }
    public signediconst(): SignediconstContext | null {
        return this.getRuleContext(0, SignediconstContext);
    }
    public KW_RELATIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RELATIVE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_FORWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FORWARD, 0);
    }
    public KW_BACKWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BACKWARD, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_fetch_args;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFetch_args) {
             listener.enterFetch_args(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFetch_args) {
             listener.exitFetch_args(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFetch_args) {
            return visitor.visitFetch_args(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class From_inContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_from_in;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFrom_in) {
             listener.enterFrom_in(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFrom_in) {
             listener.exitFrom_in(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrom_in) {
            return visitor.visitFrom_in(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_from_inContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public from_in(): From_inContext {
        return this.getRuleContext(0, From_inContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_from_in;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_from_in) {
             listener.enterOpt_from_in(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_from_in) {
             listener.exitOpt_from_in(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_from_in) {
            return visitor.visitOpt_from_in(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GrantstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GRANT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GRANT, 0)!;
    }
    public privileges(): PrivilegesContext {
        return this.getRuleContext(0, PrivilegesContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public privilege_target(): Privilege_targetContext {
        return this.getRuleContext(0, Privilege_targetContext)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public grantee_list(): Grantee_listContext {
        return this.getRuleContext(0, Grantee_listContext)!;
    }
    public opt_grant_grant_option(): Opt_grant_grant_optionContext | null {
        return this.getRuleContext(0, Opt_grant_grant_optionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_grantstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGrantstmt) {
             listener.enterGrantstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGrantstmt) {
             listener.exitGrantstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGrantstmt) {
            return visitor.visitGrantstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RevokestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REVOKE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REVOKE, 0)!;
    }
    public privileges(): PrivilegesContext {
        return this.getRuleContext(0, PrivilegesContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public privilege_target(): Privilege_targetContext {
        return this.getRuleContext(0, Privilege_targetContext)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public grantee_list(): Grantee_listContext {
        return this.getRuleContext(0, Grantee_listContext)!;
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_GRANT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GRANT, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_revokestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRevokestmt) {
             listener.enterRevokestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRevokestmt) {
             listener.exitRevokestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRevokestmt) {
            return visitor.visitRevokestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PrivilegesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public privilege_list(): Privilege_listContext | null {
        return this.getRuleContext(0, Privilege_listContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_PRIVILEGES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIVILEGES, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public beforeprivilegeselectlist(): BeforeprivilegeselectlistContext | null {
        return this.getRuleContext(0, BeforeprivilegeselectlistContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_privileges;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPrivileges) {
             listener.enterPrivileges(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPrivileges) {
             listener.exitPrivileges(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivileges) {
            return visitor.visitPrivileges(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, BeforeprivilegeselectContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_beforeprivilegeselectlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterBeforeprivilegeselectlist) {
             listener.enterBeforeprivilegeselectlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitBeforeprivilegeselectlist) {
             listener.exitBeforeprivilegeselectlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitBeforeprivilegeselectlist) {
            return visitor.visitBeforeprivilegeselectlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BeforeprivilegeselectContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SELECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SELECT, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0);
    }
    public KW_TRUNCATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUNCATE, 0);
    }
    public KW_PEFERENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PEFERENCES, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_USAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USAGE, 0);
    }
    public KW_CREATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0);
    }
    public KW_CONNECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONNECT, 0);
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPORARY, 0);
    }
    public KW_TEMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMP, 0);
    }
    public KW_EXECUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_beforeprivilegeselect;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterBeforeprivilegeselect) {
             listener.enterBeforeprivilegeselect(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitBeforeprivilegeselect) {
             listener.exitBeforeprivilegeselect(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitBeforeprivilegeselect) {
            return visitor.visitBeforeprivilegeselect(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, PrivilegeContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_privilege_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPrivilege_list) {
             listener.enterPrivilege_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPrivilege_list) {
             listener.exitPrivilege_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivilege_list) {
            return visitor.visitPrivilege_list(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_SELECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SELECT, 0);
    }
    public opt_column_list(): Opt_column_listContext | null {
        return this.getRuleContext(0, Opt_column_listContext);
    }
    public KW_REFERENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REFERENCES, 0);
    }
    public KW_CREATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_privilege;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPrivilege) {
             listener.enterPrivilege(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPrivilege) {
             listener.exitPrivilege(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivilege) {
            return visitor.visitPrivilege(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Privilege_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public qualified_name_list(): Qualified_name_listContext | null {
        return this.getRuleContext(0, Qualified_name_listContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public table_name_list(): Table_name_listContext | null {
        return this.getRuleContext(0, Table_name_listContext);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATA, 0);
    }
    public KW_WRAPPER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0);
    }
    public name_list(): Name_listContext | null {
        return this.getRuleContext(0, Name_listContext);
    }
    public KW_SERVER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes_list(): Function_with_argtypes_listContext | null {
        return this.getRuleContext(0, Function_with_argtypes_listContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes_list(): Procedure_with_argtypes_listContext | null {
        return this.getRuleContext(0, Procedure_with_argtypes_listContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes_list(): Routine_with_argtypes_listContext | null {
        return this.getRuleContext(0, Routine_with_argtypes_listContext);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public database_nameList(): Database_nameListContext | null {
        return this.getRuleContext(0, Database_nameListContext);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public any_name_list(): Any_name_listContext | null {
        return this.getRuleContext(0, Any_name_listContext);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public KW_LARGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LARGE, 0);
    }
    public KW_OBJECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OBJECT, 0);
    }
    public numericonly_list(): Numericonly_listContext | null {
        return this.getRuleContext(0, Numericonly_listContext);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name_list(): Schema_name_listContext | null {
        return this.getRuleContext(0, Schema_name_listContext);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public tablespace_name_list(): Tablespace_name_listContext | null {
        return this.getRuleContext(0, Tablespace_name_listContext);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLES, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_SEQUENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCES, 0);
    }
    public KW_FUNCTIONS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTIONS, 0);
    }
    public KW_PROCEDURES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURES, 0);
    }
    public KW_ROUTINES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINES, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_privilege_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPrivilege_target) {
             listener.enterPrivilege_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPrivilege_target) {
             listener.exitPrivilege_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivilege_target) {
            return visitor.visitPrivilege_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, GranteeContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_grantee_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGrantee_list) {
             listener.enterGrantee_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGrantee_list) {
             listener.exitGrantee_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGrantee_list) {
            return visitor.visitGrantee_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GranteeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_grantee;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGrantee) {
             listener.enterGrantee(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGrantee) {
             listener.exitGrantee(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGrantee) {
            return visitor.visitGrantee(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_grant_grant_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public KW_GRANT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GRANT, 0)!;
    }
    public KW_OPTION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_grant_grant_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_grant_grant_option) {
             listener.enterOpt_grant_grant_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_grant_grant_option) {
             listener.exitOpt_grant_grant_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_grant_grant_option) {
            return visitor.visitOpt_grant_grant_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GrantrolestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GRANT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GRANT, 0)!;
    }
    public privilege_list(): Privilege_listContext {
        return this.getRuleContext(0, Privilege_listContext)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public role_list(): Role_listContext {
        return this.getRuleContext(0, Role_listContext)!;
    }
    public opt_grant_admin_option(): Opt_grant_admin_optionContext | null {
        return this.getRuleContext(0, Opt_grant_admin_optionContext);
    }
    public opt_granted_by(): Opt_granted_byContext | null {
        return this.getRuleContext(0, Opt_granted_byContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_grantrolestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGrantrolestmt) {
             listener.enterGrantrolestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGrantrolestmt) {
             listener.exitGrantrolestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGrantrolestmt) {
            return visitor.visitGrantrolestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RevokerolestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REVOKE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REVOKE, 0)!;
    }
    public privilege_list(): Privilege_listContext {
        return this.getRuleContext(0, Privilege_listContext)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public role_list(): Role_listContext {
        return this.getRuleContext(0, Role_listContext)!;
    }
    public opt_granted_by(): Opt_granted_byContext | null {
        return this.getRuleContext(0, Opt_granted_byContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADMIN, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_revokerolestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRevokerolestmt) {
             listener.enterRevokerolestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRevokerolestmt) {
             listener.exitRevokerolestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRevokerolestmt) {
            return visitor.visitRevokerolestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_grant_admin_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public KW_ADMIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ADMIN, 0)!;
    }
    public KW_OPTION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_grant_admin_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_grant_admin_option) {
             listener.enterOpt_grant_admin_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_grant_admin_option) {
             listener.exitOpt_grant_admin_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_grant_admin_option) {
            return visitor.visitOpt_grant_admin_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_granted_byContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GRANTED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GRANTED, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_granted_by;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_granted_by) {
             listener.enterOpt_granted_by(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_granted_by) {
             listener.exitOpt_granted_by(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_granted_by) {
            return visitor.visitOpt_granted_by(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterdefaultprivilegesstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0)!;
    }
    public KW_PRIVILEGES(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PRIVILEGES, 0)!;
    }
    public defacloptionlist(): DefacloptionlistContext {
        return this.getRuleContext(0, DefacloptionlistContext)!;
    }
    public defaclaction(): DefaclactionContext {
        return this.getRuleContext(0, DefaclactionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterdefaultprivilegesstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterdefaultprivilegesstmt) {
             listener.enterAlterdefaultprivilegesstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterdefaultprivilegesstmt) {
             listener.exitAlterdefaultprivilegesstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterdefaultprivilegesstmt) {
            return visitor.visitAlterdefaultprivilegesstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, DefacloptionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_defacloptionlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDefacloptionlist) {
             listener.enterDefacloptionlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDefacloptionlist) {
             listener.exitDefacloptionlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefacloptionlist) {
            return visitor.visitDefacloptionlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DefacloptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name_list(): Schema_name_listContext | null {
        return this.getRuleContext(0, Schema_name_listContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public role_list(): Role_listContext | null {
        return this.getRuleContext(0, Role_listContext);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_defacloption;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDefacloption) {
             listener.enterDefacloption(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDefacloption) {
             listener.exitDefacloption(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefacloption) {
            return visitor.visitDefacloption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DefaclactionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GRANT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GRANT, 0);
    }
    public privileges(): PrivilegesContext {
        return this.getRuleContext(0, PrivilegesContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public defacl_privilege_target(): Defacl_privilege_targetContext {
        return this.getRuleContext(0, Defacl_privilege_targetContext)!;
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public grantee_list(): Grantee_listContext {
        return this.getRuleContext(0, Grantee_listContext)!;
    }
    public opt_grant_grant_option(): Opt_grant_grant_optionContext | null {
        return this.getRuleContext(0, Opt_grant_grant_optionContext);
    }
    public KW_REVOKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REVOKE, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_defaclaction;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDefaclaction) {
             listener.enterDefaclaction(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDefaclaction) {
             listener.exitDefaclaction(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefaclaction) {
            return visitor.visitDefaclaction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Defacl_privilege_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLES, 0);
    }
    public KW_FUNCTIONS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTIONS, 0);
    }
    public KW_ROUTINES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINES, 0);
    }
    public KW_SEQUENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCES, 0);
    }
    public KW_TYPES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPES, 0);
    }
    public KW_SCHEMAS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMAS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_defacl_privilege_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDefacl_privilege_target) {
             listener.enterDefacl_privilege_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDefacl_privilege_target) {
             listener.exitDefacl_privilege_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefacl_privilege_target) {
            return visitor.visitDefacl_privilege_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public relation_expr(): Relation_exprContext {
        return this.getRuleContext(0, Relation_exprContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public index_params(): Index_paramsContext {
        return this.getRuleContext(0, Index_paramsContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public opt_unique(): Opt_uniqueContext | null {
        return this.getRuleContext(0, Opt_uniqueContext);
    }
    public opt_concurrently(): Opt_concurrentlyContext | null {
        return this.getRuleContext(0, Opt_concurrentlyContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opt_index_name(): Opt_index_nameContext | null {
        return this.getRuleContext(0, Opt_index_nameContext);
    }
    public access_method_clause(): Access_method_clauseContext | null {
        return this.getRuleContext(0, Access_method_clauseContext);
    }
    public opt_include(): Opt_includeContext | null {
        return this.getRuleContext(0, Opt_includeContext);
    }
    public nulls_distinct(): Nulls_distinctContext | null {
        return this.getRuleContext(0, Nulls_distinctContext);
    }
    public opt_reloptions(): Opt_reloptionsContext | null {
        return this.getRuleContext(0, Opt_reloptionsContext);
    }
    public opttablespace(): OpttablespaceContext | null {
        return this.getRuleContext(0, OpttablespaceContext);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_indexstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndexstmt) {
             listener.enterIndexstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndexstmt) {
             listener.exitIndexstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexstmt) {
            return visitor.visitIndexstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_uniqueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNIQUE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UNIQUE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_unique;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_unique) {
             listener.enterOpt_unique(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_unique) {
             listener.exitOpt_unique(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_unique) {
            return visitor.visitOpt_unique(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_concurrentlyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CONCURRENTLY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CONCURRENTLY, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_concurrently;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_concurrently) {
             listener.enterOpt_concurrently(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_concurrently) {
             listener.exitOpt_concurrently(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_concurrently) {
            return visitor.visitOpt_concurrently(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_index_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_index_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_index_name) {
             listener.enterOpt_index_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_index_name) {
             listener.exitOpt_index_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_index_name) {
            return visitor.visitOpt_index_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Access_method_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_access_method_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAccess_method_clause) {
             listener.enterAccess_method_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAccess_method_clause) {
             listener.exitAccess_method_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAccess_method_clause) {
            return visitor.visitAccess_method_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Index_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_params;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_params) {
             listener.enterIndex_params(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_params) {
             listener.exitIndex_params(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_params) {
            return visitor.visitIndex_params(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Index_elem_optionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_collate(): Opt_collateContext | null {
        return this.getRuleContext(0, Opt_collateContext);
    }
    public opt_class(): Opt_classContext | null {
        return this.getRuleContext(0, Opt_classContext);
    }
    public opt_asc_desc(): Opt_asc_descContext | null {
        return this.getRuleContext(0, Opt_asc_descContext);
    }
    public opt_nulls_order(): Opt_nulls_orderContext | null {
        return this.getRuleContext(0, Opt_nulls_orderContext);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public reloptions(): ReloptionsContext | null {
        return this.getRuleContext(0, ReloptionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_elem_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_elem_options) {
             listener.enterIndex_elem_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_elem_options) {
             listener.exitIndex_elem_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_elem_options) {
            return visitor.visitIndex_elem_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Index_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public index_elem_options(): Index_elem_optionsContext {
        return this.getRuleContext(0, Index_elem_optionsContext)!;
    }
    public func_expr_windowless(): Func_expr_windowlessContext | null {
        return this.getRuleContext(0, Func_expr_windowlessContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_elem) {
             listener.enterIndex_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_elem) {
             listener.exitIndex_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_elem) {
            return visitor.visitIndex_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_includeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INCLUDE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INCLUDE, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public index_including_params(): Index_including_paramsContext {
        return this.getRuleContext(0, Index_including_paramsContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_include;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_include) {
             listener.enterOpt_include(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_include) {
             listener.exitOpt_include(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_include) {
            return visitor.visitOpt_include(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Index_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_including_params;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_including_params) {
             listener.enterIndex_including_params(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_including_params) {
             listener.exitIndex_including_params(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_including_params) {
            return visitor.visitIndex_including_params(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_collateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COLLATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COLLATE, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_collate;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_collate) {
             listener.enterOpt_collate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_collate) {
             listener.exitOpt_collate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_collate) {
            return visitor.visitOpt_collate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_classContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_class;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_class) {
             listener.enterOpt_class(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_class) {
             listener.exitOpt_class(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_class) {
            return visitor.visitOpt_class(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_asc_descContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ASC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ASC, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DESC, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_asc_desc;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_asc_desc) {
             listener.enterOpt_asc_desc(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_asc_desc) {
             listener.exitOpt_asc_desc(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_asc_desc) {
            return visitor.visitOpt_asc_desc(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_nulls_orderContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NULLS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NULLS, 0)!;
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FIRST, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LAST, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_nulls_order;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_nulls_order) {
             listener.enterOpt_nulls_order(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_nulls_order) {
             listener.exitOpt_nulls_order(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_nulls_order) {
            return visitor.visitOpt_nulls_order(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatefunctionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public func_args_with_defaults(): Func_args_with_defaultsContext {
        return this.getRuleContext(0, Func_args_with_defaultsContext)!;
    }
    public createfunc_opt_list(): Createfunc_opt_listContext {
        return this.getRuleContext(0, Createfunc_opt_listContext)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_name_create(): Function_name_createContext | null {
        return this.getRuleContext(0, Function_name_createContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_name_create(): Procedure_name_createContext | null {
        return this.getRuleContext(0, Procedure_name_createContext);
    }
    public opt_or_replace(): Opt_or_replaceContext | null {
        return this.getRuleContext(0, Opt_or_replaceContext);
    }
    public KW_RETURNS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RETURNS, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public attrilist(): AttrilistContext | null {
        return this.getRuleContext(0, AttrilistContext);
    }
    public func_return(): Func_returnContext | null {
        return this.getRuleContext(0, Func_returnContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public table_func_column_list(): Table_func_column_listContext | null {
        return this.getRuleContext(0, Table_func_column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createfunctionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatefunctionstmt) {
             listener.enterCreatefunctionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatefunctionstmt) {
             listener.exitCreatefunctionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatefunctionstmt) {
            return visitor.visitCreatefunctionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AttrilistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public colid(): ColidContext[];
    public colid(i: number): ColidContext | null;
    public colid(i?: number): ColidContext[] | ColidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColidContext);
        }

        return this.getRuleContext(i, ColidContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_attrilist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAttrilist) {
             listener.enterAttrilist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAttrilist) {
             listener.exitAttrilist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAttrilist) {
            return visitor.visitAttrilist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_or_replaceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OR, 0)!;
    }
    public KW_REPLACE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REPLACE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_or_replace;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_or_replace) {
             listener.enterOpt_or_replace(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_or_replace) {
             listener.exitOpt_or_replace(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_or_replace) {
            return visitor.visitOpt_or_replace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_argsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public func_args_list(): Func_args_listContext | null {
        return this.getRuleContext(0, Func_args_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_args;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_args) {
             listener.enterFunc_args(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_args) {
             listener.exitFunc_args(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_args) {
            return visitor.visitFunc_args(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Func_argContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_args_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_args_list) {
             listener.enterFunc_args_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_args_list) {
             listener.exitFunc_args_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_args_list) {
            return visitor.visitFunc_args_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Routine_with_argtypesContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_routine_with_argtypes_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoutine_with_argtypes_list) {
             listener.enterRoutine_with_argtypes_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoutine_with_argtypes_list) {
             listener.exitRoutine_with_argtypes_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutine_with_argtypes_list) {
            return visitor.visitRoutine_with_argtypes_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Routine_with_argtypesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public routine_name(): Routine_nameContext | null {
        return this.getRuleContext(0, Routine_nameContext);
    }
    public func_args(): Func_argsContext | null {
        return this.getRuleContext(0, Func_argsContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_routine_with_argtypes;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoutine_with_argtypes) {
             listener.enterRoutine_with_argtypes(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoutine_with_argtypes) {
             listener.exitRoutine_with_argtypes(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutine_with_argtypes) {
            return visitor.visitRoutine_with_argtypes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Procedure_with_argtypesContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_procedure_with_argtypes_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProcedure_with_argtypes_list) {
             listener.enterProcedure_with_argtypes_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProcedure_with_argtypes_list) {
             listener.exitProcedure_with_argtypes_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedure_with_argtypes_list) {
            return visitor.visitProcedure_with_argtypes_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Procedure_with_argtypesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public procedure_name(): Procedure_nameContext | null {
        return this.getRuleContext(0, Procedure_nameContext);
    }
    public func_args(): Func_argsContext | null {
        return this.getRuleContext(0, Func_argsContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_procedure_with_argtypes;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProcedure_with_argtypes) {
             listener.enterProcedure_with_argtypes(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProcedure_with_argtypes) {
             listener.exitProcedure_with_argtypes(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedure_with_argtypes) {
            return visitor.visitProcedure_with_argtypes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Function_with_argtypesContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_function_with_argtypes_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunction_with_argtypes_list) {
             listener.enterFunction_with_argtypes_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunction_with_argtypes_list) {
             listener.exitFunction_with_argtypes_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunction_with_argtypes_list) {
            return visitor.visitFunction_with_argtypes_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Function_with_argtypesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public function_name(): Function_nameContext | null {
        return this.getRuleContext(0, Function_nameContext);
    }
    public func_args(): Func_argsContext | null {
        return this.getRuleContext(0, Func_argsContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_function_with_argtypes;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunction_with_argtypes) {
             listener.enterFunction_with_argtypes(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunction_with_argtypes) {
             listener.exitFunction_with_argtypes(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunction_with_argtypes) {
            return visitor.visitFunction_with_argtypes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_args_with_defaultsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public func_args_with_defaults_list(): Func_args_with_defaults_listContext | null {
        return this.getRuleContext(0, Func_args_with_defaults_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_args_with_defaults;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_args_with_defaults) {
             listener.enterFunc_args_with_defaults(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_args_with_defaults) {
             listener.exitFunc_args_with_defaults(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_args_with_defaults) {
            return visitor.visitFunc_args_with_defaults(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Func_arg_with_defaultContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_args_with_defaults_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_args_with_defaults_list) {
             listener.enterFunc_args_with_defaults_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_args_with_defaults_list) {
             listener.exitFunc_args_with_defaults_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_args_with_defaults_list) {
            return visitor.visitFunc_args_with_defaults_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public arg_class(): Arg_classContext | null {
        return this.getRuleContext(0, Arg_classContext);
    }
    public func_type(): Func_typeContext {
        return this.getRuleContext(0, Func_typeContext)!;
    }
    public param_name(): Param_nameContext | null {
        return this.getRuleContext(0, Param_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_arg) {
             listener.enterFunc_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_arg) {
             listener.exitFunc_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_arg) {
            return visitor.visitFunc_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Arg_classContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_OUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OUT, 0);
    }
    public KW_INOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INOUT, 0);
    }
    public KW_VARIADIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARIADIC, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_arg_class;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterArg_class) {
             listener.enterArg_class(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitArg_class) {
             listener.exitArg_class(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitArg_class) {
            return visitor.visitArg_class(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Param_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public type_function_name(): Type_function_nameContext {
        return this.getRuleContext(0, Type_function_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_param_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterParam_name) {
             listener.enterParam_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitParam_name) {
             listener.exitParam_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitParam_name) {
            return visitor.visitParam_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_returnContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_type(): Func_typeContext {
        return this.getRuleContext(0, Func_typeContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_return;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_return) {
             listener.enterFunc_return(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_return) {
             listener.exitFunc_return(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_return) {
            return visitor.visitFunc_return(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public type_function_name(): Type_function_nameContext | null {
        return this.getRuleContext(0, Type_function_nameContext);
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public PERCENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PERCENT, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public KW_SETOF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SETOF, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_type) {
             listener.enterFunc_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_type) {
             listener.exitFunc_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_type) {
            return visitor.visitFunc_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_arg_with_defaultContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_arg(): Func_argContext {
        return this.getRuleContext(0, Func_argContext)!;
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_arg_with_default;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_arg_with_default) {
             listener.enterFunc_arg_with_default(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_arg_with_default) {
             listener.exitFunc_arg_with_default(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_arg_with_default) {
            return visitor.visitFunc_arg_with_default(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Aggr_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_arg(): Func_argContext {
        return this.getRuleContext(0, Func_argContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_aggr_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAggr_arg) {
             listener.enterAggr_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAggr_arg) {
             listener.exitAggr_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAggr_arg) {
            return visitor.visitAggr_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Aggr_argsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public aggr_args_list(): Aggr_args_listContext[];
    public aggr_args_list(i: number): Aggr_args_listContext | null;
    public aggr_args_list(i?: number): Aggr_args_listContext[] | Aggr_args_listContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Aggr_args_listContext);
        }

        return this.getRuleContext(i, Aggr_args_listContext);
    }
    public KW_ORDER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ORDER, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_aggr_args;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAggr_args) {
             listener.enterAggr_args(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAggr_args) {
             listener.exitAggr_args(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAggr_args) {
            return visitor.visitAggr_args(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Aggr_argContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_aggr_args_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAggr_args_list) {
             listener.enterAggr_args_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAggr_args_list) {
             listener.exitAggr_args_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAggr_args_list) {
            return visitor.visitAggr_args_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Aggregate_with_argtypesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public function_name(): Function_nameContext {
        return this.getRuleContext(0, Function_nameContext)!;
    }
    public aggr_args(): Aggr_argsContext {
        return this.getRuleContext(0, Aggr_argsContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_aggregate_with_argtypes;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAggregate_with_argtypes) {
             listener.enterAggregate_with_argtypes(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAggregate_with_argtypes) {
             listener.exitAggregate_with_argtypes(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAggregate_with_argtypes) {
            return visitor.visitAggregate_with_argtypes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Aggregate_with_argtypesContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_aggregate_with_argtypes_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAggregate_with_argtypes_list) {
             listener.enterAggregate_with_argtypes_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAggregate_with_argtypes_list) {
             listener.exitAggregate_with_argtypes_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAggregate_with_argtypes_list) {
            return visitor.visitAggregate_with_argtypes_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Createfunc_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createfunc_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatefunc_opt_list) {
             listener.enterCreatefunc_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatefunc_opt_list) {
             listener.exitCreatefunc_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatefunc_opt_list) {
            return visitor.visitCreatefunc_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Common_func_opt_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CALLED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CALLED, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public KW_NULL(): antlr.TerminalNode[];
    public KW_NULL(i: number): antlr.TerminalNode | null;
    public KW_NULL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_NULL);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_NULL, i);
    	}
    }
    public KW_INPUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INPUT, 0);
    }
    public KW_RETURNS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RETURNS, 0);
    }
    public KW_STRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STRICT, 0);
    }
    public KW_IMMUTABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMMUTABLE, 0);
    }
    public KW_STABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STABLE, 0);
    }
    public KW_VOLATILE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VOLATILE, 0);
    }
    public KW_EXTERNAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTERNAL, 0);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SECURITY, 0);
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFINER, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INVOKER, 0);
    }
    public KW_LEAKPROOF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEAKPROOF, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_COST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COST, 0);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWS, 0);
    }
    public KW_SUPPORT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUPPORT, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public functionsetresetclause(): FunctionsetresetclauseContext | null {
        return this.getRuleContext(0, FunctionsetresetclauseContext);
    }
    public KW_PARALLEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARALLEL, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_common_func_opt_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCommon_func_opt_item) {
             listener.enterCommon_func_opt_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCommon_func_opt_item) {
             listener.exitCommon_func_opt_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCommon_func_opt_item) {
            return visitor.visitCommon_func_opt_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Createfunc_opt_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public sconst(): SconstContext[];
    public sconst(i: number): SconstContext | null;
    public sconst(i?: number): SconstContext[] | SconstContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SconstContext);
        }

        return this.getRuleContext(i, SconstContext);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext | null {
        return this.getRuleContext(0, Nonreservedword_or_sconstContext);
    }
    public KW_TRANSFORM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSFORM, 0);
    }
    public transform_type_list(): Transform_type_listContext | null {
        return this.getRuleContext(0, Transform_type_listContext);
    }
    public KW_WINDOW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WINDOW, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public colid(): ColidContext[];
    public colid(i: number): ColidContext | null;
    public colid(i?: number): ColidContext[] | ColidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColidContext);
        }

        return this.getRuleContext(i, ColidContext);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public stmt(): StmtContext | null {
        return this.getRuleContext(0, StmtContext);
    }
    public common_func_opt_item(): Common_func_opt_itemContext | null {
        return this.getRuleContext(0, Common_func_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createfunc_opt_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatefunc_opt_item) {
             listener.enterCreatefunc_opt_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatefunc_opt_item) {
             listener.exitCreatefunc_opt_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatefunc_opt_item) {
            return visitor.visitCreatefunc_opt_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Transform_type_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode[];
    public KW_FOR(i: number): antlr.TerminalNode | null;
    public KW_FOR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_FOR);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_FOR, i);
    	}
    }
    public KW_TYPE(): antlr.TerminalNode[];
    public KW_TYPE(i: number): antlr.TerminalNode | null;
    public KW_TYPE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_TYPE);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_TYPE, i);
    	}
    }
    public typename(): TypenameContext[];
    public typename(i: number): TypenameContext | null;
    public typename(i?: number): TypenameContext[] | TypenameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TypenameContext);
        }

        return this.getRuleContext(i, TypenameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transform_type_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransform_type_list) {
             listener.enterTransform_type_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransform_type_list) {
             listener.exitTransform_type_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransform_type_list) {
            return visitor.visitTransform_type_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_definitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public definition(): DefinitionContext {
        return this.getRuleContext(0, DefinitionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_definition;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_definition) {
             listener.enterOpt_definition(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_definition) {
             listener.exitOpt_definition(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_definition) {
            return visitor.visitOpt_definition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Table_func_columnContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name(): Column_nameContext {
        return this.getRuleContext(0, Column_nameContext)!;
    }
    public func_type(): Func_typeContext {
        return this.getRuleContext(0, Func_typeContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_func_column;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTable_func_column) {
             listener.enterTable_func_column(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTable_func_column) {
             listener.exitTable_func_column(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTable_func_column) {
            return visitor.visitTable_func_column(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Table_func_columnContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_func_column_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTable_func_column_list) {
             listener.enterTable_func_column_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTable_func_column_list) {
             listener.exitTable_func_column_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTable_func_column_list) {
            return visitor.visitTable_func_column_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterfunctionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public alterFunctionTypeClause(): AlterFunctionTypeClauseContext {
        return this.getRuleContext(0, AlterFunctionTypeClauseContext)!;
    }
    public alterfunc_opt_list(): Alterfunc_opt_listContext {
        return this.getRuleContext(0, Alterfunc_opt_listContext)!;
    }
    public opt_restrict(): Opt_restrictContext | null {
        return this.getRuleContext(0, Opt_restrictContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterfunctionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterfunctionstmt) {
             listener.enterAlterfunctionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterfunctionstmt) {
             listener.exitAlterfunctionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterfunctionstmt) {
            return visitor.visitAlterfunctionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterFunctionTypeClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterFunctionTypeClause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterFunctionTypeClause) {
             listener.enterAlterFunctionTypeClause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterFunctionTypeClause) {
             listener.exitAlterFunctionTypeClause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterFunctionTypeClause) {
            return visitor.visitAlterFunctionTypeClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Common_func_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterfunc_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterfunc_opt_list) {
             listener.enterAlterfunc_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterfunc_opt_list) {
             listener.exitAlterfunc_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterfunc_opt_list) {
            return visitor.visitAlterfunc_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_restrictContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESTRICT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RESTRICT, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_restrict;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_restrict) {
             listener.enterOpt_restrict(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_restrict) {
             listener.exitOpt_restrict(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_restrict) {
            return visitor.visitOpt_restrict(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RemovefuncstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DROP, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes_list(): Function_with_argtypes_listContext | null {
        return this.getRuleContext(0, Function_with_argtypes_listContext);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes_list(): Procedure_with_argtypes_listContext | null {
        return this.getRuleContext(0, Procedure_with_argtypes_listContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes_list(): Routine_with_argtypes_listContext | null {
        return this.getRuleContext(0, Routine_with_argtypes_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_removefuncstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRemovefuncstmt) {
             listener.enterRemovefuncstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRemovefuncstmt) {
             listener.exitRemovefuncstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRemovefuncstmt) {
            return visitor.visitRemovefuncstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RemoveaggrstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DROP, 0)!;
    }
    public KW_AGGREGATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0)!;
    }
    public aggregate_with_argtypes_list(): Aggregate_with_argtypes_listContext {
        return this.getRuleContext(0, Aggregate_with_argtypes_listContext)!;
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_removeaggrstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRemoveaggrstmt) {
             listener.enterRemoveaggrstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRemoveaggrstmt) {
             listener.exitRemoveaggrstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRemoveaggrstmt) {
            return visitor.visitRemoveaggrstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RemoveoperstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DROP, 0)!;
    }
    public KW_OPERATOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0)!;
    }
    public operator_with_argtypes_list(): Operator_with_argtypes_listContext {
        return this.getRuleContext(0, Operator_with_argtypes_listContext)!;
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_removeoperstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRemoveoperstmt) {
             listener.enterRemoveoperstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRemoveoperstmt) {
             listener.exitRemoveoperstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRemoveoperstmt) {
            return visitor.visitRemoveoperstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Oper_argtypesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public typename(): TypenameContext[];
    public typename(i: number): TypenameContext | null;
    public typename(i?: number): TypenameContext[] | TypenameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TypenameContext);
        }

        return this.getRuleContext(i, TypenameContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NONE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_oper_argtypes;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOper_argtypes) {
             listener.enterOper_argtypes(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOper_argtypes) {
             listener.exitOper_argtypes(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOper_argtypes) {
            return visitor.visitOper_argtypes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Any_operatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public all_op(): All_opContext {
        return this.getRuleContext(0, All_opContext)!;
    }
    public colid(): ColidContext[];
    public colid(i: number): ColidContext | null;
    public colid(i?: number): ColidContext[] | ColidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColidContext);
        }

        return this.getRuleContext(i, ColidContext);
    }
    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(PostgreSqlParser.DOT);
    	} else {
    		return this.getToken(PostgreSqlParser.DOT, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_any_operator;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAny_operator) {
             listener.enterAny_operator(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAny_operator) {
             listener.exitAny_operator(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAny_operator) {
            return visitor.visitAny_operator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Operator_with_argtypesContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_operator_with_argtypes_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOperator_with_argtypes_list) {
             listener.enterOperator_with_argtypes_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOperator_with_argtypes_list) {
             listener.exitOperator_with_argtypes_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOperator_with_argtypes_list) {
            return visitor.visitOperator_with_argtypes_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Operator_with_argtypesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public any_operator(): Any_operatorContext {
        return this.getRuleContext(0, Any_operatorContext)!;
    }
    public oper_argtypes(): Oper_argtypesContext {
        return this.getRuleContext(0, Oper_argtypesContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_operator_with_argtypes;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOperator_with_argtypes) {
             listener.enterOperator_with_argtypes(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOperator_with_argtypes) {
             listener.exitOperator_with_argtypes(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOperator_with_argtypes) {
            return visitor.visitOperator_with_argtypes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DostmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DO, 0)!;
    }
    public dostmt_opt_list(): Dostmt_opt_listContext {
        return this.getRuleContext(0, Dostmt_opt_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_dostmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDostmt) {
             listener.enterDostmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDostmt) {
             listener.exitDostmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDostmt) {
            return visitor.visitDostmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Dostmt_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_dostmt_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDostmt_opt_list) {
             listener.enterDostmt_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDostmt_opt_list) {
             listener.exitDostmt_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDostmt_opt_list) {
            return visitor.visitDostmt_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Dostmt_opt_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext | null {
        return this.getRuleContext(0, Nonreservedword_or_sconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_dostmt_opt_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDostmt_opt_item) {
             listener.enterDostmt_opt_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDostmt_opt_item) {
             listener.exitDostmt_opt_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDostmt_opt_item) {
            return visitor.visitDostmt_opt_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatecaststmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_CAST(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CAST, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public typename(): TypenameContext[];
    public typename(i: number): TypenameContext | null;
    public typename(i?: number): TypenameContext[] | TypenameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TypenameContext);
        }

        return this.getRuleContext(i, TypenameContext);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public cast_context(): Cast_contextContext | null {
        return this.getRuleContext(0, Cast_contextContext);
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITHOUT, 0);
    }
    public KW_INOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INOUT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createcaststmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatecaststmt) {
             listener.enterCreatecaststmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatecaststmt) {
             listener.exitCreatecaststmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatecaststmt) {
            return visitor.visitCreatecaststmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Cast_contextContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public KW_IMPLICIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMPLICIT, 0);
    }
    public KW_ASSIGNMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ASSIGNMENT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cast_context;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCast_context) {
             listener.enterCast_context(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCast_context) {
             listener.exitCast_context(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCast_context) {
            return visitor.visitCast_context(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_if_existsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IF(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IF, 0)!;
    }
    public KW_EXISTS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXISTS, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_if_exists;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_if_exists) {
             listener.enterOpt_if_exists(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_if_exists) {
             listener.exitOpt_if_exists(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_if_exists) {
            return visitor.visitOpt_if_exists(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatetransformstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_TRANSFORM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TRANSFORM, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public typename(): TypenameContext {
        return this.getRuleContext(0, TypenameContext)!;
    }
    public KW_LANGUAGE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public transform_element_list(): Transform_element_listContext {
        return this.getRuleContext(0, Transform_element_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public opt_or_replace(): Opt_or_replaceContext | null {
        return this.getRuleContext(0, Opt_or_replaceContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createtransformstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatetransformstmt) {
             listener.enterCreatetransformstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatetransformstmt) {
             listener.exitCreatetransformstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatetransformstmt) {
            return visitor.visitCreatetransformstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Transform_element_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_SQL(): antlr.TerminalNode[];
    public KW_SQL(i: number): antlr.TerminalNode | null;
    public KW_SQL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_SQL);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_SQL, i);
    	}
    }
    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(PostgreSqlParser.KW_WITH);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_WITH, i);
    	}
    }
    public KW_FUNCTION(): antlr.TerminalNode[];
    public KW_FUNCTION(i: number): antlr.TerminalNode | null;
    public KW_FUNCTION(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_FUNCTION);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_FUNCTION, i);
    	}
    }
    public function_with_argtypes(): Function_with_argtypesContext[];
    public function_with_argtypes(i: number): Function_with_argtypesContext | null;
    public function_with_argtypes(i?: number): Function_with_argtypesContext[] | Function_with_argtypesContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Function_with_argtypesContext);
        }

        return this.getRuleContext(i, Function_with_argtypesContext);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transform_element_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransform_element_list) {
             listener.enterTransform_element_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransform_element_list) {
             listener.exitTransform_element_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransform_element_list) {
            return visitor.visitTransform_element_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReindexstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REINDEX(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REINDEX, 0)!;
    }
    public reindex_target_type(): Reindex_target_typeContext | null {
        return this.getRuleContext(0, Reindex_target_typeContext);
    }
    public reindex_target_multitable(): Reindex_target_multitableContext | null {
        return this.getRuleContext(0, Reindex_target_multitableContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public reindex_option_list(): Reindex_option_listContext | null {
        return this.getRuleContext(0, Reindex_option_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reindexstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReindexstmt) {
             listener.enterReindexstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReindexstmt) {
             listener.exitReindexstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReindexstmt) {
            return visitor.visitReindexstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Reindex_target_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public opt_concurrently(): Opt_concurrentlyContext | null {
        return this.getRuleContext(0, Opt_concurrentlyContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reindex_target_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReindex_target_type) {
             listener.enterReindex_target_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReindex_target_type) {
             listener.exitReindex_target_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReindex_target_type) {
            return visitor.visitReindex_target_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Reindex_target_multitableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public opt_concurrently(): Opt_concurrentlyContext | null {
        return this.getRuleContext(0, Opt_concurrentlyContext);
    }
    public KW_SYSTEM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYSTEM, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public database_name(): Database_nameContext | null {
        return this.getRuleContext(0, Database_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reindex_target_multitable;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReindex_target_multitable) {
             listener.enterReindex_target_multitable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReindex_target_multitable) {
             listener.exitReindex_target_multitable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReindex_target_multitable) {
            return visitor.visitReindex_target_multitable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Reindex_option_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reindex_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReindex_option_list) {
             listener.enterReindex_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReindex_option_list) {
             listener.exitReindex_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReindex_option_list) {
            return visitor.visitReindex_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Reindex_option_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VERBOSE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VERBOSE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reindex_option_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReindex_option_elem) {
             listener.enterReindex_option_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReindex_option_elem) {
             listener.exitReindex_option_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReindex_option_elem) {
            return visitor.visitReindex_option_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltertblspcstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespace_name(): Tablespace_nameContext {
        return this.getRuleContext(0, Tablespace_nameContext)!;
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public reloptions(): ReloptionsContext {
        return this.getRuleContext(0, ReloptionsContext)!;
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altertblspcstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltertblspcstmt) {
             listener.enterAltertblspcstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltertblspcstmt) {
             listener.exitAltertblspcstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltertblspcstmt) {
            return visitor.visitAltertblspcstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RenamestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public aggregate_with_argtypes(): Aggregate_with_argtypesContext | null {
        return this.getRuleContext(0, Aggregate_with_argtypesContext);
    }
    public KW_RENAME(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RENAME, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_CONVERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONVERSION, 0);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public database_name(): Database_nameContext | null {
        return this.getRuleContext(0, Database_nameContext);
    }
    public database_name_create(): Database_name_createContext | null {
        return this.getRuleContext(0, Database_name_createContext);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATA, 0);
    }
    public KW_WRAPPER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public function_name_create(): Function_name_createContext | null {
        return this.getRuleContext(0, Function_name_createContext);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0);
    }
    public roleid(): RoleidContext[];
    public roleid(i: number): RoleidContext | null;
    public roleid(i?: number): RoleidContext[] | RoleidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(RoleidContext);
        }

        return this.getRuleContext(i, RoleidContext);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public opt_procedural(): Opt_proceduralContext | null {
        return this.getRuleContext(0, Opt_proceduralContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public KW_CLASS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_FAMILY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0);
    }
    public KW_POLICY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_POLICY, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public procedure_name_create(): Procedure_name_createContext | null {
        return this.getRuleContext(0, Procedure_name_createContext);
    }
    public KW_PUBLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public schema_name_create(): Schema_name_createContext | null {
        return this.getRuleContext(0, Schema_name_createContext);
    }
    public KW_SERVER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0);
    }
    public KW_SUBSCRIPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUBSCRIPTION, 0);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public relation_expr(): Relation_exprContext | null {
        return this.getRuleContext(0, Relation_exprContext);
    }
    public table_name_create(): Table_name_createContext | null {
        return this.getRuleContext(0, Table_name_createContext);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public view_name(): View_nameContext | null {
        return this.getRuleContext(0, View_nameContext);
    }
    public view_name_create(): View_name_createContext | null {
        return this.getRuleContext(0, View_name_createContext);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public column_name_create(): Column_name_createContext | null {
        return this.getRuleContext(0, Column_name_createContext);
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLUMN, 0);
    }
    public KW_RULE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RULE, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EVENT, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public tablespace_name(): Tablespace_nameContext | null {
        return this.getRuleContext(0, Tablespace_nameContext);
    }
    public tablespace_name_create(): Tablespace_name_createContext | null {
        return this.getRuleContext(0, Tablespace_name_createContext);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0);
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARSER, 0);
    }
    public KW_DICTIONARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0);
    }
    public KW_TEMPLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPLATE, 0);
    }
    public KW_CONFIGURATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public KW_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ATTRIBUTE, 0);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_renamestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRenamestmt) {
             listener.enterRenamestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRenamestmt) {
             listener.exitRenamestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRenamestmt) {
            return visitor.visitRenamestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_set_dataContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DATA, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_set_data;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_set_data) {
             listener.enterOpt_set_data(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_set_data) {
             listener.exitOpt_set_data(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_set_data) {
            return visitor.visitOpt_set_data(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterobjectdependsstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public KW_DEPENDS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DEPENDS, 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(PostgreSqlParser.KW_ON);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_ON, i);
    	}
    }
    public KW_EXTENSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0)!;
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public opt_no(): Opt_noContext | null {
        return this.getRuleContext(0, Opt_noContext);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public view_name(): View_nameContext | null {
        return this.getRuleContext(0, View_nameContext);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterobjectdependsstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterobjectdependsstmt) {
             listener.enterAlterobjectdependsstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterobjectdependsstmt) {
             listener.exitAlterobjectdependsstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterobjectdependsstmt) {
            return visitor.visitAlterobjectdependsstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_noContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NO, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_no;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_no) {
             listener.enterOpt_no(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_no) {
             listener.exitOpt_no(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_no) {
            return visitor.visitOpt_no(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterobjectschemastmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public aggregate_with_argtypes(): Aggregate_with_argtypesContext | null {
        return this.getRuleContext(0, Aggregate_with_argtypesContext);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public KW_SCHEMA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0)!;
    }
    public schema_name(): Schema_nameContext {
        return this.getRuleContext(0, Schema_nameContext)!;
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_CONVERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONVERSION, 0);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_EXTENSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public operator_with_argtypes(): Operator_with_argtypesContext | null {
        return this.getRuleContext(0, Operator_with_argtypesContext);
    }
    public KW_CLASS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_FAMILY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public relation_expr(): Relation_exprContext | null {
        return this.getRuleContext(0, Relation_exprContext);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0);
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARSER, 0);
    }
    public KW_DICTIONARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0);
    }
    public KW_TEMPLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPLATE, 0);
    }
    public KW_CONFIGURATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public view_name(): View_nameContext | null {
        return this.getRuleContext(0, View_nameContext);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterobjectschemastmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterobjectschemastmt) {
             listener.enterAlterobjectschemastmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterobjectschemastmt) {
             listener.exitAlterobjectschemastmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterobjectschemastmt) {
            return visitor.visitAlterobjectschemastmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlteroperatorstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_OPERATOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0)!;
    }
    public operator_with_argtypes(): Operator_with_argtypesContext {
        return this.getRuleContext(0, Operator_with_argtypesContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public operator_def_list(): Operator_def_listContext {
        return this.getRuleContext(0, Operator_def_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alteroperatorstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlteroperatorstmt) {
             listener.enterAlteroperatorstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlteroperatorstmt) {
             listener.exitAlteroperatorstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlteroperatorstmt) {
            return visitor.visitAlteroperatorstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Operator_def_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_operator_def_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOperator_def_list) {
             listener.enterOperator_def_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOperator_def_list) {
             listener.exitOperator_def_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOperator_def_list) {
            return visitor.visitOperator_def_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Operator_def_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public collabel(): CollabelContext {
        return this.getRuleContext(0, CollabelContext)!;
    }
    public EQUAL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.EQUAL, 0)!;
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NONE, 0);
    }
    public operator_def_arg(): Operator_def_argContext | null {
        return this.getRuleContext(0, Operator_def_argContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_operator_def_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOperator_def_elem) {
             listener.enterOperator_def_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOperator_def_elem) {
             listener.exitOperator_def_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOperator_def_elem) {
            return visitor.visitOperator_def_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Operator_def_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_type(): Func_typeContext | null {
        return this.getRuleContext(0, Func_typeContext);
    }
    public reserved_keyword(): Reserved_keywordContext | null {
        return this.getRuleContext(0, Reserved_keywordContext);
    }
    public qual_all_op(): Qual_all_opContext | null {
        return this.getRuleContext(0, Qual_all_opContext);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_operator_def_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOperator_def_arg) {
             listener.enterOperator_def_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOperator_def_arg) {
             listener.exitOperator_def_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOperator_def_arg) {
            return visitor.visitOperator_def_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltertypestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_TYPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public operator_def_list(): Operator_def_listContext {
        return this.getRuleContext(0, Operator_def_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altertypestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltertypestmt) {
             listener.enterAltertypestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltertypestmt) {
             listener.exitAltertypestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltertypestmt) {
            return visitor.visitAltertypestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterownerstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public aggregate_with_argtypes(): Aggregate_with_argtypesContext | null {
        return this.getRuleContext(0, Aggregate_with_argtypesContext);
    }
    public KW_OWNER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_CONVERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONVERSION, 0);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public database_name(): Database_nameContext | null {
        return this.getRuleContext(0, Database_nameContext);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public function_with_argtypes(): Function_with_argtypesContext | null {
        return this.getRuleContext(0, Function_with_argtypesContext);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public opt_procedural(): Opt_proceduralContext | null {
        return this.getRuleContext(0, Opt_proceduralContext);
    }
    public KW_LARGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LARGE, 0);
    }
    public KW_OBJECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OBJECT, 0);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public operator_with_argtypes(): Operator_with_argtypesContext | null {
        return this.getRuleContext(0, Operator_with_argtypesContext);
    }
    public KW_CLASS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_FAMILY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public procedure_with_argtypes(): Procedure_with_argtypesContext | null {
        return this.getRuleContext(0, Procedure_with_argtypesContext);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public routine_with_argtypes(): Routine_with_argtypesContext | null {
        return this.getRuleContext(0, Routine_with_argtypesContext);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public tablespace_name(): Tablespace_nameContext | null {
        return this.getRuleContext(0, Tablespace_nameContext);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0);
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_DICTIONARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0);
    }
    public KW_CONFIGURATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATA, 0);
    }
    public KW_WRAPPER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0);
    }
    public KW_SERVER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0);
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EVENT, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_PUBLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0);
    }
    public KW_SUBSCRIPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUBSCRIPTION, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterownerstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterownerstmt) {
             listener.enterAlterownerstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterownerstmt) {
             listener.exitAlterownerstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterownerstmt) {
            return visitor.visitAlterownerstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatepublicationstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_PUBLICATION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public opt_publication_for_tables(): Opt_publication_for_tablesContext | null {
        return this.getRuleContext(0, Opt_publication_for_tablesContext);
    }
    public opt_definition(): Opt_definitionContext | null {
        return this.getRuleContext(0, Opt_definitionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createpublicationstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatepublicationstmt) {
             listener.enterCreatepublicationstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatepublicationstmt) {
             listener.exitCreatepublicationstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatepublicationstmt) {
            return visitor.visitCreatepublicationstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_publication_for_tablesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public publication_for_tables(): Publication_for_tablesContext {
        return this.getRuleContext(0, Publication_for_tablesContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_publication_for_tables;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_publication_for_tables) {
             listener.enterOpt_publication_for_tables(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_publication_for_tables) {
             listener.exitOpt_publication_for_tables(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_publication_for_tables) {
            return visitor.visitOpt_publication_for_tables(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Publication_for_tablesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public relation_expr_list(): Relation_expr_listContext | null {
        return this.getRuleContext(0, Relation_expr_listContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLES, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_publication_for_tables;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPublication_for_tables) {
             listener.enterPublication_for_tables(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPublication_for_tables) {
             listener.exitPublication_for_tables(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPublication_for_tables) {
            return visitor.visitPublication_for_tables(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterpublicationstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_PUBLICATION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0)!;
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public definition(): DefinitionContext | null {
        return this.getRuleContext(0, DefinitionContext);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public publication_relation_expr_list(): Publication_relation_expr_listContext | null {
        return this.getRuleContext(0, Publication_relation_expr_listContext);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public KW_RENAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RENAME, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterpublicationstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterpublicationstmt) {
             listener.enterAlterpublicationstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterpublicationstmt) {
             listener.exitAlterpublicationstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterpublicationstmt) {
            return visitor.visitAlterpublicationstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatesubscriptionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_SUBSCRIPTION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SUBSCRIPTION, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_CONNECTION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CONNECTION, 0)!;
    }
    public sconst(): SconstContext {
        return this.getRuleContext(0, SconstContext)!;
    }
    public KW_PUBLICATION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0)!;
    }
    public publication_name_list(): Publication_name_listContext {
        return this.getRuleContext(0, Publication_name_listContext)!;
    }
    public opt_definition(): Opt_definitionContext | null {
        return this.getRuleContext(0, Opt_definitionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createsubscriptionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatesubscriptionstmt) {
             listener.enterCreatesubscriptionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatesubscriptionstmt) {
             listener.exitCreatesubscriptionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatesubscriptionstmt) {
            return visitor.visitCreatesubscriptionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Publication_name_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_publication_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPublication_name_list) {
             listener.enterPublication_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPublication_name_list) {
             listener.exitPublication_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPublication_name_list) {
            return visitor.visitPublication_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Publication_name_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public collabel(): CollabelContext {
        return this.getRuleContext(0, CollabelContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_publication_name_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPublication_name_item) {
             listener.enterPublication_name_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPublication_name_item) {
             listener.exitPublication_name_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPublication_name_item) {
            return visitor.visitPublication_name_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltersubscriptionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_SUBSCRIPTION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SUBSCRIPTION, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public definition(): DefinitionContext | null {
        return this.getRuleContext(0, DefinitionContext);
    }
    public KW_CONNECTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONNECTION, 0);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_REFRESH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REFRESH, 0);
    }
    public KW_PUBLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0);
    }
    public opt_definition(): Opt_definitionContext | null {
        return this.getRuleContext(0, Opt_definitionContext);
    }
    public publication_name_list(): Publication_name_listContext | null {
        return this.getRuleContext(0, Publication_name_listContext);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENABLE, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISABLE, 0);
    }
    public KW_SKIP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SKIP, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public old_aggr_elem(): Old_aggr_elemContext | null {
        return this.getRuleContext(0, Old_aggr_elemContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public rolespec(): RolespecContext | null {
        return this.getRuleContext(0, RolespecContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altersubscriptionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltersubscriptionstmt) {
             listener.enterAltersubscriptionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltersubscriptionstmt) {
             listener.exitAltersubscriptionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltersubscriptionstmt) {
            return visitor.visitAltersubscriptionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RulestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_RULE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RULE, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public event(): EventContext {
        return this.getRuleContext(0, EventContext)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public qualified_name(): Qualified_nameContext {
        return this.getRuleContext(0, Qualified_nameContext)!;
    }
    public KW_DO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DO, 0)!;
    }
    public ruleactionlist(): RuleactionlistContext {
        return this.getRuleContext(0, RuleactionlistContext)!;
    }
    public opt_or_replace(): Opt_or_replaceContext | null {
        return this.getRuleContext(0, Opt_or_replaceContext);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public opt_instead(): Opt_insteadContext | null {
        return this.getRuleContext(0, Opt_insteadContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rulestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRulestmt) {
             listener.enterRulestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRulestmt) {
             listener.exitRulestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRulestmt) {
            return visitor.visitRulestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RuleactionlistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOTHING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTHING, 0);
    }
    public ruleactionstmt(): RuleactionstmtContext | null {
        return this.getRuleContext(0, RuleactionstmtContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public ruleactionmulti(): RuleactionmultiContext | null {
        return this.getRuleContext(0, RuleactionmultiContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_ruleactionlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRuleactionlist) {
             listener.enterRuleactionlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRuleactionlist) {
             listener.exitRuleactionlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRuleactionlist) {
            return visitor.visitRuleactionlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, RuleactionstmtOrEmptyContext);
    }
    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(PostgreSqlParser.SEMI);
    	} else {
    		return this.getToken(PostgreSqlParser.SEMI, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_ruleactionmulti;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRuleactionmulti) {
             listener.enterRuleactionmulti(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRuleactionmulti) {
             listener.exitRuleactionmulti(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRuleactionmulti) {
            return visitor.visitRuleactionmulti(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RuleactionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public insertstmt(): InsertstmtContext | null {
        return this.getRuleContext(0, InsertstmtContext);
    }
    public updatestmt(): UpdatestmtContext | null {
        return this.getRuleContext(0, UpdatestmtContext);
    }
    public deletestmt(): DeletestmtContext | null {
        return this.getRuleContext(0, DeletestmtContext);
    }
    public notifystmt(): NotifystmtContext | null {
        return this.getRuleContext(0, NotifystmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_ruleactionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRuleactionstmt) {
             listener.enterRuleactionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRuleactionstmt) {
             listener.exitRuleactionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRuleactionstmt) {
            return visitor.visitRuleactionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RuleactionstmtOrEmptyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public ruleactionstmt(): RuleactionstmtContext {
        return this.getRuleContext(0, RuleactionstmtContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_ruleactionstmtOrEmpty;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRuleactionstmtOrEmpty) {
             listener.enterRuleactionstmtOrEmpty(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRuleactionstmtOrEmpty) {
             listener.exitRuleactionstmtOrEmpty(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRuleactionstmtOrEmpty) {
            return visitor.visitRuleactionstmtOrEmpty(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class EventContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SELECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SELECT, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_event;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterEvent) {
             listener.enterEvent(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitEvent) {
             listener.exitEvent(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitEvent) {
            return visitor.visitEvent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_insteadContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INSTEAD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSTEAD, 0);
    }
    public KW_ALSO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALSO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_instead;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_instead) {
             listener.enterOpt_instead(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_instead) {
             listener.exitOpt_instead(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_instead) {
            return visitor.visitOpt_instead(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class NotifystmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOTIFY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NOTIFY, 0)!;
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public notify_payload(): Notify_payloadContext | null {
        return this.getRuleContext(0, Notify_payloadContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_notifystmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNotifystmt) {
             listener.enterNotifystmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNotifystmt) {
             listener.exitNotifystmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNotifystmt) {
            return visitor.visitNotifystmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Notify_payloadContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.COMMA, 0)!;
    }
    public sconst(): SconstContext {
        return this.getRuleContext(0, SconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_notify_payload;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNotify_payload) {
             listener.enterNotify_payload(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNotify_payload) {
             listener.exitNotify_payload(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNotify_payload) {
            return visitor.visitNotify_payload(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ListenstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LISTEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LISTEN, 0)!;
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_listenstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterListenstmt) {
             listener.enterListenstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitListenstmt) {
             listener.exitListenstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitListenstmt) {
            return visitor.visitListenstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UnlistenstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNLISTEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UNLISTEN, 0)!;
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_unlistenstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterUnlistenstmt) {
             listener.enterUnlistenstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitUnlistenstmt) {
             listener.exitUnlistenstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnlistenstmt) {
            return visitor.visitUnlistenstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransactionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ABORT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ABORT, 0);
    }
    public opt_transaction(): Opt_transactionContext | null {
        return this.getRuleContext(0, Opt_transactionContext);
    }
    public opt_transaction_chain(): Opt_transaction_chainContext | null {
        return this.getRuleContext(0, Opt_transaction_chainContext);
    }
    public KW_BEGIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BEGIN, 0);
    }
    public transaction_mode_list_or_empty(): Transaction_mode_list_or_emptyContext | null {
        return this.getRuleContext(0, Transaction_mode_list_or_emptyContext);
    }
    public KW_START(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_START, 0);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSACTION, 0);
    }
    public KW_END(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_END, 0);
    }
    public KW_SAVEPOINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SAVEPOINT, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public KW_RELEASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RELEASE, 0);
    }
    public KW_PREPARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PREPARE, 0);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public KW_COMMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMIT, 0);
    }
    public KW_PREPARED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PREPARED, 0);
    }
    public KW_ROLLBACK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLLBACK, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transactionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransactionstmt) {
             listener.enterTransactionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransactionstmt) {
             listener.exitTransactionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransactionstmt) {
            return visitor.visitTransactionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_transactionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WORK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WORK, 0);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSACTION, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_transaction;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_transaction) {
             listener.enterOpt_transaction(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_transaction) {
             listener.exitOpt_transaction(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_transaction) {
            return visitor.visitOpt_transaction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Transaction_mode_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ISOLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ISOLATION, 0);
    }
    public KW_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEVEL, 0);
    }
    public iso_level(): Iso_levelContext | null {
        return this.getRuleContext(0, Iso_levelContext);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_READ, 0);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public KW_WRITE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRITE, 0);
    }
    public KW_DEFERRABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFERRABLE, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transaction_mode_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransaction_mode_item) {
             listener.enterTransaction_mode_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransaction_mode_item) {
             listener.exitTransaction_mode_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransaction_mode_item) {
            return visitor.visitTransaction_mode_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Transaction_mode_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transaction_mode_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransaction_mode_list) {
             listener.enterTransaction_mode_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransaction_mode_list) {
             listener.exitTransaction_mode_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransaction_mode_list) {
            return visitor.visitTransaction_mode_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Transaction_mode_list_or_emptyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public transaction_mode_list(): Transaction_mode_listContext {
        return this.getRuleContext(0, Transaction_mode_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_transaction_mode_list_or_empty;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTransaction_mode_list_or_empty) {
             listener.enterTransaction_mode_list_or_empty(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTransaction_mode_list_or_empty) {
             listener.exitTransaction_mode_list_or_empty(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransaction_mode_list_or_empty) {
            return visitor.visitTransaction_mode_list_or_empty(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_transaction_chainContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AND(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AND, 0)!;
    }
    public KW_CHAIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CHAIN, 0)!;
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_transaction_chain;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_transaction_chain) {
             listener.enterOpt_transaction_chain(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_transaction_chain) {
             listener.exitOpt_transaction_chain(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_transaction_chain) {
            return visitor.visitOpt_transaction_chain(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ViewstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_viewstmt;
    }
    public override copyFrom(ctx: ViewstmtContext): void {
        super.copyFrom(ctx);
    }
}
export class CreateViewContext extends ViewstmtContext {
    public constructor(ctx: ViewstmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public selectstmt(): SelectstmtContext {
        return this.getRuleContext(0, SelectstmtContext)!;
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public view_name_create(): View_name_createContext | null {
        return this.getRuleContext(0, View_name_createContext);
    }
    public KW_RECURSIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RECURSIVE, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_OR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OR, 0);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPLACE, 0);
    }
    public opttemp(): OpttempContext | null {
        return this.getRuleContext(0, OpttempContext);
    }
    public opt_check_option(): Opt_check_optionContext | null {
        return this.getRuleContext(0, Opt_check_optionContext);
    }
    public opt_column_list_create(): Opt_column_list_createContext | null {
        return this.getRuleContext(0, Opt_column_list_createContext);
    }
    public opt_reloptions(): Opt_reloptionsContext | null {
        return this.getRuleContext(0, Opt_reloptionsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateView) {
             listener.enterCreateView(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateView) {
             listener.exitCreateView(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateView) {
            return visitor.visitCreateView(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_check_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public KW_CHECK(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CHECK, 0)!;
    }
    public KW_OPTION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0)!;
    }
    public KW_CASCADED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CASCADED, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCAL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_check_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_check_option) {
             listener.enterOpt_check_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_check_option) {
             listener.exitOpt_check_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_check_option) {
            return visitor.visitOpt_check_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LoadstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LOAD(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LOAD, 0)!;
    }
    public file_name(): File_nameContext {
        return this.getRuleContext(0, File_nameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_loadstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterLoadstmt) {
             listener.enterLoadstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitLoadstmt) {
             listener.exitLoadstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitLoadstmt) {
            return visitor.visitLoadstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatedbstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createdbstmt;
    }
    public override copyFrom(ctx: CreatedbstmtContext): void {
        super.copyFrom(ctx);
    }
}
export class CreateDatabaseContext extends CreatedbstmtContext {
    public constructor(ctx: CreatedbstmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_DATABASE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0)!;
    }
    public database_name_create(): Database_name_createContext {
        return this.getRuleContext(0, Database_name_createContext)!;
    }
    public opt_with(): Opt_withContext | null {
        return this.getRuleContext(0, Opt_withContext);
    }
    public createdb_opt_list(): Createdb_opt_listContext | null {
        return this.getRuleContext(0, Createdb_opt_listContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateDatabase) {
             listener.enterCreateDatabase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateDatabase) {
             listener.exitCreateDatabase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateDatabase) {
            return visitor.visitCreateDatabase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Createdb_opt_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public createdb_opt_items(): Createdb_opt_itemsContext {
        return this.getRuleContext(0, Createdb_opt_itemsContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createdb_opt_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatedb_opt_list) {
             listener.enterCreatedb_opt_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatedb_opt_list) {
             listener.exitCreatedb_opt_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatedb_opt_list) {
            return visitor.visitCreatedb_opt_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Createdb_opt_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createdb_opt_items;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatedb_opt_items) {
             listener.enterCreatedb_opt_items(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatedb_opt_items) {
             listener.exitCreatedb_opt_items(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatedb_opt_items) {
            return visitor.visitCreatedb_opt_items(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Createdb_opt_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public createdb_opt_name(): Createdb_opt_nameContext {
        return this.getRuleContext(0, Createdb_opt_nameContext)!;
    }
    public signediconst(): SignediconstContext | null {
        return this.getRuleContext(0, SignediconstContext);
    }
    public opt_boolean_or_string(): Opt_boolean_or_stringContext | null {
        return this.getRuleContext(0, Opt_boolean_or_stringContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public opt_equal(): Opt_equalContext | null {
        return this.getRuleContext(0, Opt_equalContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createdb_opt_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatedb_opt_item) {
             listener.enterCreatedb_opt_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatedb_opt_item) {
             listener.exitCreatedb_opt_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatedb_opt_item) {
            return visitor.visitCreatedb_opt_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Createdb_opt_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CONNECTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONNECTION, 0);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LIMIT, 0);
    }
    public KW_ENCODING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENCODING, 0);
    }
    public KW_LOCATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCATION, 0);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public KW_TEMPLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPLATE, 0);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createdb_opt_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatedb_opt_name) {
             listener.enterCreatedb_opt_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatedb_opt_name) {
             listener.exitCreatedb_opt_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatedb_opt_name) {
            return visitor.visitCreatedb_opt_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_equalContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public EQUAL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.EQUAL, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_equal;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_equal) {
             listener.enterOpt_equal(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_equal) {
             listener.exitOpt_equal(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_equal) {
            return visitor.visitOpt_equal(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterdatabasestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_DATABASE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0)!;
    }
    public database_name(): Database_nameContext {
        return this.getRuleContext(0, Database_nameContext)!;
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public tablespace_name_create(): Tablespace_name_createContext | null {
        return this.getRuleContext(0, Tablespace_name_createContext);
    }
    public createdb_opt_list(): Createdb_opt_listContext | null {
        return this.getRuleContext(0, Createdb_opt_listContext);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterdatabasestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterdatabasestmt) {
             listener.enterAlterdatabasestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterdatabasestmt) {
             listener.exitAlterdatabasestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterdatabasestmt) {
            return visitor.visitAlterdatabasestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterdatabasesetstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_DATABASE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0)!;
    }
    public database_name(): Database_nameContext {
        return this.getRuleContext(0, Database_nameContext)!;
    }
    public setresetclause(): SetresetclauseContext | null {
        return this.getRuleContext(0, SetresetclauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterdatabasesetstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterdatabasesetstmt) {
             listener.enterAlterdatabasesetstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterdatabasesetstmt) {
             listener.exitAlterdatabasesetstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterdatabasesetstmt) {
            return visitor.visitAlterdatabasesetstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Drop_optionContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_drop_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDrop_option_list) {
             listener.enterDrop_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDrop_option_list) {
             listener.exitDrop_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDrop_option_list) {
            return visitor.visitDrop_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Drop_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FORCE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FORCE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_drop_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDrop_option) {
             listener.enterDrop_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDrop_option) {
             listener.exitDrop_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDrop_option) {
            return visitor.visitDrop_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltercollationstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_COLLATION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public KW_REFRESH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REFRESH, 0)!;
    }
    public KW_VERSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VERSION, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altercollationstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltercollationstmt) {
             listener.enterAltercollationstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltercollationstmt) {
             listener.exitAltercollationstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltercollationstmt) {
            return visitor.visitAltercollationstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltersystemstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_SYSTEM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SYSTEM, 0)!;
    }
    public generic_set(): Generic_setContext {
        return this.getRuleContext(0, Generic_setContext)!;
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altersystemstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltersystemstmt) {
             listener.enterAltersystemstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltersystemstmt) {
             listener.exitAltersystemstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltersystemstmt) {
            return visitor.visitAltersystemstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreatedomainstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_DOMAIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public typename(): TypenameContext {
        return this.getRuleContext(0, TypenameContext)!;
    }
    public colquallist(): ColquallistContext {
        return this.getRuleContext(0, ColquallistContext)!;
    }
    public opt_as(): Opt_asContext | null {
        return this.getRuleContext(0, Opt_asContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createdomainstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreatedomainstmt) {
             listener.enterCreatedomainstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreatedomainstmt) {
             listener.exitCreatedomainstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreatedomainstmt) {
            return visitor.visitCreatedomainstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterdomainstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_DOMAIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public alter_column_default(): Alter_column_defaultContext | null {
        return this.getRuleContext(0, Alter_column_defaultContext);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public tableconstraint(): TableconstraintContext | null {
        return this.getRuleContext(0, TableconstraintContext);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_VALIDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALIDATE, 0);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public opt_drop_behavior(): Opt_drop_behaviorContext | null {
        return this.getRuleContext(0, Opt_drop_behaviorContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alterdomainstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlterdomainstmt) {
             listener.enterAlterdomainstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlterdomainstmt) {
             listener.exitAlterdomainstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterdomainstmt) {
            return visitor.visitAlterdomainstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_asContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_as;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_as) {
             listener.enterOpt_as(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_as) {
             listener.exitOpt_as(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_as) {
            return visitor.visitOpt_as(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltertsdictionarystmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0)!;
    }
    public KW_TEXT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0)!;
    }
    public KW_SEARCH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0)!;
    }
    public KW_DICTIONARY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0)!;
    }
    public any_name(): Any_nameContext {
        return this.getRuleContext(0, Any_nameContext)!;
    }
    public definition(): DefinitionContext {
        return this.getRuleContext(0, DefinitionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altertsdictionarystmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltertsdictionarystmt) {
             listener.enterAltertsdictionarystmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltertsdictionarystmt) {
             listener.exitAltertsdictionarystmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltertsdictionarystmt) {
            return visitor.visitAltertsdictionarystmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AltertsconfigurationstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode[];
    public KW_ALTER(i: number): antlr.TerminalNode | null;
    public KW_ALTER(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_ALTER);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_ALTER, i);
    	}
    }
    public KW_TEXT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0)!;
    }
    public KW_SEARCH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0)!;
    }
    public KW_CONFIGURATION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0)!;
    }
    public any_name(): Any_nameContext[];
    public any_name(i: number): Any_nameContext | null;
    public any_name(i?: number): Any_nameContext[] | Any_nameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Any_nameContext);
        }

        return this.getRuleContext(i, Any_nameContext);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public KW_MAPPING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MAPPING, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public name_list(): Name_listContext | null {
        return this.getRuleContext(0, Name_listContext);
    }
    public any_with(): Any_withContext | null {
        return this.getRuleContext(0, Any_withContext);
    }
    public any_name_list(): Any_name_listContext | null {
        return this.getRuleContext(0, Any_name_listContext);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPLACE, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public opt_if_exists(): Opt_if_existsContext | null {
        return this.getRuleContext(0, Opt_if_existsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_altertsconfigurationstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAltertsconfigurationstmt) {
             listener.enterAltertsconfigurationstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAltertsconfigurationstmt) {
             listener.exitAltertsconfigurationstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAltertsconfigurationstmt) {
            return visitor.visitAltertsconfigurationstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Any_withContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_any_with;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAny_with) {
             listener.enterAny_with(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAny_with) {
             listener.exitAny_with(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAny_with) {
            return visitor.visitAny_with(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateconversionstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0)!;
    }
    public KW_CONVERSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CONVERSION, 0)!;
    }
    public any_name(): Any_nameContext[];
    public any_name(i: number): Any_nameContext | null;
    public any_name(i?: number): Any_nameContext[] | Any_nameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Any_nameContext);
        }

        return this.getRuleContext(i, Any_nameContext);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public sconst(): SconstContext[];
    public sconst(i: number): SconstContext | null;
    public sconst(i?: number): SconstContext[] | SconstContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SconstContext);
        }

        return this.getRuleContext(i, SconstContext);
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TO, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public opt_default(): Opt_defaultContext | null {
        return this.getRuleContext(0, Opt_defaultContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_createconversionstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCreateconversionstmt) {
             listener.enterCreateconversionstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCreateconversionstmt) {
             listener.exitCreateconversionstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateconversionstmt) {
            return visitor.visitCreateconversionstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ClusterstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CLUSTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CLUSTER, 0)!;
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public opt_verbose(): Opt_verboseContext | null {
        return this.getRuleContext(0, Opt_verboseContext);
    }
    public cluster_index_specification(): Cluster_index_specificationContext | null {
        return this.getRuleContext(0, Cluster_index_specificationContext);
    }
    public opt_verbose_list(): Opt_verbose_listContext | null {
        return this.getRuleContext(0, Opt_verbose_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_clusterstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterClusterstmt) {
             listener.enterClusterstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitClusterstmt) {
             listener.exitClusterstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitClusterstmt) {
            return visitor.visitClusterstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_verbose_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public opt_verbose(): Opt_verboseContext[];
    public opt_verbose(i: number): Opt_verboseContext | null;
    public opt_verbose(i?: number): Opt_verboseContext[] | Opt_verboseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Opt_verboseContext);
        }

        return this.getRuleContext(i, Opt_verboseContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_verbose_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_verbose_list) {
             listener.enterOpt_verbose_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_verbose_list) {
             listener.exitOpt_verbose_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_verbose_list) {
            return visitor.visitOpt_verbose_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Cluster_index_specificationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cluster_index_specification;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCluster_index_specification) {
             listener.enterCluster_index_specification(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCluster_index_specification) {
             listener.exitCluster_index_specification(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCluster_index_specification) {
            return visitor.visitCluster_index_specification(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class VacuumstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VACUUM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VACUUM, 0)!;
    }
    public opt_full(): Opt_fullContext | null {
        return this.getRuleContext(0, Opt_fullContext);
    }
    public opt_freeze(): Opt_freezeContext | null {
        return this.getRuleContext(0, Opt_freezeContext);
    }
    public opt_verbose(): Opt_verboseContext | null {
        return this.getRuleContext(0, Opt_verboseContext);
    }
    public opt_analyze(): Opt_analyzeContext | null {
        return this.getRuleContext(0, Opt_analyzeContext);
    }
    public opt_vacuum_relation_list(): Opt_vacuum_relation_listContext | null {
        return this.getRuleContext(0, Opt_vacuum_relation_listContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public vac_analyze_option_list(): Vac_analyze_option_listContext | null {
        return this.getRuleContext(0, Vac_analyze_option_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_vacuumstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVacuumstmt) {
             listener.enterVacuumstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVacuumstmt) {
             listener.exitVacuumstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVacuumstmt) {
            return visitor.visitVacuumstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AnalyzestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public analyze_keyword(): Analyze_keywordContext {
        return this.getRuleContext(0, Analyze_keywordContext)!;
    }
    public opt_verbose(): Opt_verboseContext | null {
        return this.getRuleContext(0, Opt_verboseContext);
    }
    public opt_vacuum_relation_list(): Opt_vacuum_relation_listContext | null {
        return this.getRuleContext(0, Opt_vacuum_relation_listContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public analyze_options_list(): Analyze_options_listContext | null {
        return this.getRuleContext(0, Analyze_options_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_analyzestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAnalyzestmt) {
             listener.enterAnalyzestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAnalyzestmt) {
             listener.exitAnalyzestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAnalyzestmt) {
            return visitor.visitAnalyzestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Vac_analyze_option_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_vac_analyze_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVac_analyze_option_list) {
             listener.enterVac_analyze_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVac_analyze_option_list) {
             listener.exitVac_analyze_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVac_analyze_option_list) {
            return visitor.visitVac_analyze_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Analyze_keywordContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ANALYZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ANALYZE, 0);
    }
    public KW_ANALYSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ANALYSE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_analyze_keyword;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAnalyze_keyword) {
             listener.enterAnalyze_keyword(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAnalyze_keyword) {
             listener.exitAnalyze_keyword(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAnalyze_keyword) {
            return visitor.visitAnalyze_keyword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Vac_analyze_option_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public vac_analyze_option_name(): Vac_analyze_option_nameContext {
        return this.getRuleContext(0, Vac_analyze_option_nameContext)!;
    }
    public vac_analyze_option_arg(): Vac_analyze_option_argContext | null {
        return this.getRuleContext(0, Vac_analyze_option_argContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_vac_analyze_option_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVac_analyze_option_elem) {
             listener.enterVac_analyze_option_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVac_analyze_option_elem) {
             listener.exitVac_analyze_option_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVac_analyze_option_elem) {
            return visitor.visitVac_analyze_option_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Vac_analyze_option_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public nonreservedword(): NonreservedwordContext | null {
        return this.getRuleContext(0, NonreservedwordContext);
    }
    public analyze_keyword(): Analyze_keywordContext | null {
        return this.getRuleContext(0, Analyze_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_vac_analyze_option_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVac_analyze_option_name) {
             listener.enterVac_analyze_option_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVac_analyze_option_name) {
             listener.exitVac_analyze_option_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVac_analyze_option_name) {
            return visitor.visitVac_analyze_option_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Vac_analyze_option_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_boolean_or_string(): Opt_boolean_or_stringContext | null {
        return this.getRuleContext(0, Opt_boolean_or_stringContext);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_vac_analyze_option_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVac_analyze_option_arg) {
             listener.enterVac_analyze_option_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVac_analyze_option_arg) {
             listener.exitVac_analyze_option_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVac_analyze_option_arg) {
            return visitor.visitVac_analyze_option_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_analyzeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public analyze_keyword(): Analyze_keywordContext {
        return this.getRuleContext(0, Analyze_keywordContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_analyze;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_analyze) {
             listener.enterOpt_analyze(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_analyze) {
             listener.exitOpt_analyze(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_analyze) {
            return visitor.visitOpt_analyze(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Analyze_option_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_analyze_options_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAnalyze_options_list) {
             listener.enterAnalyze_options_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAnalyze_options_list) {
             listener.exitAnalyze_options_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAnalyze_options_list) {
            return visitor.visitAnalyze_options_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Analyze_option_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_verbose(): Opt_verboseContext | null {
        return this.getRuleContext(0, Opt_verboseContext);
    }
    public opt_skiplock(): Opt_skiplockContext | null {
        return this.getRuleContext(0, Opt_skiplockContext);
    }
    public opt_buffer_usage_limit(): Opt_buffer_usage_limitContext | null {
        return this.getRuleContext(0, Opt_buffer_usage_limitContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_analyze_option_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAnalyze_option_elem) {
             listener.enterAnalyze_option_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAnalyze_option_elem) {
             listener.exitAnalyze_option_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAnalyze_option_elem) {
            return visitor.visitAnalyze_option_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_verboseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VERBOSE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VERBOSE, 0)!;
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FALSE, 0);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_verbose;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_verbose) {
             listener.enterOpt_verbose(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_verbose) {
             listener.exitOpt_verbose(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_verbose) {
            return visitor.visitOpt_verbose(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_skiplockContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SKIP_LOCKED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SKIP_LOCKED, 0)!;
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FALSE, 0);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_skiplock;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_skiplock) {
             listener.enterOpt_skiplock(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_skiplock) {
             listener.exitOpt_skiplock(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_skiplock) {
            return visitor.visitOpt_skiplock(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_buffer_usage_limitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BUFFER_USAGE_LIMIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BUFFER_USAGE_LIMIT, 0)!;
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_buffer_usage_limit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_buffer_usage_limit) {
             listener.enterOpt_buffer_usage_limit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_buffer_usage_limit) {
             listener.exitOpt_buffer_usage_limit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_buffer_usage_limit) {
            return visitor.visitOpt_buffer_usage_limit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_fullContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FULL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FULL, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_full;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_full) {
             listener.enterOpt_full(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_full) {
             listener.exitOpt_full(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_full) {
            return visitor.visitOpt_full(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_freezeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FREEZE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FREEZE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_freeze;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_freeze) {
             listener.enterOpt_freeze(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_freeze) {
             listener.exitOpt_freeze(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_freeze) {
            return visitor.visitOpt_freeze(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_name_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public column_list(): Column_listContext {
        return this.getRuleContext(0, Column_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_name_list) {
             listener.enterOpt_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_name_list) {
             listener.exitOpt_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_name_list) {
            return visitor.visitOpt_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Vacuum_relationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public table_name(): Table_nameContext {
        return this.getRuleContext(0, Table_nameContext)!;
    }
    public opt_name_list(): Opt_name_listContext | null {
        return this.getRuleContext(0, Opt_name_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_vacuum_relation;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVacuum_relation) {
             listener.enterVacuum_relation(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVacuum_relation) {
             listener.exitVacuum_relation(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVacuum_relation) {
            return visitor.visitVacuum_relation(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Vacuum_relationContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_vacuum_relation_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterVacuum_relation_list) {
             listener.enterVacuum_relation_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitVacuum_relation_list) {
             listener.exitVacuum_relation_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitVacuum_relation_list) {
            return visitor.visitVacuum_relation_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_vacuum_relation_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public vacuum_relation_list(): Vacuum_relation_listContext {
        return this.getRuleContext(0, Vacuum_relation_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_vacuum_relation_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_vacuum_relation_list) {
             listener.enterOpt_vacuum_relation_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_vacuum_relation_list) {
             listener.exitOpt_vacuum_relation_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_vacuum_relation_list) {
            return visitor.visitOpt_vacuum_relation_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExplainstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EXPLAIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXPLAIN, 0)!;
    }
    public explainablestmt(): ExplainablestmtContext {
        return this.getRuleContext(0, ExplainablestmtContext)!;
    }
    public analyze_keyword(): Analyze_keywordContext | null {
        return this.getRuleContext(0, Analyze_keywordContext);
    }
    public opt_verbose(): Opt_verboseContext | null {
        return this.getRuleContext(0, Opt_verboseContext);
    }
    public KW_VERBOSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VERBOSE, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public explain_option_list(): Explain_option_listContext | null {
        return this.getRuleContext(0, Explain_option_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_explainstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExplainstmt) {
             listener.enterExplainstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExplainstmt) {
             listener.exitExplainstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExplainstmt) {
            return visitor.visitExplainstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExplainablestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public insertstmt(): InsertstmtContext | null {
        return this.getRuleContext(0, InsertstmtContext);
    }
    public updatestmt(): UpdatestmtContext | null {
        return this.getRuleContext(0, UpdatestmtContext);
    }
    public deletestmt(): DeletestmtContext | null {
        return this.getRuleContext(0, DeletestmtContext);
    }
    public declarecursorstmt(): DeclarecursorstmtContext | null {
        return this.getRuleContext(0, DeclarecursorstmtContext);
    }
    public createasstmt(): CreateasstmtContext | null {
        return this.getRuleContext(0, CreateasstmtContext);
    }
    public creatematviewstmt(): CreatematviewstmtContext | null {
        return this.getRuleContext(0, CreatematviewstmtContext);
    }
    public refreshmatviewstmt(): RefreshmatviewstmtContext | null {
        return this.getRuleContext(0, RefreshmatviewstmtContext);
    }
    public executestmt(): ExecutestmtContext | null {
        return this.getRuleContext(0, ExecutestmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_explainablestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExplainablestmt) {
             listener.enterExplainablestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExplainablestmt) {
             listener.exitExplainablestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExplainablestmt) {
            return visitor.visitExplainablestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Explain_option_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_explain_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExplain_option_list) {
             listener.enterExplain_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExplain_option_list) {
             listener.exitExplain_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExplain_option_list) {
            return visitor.visitExplain_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Explain_option_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public explain_option_name(): Explain_option_nameContext {
        return this.getRuleContext(0, Explain_option_nameContext)!;
    }
    public explain_option_arg(): Explain_option_argContext | null {
        return this.getRuleContext(0, Explain_option_argContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_explain_option_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExplain_option_elem) {
             listener.enterExplain_option_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExplain_option_elem) {
             listener.exitExplain_option_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExplain_option_elem) {
            return visitor.visitExplain_option_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Explain_option_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public nonreservedword(): NonreservedwordContext | null {
        return this.getRuleContext(0, NonreservedwordContext);
    }
    public analyze_keyword(): Analyze_keywordContext | null {
        return this.getRuleContext(0, Analyze_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_explain_option_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExplain_option_name) {
             listener.enterExplain_option_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExplain_option_name) {
             listener.exitExplain_option_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExplain_option_name) {
            return visitor.visitExplain_option_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Explain_option_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_boolean_or_string(): Opt_boolean_or_stringContext | null {
        return this.getRuleContext(0, Opt_boolean_or_stringContext);
    }
    public numericonly(): NumericonlyContext | null {
        return this.getRuleContext(0, NumericonlyContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_explain_option_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExplain_option_arg) {
             listener.enterExplain_option_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExplain_option_arg) {
             listener.exitExplain_option_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExplain_option_arg) {
            return visitor.visitExplain_option_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PreparestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PREPARE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PREPARE, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public preparablestmt(): PreparablestmtContext {
        return this.getRuleContext(0, PreparablestmtContext)!;
    }
    public prep_type_clause(): Prep_type_clauseContext | null {
        return this.getRuleContext(0, Prep_type_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_preparestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPreparestmt) {
             listener.enterPreparestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPreparestmt) {
             listener.exitPreparestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPreparestmt) {
            return visitor.visitPreparestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Prep_type_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public type_list(): Type_listContext {
        return this.getRuleContext(0, Type_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_prep_type_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPrep_type_clause) {
             listener.enterPrep_type_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPrep_type_clause) {
             listener.exitPrep_type_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrep_type_clause) {
            return visitor.visitPrep_type_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PreparablestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public insertstmt(): InsertstmtContext | null {
        return this.getRuleContext(0, InsertstmtContext);
    }
    public updatestmt(): UpdatestmtContext | null {
        return this.getRuleContext(0, UpdatestmtContext);
    }
    public deletestmt(): DeletestmtContext | null {
        return this.getRuleContext(0, DeletestmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_preparablestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPreparablestmt) {
             listener.enterPreparablestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPreparablestmt) {
             listener.exitPreparablestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPreparablestmt) {
            return visitor.visitPreparablestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExecutestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EXECUTE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0)!;
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public execute_param_clause(): Execute_param_clauseContext | null {
        return this.getRuleContext(0, Execute_param_clauseContext);
    }
    public KW_CREATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public create_as_target(): Create_as_targetContext | null {
        return this.getRuleContext(0, Create_as_targetContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public opttemp(): OpttempContext | null {
        return this.getRuleContext(0, OpttempContext);
    }
    public opt_if_not_exists(): Opt_if_not_existsContext | null {
        return this.getRuleContext(0, Opt_if_not_existsContext);
    }
    public opt_with_data(): Opt_with_dataContext | null {
        return this.getRuleContext(0, Opt_with_dataContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_executestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExecutestmt) {
             listener.enterExecutestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExecutestmt) {
             listener.exitExecutestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExecutestmt) {
            return visitor.visitExecutestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Execute_param_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_execute_param_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExecute_param_clause) {
             listener.enterExecute_param_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExecute_param_clause) {
             listener.exitExecute_param_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExecute_param_clause) {
            return visitor.visitExecute_param_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeallocatestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEALLOCATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DEALLOCATE, 0)!;
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_PREPARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PREPARE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_deallocatestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDeallocatestmt) {
             listener.enterDeallocatestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDeallocatestmt) {
             listener.exitDeallocatestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeallocatestmt) {
            return visitor.visitDeallocatestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class InsertstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_insertstmt;
    }
    public override copyFrom(ctx: InsertstmtContext): void {
        super.copyFrom(ctx);
    }
}
export class InsertStatementContext extends InsertstmtContext {
    public constructor(ctx: InsertstmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INSERT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTO, 0)!;
    }
    public insert_target(): Insert_targetContext {
        return this.getRuleContext(0, Insert_targetContext)!;
    }
    public insert_rest(): Insert_restContext {
        return this.getRuleContext(0, Insert_restContext)!;
    }
    public opt_with_clause(): Opt_with_clauseContext | null {
        return this.getRuleContext(0, Opt_with_clauseContext);
    }
    public opt_on_conflict(): Opt_on_conflictContext | null {
        return this.getRuleContext(0, Opt_on_conflictContext);
    }
    public returning_clause(): Returning_clauseContext | null {
        return this.getRuleContext(0, Returning_clauseContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInsertStatement) {
             listener.enterInsertStatement(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInsertStatement) {
             listener.exitInsertStatement(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInsertStatement) {
            return visitor.visitInsertStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Insert_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public table_name(): Table_nameContext {
        return this.getRuleContext(0, Table_nameContext)!;
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_insert_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInsert_target) {
             listener.enterInsert_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInsert_target) {
             listener.exitInsert_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInsert_target) {
            return visitor.visitInsert_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Insert_restContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public default_values_or_values(): Default_values_or_valuesContext | null {
        return this.getRuleContext(0, Default_values_or_valuesContext);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public insert_column_list(): Insert_column_listContext | null {
        return this.getRuleContext(0, Insert_column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_OVERRIDING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVERRIDING, 0);
    }
    public override_kind(): Override_kindContext | null {
        return this.getRuleContext(0, Override_kindContext);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_insert_rest;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInsert_rest) {
             listener.enterInsert_rest(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInsert_rest) {
             listener.exitInsert_rest(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInsert_rest) {
            return visitor.visitInsert_rest(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Override_kindContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public KW_SYSTEM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYSTEM, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_override_kind;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOverride_kind) {
             listener.enterOverride_kind(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOverride_kind) {
             listener.exitOverride_kind(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOverride_kind) {
            return visitor.visitOverride_kind(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Insert_column_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_insert_column_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInsert_column_list) {
             listener.enterInsert_column_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInsert_column_list) {
             listener.exitInsert_column_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInsert_column_list) {
            return visitor.visitInsert_column_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Insert_column_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name(): Column_nameContext {
        return this.getRuleContext(0, Column_nameContext)!;
    }
    public opt_indirection(): Opt_indirectionContext {
        return this.getRuleContext(0, Opt_indirectionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_insert_column_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInsert_column_item) {
             listener.enterInsert_column_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInsert_column_item) {
             listener.exitInsert_column_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInsert_column_item) {
            return visitor.visitInsert_column_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_on_conflictContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public KW_CONFLICT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CONFLICT, 0)!;
    }
    public KW_DO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DO, 0)!;
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public set_clause_list(): Set_clause_listContext | null {
        return this.getRuleContext(0, Set_clause_listContext);
    }
    public KW_NOTHING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTHING, 0);
    }
    public opt_conf_expr(): Opt_conf_exprContext | null {
        return this.getRuleContext(0, Opt_conf_exprContext);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_on_conflict;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_on_conflict) {
             listener.enterOpt_on_conflict(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_on_conflict) {
             listener.exitOpt_on_conflict(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_on_conflict) {
            return visitor.visitOpt_on_conflict(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_conf_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public index_params(): Index_paramsContext | null {
        return this.getRuleContext(0, Index_paramsContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public name(): NameContext | null {
        return this.getRuleContext(0, NameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_conf_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_conf_expr) {
             listener.enterOpt_conf_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_conf_expr) {
             listener.exitOpt_conf_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_conf_expr) {
            return visitor.visitOpt_conf_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Returning_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RETURNING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RETURNING, 0)!;
    }
    public target_list(): Target_listContext {
        return this.getRuleContext(0, Target_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_returning_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReturning_clause) {
             listener.enterReturning_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReturning_clause) {
             listener.exitReturning_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReturning_clause) {
            return visitor.visitReturning_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeletestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DELETE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public relation_expr_opt_alias(): Relation_expr_opt_aliasContext {
        return this.getRuleContext(0, Relation_expr_opt_aliasContext)!;
    }
    public opt_with_clause(): Opt_with_clauseContext | null {
        return this.getRuleContext(0, Opt_with_clauseContext);
    }
    public using_clause(): Using_clauseContext | null {
        return this.getRuleContext(0, Using_clauseContext);
    }
    public where_or_current_clause(): Where_or_current_clauseContext | null {
        return this.getRuleContext(0, Where_or_current_clauseContext);
    }
    public returning_clause(): Returning_clauseContext | null {
        return this.getRuleContext(0, Returning_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_deletestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDeletestmt) {
             listener.enterDeletestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDeletestmt) {
             listener.exitDeletestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeletestmt) {
            return visitor.visitDeletestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Using_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public from_list(): From_listContext {
        return this.getRuleContext(0, From_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_using_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterUsing_clause) {
             listener.enterUsing_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitUsing_clause) {
             listener.exitUsing_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitUsing_clause) {
            return visitor.visitUsing_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LockstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LOCK(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LOCK, 0)!;
    }
    public relation_expr_list(): Relation_expr_listContext {
        return this.getRuleContext(0, Relation_expr_listContext)!;
    }
    public opt_table(): Opt_tableContext | null {
        return this.getRuleContext(0, Opt_tableContext);
    }
    public opt_lock(): Opt_lockContext | null {
        return this.getRuleContext(0, Opt_lockContext);
    }
    public opt_nowait(): Opt_nowaitContext | null {
        return this.getRuleContext(0, Opt_nowaitContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_lockstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterLockstmt) {
             listener.enterLockstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitLockstmt) {
             listener.exitLockstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitLockstmt) {
            return visitor.visitLockstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_lockContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IN, 0)!;
    }
    public lock_type(): Lock_typeContext {
        return this.getRuleContext(0, Lock_typeContext)!;
    }
    public KW_MODE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MODE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_lock;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_lock) {
             listener.enterOpt_lock(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_lock) {
             listener.exitOpt_lock(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_lock) {
            return visitor.visitOpt_lock(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Lock_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ACCESS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ACCESS, 0);
    }
    public KW_SHARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SHARE, 0);
    }
    public KW_EXCLUSIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCLUSIVE, 0);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_lock_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterLock_type) {
             listener.enterLock_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitLock_type) {
             listener.exitLock_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitLock_type) {
            return visitor.visitLock_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_nowaitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOWAIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NOWAIT, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_nowait;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_nowait) {
             listener.enterOpt_nowait(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_nowait) {
             listener.exitOpt_nowait(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_nowait) {
            return visitor.visitOpt_nowait(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_nowait_or_skipContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOWAIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOWAIT, 0);
    }
    public KW_SKIP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SKIP, 0);
    }
    public KW_LOCKED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCKED, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_nowait_or_skip;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_nowait_or_skip) {
             listener.enterOpt_nowait_or_skip(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_nowait_or_skip) {
             listener.exitOpt_nowait_or_skip(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_nowait_or_skip) {
            return visitor.visitOpt_nowait_or_skip(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UpdatestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UPDATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0)!;
    }
    public relation_expr_opt_alias(): Relation_expr_opt_aliasContext {
        return this.getRuleContext(0, Relation_expr_opt_aliasContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public set_clause_list(): Set_clause_listContext {
        return this.getRuleContext(0, Set_clause_listContext)!;
    }
    public opt_with_clause(): Opt_with_clauseContext | null {
        return this.getRuleContext(0, Opt_with_clauseContext);
    }
    public from_clause(): From_clauseContext | null {
        return this.getRuleContext(0, From_clauseContext);
    }
    public where_or_current_clause(): Where_or_current_clauseContext | null {
        return this.getRuleContext(0, Where_or_current_clauseContext);
    }
    public returning_clause(): Returning_clauseContext | null {
        return this.getRuleContext(0, Returning_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_updatestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterUpdatestmt) {
             listener.enterUpdatestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitUpdatestmt) {
             listener.exitUpdatestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitUpdatestmt) {
            return visitor.visitUpdatestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Set_clauseContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_clause_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSet_clause_list) {
             listener.enterSet_clause_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSet_clause_list) {
             listener.exitSet_clause_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSet_clause_list) {
            return visitor.visitSet_clause_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Set_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public set_target(): Set_targetContext | null {
        return this.getRuleContext(0, Set_targetContext);
    }
    public EQUAL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.EQUAL, 0)!;
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode[];
    public OPEN_PAREN(i: number): antlr.TerminalNode | null;
    public OPEN_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.OPEN_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.OPEN_PAREN, i);
    	}
    }
    public set_target_list(): Set_target_listContext | null {
        return this.getRuleContext(0, Set_target_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode[];
    public CLOSE_PAREN(i: number): antlr.TerminalNode | null;
    public CLOSE_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.CLOSE_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.CLOSE_PAREN, i);
    	}
    }
    public select_clause(): Select_clauseContext | null {
        return this.getRuleContext(0, Select_clauseContext);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSet_clause) {
             listener.enterSet_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSet_clause) {
             listener.exitSet_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSet_clause) {
            return visitor.visitSet_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Set_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name(): Column_nameContext {
        return this.getRuleContext(0, Column_nameContext)!;
    }
    public opt_indirection(): Opt_indirectionContext {
        return this.getRuleContext(0, Opt_indirectionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSet_target) {
             listener.enterSet_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSet_target) {
             listener.exitSet_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSet_target) {
            return visitor.visitSet_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Set_targetContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_target_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSet_target_list) {
             listener.enterSet_target_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSet_target_list) {
             listener.exitSet_target_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSet_target_list) {
            return visitor.visitSet_target_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeclarecursorstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DECLARE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DECLARE, 0)!;
    }
    public cursor_name(): Cursor_nameContext {
        return this.getRuleContext(0, Cursor_nameContext)!;
    }
    public cursor_options(): Cursor_optionsContext {
        return this.getRuleContext(0, Cursor_optionsContext)!;
    }
    public KW_CURSOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CURSOR, 0)!;
    }
    public opt_hold(): Opt_holdContext {
        return this.getRuleContext(0, Opt_holdContext)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public selectstmt(): SelectstmtContext {
        return this.getRuleContext(0, SelectstmtContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_declarecursorstmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDeclarecursorstmt) {
             listener.enterDeclarecursorstmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDeclarecursorstmt) {
             listener.exitDeclarecursorstmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeclarecursorstmt) {
            return visitor.visitDeclarecursorstmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Cursor_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cursor_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCursor_name) {
             listener.enterCursor_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCursor_name) {
             listener.exitCursor_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCursor_name) {
            return visitor.visitCursor_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Cursor_optionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    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(PostgreSqlParser.KW_NO);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_NO, i);
    	}
    }
    public KW_SCROLL(): antlr.TerminalNode[];
    public KW_SCROLL(i: number): antlr.TerminalNode | null;
    public KW_SCROLL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_SCROLL);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_SCROLL, i);
    	}
    }
    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(PostgreSqlParser.KW_BINARY);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_BINARY, i);
    	}
    }
    public KW_INSENSITIVE(): antlr.TerminalNode[];
    public KW_INSENSITIVE(i: number): antlr.TerminalNode | null;
    public KW_INSENSITIVE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_INSENSITIVE);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_INSENSITIVE, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cursor_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCursor_options) {
             listener.enterCursor_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCursor_options) {
             listener.exitCursor_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCursor_options) {
            return visitor.visitCursor_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_holdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public KW_HOLD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HOLD, 0);
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITHOUT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_hold;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_hold) {
             listener.enterOpt_hold(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_hold) {
             listener.exitOpt_hold(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_hold) {
            return visitor.visitOpt_hold(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectstmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_selectstmt;
    }
    public override copyFrom(ctx: SelectstmtContext): void {
        super.copyFrom(ctx);
    }
}
export class SelectStatementContext extends SelectstmtContext {
    public constructor(ctx: SelectstmtContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public select_no_parens(): Select_no_parensContext | null {
        return this.getRuleContext(0, Select_no_parensContext);
    }
    public select_with_parens(): Select_with_parensContext | null {
        return this.getRuleContext(0, Select_with_parensContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelectStatement) {
             listener.enterSelectStatement(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelectStatement) {
             listener.exitSelectStatement(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectStatement) {
            return visitor.visitSelectStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Select_with_parensContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public select_no_parens(): Select_no_parensContext | null {
        return this.getRuleContext(0, Select_no_parensContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public select_with_parens(): Select_with_parensContext | null {
        return this.getRuleContext(0, Select_with_parensContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_select_with_parens;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelect_with_parens) {
             listener.enterSelect_with_parens(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelect_with_parens) {
             listener.exitSelect_with_parens(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelect_with_parens) {
            return visitor.visitSelect_with_parens(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Select_no_parensContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public select_clause(): Select_clauseContext {
        return this.getRuleContext(0, Select_clauseContext)!;
    }
    public opt_sort_clause(): Opt_sort_clauseContext | null {
        return this.getRuleContext(0, Opt_sort_clauseContext);
    }
    public for_locking_clause(): For_locking_clauseContext | null {
        return this.getRuleContext(0, For_locking_clauseContext);
    }
    public select_limit(): Select_limitContext | null {
        return this.getRuleContext(0, Select_limitContext);
    }
    public opt_select_limit(): Opt_select_limitContext | null {
        return this.getRuleContext(0, Opt_select_limitContext);
    }
    public opt_for_locking_clause(): Opt_for_locking_clauseContext | null {
        return this.getRuleContext(0, Opt_for_locking_clauseContext);
    }
    public with_clause(): With_clauseContext | null {
        return this.getRuleContext(0, With_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_select_no_parens;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelect_no_parens) {
             listener.enterSelect_no_parens(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelect_no_parens) {
             listener.exitSelect_no_parens(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelect_no_parens) {
            return visitor.visitSelect_no_parens(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Select_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public simple_select(): Simple_selectContext | null {
        return this.getRuleContext(0, Simple_selectContext);
    }
    public select_with_parens(): Select_with_parensContext | null {
        return this.getRuleContext(0, Select_with_parensContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_select_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelect_clause) {
             listener.enterSelect_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelect_clause) {
             listener.exitSelect_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelect_clause) {
            return visitor.visitSelect_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Simple_selectContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SELECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SELECT, 0);
    }
    public values_clause(): Values_clauseContext | null {
        return this.getRuleContext(0, Values_clauseContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public relation_expr(): Relation_exprContext | null {
        return this.getRuleContext(0, Relation_exprContext);
    }
    public select_with_parens(): Select_with_parensContext[];
    public select_with_parens(i: number): Select_with_parensContext | null;
    public select_with_parens(i?: number): Select_with_parensContext[] | Select_with_parensContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Select_with_parensContext);
        }

        return this.getRuleContext(i, Select_with_parensContext);
    }
    public set_operator_with_all_or_distinct(): Set_operator_with_all_or_distinctContext[];
    public set_operator_with_all_or_distinct(i: number): Set_operator_with_all_or_distinctContext | null;
    public set_operator_with_all_or_distinct(i?: number): Set_operator_with_all_or_distinctContext[] | Set_operator_with_all_or_distinctContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Set_operator_with_all_or_distinctContext);
        }

        return this.getRuleContext(i, Set_operator_with_all_or_distinctContext);
    }
    public simple_select(): Simple_selectContext[];
    public simple_select(i: number): Simple_selectContext | null;
    public simple_select(i?: number): Simple_selectContext[] | Simple_selectContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Simple_selectContext);
        }

        return this.getRuleContext(i, Simple_selectContext);
    }
    public into_clause(): Into_clauseContext[];
    public into_clause(i: number): Into_clauseContext | null;
    public into_clause(i?: number): Into_clauseContext[] | Into_clauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Into_clauseContext);
        }

        return this.getRuleContext(i, Into_clauseContext);
    }
    public from_clause(): From_clauseContext | null {
        return this.getRuleContext(0, From_clauseContext);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public group_clause(): Group_clauseContext | null {
        return this.getRuleContext(0, Group_clauseContext);
    }
    public having_clause(): Having_clauseContext | null {
        return this.getRuleContext(0, Having_clauseContext);
    }
    public window_clause(): Window_clauseContext | null {
        return this.getRuleContext(0, Window_clauseContext);
    }
    public opt_all_clause(): Opt_all_clauseContext | null {
        return this.getRuleContext(0, Opt_all_clauseContext);
    }
    public opt_target_list(): Opt_target_listContext | null {
        return this.getRuleContext(0, Opt_target_listContext);
    }
    public distinct_clause(): Distinct_clauseContext | null {
        return this.getRuleContext(0, Distinct_clauseContext);
    }
    public target_list(): Target_listContext | null {
        return this.getRuleContext(0, Target_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_simple_select;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSimple_select) {
             listener.enterSimple_select(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSimple_select) {
             listener.exitSimple_select(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimple_select) {
            return visitor.visitSimple_select(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Set_operatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_operator;
    }
    public override copyFrom(ctx: Set_operatorContext): void {
        super.copyFrom(ctx);
    }
}
export class IntersectContext extends Set_operatorContext {
    public constructor(ctx: Set_operatorContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INTERSECT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTERSECT, 0)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIntersect) {
             listener.enterIntersect(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIntersect) {
             listener.exitIntersect(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIntersect) {
            return visitor.visitIntersect(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ExceptContext extends Set_operatorContext {
    public constructor(ctx: Set_operatorContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_EXCEPT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXCEPT, 0)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExcept) {
             listener.enterExcept(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExcept) {
             listener.exitExcept(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExcept) {
            return visitor.visitExcept(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class UnionContext extends Set_operatorContext {
    public constructor(ctx: Set_operatorContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_UNION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UNION, 0)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterUnion) {
             listener.enterUnion(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitUnion) {
             listener.exitUnion(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnion) {
            return visitor.visitUnion(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Set_operator_with_all_or_distinctContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public set_operator(): Set_operatorContext {
        return this.getRuleContext(0, Set_operatorContext)!;
    }
    public all_or_distinct(): All_or_distinctContext | null {
        return this.getRuleContext(0, All_or_distinctContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_set_operator_with_all_or_distinct;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSet_operator_with_all_or_distinct) {
             listener.enterSet_operator_with_all_or_distinct(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSet_operator_with_all_or_distinct) {
             listener.exitSet_operator_with_all_or_distinct(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSet_operator_with_all_or_distinct) {
            return visitor.visitSet_operator_with_all_or_distinct(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class With_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public cte_list(): Cte_listContext {
        return this.getRuleContext(0, Cte_listContext)!;
    }
    public KW_RECURSIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RECURSIVE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_with_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWith_clause) {
             listener.enterWith_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWith_clause) {
             listener.exitWith_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWith_clause) {
            return visitor.visitWith_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Common_table_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cte_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCte_list) {
             listener.enterCte_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCte_list) {
             listener.exitCte_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCte_list) {
            return visitor.visitCte_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Common_table_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public name(): NameContext {
        return this.getRuleContext(0, NameContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public preparablestmt(): PreparablestmtContext {
        return this.getRuleContext(0, PreparablestmtContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public opt_name_list(): Opt_name_listContext | null {
        return this.getRuleContext(0, Opt_name_listContext);
    }
    public opt_materialized(): Opt_materializedContext | null {
        return this.getRuleContext(0, Opt_materializedContext);
    }
    public search_cluase(): Search_cluaseContext | null {
        return this.getRuleContext(0, Search_cluaseContext);
    }
    public cycle_cluase(): Cycle_cluaseContext | null {
        return this.getRuleContext(0, Cycle_cluaseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_common_table_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCommon_table_expr) {
             listener.enterCommon_table_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCommon_table_expr) {
             listener.exitCommon_table_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCommon_table_expr) {
            return visitor.visitCommon_table_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Search_cluaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SEARCH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0)!;
    }
    public KW_FIRST(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FIRST, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public column_list(): Column_listContext {
        return this.getRuleContext(0, Column_listContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public column_name(): Column_nameContext {
        return this.getRuleContext(0, Column_nameContext)!;
    }
    public KW_BREADTH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BREADTH, 0);
    }
    public KW_DEPTH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEPTH, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_search_cluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSearch_cluase) {
             listener.enterSearch_cluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSearch_cluase) {
             listener.exitSearch_cluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSearch_cluase) {
            return visitor.visitSearch_cluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Cycle_cluaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CYCLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CYCLE, 0)!;
    }
    public column_list(): Column_listContext {
        return this.getRuleContext(0, Column_listContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public column_name(): Column_nameContext[];
    public column_name(i: number): Column_nameContext | null;
    public column_name(i?: number): Column_nameContext[] | Column_nameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Column_nameContext);
        }

        return this.getRuleContext(i, Column_nameContext);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public name(): NameContext[];
    public name(i: number): NameContext | null;
    public name(i?: number): NameContext[] | NameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(NameContext);
        }

        return this.getRuleContext(i, NameContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cycle_cluase;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCycle_cluase) {
             listener.enterCycle_cluase(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCycle_cluase) {
             listener.exitCycle_cluase(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCycle_cluase) {
            return visitor.visitCycle_cluase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_materializedContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_materialized;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_materialized) {
             listener.enterOpt_materialized(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_materialized) {
             listener.exitOpt_materialized(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_materialized) {
            return visitor.visitOpt_materialized(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_with_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public with_clause(): With_clauseContext {
        return this.getRuleContext(0, With_clauseContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_with_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_with_clause) {
             listener.enterOpt_with_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_with_clause) {
             listener.exitOpt_with_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_with_clause) {
            return visitor.visitOpt_with_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Into_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTO, 0)!;
    }
    public opt_strict(): Opt_strictContext | null {
        return this.getRuleContext(0, Opt_strictContext);
    }
    public opttempTableName(): OpttempTableNameContext | null {
        return this.getRuleContext(0, OpttempTableNameContext);
    }
    public into_target(): Into_targetContext | null {
        return this.getRuleContext(0, Into_targetContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_into_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInto_clause) {
             listener.enterInto_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInto_clause) {
             listener.exitInto_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInto_clause) {
            return visitor.visitInto_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_strictContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_STRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STRICT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_strict;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_strict) {
             listener.enterOpt_strict(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_strict) {
             listener.exitOpt_strict(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_strict) {
            return visitor.visitOpt_strict(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OpttempTableNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public table_name_create(): Table_name_createContext {
        return this.getRuleContext(0, Table_name_createContext)!;
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPORARY, 0);
    }
    public KW_TEMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMP, 0);
    }
    public opt_table(): Opt_tableContext | null {
        return this.getRuleContext(0, Opt_tableContext);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCAL, 0);
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GLOBAL, 0);
    }
    public KW_UNLOGGED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNLOGGED, 0);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opttempTableName;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpttempTableName) {
             listener.enterOpttempTableName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpttempTableName) {
             listener.exitOpttempTableName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpttempTableName) {
            return visitor.visitOpttempTableName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_tableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_table;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_table) {
             listener.enterOpt_table(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_table) {
             listener.exitOpt_table(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_table) {
            return visitor.visitOpt_table(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class All_or_distinctContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISTINCT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_all_or_distinct;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAll_or_distinct) {
             listener.enterAll_or_distinct(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAll_or_distinct) {
             listener.exitAll_or_distinct(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAll_or_distinct) {
            return visitor.visitAll_or_distinct(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Distinct_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DISTINCT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DISTINCT, 0)!;
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_distinct_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDistinct_clause) {
             listener.enterDistinct_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDistinct_clause) {
             listener.exitDistinct_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDistinct_clause) {
            return visitor.visitDistinct_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_all_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ALL, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_all_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_all_clause) {
             listener.enterOpt_all_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_all_clause) {
             listener.exitOpt_all_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_all_clause) {
            return visitor.visitOpt_all_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_sort_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sort_clause(): Sort_clauseContext {
        return this.getRuleContext(0, Sort_clauseContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_sort_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_sort_clause) {
             listener.enterOpt_sort_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_sort_clause) {
             listener.exitOpt_sort_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_sort_clause) {
            return visitor.visitOpt_sort_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Sort_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ORDER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ORDER, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public sortby_list(): Sortby_listContext {
        return this.getRuleContext(0, Sortby_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_sort_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSort_clause) {
             listener.enterSort_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSort_clause) {
             listener.exitSort_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSort_clause) {
            return visitor.visitSort_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, SortbyContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_sortby_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSortby_list) {
             listener.enterSortby_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSortby_list) {
             listener.exitSortby_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSortby_list) {
            return visitor.visitSortby_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SortbyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_expr_noparen(): Column_expr_noparenContext {
        return this.getRuleContext(0, Column_expr_noparenContext)!;
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public qual_all_op(): Qual_all_opContext | null {
        return this.getRuleContext(0, Qual_all_opContext);
    }
    public opt_asc_desc(): Opt_asc_descContext | null {
        return this.getRuleContext(0, Opt_asc_descContext);
    }
    public opt_nulls_order(): Opt_nulls_orderContext | null {
        return this.getRuleContext(0, Opt_nulls_orderContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_sortby;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSortby) {
             listener.enterSortby(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSortby) {
             listener.exitSortby(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSortby) {
            return visitor.visitSortby(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Select_limitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public limit_clause(): Limit_clauseContext | null {
        return this.getRuleContext(0, Limit_clauseContext);
    }
    public offset_clause(): Offset_clauseContext | null {
        return this.getRuleContext(0, Offset_clauseContext);
    }
    public fetch_clause(): Fetch_clauseContext | null {
        return this.getRuleContext(0, Fetch_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_select_limit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelect_limit) {
             listener.enterSelect_limit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelect_limit) {
             listener.exitSelect_limit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelect_limit) {
            return visitor.visitSelect_limit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_select_limitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public select_limit(): Select_limitContext {
        return this.getRuleContext(0, Select_limitContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_select_limit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_select_limit) {
             listener.enterOpt_select_limit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_select_limit) {
             listener.exitOpt_select_limit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_select_limit) {
            return visitor.visitOpt_select_limit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Limit_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LIMIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_LIMIT, 0)!;
    }
    public select_limit_value(): Select_limit_valueContext {
        return this.getRuleContext(0, Select_limit_valueContext)!;
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public select_offset_value(): Select_offset_valueContext | null {
        return this.getRuleContext(0, Select_offset_valueContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_limit_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterLimit_clause) {
             listener.enterLimit_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitLimit_clause) {
             listener.exitLimit_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitLimit_clause) {
            return visitor.visitLimit_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Fetch_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FETCH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FETCH, 0)!;
    }
    public first_or_next(): First_or_nextContext {
        return this.getRuleContext(0, First_or_nextContext)!;
    }
    public select_fetch_first_value(): Select_fetch_first_valueContext | null {
        return this.getRuleContext(0, Select_fetch_first_valueContext);
    }
    public row_or_rows(): Row_or_rowsContext | null {
        return this.getRuleContext(0, Row_or_rowsContext);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public KW_TIES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIES, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_fetch_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFetch_clause) {
             listener.enterFetch_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFetch_clause) {
             listener.exitFetch_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFetch_clause) {
            return visitor.visitFetch_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Offset_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OFFSET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OFFSET, 0)!;
    }
    public select_fetch_first_value(): Select_fetch_first_valueContext | null {
        return this.getRuleContext(0, Select_fetch_first_valueContext);
    }
    public row_or_rows(): Row_or_rowsContext | null {
        return this.getRuleContext(0, Row_or_rowsContext);
    }
    public select_offset_value(): Select_offset_valueContext | null {
        return this.getRuleContext(0, Select_offset_valueContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_offset_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOffset_clause) {
             listener.enterOffset_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOffset_clause) {
             listener.exitOffset_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOffset_clause) {
            return visitor.visitOffset_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Select_limit_valueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_select_limit_value;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelect_limit_value) {
             listener.enterSelect_limit_value(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelect_limit_value) {
             listener.exitSelect_limit_value(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelect_limit_value) {
            return visitor.visitSelect_limit_value(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Select_offset_valueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_select_offset_value;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelect_offset_value) {
             listener.enterSelect_offset_value(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelect_offset_value) {
             listener.exitSelect_offset_value(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelect_offset_value) {
            return visitor.visitSelect_offset_value(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Select_fetch_first_valueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PLUS, 0);
    }
    public i_or_f_const(): I_or_f_constContext | null {
        return this.getRuleContext(0, I_or_f_constContext);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.MINUS, 0);
    }
    public c_expr(): C_exprContext | null {
        return this.getRuleContext(0, C_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_select_fetch_first_value;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSelect_fetch_first_value) {
             listener.enterSelect_fetch_first_value(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSelect_fetch_first_value) {
             listener.exitSelect_fetch_first_value(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelect_fetch_first_value) {
            return visitor.visitSelect_fetch_first_value(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class I_or_f_constContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public fconst(): FconstContext | null {
        return this.getRuleContext(0, FconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_i_or_f_const;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterI_or_f_const) {
             listener.enterI_or_f_const(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitI_or_f_const) {
             listener.exitI_or_f_const(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitI_or_f_const) {
            return visitor.visitI_or_f_const(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Row_or_rowsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_row_or_rows;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRow_or_rows) {
             listener.enterRow_or_rows(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRow_or_rows) {
             listener.exitRow_or_rows(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRow_or_rows) {
            return visitor.visitRow_or_rows(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class First_or_nextContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FIRST, 0);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEXT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_first_or_next;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFirst_or_next) {
             listener.enterFirst_or_next(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFirst_or_next) {
             listener.exitFirst_or_next(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFirst_or_next) {
            return visitor.visitFirst_or_next(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Group_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public group_by_list(): Group_by_listContext {
        return this.getRuleContext(0, Group_by_listContext)!;
    }
    public all_or_distinct(): All_or_distinctContext | null {
        return this.getRuleContext(0, All_or_distinctContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_group_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGroup_clause) {
             listener.enterGroup_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGroup_clause) {
             listener.exitGroup_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroup_clause) {
            return visitor.visitGroup_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Group_by_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_group_by_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGroup_by_list) {
             listener.enterGroup_by_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGroup_by_list) {
             listener.exitGroup_by_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroup_by_list) {
            return visitor.visitGroup_by_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Group_by_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_expr_noparen(): Column_expr_noparenContext | null {
        return this.getRuleContext(0, Column_expr_noparenContext);
    }
    public empty_grouping_set(): Empty_grouping_setContext | null {
        return this.getRuleContext(0, Empty_grouping_setContext);
    }
    public cube_clause(): Cube_clauseContext | null {
        return this.getRuleContext(0, Cube_clauseContext);
    }
    public rollup_clause(): Rollup_clauseContext | null {
        return this.getRuleContext(0, Rollup_clauseContext);
    }
    public grouping_sets_clause(): Grouping_sets_clauseContext | null {
        return this.getRuleContext(0, Grouping_sets_clauseContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public column_expr_list_noparen(): Column_expr_list_noparenContext | null {
        return this.getRuleContext(0, Column_expr_list_noparenContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_group_by_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGroup_by_item) {
             listener.enterGroup_by_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGroup_by_item) {
             listener.exitGroup_by_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroup_by_item) {
            return visitor.visitGroup_by_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Empty_grouping_setContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_empty_grouping_set;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterEmpty_grouping_set) {
             listener.enterEmpty_grouping_set(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitEmpty_grouping_set) {
             listener.exitEmpty_grouping_set(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitEmpty_grouping_set) {
            return visitor.visitEmpty_grouping_set(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Rollup_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROLLUP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ROLLUP, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public column_expr_list_noparen(): Column_expr_list_noparenContext {
        return this.getRuleContext(0, Column_expr_list_noparenContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rollup_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRollup_clause) {
             listener.enterRollup_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRollup_clause) {
             listener.exitRollup_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRollup_clause) {
            return visitor.visitRollup_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Cube_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CUBE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CUBE, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public column_expr_list_noparen(): Column_expr_list_noparenContext {
        return this.getRuleContext(0, Column_expr_list_noparenContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cube_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCube_clause) {
             listener.enterCube_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCube_clause) {
             listener.exitCube_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCube_clause) {
            return visitor.visitCube_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Grouping_sets_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GROUPING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GROUPING, 0)!;
    }
    public KW_SETS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SETS, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public group_by_list(): Group_by_listContext {
        return this.getRuleContext(0, Group_by_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_grouping_sets_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGrouping_sets_clause) {
             listener.enterGrouping_sets_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGrouping_sets_clause) {
             listener.exitGrouping_sets_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGrouping_sets_clause) {
            return visitor.visitGrouping_sets_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Having_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HAVING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_HAVING, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_having_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterHaving_clause) {
             listener.enterHaving_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitHaving_clause) {
             listener.exitHaving_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitHaving_clause) {
            return visitor.visitHaving_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class For_locking_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public for_locking_items(): For_locking_itemsContext | null {
        return this.getRuleContext(0, For_locking_itemsContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_READ, 0);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_for_locking_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFor_locking_clause) {
             listener.enterFor_locking_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFor_locking_clause) {
             listener.exitFor_locking_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFor_locking_clause) {
            return visitor.visitFor_locking_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_for_locking_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public for_locking_clause(): For_locking_clauseContext {
        return this.getRuleContext(0, For_locking_clauseContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_for_locking_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_for_locking_clause) {
             listener.enterOpt_for_locking_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_for_locking_clause) {
             listener.exitOpt_for_locking_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_for_locking_clause) {
            return visitor.visitOpt_for_locking_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, For_locking_itemContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_for_locking_items;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFor_locking_items) {
             listener.enterFor_locking_items(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFor_locking_items) {
             listener.exitFor_locking_items(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFor_locking_items) {
            return visitor.visitFor_locking_items(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class For_locking_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public for_locking_strength(): For_locking_strengthContext {
        return this.getRuleContext(0, For_locking_strengthContext)!;
    }
    public locked_rels_list(): Locked_rels_listContext | null {
        return this.getRuleContext(0, Locked_rels_listContext);
    }
    public opt_nowait_or_skip(): Opt_nowait_or_skipContext | null {
        return this.getRuleContext(0, Opt_nowait_or_skipContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_for_locking_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFor_locking_item) {
             listener.enterFor_locking_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFor_locking_item) {
             listener.exitFor_locking_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFor_locking_item) {
            return visitor.visitFor_locking_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class For_locking_strengthContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public KW_SHARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SHARE, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_KEY, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_for_locking_strength;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFor_locking_strength) {
             listener.enterFor_locking_strength(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFor_locking_strength) {
             listener.exitFor_locking_strength(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFor_locking_strength) {
            return visitor.visitFor_locking_strength(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Locked_rels_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OF(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OF, 0)!;
    }
    public qualified_name_list(): Qualified_name_listContext {
        return this.getRuleContext(0, Qualified_name_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_locked_rels_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterLocked_rels_list) {
             listener.enterLocked_rels_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitLocked_rels_list) {
             listener.exitLocked_rels_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitLocked_rels_list) {
            return visitor.visitLocked_rels_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Values_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VALUES(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VALUES, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode[];
    public OPEN_PAREN(i: number): antlr.TerminalNode | null;
    public OPEN_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.OPEN_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.OPEN_PAREN, i);
    	}
    }
    public expr_list(): Expr_listContext[];
    public expr_list(i: number): Expr_listContext | null;
    public expr_list(i?: number): Expr_listContext[] | Expr_listContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Expr_listContext);
        }

        return this.getRuleContext(i, Expr_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode[];
    public CLOSE_PAREN(i: number): antlr.TerminalNode | null;
    public CLOSE_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.CLOSE_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.CLOSE_PAREN, 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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_values_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterValues_clause) {
             listener.enterValues_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitValues_clause) {
             listener.exitValues_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitValues_clause) {
            return visitor.visitValues_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class From_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public from_list(): From_listContext {
        return this.getRuleContext(0, From_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_from_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFrom_clause) {
             listener.enterFrom_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFrom_clause) {
             listener.exitFrom_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrom_clause) {
            return visitor.visitFrom_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Table_refContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_from_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFrom_list) {
             listener.enterFrom_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFrom_list) {
             listener.exitFrom_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrom_list) {
            return visitor.visitFrom_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Table_refContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_table(): Func_tableContext | null {
        return this.getRuleContext(0, Func_tableContext);
    }
    public xmltable(): XmltableContext | null {
        return this.getRuleContext(0, XmltableContext);
    }
    public select_with_parens(): Select_with_parensContext | null {
        return this.getRuleContext(0, Select_with_parensContext);
    }
    public KW_LATERAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LATERAL, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public table_ref(): Table_refContext[];
    public table_ref(i: number): Table_refContext | null;
    public table_ref(i?: number): Table_refContext[] | Table_refContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Table_refContext);
        }

        return this.getRuleContext(i, Table_refContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_CROSS(): antlr.TerminalNode[];
    public KW_CROSS(i: number): antlr.TerminalNode | null;
    public KW_CROSS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_CROSS);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_CROSS, i);
    	}
    }
    public KW_JOIN(): antlr.TerminalNode[];
    public KW_JOIN(i: number): antlr.TerminalNode | null;
    public KW_JOIN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_JOIN);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_JOIN, i);
    	}
    }
    public KW_NATURAL(): antlr.TerminalNode[];
    public KW_NATURAL(i: number): antlr.TerminalNode | null;
    public KW_NATURAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_NATURAL);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_NATURAL, i);
    	}
    }
    public join_qual(): Join_qualContext[];
    public join_qual(i: number): Join_qualContext | null;
    public join_qual(i?: number): Join_qualContext[] | Join_qualContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Join_qualContext);
        }

        return this.getRuleContext(i, Join_qualContext);
    }
    public relation_expr(): Relation_exprContext | null {
        return this.getRuleContext(0, Relation_exprContext);
    }
    public view_relation_expr(): View_relation_exprContext | null {
        return this.getRuleContext(0, View_relation_exprContext);
    }
    public opt_alias_clause(): Opt_alias_clauseContext | null {
        return this.getRuleContext(0, Opt_alias_clauseContext);
    }
    public tablesample_clause(): Tablesample_clauseContext | null {
        return this.getRuleContext(0, Tablesample_clauseContext);
    }
    public func_alias_clause(): Func_alias_clauseContext | null {
        return this.getRuleContext(0, Func_alias_clauseContext);
    }
    public join_type(): Join_typeContext[];
    public join_type(i: number): Join_typeContext | null;
    public join_type(i?: number): Join_typeContext[] | Join_typeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Join_typeContext);
        }

        return this.getRuleContext(i, Join_typeContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_ref;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTable_ref) {
             listener.enterTable_ref(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTable_ref) {
             listener.exitTable_ref(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTable_ref) {
            return visitor.visitTable_ref(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Alias_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public name_list(): Name_listContext | null {
        return this.getRuleContext(0, Name_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_alias_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAlias_clause) {
             listener.enterAlias_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAlias_clause) {
             listener.exitAlias_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlias_clause) {
            return visitor.visitAlias_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_alias_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public alias_clause(): Alias_clauseContext {
        return this.getRuleContext(0, Alias_clauseContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_alias_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_alias_clause) {
             listener.enterOpt_alias_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_alias_clause) {
             listener.exitOpt_alias_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_alias_clause) {
            return visitor.visitOpt_alias_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_alias_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public alias_clause(): Alias_clauseContext | null {
        return this.getRuleContext(0, Alias_clauseContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public tablefuncelementlist(): TablefuncelementlistContext | null {
        return this.getRuleContext(0, TablefuncelementlistContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_alias_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_alias_clause) {
             listener.enterFunc_alias_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_alias_clause) {
             listener.exitFunc_alias_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_alias_clause) {
            return visitor.visitFunc_alias_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Join_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FULL, 0);
    }
    public KW_LEFT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEFT, 0);
    }
    public KW_RIGHT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RIGHT, 0);
    }
    public KW_INNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INNER, 0);
    }
    public KW_OUTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OUTER, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_join_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterJoin_type) {
             listener.enterJoin_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitJoin_type) {
             listener.exitJoin_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitJoin_type) {
            return visitor.visitJoin_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Join_qualContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_join_qual;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterJoin_qual) {
             listener.enterJoin_qual(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitJoin_qual) {
             listener.exitJoin_qual(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitJoin_qual) {
            return visitor.visitJoin_qual(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Relation_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public KW_CURRENT_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_SCHEMA, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_relation_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRelation_expr) {
             listener.enterRelation_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRelation_expr) {
             listener.exitRelation_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRelation_expr) {
            return visitor.visitRelation_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class View_relation_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public view_name(): View_nameContext {
        return this.getRuleContext(0, View_nameContext)!;
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_view_relation_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterView_relation_expr) {
             listener.enterView_relation_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitView_relation_expr) {
             listener.exitView_relation_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitView_relation_expr) {
            return visitor.visitView_relation_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Publication_relation_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLES, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public schema_name(): Schema_nameContext | null {
        return this.getRuleContext(0, Schema_nameContext);
    }
    public KW_CURRENT_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_SCHEMA, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_publication_relation_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPublication_relation_expr) {
             listener.enterPublication_relation_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPublication_relation_expr) {
             listener.exitPublication_relation_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPublication_relation_expr) {
            return visitor.visitPublication_relation_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Relation_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_relation_expr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRelation_expr_list) {
             listener.enterRelation_expr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRelation_expr_list) {
             listener.exitRelation_expr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRelation_expr_list) {
            return visitor.visitRelation_expr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Publication_relation_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_publication_relation_expr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPublication_relation_expr_list) {
             listener.enterPublication_relation_expr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPublication_relation_expr_list) {
             listener.exitPublication_relation_expr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPublication_relation_expr_list) {
            return visitor.visitPublication_relation_expr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Relation_expr_opt_aliasContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public relation_expr(): Relation_exprContext {
        return this.getRuleContext(0, Relation_exprContext)!;
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_relation_expr_opt_alias;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRelation_expr_opt_alias) {
             listener.enterRelation_expr_opt_alias(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRelation_expr_opt_alias) {
             listener.exitRelation_expr_opt_alias(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRelation_expr_opt_alias) {
            return visitor.visitRelation_expr_opt_alias(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Tablesample_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLESAMPLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TABLESAMPLE, 0)!;
    }
    public function_name(): Function_nameContext {
        return this.getRuleContext(0, Function_nameContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public opt_repeatable_clause(): Opt_repeatable_clauseContext | null {
        return this.getRuleContext(0, Opt_repeatable_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablesample_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablesample_clause) {
             listener.enterTablesample_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablesample_clause) {
             listener.exitTablesample_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablesample_clause) {
            return visitor.visitTablesample_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_repeatable_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REPEATABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_REPEATABLE, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_repeatable_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_repeatable_clause) {
             listener.enterOpt_repeatable_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_repeatable_clause) {
             listener.exitOpt_repeatable_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_repeatable_clause) {
            return visitor.visitOpt_repeatable_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_tableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_expr_windowless(): Func_expr_windowlessContext | null {
        return this.getRuleContext(0, Func_expr_windowlessContext);
    }
    public opt_ordinality(): Opt_ordinalityContext | null {
        return this.getRuleContext(0, Opt_ordinalityContext);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWS, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public rowsfrom_list(): Rowsfrom_listContext | null {
        return this.getRuleContext(0, Rowsfrom_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_table;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_table) {
             listener.enterFunc_table(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_table) {
             listener.exitFunc_table(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_table) {
            return visitor.visitFunc_table(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Rowsfrom_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_expr_windowless(): Func_expr_windowlessContext {
        return this.getRuleContext(0, Func_expr_windowlessContext)!;
    }
    public opt_col_def_list(): Opt_col_def_listContext | null {
        return this.getRuleContext(0, Opt_col_def_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsfrom_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsfrom_item) {
             listener.enterRowsfrom_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsfrom_item) {
             listener.exitRowsfrom_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsfrom_item) {
            return visitor.visitRowsfrom_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Rowsfrom_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rowsfrom_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRowsfrom_list) {
             listener.enterRowsfrom_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRowsfrom_list) {
             listener.exitRowsfrom_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowsfrom_list) {
            return visitor.visitRowsfrom_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_col_def_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public tablefuncelementlist(): TablefuncelementlistContext {
        return this.getRuleContext(0, TablefuncelementlistContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_col_def_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_col_def_list) {
             listener.enterOpt_col_def_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_col_def_list) {
             listener.exitOpt_col_def_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_col_def_list) {
            return visitor.visitOpt_col_def_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_ordinalityContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITH, 0)!;
    }
    public KW_ORDINALITY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ORDINALITY, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_ordinality;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_ordinality) {
             listener.enterOpt_ordinality(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_ordinality) {
             listener.exitOpt_ordinality(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_ordinality) {
            return visitor.visitOpt_ordinality(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Where_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHERE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHERE, 0)!;
    }
    public column_expr_noparen(): Column_expr_noparenContext {
        return this.getRuleContext(0, Column_expr_noparenContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_where_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWhere_clause) {
             listener.enterWhere_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWhere_clause) {
             listener.exitWhere_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWhere_clause) {
            return visitor.visitWhere_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Where_or_current_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHERE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHERE, 0)!;
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public cursor_name(): Cursor_nameContext | null {
        return this.getRuleContext(0, Cursor_nameContext);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_where_or_current_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWhere_or_current_clause) {
             listener.enterWhere_or_current_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWhere_or_current_clause) {
             listener.exitWhere_or_current_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWhere_or_current_clause) {
            return visitor.visitWhere_or_current_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OpttablefuncelementlistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tablefuncelementlist(): TablefuncelementlistContext {
        return this.getRuleContext(0, TablefuncelementlistContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opttablefuncelementlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpttablefuncelementlist) {
             listener.enterOpttablefuncelementlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpttablefuncelementlist) {
             listener.exitOpttablefuncelementlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpttablefuncelementlist) {
            return visitor.visitOpttablefuncelementlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TablefuncelementContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablefuncelementlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablefuncelementlist) {
             listener.enterTablefuncelementlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablefuncelementlist) {
             listener.exitTablefuncelementlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablefuncelementlist) {
            return visitor.visitTablefuncelementlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TablefuncelementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public typename(): TypenameContext {
        return this.getRuleContext(0, TypenameContext)!;
    }
    public opt_collate_clause(): Opt_collate_clauseContext | null {
        return this.getRuleContext(0, Opt_collate_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablefuncelement;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablefuncelement) {
             listener.enterTablefuncelement(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablefuncelement) {
             listener.exitTablefuncelement(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablefuncelement) {
            return visitor.visitTablefuncelement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XmltableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XMLTABLE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_XMLTABLE, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode[];
    public OPEN_PAREN(i: number): antlr.TerminalNode | null;
    public OPEN_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.OPEN_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.OPEN_PAREN, i);
    	}
    }
    public CLOSE_PAREN(): antlr.TerminalNode[];
    public CLOSE_PAREN(i: number): antlr.TerminalNode | null;
    public CLOSE_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.CLOSE_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.CLOSE_PAREN, i);
    	}
    }
    public c_expr(): C_exprContext | null {
        return this.getRuleContext(0, C_exprContext);
    }
    public xmlexists_argument(): Xmlexists_argumentContext | null {
        return this.getRuleContext(0, Xmlexists_argumentContext);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLUMNS, 0);
    }
    public xmltable_column_list(): Xmltable_column_listContext | null {
        return this.getRuleContext(0, Xmltable_column_listContext);
    }
    public KW_XMLNAMESPACES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLNAMESPACES, 0);
    }
    public xml_namespace_list(): Xml_namespace_listContext | null {
        return this.getRuleContext(0, Xml_namespace_listContext);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xmltable;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXmltable) {
             listener.enterXmltable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXmltable) {
             listener.exitXmltable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXmltable) {
            return visitor.visitXmltable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Xmltable_column_elContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xmltable_column_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXmltable_column_list) {
             listener.enterXmltable_column_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXmltable_column_list) {
             listener.exitXmltable_column_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXmltable_column_list) {
            return visitor.visitXmltable_column_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xmltable_column_elContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_ORDINALITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ORDINALITY, 0);
    }
    public xmltable_column_option_list(): Xmltable_column_option_listContext | null {
        return this.getRuleContext(0, Xmltable_column_option_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xmltable_column_el;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXmltable_column_el) {
             listener.enterXmltable_column_el(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXmltable_column_el) {
             listener.exitXmltable_column_el(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXmltable_column_el) {
            return visitor.visitXmltable_column_el(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Xmltable_column_option_elContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xmltable_column_option_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXmltable_column_option_list) {
             listener.enterXmltable_column_option_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXmltable_column_option_list) {
             listener.exitXmltable_column_option_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXmltable_column_option_list) {
            return visitor.visitXmltable_column_option_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xmltable_column_option_elContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xmltable_column_option_el;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXmltable_column_option_el) {
             listener.enterXmltable_column_option_el(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXmltable_column_option_el) {
             listener.exitXmltable_column_option_el(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXmltable_column_option_el) {
            return visitor.visitXmltable_column_option_el(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Xml_namespace_elContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_namespace_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_namespace_list) {
             listener.enterXml_namespace_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_namespace_list) {
             listener.exitXml_namespace_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_namespace_list) {
            return visitor.visitXml_namespace_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xml_namespace_elContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public b_expr(): B_exprContext {
        return this.getRuleContext(0, B_exprContext)!;
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public collabel(): CollabelContext | null {
        return this.getRuleContext(0, CollabelContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_namespace_el;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_namespace_el) {
             listener.enterXml_namespace_el(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_namespace_el) {
             listener.exitXml_namespace_el(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_namespace_el) {
            return visitor.visitXml_namespace_el(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TypenameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public simpletypename(): SimpletypenameContext | null {
        return this.getRuleContext(0, SimpletypenameContext);
    }
    public opt_array_bounds(): Opt_array_boundsContext | null {
        return this.getRuleContext(0, Opt_array_boundsContext);
    }
    public KW_ARRAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ARRAY, 0);
    }
    public KW_SETOF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SETOF, 0);
    }
    public OPEN_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_BRACKET, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public CLOSE_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_BRACKET, 0);
    }
    public qualified_name(): Qualified_nameContext | null {
        return this.getRuleContext(0, Qualified_nameContext);
    }
    public PERCENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PERCENT, 0);
    }
    public KW_ROWTYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWTYPE, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_typename;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTypename) {
             listener.enterTypename(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTypename) {
             listener.exitTypename(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTypename) {
            return visitor.visitTypename(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_array_boundsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_BRACKET(): antlr.TerminalNode[];
    public OPEN_BRACKET(i: number): antlr.TerminalNode | null;
    public OPEN_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.OPEN_BRACKET);
    	} else {
    		return this.getToken(PostgreSqlParser.OPEN_BRACKET, i);
    	}
    }
    public CLOSE_BRACKET(): antlr.TerminalNode[];
    public CLOSE_BRACKET(i: number): antlr.TerminalNode | null;
    public CLOSE_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.CLOSE_BRACKET);
    	} else {
    		return this.getToken(PostgreSqlParser.CLOSE_BRACKET, i);
    	}
    }
    public iconst(): IconstContext[];
    public iconst(i: number): IconstContext | null;
    public iconst(i?: number): IconstContext[] | IconstContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IconstContext);
        }

        return this.getRuleContext(i, IconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_array_bounds;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_array_bounds) {
             listener.enterOpt_array_bounds(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_array_bounds) {
             listener.exitOpt_array_bounds(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_array_bounds) {
            return visitor.visitOpt_array_bounds(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SimpletypenameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public generictype(): GenerictypeContext | null {
        return this.getRuleContext(0, GenerictypeContext);
    }
    public numeric(): NumericContext | null {
        return this.getRuleContext(0, NumericContext);
    }
    public bit(): BitContext | null {
        return this.getRuleContext(0, BitContext);
    }
    public character(): CharacterContext | null {
        return this.getRuleContext(0, CharacterContext);
    }
    public constdatetime(): ConstdatetimeContext | null {
        return this.getRuleContext(0, ConstdatetimeContext);
    }
    public constinterval(): ConstintervalContext | null {
        return this.getRuleContext(0, ConstintervalContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public opt_interval(): Opt_intervalContext | null {
        return this.getRuleContext(0, Opt_intervalContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_simpletypename;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSimpletypename) {
             listener.enterSimpletypename(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSimpletypename) {
             listener.exitSimpletypename(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpletypename) {
            return visitor.visitSimpletypename(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConsttypenameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public numeric(): NumericContext | null {
        return this.getRuleContext(0, NumericContext);
    }
    public constbit(): ConstbitContext | null {
        return this.getRuleContext(0, ConstbitContext);
    }
    public constcharacter(): ConstcharacterContext | null {
        return this.getRuleContext(0, ConstcharacterContext);
    }
    public constdatetime(): ConstdatetimeContext | null {
        return this.getRuleContext(0, ConstdatetimeContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_consttypename;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConsttypename) {
             listener.enterConsttypename(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConsttypename) {
             listener.exitConsttypename(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConsttypename) {
            return visitor.visitConsttypename(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GenerictypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public type_function_name(): Type_function_nameContext {
        return this.getRuleContext(0, Type_function_nameContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public opt_type_modifiers(): Opt_type_modifiersContext | null {
        return this.getRuleContext(0, Opt_type_modifiersContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_generictype;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGenerictype) {
             listener.enterGenerictype(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGenerictype) {
             listener.exitGenerictype(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGenerictype) {
            return visitor.visitGenerictype(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_type_modifiersContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_type_modifiers;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_type_modifiers) {
             listener.enterOpt_type_modifiers(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_type_modifiers) {
             listener.exitOpt_type_modifiers(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_type_modifiers) {
            return visitor.visitOpt_type_modifiers(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class NumericContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INT, 0);
    }
    public KW_INTEGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INTEGER, 0);
    }
    public KW_SMALLINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SMALLINT, 0);
    }
    public KW_BIGINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BIGINT, 0);
    }
    public KW_REAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REAL, 0);
    }
    public KW_FLOAT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FLOAT, 0);
    }
    public opt_float(): Opt_floatContext | null {
        return this.getRuleContext(0, Opt_floatContext);
    }
    public KW_DOUBLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOUBLE, 0);
    }
    public KW_PRECISION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRECISION, 0);
    }
    public KW_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DECIMAL, 0);
    }
    public opt_type_modifiers(): Opt_type_modifiersContext | null {
        return this.getRuleContext(0, Opt_type_modifiersContext);
    }
    public KW_DEC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEC, 0);
    }
    public KW_NUMERIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NUMERIC, 0);
    }
    public KW_BOOLEAN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BOOLEAN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_numeric;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNumeric) {
             listener.enterNumeric(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNumeric) {
             listener.exitNumeric(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNumeric) {
            return visitor.visitNumeric(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_floatContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public iconst(): IconstContext {
        return this.getRuleContext(0, IconstContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_float;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_float) {
             listener.enterOpt_float(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_float) {
             listener.exitOpt_float(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_float) {
            return visitor.visitOpt_float(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public bitwithlength(): BitwithlengthContext | null {
        return this.getRuleContext(0, BitwithlengthContext);
    }
    public bitwithoutlength(): BitwithoutlengthContext | null {
        return this.getRuleContext(0, BitwithoutlengthContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_bit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterBit) {
             listener.enterBit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitBit) {
             listener.exitBit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitBit) {
            return visitor.visitBit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstbitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public bitwithlength(): BitwithlengthContext | null {
        return this.getRuleContext(0, BitwithlengthContext);
    }
    public bitwithoutlength(): BitwithoutlengthContext | null {
        return this.getRuleContext(0, BitwithoutlengthContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constbit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstbit) {
             listener.enterConstbit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstbit) {
             listener.exitConstbit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstbit) {
            return visitor.visitConstbit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BitwithlengthContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BIT, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public opt_varying(): Opt_varyingContext | null {
        return this.getRuleContext(0, Opt_varyingContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_bitwithlength;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterBitwithlength) {
             listener.enterBitwithlength(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitBitwithlength) {
             listener.exitBitwithlength(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitBitwithlength) {
            return visitor.visitBitwithlength(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BitwithoutlengthContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BIT, 0)!;
    }
    public opt_varying(): Opt_varyingContext | null {
        return this.getRuleContext(0, Opt_varyingContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_bitwithoutlength;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterBitwithoutlength) {
             listener.enterBitwithoutlength(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitBitwithoutlength) {
             listener.exitBitwithoutlength(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitBitwithoutlength) {
            return visitor.visitBitwithoutlength(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CharacterContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public character_c(): Character_cContext {
        return this.getRuleContext(0, Character_cContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_character;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCharacter) {
             listener.enterCharacter(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCharacter) {
             listener.exitCharacter(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCharacter) {
            return visitor.visitCharacter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstcharacterContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public character_c(): Character_cContext {
        return this.getRuleContext(0, Character_cContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constcharacter;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstcharacter) {
             listener.enterConstcharacter(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstcharacter) {
             listener.exitConstcharacter(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstcharacter) {
            return visitor.visitConstcharacter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Character_cContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHARACTER, 0);
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHAR, 0);
    }
    public KW_NCHAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NCHAR, 0);
    }
    public opt_varying(): Opt_varyingContext | null {
        return this.getRuleContext(0, Opt_varyingContext);
    }
    public KW_VARCHAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARCHAR, 0);
    }
    public KW_NATIONAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NATIONAL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_character_c;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCharacter_c) {
             listener.enterCharacter_c(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCharacter_c) {
             listener.exitCharacter_c(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCharacter_c) {
            return visitor.visitCharacter_c(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_varyingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VARYING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VARYING, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_varying;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_varying) {
             listener.enterOpt_varying(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_varying) {
             listener.exitOpt_varying(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_varying) {
            return visitor.visitOpt_varying(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstdatetimeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIMESTAMP, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIME, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public opt_timezone(): Opt_timezoneContext | null {
        return this.getRuleContext(0, Opt_timezoneContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constdatetime;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstdatetime) {
             listener.enterConstdatetime(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstdatetime) {
             listener.exitConstdatetime(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstdatetime) {
            return visitor.visitConstdatetime(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstintervalContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INTERVAL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTERVAL, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_constinterval;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterConstinterval) {
             listener.enterConstinterval(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitConstinterval) {
             listener.exitConstinterval(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstinterval) {
            return visitor.visitConstinterval(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_timezoneContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public KW_TIME(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_TIME, 0)!;
    }
    public KW_ZONE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ZONE, 0)!;
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITHOUT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_timezone;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_timezone) {
             listener.enterOpt_timezone(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_timezone) {
             listener.exitOpt_timezone(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_timezone) {
            return visitor.visitOpt_timezone(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_intervalContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_YEAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_YEAR, 0);
    }
    public KW_MONTH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MONTH, 0);
    }
    public KW_DAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DAY, 0);
    }
    public KW_HOUR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HOUR, 0);
    }
    public KW_MINUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MINUTE, 0);
    }
    public interval_second(): Interval_secondContext | null {
        return this.getRuleContext(0, Interval_secondContext);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_interval;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_interval) {
             listener.enterOpt_interval(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_interval) {
             listener.exitOpt_interval(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_interval) {
            return visitor.visitOpt_interval(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Interval_secondContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SECOND(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SECOND, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_interval_second;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInterval_second) {
             listener.enterInterval_second(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInterval_second) {
             listener.exitInterval_second(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInterval_second) {
            return visitor.visitInterval_second(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_escapeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ESCAPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ESCAPE, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_escape;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_escape) {
             listener.enterOpt_escape(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_escape) {
             listener.exitOpt_escape(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_escape) {
            return visitor.visitOpt_escape(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_qual(): A_expr_qualContext {
        return this.getRuleContext(0, A_expr_qualContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr) {
             listener.enterA_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr) {
             listener.exitA_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr) {
            return visitor.visitA_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_qualContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_lessless(): A_expr_lesslessContext {
        return this.getRuleContext(0, A_expr_lesslessContext)!;
    }
    public qual_op(): Qual_opContext | null {
        return this.getRuleContext(0, Qual_opContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_qual;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_qual) {
             listener.enterA_expr_qual(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_qual) {
             listener.exitA_expr_qual(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_qual) {
            return visitor.visitA_expr_qual(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_orContext);
    }
    public LESS_LESS(): antlr.TerminalNode[];
    public LESS_LESS(i: number): antlr.TerminalNode | null;
    public LESS_LESS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.LESS_LESS);
    	} else {
    		return this.getToken(PostgreSqlParser.LESS_LESS, i);
    	}
    }
    public GREATER_GREATER(): antlr.TerminalNode[];
    public GREATER_GREATER(i: number): antlr.TerminalNode | null;
    public GREATER_GREATER(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.GREATER_GREATER);
    	} else {
    		return this.getToken(PostgreSqlParser.GREATER_GREATER, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_lessless;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_lessless) {
             listener.enterA_expr_lessless(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_lessless) {
             listener.exitA_expr_lessless(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_lessless) {
            return visitor.visitA_expr_lessless(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_andContext);
    }
    public KW_OR(): antlr.TerminalNode[];
    public KW_OR(i: number): antlr.TerminalNode | null;
    public KW_OR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_OR);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_OR, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_or;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_or) {
             listener.enterA_expr_or(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_or) {
             listener.exitA_expr_or(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_or) {
            return visitor.visitA_expr_or(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_inContext);
    }
    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(PostgreSqlParser.KW_AND);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_AND, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_and;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_and) {
             listener.enterA_expr_and(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_and) {
             listener.exitA_expr_and(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_and) {
            return visitor.visitA_expr_and(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_inContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_unary_not(): A_expr_unary_notContext {
        return this.getRuleContext(0, A_expr_unary_notContext)!;
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public in_expr(): In_exprContext | null {
        return this.getRuleContext(0, In_exprContext);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_in;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_in) {
             listener.enterA_expr_in(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_in) {
             listener.exitA_expr_in(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_in) {
            return visitor.visitA_expr_in(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_unary_notContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_isnull(): A_expr_isnullContext {
        return this.getRuleContext(0, A_expr_isnullContext)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_unary_not;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_unary_not) {
             listener.enterA_expr_unary_not(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_unary_not) {
             listener.exitA_expr_unary_not(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_unary_not) {
            return visitor.visitA_expr_unary_not(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_isnullContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_is_not(): A_expr_is_notContext {
        return this.getRuleContext(0, A_expr_is_notContext)!;
    }
    public KW_ISNULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ISNULL, 0);
    }
    public KW_NOTNULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTNULL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_isnull;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_isnull) {
             listener.enterA_expr_isnull(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_isnull) {
             listener.exitA_expr_isnull(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_isnull) {
            return visitor.visitA_expr_isnull(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_is_notContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_compare(): A_expr_compareContext {
        return this.getRuleContext(0, A_expr_compareContext)!;
    }
    public KW_IS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IS, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUE, 0);
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FALSE, 0);
    }
    public KW_UNKNOWN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNKNOWN, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISTINCT, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public type_list(): Type_listContext | null {
        return this.getRuleContext(0, Type_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_DOCUMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOCUMENT, 0);
    }
    public KW_NORMALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NORMALIZED, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public unicode_normal_form(): Unicode_normal_formContext | null {
        return this.getRuleContext(0, Unicode_normal_formContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_is_not;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_is_not) {
             listener.enterA_expr_is_not(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_is_not) {
             listener.exitA_expr_is_not(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_is_not) {
            return visitor.visitA_expr_is_not(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_likeContext);
    }
    public subquery_Op(): Subquery_OpContext | null {
        return this.getRuleContext(0, Subquery_OpContext);
    }
    public sub_type(): Sub_typeContext | null {
        return this.getRuleContext(0, Sub_typeContext);
    }
    public LT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.LT, 0);
    }
    public GT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.GT, 0);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public LESS_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.LESS_EQUALS, 0);
    }
    public GREATER_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.GREATER_EQUALS, 0);
    }
    public NOT_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.NOT_EQUALS, 0);
    }
    public select_with_parens(): Select_with_parensContext | null {
        return this.getRuleContext(0, Select_with_parensContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_compare;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_compare) {
             listener.enterA_expr_compare(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_compare) {
             listener.exitA_expr_compare(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_compare) {
            return visitor.visitA_expr_compare(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_qual_opContext);
    }
    public KW_LIKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LIKE, 0);
    }
    public KW_ILIKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ILIKE, 0);
    }
    public KW_SIMILAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SIMILAR, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public KW_BETWEEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BETWEEN, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public opt_escape(): Opt_escapeContext | null {
        return this.getRuleContext(0, Opt_escapeContext);
    }
    public KW_SYMMETRIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYMMETRIC, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_like;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_like) {
             listener.enterA_expr_like(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_like) {
             listener.exitA_expr_like(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_like) {
            return visitor.visitA_expr_like(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_unary_qualopContext);
    }
    public qual_op(): Qual_opContext[];
    public qual_op(i: number): Qual_opContext | null;
    public qual_op(i?: number): Qual_opContext[] | Qual_opContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Qual_opContext);
        }

        return this.getRuleContext(i, Qual_opContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_qual_op;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_qual_op) {
             listener.enterA_expr_qual_op(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_qual_op) {
             listener.exitA_expr_qual_op(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_qual_op) {
            return visitor.visitA_expr_qual_op(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_unary_qualopContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_add(): A_expr_addContext {
        return this.getRuleContext(0, A_expr_addContext)!;
    }
    public qual_op(): Qual_opContext | null {
        return this.getRuleContext(0, Qual_opContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_unary_qualop;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_unary_qualop) {
             listener.enterA_expr_unary_qualop(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_unary_qualop) {
             listener.exitA_expr_unary_qualop(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_unary_qualop) {
            return visitor.visitA_expr_unary_qualop(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_mulContext);
    }
    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(PostgreSqlParser.MINUS);
    	} else {
    		return this.getToken(PostgreSqlParser.MINUS, i);
    	}
    }
    public PLUS(): antlr.TerminalNode[];
    public PLUS(i: number): antlr.TerminalNode | null;
    public PLUS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.PLUS);
    	} else {
    		return this.getToken(PostgreSqlParser.PLUS, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_add;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_add) {
             listener.enterA_expr_add(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_add) {
             listener.exitA_expr_add(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_add) {
            return visitor.visitA_expr_add(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_expr_caretContext);
    }
    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(PostgreSqlParser.STAR);
    	} else {
    		return this.getToken(PostgreSqlParser.STAR, i);
    	}
    }
    public SLASH(): antlr.TerminalNode[];
    public SLASH(i: number): antlr.TerminalNode | null;
    public SLASH(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.SLASH);
    	} else {
    		return this.getToken(PostgreSqlParser.SLASH, i);
    	}
    }
    public PERCENT(): antlr.TerminalNode[];
    public PERCENT(i: number): antlr.TerminalNode | null;
    public PERCENT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.PERCENT);
    	} else {
    		return this.getToken(PostgreSqlParser.PERCENT, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_mul;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_mul) {
             listener.enterA_expr_mul(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_mul) {
             listener.exitA_expr_mul(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_mul) {
            return visitor.visitA_expr_mul(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_caretContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_unary_sign(): A_expr_unary_signContext {
        return this.getRuleContext(0, A_expr_unary_signContext)!;
    }
    public CARET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CARET, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_caret;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_caret) {
             listener.enterA_expr_caret(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_caret) {
             listener.exitA_expr_caret(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_caret) {
            return visitor.visitA_expr_caret(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_unary_signContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_at_time_zone(): A_expr_at_time_zoneContext {
        return this.getRuleContext(0, A_expr_at_time_zoneContext)!;
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.MINUS, 0);
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PLUS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_unary_sign;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_unary_sign) {
             listener.enterA_expr_unary_sign(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_unary_sign) {
             listener.exitA_expr_unary_sign(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_unary_sign) {
            return visitor.visitA_expr_unary_sign(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_at_time_zoneContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_collate(): A_expr_collateContext {
        return this.getRuleContext(0, A_expr_collateContext)!;
    }
    public KW_AT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AT, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIME, 0);
    }
    public KW_ZONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ZONE, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_at_time_zone;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_at_time_zone) {
             listener.enterA_expr_at_time_zone(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_at_time_zone) {
             listener.exitA_expr_at_time_zone(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_at_time_zone) {
            return visitor.visitA_expr_at_time_zone(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_collateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr_typecast(): A_expr_typecastContext {
        return this.getRuleContext(0, A_expr_typecastContext)!;
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATE, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_collate;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_collate) {
             listener.enterA_expr_collate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_collate) {
             listener.exitA_expr_collate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_collate) {
            return visitor.visitA_expr_collate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class A_expr_typecastContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public c_expr(): C_exprContext {
        return this.getRuleContext(0, C_exprContext)!;
    }
    public TYPECAST(): antlr.TerminalNode[];
    public TYPECAST(i: number): antlr.TerminalNode | null;
    public TYPECAST(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.TYPECAST);
    	} else {
    		return this.getToken(PostgreSqlParser.TYPECAST, i);
    	}
    }
    public typename(): TypenameContext[];
    public typename(i: number): TypenameContext | null;
    public typename(i?: number): TypenameContext[] | TypenameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TypenameContext);
        }

        return this.getRuleContext(i, TypenameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_a_expr_typecast;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterA_expr_typecast) {
             listener.enterA_expr_typecast(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitA_expr_typecast) {
             listener.exitA_expr_typecast(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitA_expr_typecast) {
            return visitor.visitA_expr_typecast(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class B_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public c_expr(): C_exprContext | null {
        return this.getRuleContext(0, C_exprContext);
    }
    public b_expr(): B_exprContext[];
    public b_expr(i: number): B_exprContext | null;
    public b_expr(i?: number): B_exprContext[] | B_exprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(B_exprContext);
        }

        return this.getRuleContext(i, B_exprContext);
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PLUS, 0);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.MINUS, 0);
    }
    public qual_op(): Qual_opContext | null {
        return this.getRuleContext(0, Qual_opContext);
    }
    public CARET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CARET, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public SLASH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.SLASH, 0);
    }
    public PERCENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PERCENT, 0);
    }
    public LT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.LT, 0);
    }
    public GT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.GT, 0);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public LESS_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.LESS_EQUALS, 0);
    }
    public GREATER_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.GREATER_EQUALS, 0);
    }
    public NOT_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.NOT_EQUALS, 0);
    }
    public TYPECAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.TYPECAST, 0);
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public KW_IS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IS, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISTINCT, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public type_list(): Type_listContext | null {
        return this.getRuleContext(0, Type_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_DOCUMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOCUMENT, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_b_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterB_expr) {
             listener.enterB_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitB_expr) {
             listener.exitB_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitB_expr) {
            return visitor.visitB_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class C_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_c_expr;
    }
    public override copyFrom(ctx: C_exprContext): void {
        super.copyFrom(ctx);
    }
}
export class C_expr_existsContext extends C_exprContext {
    public constructor(ctx: C_exprContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_EXISTS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXISTS, 0)!;
    }
    public select_with_parens(): Select_with_parensContext {
        return this.getRuleContext(0, Select_with_parensContext)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterC_expr_exists) {
             listener.enterC_expr_exists(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitC_expr_exists) {
             listener.exitC_expr_exists(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitC_expr_exists) {
            return visitor.visitC_expr_exists(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class C_expr_caseContext extends C_exprContext {
    public constructor(ctx: C_exprContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public case_expr(): Case_exprContext {
        return this.getRuleContext(0, Case_exprContext)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterC_expr_case) {
             listener.enterC_expr_case(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitC_expr_case) {
             listener.exitC_expr_case(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitC_expr_case) {
            return visitor.visitC_expr_case(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class C_expr_exprContext extends C_exprContext {
    public _a_expr_in_parens?: A_exprContext;
    public constructor(ctx: C_exprContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ARRAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ARRAY, 0);
    }
    public select_with_parens(): Select_with_parensContext | null {
        return this.getRuleContext(0, Select_with_parensContext);
    }
    public array_expr(): Array_exprContext | null {
        return this.getRuleContext(0, Array_exprContext);
    }
    public PARAM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PARAM, 0);
    }
    public opt_indirection(): Opt_indirectionContext | null {
        return this.getRuleContext(0, Opt_indirectionContext);
    }
    public KW_GROUPING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUPING, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_UNIQUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNIQUE, 0);
    }
    public aexprconst(): AexprconstContext | null {
        return this.getRuleContext(0, AexprconstContext);
    }
    public plsqlvariablename(): PlsqlvariablenameContext | null {
        return this.getRuleContext(0, PlsqlvariablenameContext);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public func_expr(): Func_exprContext | null {
        return this.getRuleContext(0, Func_exprContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public explicit_row(): Explicit_rowContext | null {
        return this.getRuleContext(0, Explicit_rowContext);
    }
    public implicit_row(): Implicit_rowContext | null {
        return this.getRuleContext(0, Implicit_rowContext);
    }
    public row(): RowContext[];
    public row(i: number): RowContext | null;
    public row(i?: number): RowContext[] | RowContext | null {
        if (i === undefined) {
            return this.getRuleContexts(RowContext);
        }

        return this.getRuleContext(i, RowContext);
    }
    public KW_OVERLAPS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVERLAPS, 0);
    }
    public columnref(): ColumnrefContext | null {
        return this.getRuleContext(0, ColumnrefContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterC_expr_expr) {
             listener.enterC_expr_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitC_expr_expr) {
             listener.exitC_expr_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitC_expr_expr) {
            return visitor.visitC_expr_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PlsqlvariablenameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public PLSQLVARIABLENAME(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.PLSQLVARIABLENAME, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_plsqlvariablename;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPlsqlvariablename) {
             listener.enterPlsqlvariablename(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPlsqlvariablename) {
             listener.exitPlsqlvariablename(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPlsqlvariablename) {
            return visitor.visitPlsqlvariablename(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_applicationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public function_name(): Function_nameContext {
        return this.getRuleContext(0, Function_nameContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public func_arg_list(): Func_arg_listContext | null {
        return this.getRuleContext(0, Func_arg_listContext);
    }
    public KW_VARIADIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARIADIC, 0);
    }
    public func_arg_expr(): Func_arg_exprContext | null {
        return this.getRuleContext(0, Func_arg_exprContext);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISTINCT, 0);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public opt_sort_clause(): Opt_sort_clauseContext | null {
        return this.getRuleContext(0, Opt_sort_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_application;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_application) {
             listener.enterFunc_application(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_application) {
             listener.exitFunc_application(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_application) {
            return visitor.visitFunc_application(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_application(): Func_applicationContext | null {
        return this.getRuleContext(0, Func_applicationContext);
    }
    public within_group_clause(): Within_group_clauseContext | null {
        return this.getRuleContext(0, Within_group_clauseContext);
    }
    public filter_clause(): Filter_clauseContext | null {
        return this.getRuleContext(0, Filter_clauseContext);
    }
    public over_clause(): Over_clauseContext | null {
        return this.getRuleContext(0, Over_clauseContext);
    }
    public func_expr_common_subexpr(): Func_expr_common_subexprContext | null {
        return this.getRuleContext(0, Func_expr_common_subexprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_expr) {
             listener.enterFunc_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_expr) {
             listener.exitFunc_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_expr) {
            return visitor.visitFunc_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_expr_windowlessContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public func_application(): Func_applicationContext | null {
        return this.getRuleContext(0, Func_applicationContext);
    }
    public func_expr_common_subexpr(): Func_expr_common_subexprContext | null {
        return this.getRuleContext(0, Func_expr_common_subexprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_expr_windowless;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_expr_windowless) {
             listener.enterFunc_expr_windowless(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_expr_windowless) {
             listener.exitFunc_expr_windowless(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_expr_windowless) {
            return visitor.visitFunc_expr_windowless(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_expr_common_subexprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext[];
    public a_expr(i: number): A_exprContext | null;
    public a_expr(i?: number): A_exprContext[] | A_exprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(A_exprContext);
        }

        return this.getRuleContext(i, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_CURRENT_DATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_DATE, 0);
    }
    public KW_CURRENT_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_TIME, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_TIMESTAMP, 0);
    }
    public KW_LOCALTIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCALTIME, 0);
    }
    public KW_LOCALTIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCALTIMESTAMP, 0);
    }
    public KW_CURRENT_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_ROLE, 0);
    }
    public KW_CURRENT_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_USER, 0);
    }
    public KW_SESSION_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION_USER, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public KW_CURRENT_CATALOG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_CATALOG, 0);
    }
    public KW_CURRENT_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_SCHEMA, 0);
    }
    public KW_CAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CAST, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public typename(): TypenameContext | null {
        return this.getRuleContext(0, TypenameContext);
    }
    public KW_EXTRACT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTRACT, 0);
    }
    public extract_list(): Extract_listContext | null {
        return this.getRuleContext(0, Extract_listContext);
    }
    public KW_NORMALIZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NORMALIZE, 0);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public unicode_normal_form(): Unicode_normal_formContext | null {
        return this.getRuleContext(0, Unicode_normal_formContext);
    }
    public KW_OVERLAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVERLAY, 0);
    }
    public overlay_list(): Overlay_listContext | null {
        return this.getRuleContext(0, Overlay_listContext);
    }
    public KW_POSITION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_POSITION, 0);
    }
    public position_list(): Position_listContext | null {
        return this.getRuleContext(0, Position_listContext);
    }
    public KW_SUBSTRING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUBSTRING, 0);
    }
    public substr_list(): Substr_listContext | null {
        return this.getRuleContext(0, Substr_listContext);
    }
    public KW_TREAT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TREAT, 0);
    }
    public KW_TRIM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIM, 0);
    }
    public trim_list(): Trim_listContext | null {
        return this.getRuleContext(0, Trim_listContext);
    }
    public KW_BOTH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BOTH, 0);
    }
    public KW_LEADING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEADING, 0);
    }
    public KW_TRAILING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRAILING, 0);
    }
    public KW_NULLIF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULLIF, 0);
    }
    public KW_COALESCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COALESCE, 0);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public KW_GREATEST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GREATEST, 0);
    }
    public KW_LEAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEAST, 0);
    }
    public KW_XMLCONCAT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLCONCAT, 0);
    }
    public KW_XMLELEMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLELEMENT, 0);
    }
    public KW_NAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NAME, 0);
    }
    public collabel(): CollabelContext | null {
        return this.getRuleContext(0, CollabelContext);
    }
    public xml_attributes(): Xml_attributesContext | null {
        return this.getRuleContext(0, Xml_attributesContext);
    }
    public KW_XMLEXISTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLEXISTS, 0);
    }
    public c_expr(): C_exprContext | null {
        return this.getRuleContext(0, C_exprContext);
    }
    public xmlexists_argument(): Xmlexists_argumentContext | null {
        return this.getRuleContext(0, Xmlexists_argumentContext);
    }
    public KW_XMLFOREST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLFOREST, 0);
    }
    public xml_attribute_list(): Xml_attribute_listContext | null {
        return this.getRuleContext(0, Xml_attribute_listContext);
    }
    public KW_XMLPARSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLPARSE, 0);
    }
    public document_or_content(): Document_or_contentContext | null {
        return this.getRuleContext(0, Document_or_contentContext);
    }
    public xml_whitespace_option(): Xml_whitespace_optionContext | null {
        return this.getRuleContext(0, Xml_whitespace_optionContext);
    }
    public KW_XMLPI(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLPI, 0);
    }
    public KW_XMLROOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLROOT, 0);
    }
    public KW_XML(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XML, 0);
    }
    public xml_root_version(): Xml_root_versionContext | null {
        return this.getRuleContext(0, Xml_root_versionContext);
    }
    public opt_xml_root_standalone(): Opt_xml_root_standaloneContext | null {
        return this.getRuleContext(0, Opt_xml_root_standaloneContext);
    }
    public KW_XMLSERIALIZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLSERIALIZE, 0);
    }
    public simpletypename(): SimpletypenameContext | null {
        return this.getRuleContext(0, SimpletypenameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_expr_common_subexpr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_expr_common_subexpr) {
             listener.enterFunc_expr_common_subexpr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_expr_common_subexpr) {
             listener.exitFunc_expr_common_subexpr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_expr_common_subexpr) {
            return visitor.visitFunc_expr_common_subexpr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xml_root_versionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VERSION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VERSION, 0)!;
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_root_version;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_root_version) {
             listener.enterXml_root_version(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_root_version) {
             listener.exitXml_root_version(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_root_version) {
            return visitor.visitXml_root_version(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_xml_root_standaloneContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.COMMA, 0)!;
    }
    public KW_STANDALONE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_STANDALONE, 0)!;
    }
    public KW_YES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_YES, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_xml_root_standalone;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_xml_root_standalone) {
             listener.enterOpt_xml_root_standalone(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_xml_root_standalone) {
             listener.exitOpt_xml_root_standalone(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_xml_root_standalone) {
            return visitor.visitOpt_xml_root_standalone(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xml_attributesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XMLATTRIBUTES(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_XMLATTRIBUTES, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public xml_attribute_list(): Xml_attribute_listContext {
        return this.getRuleContext(0, Xml_attribute_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_attributes;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_attributes) {
             listener.enterXml_attributes(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_attributes) {
             listener.exitXml_attributes(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_attributes) {
            return visitor.visitXml_attributes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Xml_attribute_elContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_attribute_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_attribute_list) {
             listener.enterXml_attribute_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_attribute_list) {
             listener.exitXml_attribute_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_attribute_list) {
            return visitor.visitXml_attribute_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xml_attribute_elContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public collabel(): CollabelContext | null {
        return this.getRuleContext(0, CollabelContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_attribute_el;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_attribute_el) {
             listener.enterXml_attribute_el(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_attribute_el) {
             listener.exitXml_attribute_el(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_attribute_el) {
            return visitor.visitXml_attribute_el(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Document_or_contentContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DOCUMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOCUMENT, 0);
    }
    public KW_CONTENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONTENT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_document_or_content;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDocument_or_content) {
             listener.enterDocument_or_content(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDocument_or_content) {
             listener.exitDocument_or_content(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDocument_or_content) {
            return visitor.visitDocument_or_content(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xml_whitespace_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PRESERVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRESERVE, 0);
    }
    public KW_WHITESPACE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHITESPACE, 0)!;
    }
    public KW_STRIP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STRIP, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_whitespace_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_whitespace_option) {
             listener.enterXml_whitespace_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_whitespace_option) {
             listener.exitXml_whitespace_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_whitespace_option) {
            return visitor.visitXml_whitespace_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xmlexists_argumentContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PASSING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PASSING, 0)!;
    }
    public c_expr(): C_exprContext {
        return this.getRuleContext(0, C_exprContext)!;
    }
    public xml_passing_mech(): Xml_passing_mechContext[];
    public xml_passing_mech(i: number): Xml_passing_mechContext | null;
    public xml_passing_mech(i?: number): Xml_passing_mechContext[] | Xml_passing_mechContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Xml_passing_mechContext);
        }

        return this.getRuleContext(i, Xml_passing_mechContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xmlexists_argument;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXmlexists_argument) {
             listener.enterXmlexists_argument(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXmlexists_argument) {
             listener.exitXmlexists_argument(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXmlexists_argument) {
            return visitor.visitXmlexists_argument(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Xml_passing_mechContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public KW_REF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REF, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xml_passing_mech;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXml_passing_mech) {
             listener.enterXml_passing_mech(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXml_passing_mech) {
             listener.exitXml_passing_mech(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXml_passing_mech) {
            return visitor.visitXml_passing_mech(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Within_group_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITHIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WITHIN, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public sort_clause(): Sort_clauseContext {
        return this.getRuleContext(0, Sort_clauseContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_within_group_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWithin_group_clause) {
             listener.enterWithin_group_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWithin_group_clause) {
             listener.exitWithin_group_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWithin_group_clause) {
            return visitor.visitWithin_group_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Filter_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FILTER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FILTER, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public KW_WHERE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHERE, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_filter_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFilter_clause) {
             listener.enterFilter_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFilter_clause) {
             listener.exitFilter_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFilter_clause) {
            return visitor.visitFilter_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Window_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WINDOW(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WINDOW, 0)!;
    }
    public window_definition_list(): Window_definition_listContext {
        return this.getRuleContext(0, Window_definition_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_window_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWindow_clause) {
             listener.enterWindow_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWindow_clause) {
             listener.exitWindow_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWindow_clause) {
            return visitor.visitWindow_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Window_definitionContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_window_definition_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWindow_definition_list) {
             listener.enterWindow_definition_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWindow_definition_list) {
             listener.exitWindow_definition_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWindow_definition_list) {
            return visitor.visitWindow_definition_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Window_definitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AS, 0)!;
    }
    public window_specification(): Window_specificationContext {
        return this.getRuleContext(0, Window_specificationContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_window_definition;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWindow_definition) {
             listener.enterWindow_definition(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWindow_definition) {
             listener.exitWindow_definition(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWindow_definition) {
            return visitor.visitWindow_definition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Over_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OVER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OVER, 0)!;
    }
    public window_specification(): Window_specificationContext | null {
        return this.getRuleContext(0, Window_specificationContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_over_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOver_clause) {
             listener.enterOver_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOver_clause) {
             listener.exitOver_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOver_clause) {
            return visitor.visitOver_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Window_specificationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public opt_existing_window_name(): Opt_existing_window_nameContext | null {
        return this.getRuleContext(0, Opt_existing_window_nameContext);
    }
    public opt_partition_clause(): Opt_partition_clauseContext | null {
        return this.getRuleContext(0, Opt_partition_clauseContext);
    }
    public opt_sort_clause(): Opt_sort_clauseContext | null {
        return this.getRuleContext(0, Opt_sort_clauseContext);
    }
    public opt_frame_clause(): Opt_frame_clauseContext | null {
        return this.getRuleContext(0, Opt_frame_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_window_specification;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWindow_specification) {
             listener.enterWindow_specification(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWindow_specification) {
             listener.exitWindow_specification(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWindow_specification) {
            return visitor.visitWindow_specification(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_existing_window_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_existing_window_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_existing_window_name) {
             listener.enterOpt_existing_window_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_existing_window_name) {
             listener.exitOpt_existing_window_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_existing_window_name) {
            return visitor.visitOpt_existing_window_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_partition_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BY, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_partition_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_partition_clause) {
             listener.enterOpt_partition_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_partition_clause) {
             listener.exitOpt_partition_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_partition_clause) {
            return visitor.visitOpt_partition_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_frame_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RANGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RANGE, 0);
    }
    public frame_extent(): Frame_extentContext {
        return this.getRuleContext(0, Frame_extentContext)!;
    }
    public opt_window_exclusion_clause(): Opt_window_exclusion_clauseContext | null {
        return this.getRuleContext(0, Opt_window_exclusion_clauseContext);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWS, 0);
    }
    public KW_GROUPS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUPS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_frame_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_frame_clause) {
             listener.enterOpt_frame_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_frame_clause) {
             listener.exitOpt_frame_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_frame_clause) {
            return visitor.visitOpt_frame_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Frame_boundContext);
    }
    public KW_BETWEEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BETWEEN, 0);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AND, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_frame_extent;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFrame_extent) {
             listener.enterFrame_extent(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFrame_extent) {
             listener.exitFrame_extent(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrame_extent) {
            return visitor.visitFrame_extent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Frame_boundContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNBOUNDED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNBOUNDED, 0);
    }
    public KW_PRECEDING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRECEDING, 0);
    }
    public KW_FOLLOWING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOLLOWING, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_frame_bound;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFrame_bound) {
             listener.enterFrame_bound(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFrame_bound) {
             listener.exitFrame_bound(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrame_bound) {
            return visitor.visitFrame_bound(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_window_exclusion_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EXCLUDE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXCLUDE, 0)!;
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0);
    }
    public KW_TIES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIES, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_OTHERS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OTHERS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_window_exclusion_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_window_exclusion_clause) {
             listener.enterOpt_window_exclusion_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_window_exclusion_clause) {
             listener.exitOpt_window_exclusion_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_window_exclusion_clause) {
            return visitor.visitOpt_window_exclusion_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_row;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRow) {
             listener.enterRow(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRow) {
             listener.exitRow(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRow) {
            return visitor.visitRow(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Explicit_rowContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROW(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ROW, 0)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_explicit_row;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExplicit_row) {
             listener.enterExplicit_row(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExplicit_row) {
             listener.exitExplicit_row(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExplicit_row) {
            return visitor.visitExplicit_row(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Implicit_rowContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.COMMA, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_implicit_row;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterImplicit_row) {
             listener.enterImplicit_row(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitImplicit_row) {
             listener.exitImplicit_row(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitImplicit_row) {
            return visitor.visitImplicit_row(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Sub_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ANY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ANY, 0);
    }
    public KW_SOME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SOME, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_sub_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSub_type) {
             listener.enterSub_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSub_type) {
             listener.exitSub_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSub_type) {
            return visitor.visitSub_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class All_opContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public Operator(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.Operator, 0);
    }
    public mathop(): MathopContext | null {
        return this.getRuleContext(0, MathopContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_all_op;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAll_op) {
             listener.enterAll_op(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAll_op) {
             listener.exitAll_op(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAll_op) {
            return visitor.visitAll_op(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class MathopContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PLUS, 0);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.MINUS, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public SLASH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.SLASH, 0);
    }
    public PERCENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PERCENT, 0);
    }
    public CARET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CARET, 0);
    }
    public LT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.LT, 0);
    }
    public GT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.GT, 0);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public LESS_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.LESS_EQUALS, 0);
    }
    public GREATER_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.GREATER_EQUALS, 0);
    }
    public NOT_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.NOT_EQUALS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_mathop;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterMathop) {
             listener.enterMathop(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitMathop) {
             listener.exitMathop(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitMathop) {
            return visitor.visitMathop(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Qual_opContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public Operator(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.Operator, 0);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public any_operator(): Any_operatorContext | null {
        return this.getRuleContext(0, Any_operatorContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_qual_op;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterQual_op) {
             listener.enterQual_op(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitQual_op) {
             listener.exitQual_op(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitQual_op) {
            return visitor.visitQual_op(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Qual_all_opContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public all_op(): All_opContext | null {
        return this.getRuleContext(0, All_opContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public any_operator(): Any_operatorContext | null {
        return this.getRuleContext(0, Any_operatorContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_qual_all_op;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterQual_all_op) {
             listener.enterQual_all_op(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitQual_all_op) {
             listener.exitQual_all_op(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitQual_all_op) {
            return visitor.visitQual_all_op(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Subquery_OpContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public all_op(): All_opContext | null {
        return this.getRuleContext(0, All_opContext);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public any_operator(): Any_operatorContext | null {
        return this.getRuleContext(0, Any_operatorContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_LIKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LIKE, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_ILIKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ILIKE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_subquery_Op;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSubquery_Op) {
             listener.enterSubquery_Op(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSubquery_Op) {
             listener.exitSubquery_Op(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubquery_Op) {
            return visitor.visitSubquery_Op(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_expr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExpr_list) {
             listener.enterExpr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExpr_list) {
             listener.exitExpr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpr_list) {
            return visitor.visitExpr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Column_expr_noparenContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_expr_list_noparen;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumn_expr_list_noparen) {
             listener.enterColumn_expr_list_noparen(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumn_expr_list_noparen) {
             listener.exitColumn_expr_list_noparen(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumn_expr_list_noparen) {
            return visitor.visitColumn_expr_list_noparen(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Column_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_expr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumn_expr_list) {
             listener.enterColumn_expr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumn_expr_list) {
             listener.exitColumn_expr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumn_expr_list) {
            return visitor.visitColumn_expr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Column_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumn_expr) {
             listener.enterColumn_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumn_expr) {
             listener.exitColumn_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumn_expr) {
            return visitor.visitColumn_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Column_expr_noparenContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_expr_noparen;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumn_expr_noparen) {
             listener.enterColumn_expr_noparen(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumn_expr_noparen) {
             listener.exitColumn_expr_noparen(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumn_expr_noparen) {
            return visitor.visitColumn_expr_noparen(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Func_arg_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_arg_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_arg_list) {
             listener.enterFunc_arg_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_arg_list) {
             listener.exitFunc_arg_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_arg_list) {
            return visitor.visitFunc_arg_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Func_arg_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public param_name(): Param_nameContext | null {
        return this.getRuleContext(0, Param_nameContext);
    }
    public COLON_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COLON_EQUALS, 0);
    }
    public EQUALS_GREATER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUALS_GREATER, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_func_arg_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunc_arg_expr) {
             listener.enterFunc_arg_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunc_arg_expr) {
             listener.exitFunc_arg_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunc_arg_expr) {
            return visitor.visitFunc_arg_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, TypenameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_type_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterType_list) {
             listener.enterType_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitType_list) {
             listener.exitType_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitType_list) {
            return visitor.visitType_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Array_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_BRACKET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_BRACKET, 0)!;
    }
    public CLOSE_BRACKET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_BRACKET, 0)!;
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public array_expr_list(): Array_expr_listContext | null {
        return this.getRuleContext(0, Array_expr_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_array_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterArray_expr) {
             listener.enterArray_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitArray_expr) {
             listener.exitArray_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitArray_expr) {
            return visitor.visitArray_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Array_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_array_expr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterArray_expr_list) {
             listener.enterArray_expr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitArray_expr_list) {
             listener.exitArray_expr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitArray_expr_list) {
            return visitor.visitArray_expr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Extract_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public extract_arg(): Extract_argContext {
        return this.getRuleContext(0, Extract_argContext)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_extract_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExtract_list) {
             listener.enterExtract_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExtract_list) {
             listener.exitExtract_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExtract_list) {
            return visitor.visitExtract_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Extract_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public KW_YEAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_YEAR, 0);
    }
    public KW_MONTH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MONTH, 0);
    }
    public KW_DAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DAY, 0);
    }
    public KW_HOUR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HOUR, 0);
    }
    public KW_MINUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MINUTE, 0);
    }
    public KW_SECOND(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SECOND, 0);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_extract_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExtract_arg) {
             listener.enterExtract_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExtract_arg) {
             listener.exitExtract_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExtract_arg) {
            return visitor.visitExtract_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Unicode_normal_formContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NFC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFC, 0);
    }
    public KW_NFD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFD, 0);
    }
    public KW_NFKC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFKC, 0);
    }
    public KW_NFKD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFKD, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_unicode_normal_form;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterUnicode_normal_form) {
             listener.enterUnicode_normal_form(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitUnicode_normal_form) {
             listener.exitUnicode_normal_form(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnicode_normal_form) {
            return visitor.visitUnicode_normal_form(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_exprContext);
    }
    public KW_PLACING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PLACING, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FROM, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_overlay_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOverlay_list) {
             listener.enterOverlay_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOverlay_list) {
             listener.exitOverlay_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOverlay_list) {
            return visitor.visitOverlay_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, B_exprContext);
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_position_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPosition_list) {
             listener.enterPosition_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPosition_list) {
             listener.exitPosition_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPosition_list) {
            return visitor.visitPosition_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_exprContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_SIMILAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SIMILAR, 0);
    }
    public KW_ESCAPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ESCAPE, 0);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_substr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSubstr_list) {
             listener.enterSubstr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSubstr_list) {
             listener.exitSubstr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubstr_list) {
            return visitor.visitSubstr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Trim_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_trim_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTrim_list) {
             listener.enterTrim_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTrim_list) {
             listener.exitTrim_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTrim_list) {
            return visitor.visitTrim_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class In_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_in_expr;
    }
    public override copyFrom(ctx: In_exprContext): void {
        super.copyFrom(ctx);
    }
}
export class In_expr_listContext extends In_exprContext {
    public constructor(ctx: In_exprContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIn_expr_list) {
             listener.enterIn_expr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIn_expr_list) {
             listener.exitIn_expr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIn_expr_list) {
            return visitor.visitIn_expr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class In_expr_selectContext extends In_exprContext {
    public constructor(ctx: In_exprContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public select_with_parens(): Select_with_parensContext {
        return this.getRuleContext(0, Select_with_parensContext)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIn_expr_select) {
             listener.enterIn_expr_select(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIn_expr_select) {
             listener.exitIn_expr_select(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIn_expr_select) {
            return visitor.visitIn_expr_select(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Case_exprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CASE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CASE, 0)!;
    }
    public when_clause_list(): When_clause_listContext {
        return this.getRuleContext(0, When_clause_listContext)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_END, 0)!;
    }
    public case_arg(): Case_argContext | null {
        return this.getRuleContext(0, Case_argContext);
    }
    public case_default(): Case_defaultContext | null {
        return this.getRuleContext(0, Case_defaultContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_case_expr;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCase_expr) {
             listener.enterCase_expr(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCase_expr) {
             listener.exitCase_expr(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCase_expr) {
            return visitor.visitCase_expr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, When_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_when_clause_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWhen_clause_list) {
             listener.enterWhen_clause_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWhen_clause_list) {
             listener.exitWhen_clause_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWhen_clause_list) {
            return visitor.visitWhen_clause_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class When_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0)!;
    }
    public a_expr(): A_exprContext[];
    public a_expr(i: number): A_exprContext | null;
    public a_expr(i?: number): A_exprContext[] | A_exprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(A_exprContext);
        }

        return this.getRuleContext(i, A_exprContext);
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_THEN, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_when_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterWhen_clause) {
             listener.enterWhen_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitWhen_clause) {
             listener.exitWhen_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitWhen_clause) {
            return visitor.visitWhen_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Case_defaultContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ELSE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ELSE, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_case_default;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCase_default) {
             listener.enterCase_default(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCase_default) {
             listener.exitCase_default(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCase_default) {
            return visitor.visitCase_default(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Case_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_case_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCase_arg) {
             listener.enterCase_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCase_arg) {
             listener.exitCase_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCase_arg) {
            return visitor.visitCase_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColumnrefContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_columnref;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumnref) {
             listener.enterColumnref(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumnref) {
             listener.exitColumnref(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnref) {
            return visitor.visitColumnref(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Indirection_elContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public DOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.DOT, 0);
    }
    public attr_name(): Attr_nameContext | null {
        return this.getRuleContext(0, Attr_nameContext);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public OPEN_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_BRACKET, 0);
    }
    public CLOSE_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_BRACKET, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public COLON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COLON, 0);
    }
    public opt_slice_bound(): Opt_slice_boundContext[];
    public opt_slice_bound(i: number): Opt_slice_boundContext | null;
    public opt_slice_bound(i?: number): Opt_slice_boundContext[] | Opt_slice_boundContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Opt_slice_boundContext);
        }

        return this.getRuleContext(i, Opt_slice_boundContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_indirection_el;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndirection_el) {
             listener.enterIndirection_el(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndirection_el) {
             listener.exitIndirection_el(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndirection_el) {
            return visitor.visitIndirection_el(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_slice_boundContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_slice_bound;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_slice_bound) {
             listener.enterOpt_slice_bound(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_slice_bound) {
             listener.exitOpt_slice_bound(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_slice_bound) {
            return visitor.visitOpt_slice_bound(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Indirection_elContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_indirection;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndirection) {
             listener.enterIndirection(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndirection) {
             listener.exitIndirection(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndirection) {
            return visitor.visitIndirection(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Indirection_elContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_indirection;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_indirection) {
             listener.enterOpt_indirection(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_indirection) {
             listener.exitOpt_indirection(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_indirection) {
            return visitor.visitOpt_indirection(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_target_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public target_list(): Target_listContext {
        return this.getRuleContext(0, Target_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_target_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_target_list) {
             listener.enterOpt_target_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_target_list) {
             listener.exitOpt_target_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_target_list) {
            return visitor.visitOpt_target_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Target_elContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_target_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTarget_list) {
             listener.enterTarget_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTarget_list) {
             listener.exitTarget_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTarget_list) {
            return visitor.visitTarget_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Target_elContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_target_el;
    }
    public override copyFrom(ctx: Target_elContext): void {
        super.copyFrom(ctx);
    }
}
export class Target_labelContext extends Target_elContext {
    public constructor(ctx: Target_elContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public column_expr_noparen(): Column_expr_noparenContext {
        return this.getRuleContext(0, Column_expr_noparenContext)!;
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public collabel(): CollabelContext | null {
        return this.getRuleContext(0, CollabelContext);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTarget_label) {
             listener.enterTarget_label(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTarget_label) {
             listener.exitTarget_label(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTarget_label) {
            return visitor.visitTarget_label(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class Target_starContext extends Target_elContext {
    public constructor(ctx: Target_elContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public STAR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.STAR, 0)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTarget_star) {
             listener.enterTarget_star(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTarget_star) {
             listener.exitTarget_star(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTarget_star) {
            return visitor.visitTarget_star(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Qualified_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_qualified_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterQualified_name_list) {
             listener.enterQualified_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitQualified_name_list) {
             listener.exitQualified_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitQualified_name_list) {
            return visitor.visitQualified_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Table_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTable_name_list) {
             listener.enterTable_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTable_name_list) {
             listener.exitTable_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTable_name_list) {
            return visitor.visitTable_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Schema_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_schema_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSchema_name_list) {
             listener.enterSchema_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSchema_name_list) {
             listener.exitSchema_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSchema_name_list) {
            return visitor.visitSchema_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Database_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_database_nameList;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDatabase_nameList) {
             listener.enterDatabase_nameList(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDatabase_nameList) {
             listener.exitDatabase_nameList(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDatabase_nameList) {
            return visitor.visitDatabase_nameList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Procedure_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_procedure_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProcedure_name_list) {
             listener.enterProcedure_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProcedure_name_list) {
             listener.exitProcedure_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedure_name_list) {
            return visitor.visitProcedure_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Tablespace_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablespace_name_create;
    }
    public override copyFrom(ctx: Tablespace_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class TablespaceNameCreateContext extends Tablespace_name_createContext {
    public constructor(ctx: Tablespace_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablespaceNameCreate) {
             listener.enterTablespaceNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablespaceNameCreate) {
             listener.exitTablespaceNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablespaceNameCreate) {
            return visitor.visitTablespaceNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Tablespace_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablespace_name;
    }
    public override copyFrom(ctx: Tablespace_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class TablespaceNameContext extends Tablespace_nameContext {
    public constructor(ctx: Tablespace_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablespaceName) {
             listener.enterTablespaceName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablespaceName) {
             listener.exitTablespaceName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablespaceName) {
            return visitor.visitTablespaceName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Table_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_name_create;
    }
    public override copyFrom(ctx: Table_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class TableNameCreateContext extends Table_name_createContext {
    public constructor(ctx: Table_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTableNameCreate) {
             listener.enterTableNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTableNameCreate) {
             listener.exitTableNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableNameCreate) {
            return visitor.visitTableNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Table_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_table_name;
    }
    public override copyFrom(ctx: Table_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class TableNameContext extends Table_nameContext {
    public constructor(ctx: Table_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTableName) {
             listener.enterTableName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTableName) {
             listener.exitTableName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableName) {
            return visitor.visitTableName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class View_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_view_name_create;
    }
    public override copyFrom(ctx: View_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class ViewNameCreateContext extends View_name_createContext {
    public constructor(ctx: View_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterViewNameCreate) {
             listener.enterViewNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitViewNameCreate) {
             listener.exitViewNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitViewNameCreate) {
            return visitor.visitViewNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class View_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_view_name;
    }
    public override copyFrom(ctx: View_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class ViewNameContext extends View_nameContext {
    public constructor(ctx: View_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterViewName) {
             listener.enterViewName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitViewName) {
             listener.exitViewName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitViewName) {
            return visitor.visitViewName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Qualified_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_qualified_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterQualified_name) {
             listener.enterQualified_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitQualified_name) {
             listener.exitQualified_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitQualified_name) {
            return visitor.visitQualified_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Tablespace_nameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_tablespace_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterTablespace_name_list) {
             listener.enterTablespace_name_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitTablespace_name_list) {
             listener.exitTablespace_name_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablespace_name_list) {
            return visitor.visitTablespace_name_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, NameContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_name_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterName_list) {
             listener.enterName_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitName_list) {
             listener.exitName_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitName_list) {
            return visitor.visitName_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Database_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_database_name_create;
    }
    public override copyFrom(ctx: Database_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class DatabaseNameCreateContext extends Database_name_createContext {
    public constructor(ctx: Database_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDatabaseNameCreate) {
             listener.enterDatabaseNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDatabaseNameCreate) {
             listener.exitDatabaseNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDatabaseNameCreate) {
            return visitor.visitDatabaseNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Database_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_database_name;
    }
    public override copyFrom(ctx: Database_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class DatabaseNameContext extends Database_nameContext {
    public constructor(ctx: Database_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDatabaseName) {
             listener.enterDatabaseName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDatabaseName) {
             listener.exitDatabaseName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDatabaseName) {
            return visitor.visitDatabaseName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Schema_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_schema_name;
    }
    public override copyFrom(ctx: Schema_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class SchemaNameContext extends Schema_nameContext {
    public constructor(ctx: Schema_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public attrs(): AttrsContext | null {
        return this.getRuleContext(0, AttrsContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSchemaName) {
             listener.enterSchemaName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSchemaName) {
             listener.exitSchemaName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSchemaName) {
            return visitor.visitSchemaName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Routine_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_routine_name_create;
    }
    public override copyFrom(ctx: Routine_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class RoutineNameCreateContext extends Routine_name_createContext {
    public constructor(ctx: Routine_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoutineNameCreate) {
             listener.enterRoutineNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoutineNameCreate) {
             listener.exitRoutineNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineNameCreate) {
            return visitor.visitRoutineNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Routine_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_routine_name;
    }
    public override copyFrom(ctx: Routine_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class RoutineNameContext extends Routine_nameContext {
    public constructor(ctx: Routine_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoutineName) {
             listener.enterRoutineName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoutineName) {
             listener.exitRoutineName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineName) {
            return visitor.visitRoutineName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Procedure_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_procedure_name;
    }
    public override copyFrom(ctx: Procedure_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class ProcedureNameContext extends Procedure_nameContext {
    public constructor(ctx: Procedure_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public type_function_name(): Type_function_nameContext | null {
        return this.getRuleContext(0, Type_function_nameContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProcedureName) {
             listener.enterProcedureName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProcedureName) {
             listener.exitProcedureName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedureName) {
            return visitor.visitProcedureName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Procedure_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_procedure_name_create;
    }
    public override copyFrom(ctx: Procedure_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class ProcedureNameCreateContext extends Procedure_name_createContext {
    public constructor(ctx: Procedure_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public type_function_name(): Type_function_nameContext | null {
        return this.getRuleContext(0, Type_function_nameContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProcedureNameCreate) {
             listener.enterProcedureNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProcedureNameCreate) {
             listener.exitProcedureNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedureNameCreate) {
            return visitor.visitProcedureNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Column_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_name;
    }
    public override copyFrom(ctx: Column_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class ColumnNameMatchContext extends Column_nameContext {
    public constructor(ctx: Column_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumnNameMatch) {
             listener.enterColumnNameMatch(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumnNameMatch) {
             listener.exitColumnNameMatch(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnNameMatch) {
            return visitor.visitColumnNameMatch(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ColumnNameContext extends Column_nameContext {
    public constructor(ctx: Column_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public indirection_el(): Indirection_elContext[];
    public indirection_el(i: number): Indirection_elContext | null;
    public indirection_el(i?: number): Indirection_elContext[] | Indirection_elContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Indirection_elContext);
        }

        return this.getRuleContext(i, Indirection_elContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumnName) {
             listener.enterColumnName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumnName) {
             listener.exitColumnName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnName) {
            return visitor.visitColumnName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Column_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_column_name_create;
    }
    public override copyFrom(ctx: Column_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class ColumnNameCreateContext extends Column_name_createContext {
    public constructor(ctx: Column_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColumnNameCreate) {
             listener.enterColumnNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColumnNameCreate) {
             listener.exitColumnNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnNameCreate) {
            return visitor.visitColumnNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class NameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterName) {
             listener.enterName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitName) {
             listener.exitName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitName) {
            return visitor.visitName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Attr_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public collabel(): CollabelContext {
        return this.getRuleContext(0, CollabelContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_attr_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAttr_name) {
             listener.enterAttr_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAttr_name) {
             listener.exitAttr_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAttr_name) {
            return visitor.visitAttr_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class File_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext {
        return this.getRuleContext(0, SconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_file_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFile_name) {
             listener.enterFile_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFile_name) {
             listener.exitFile_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFile_name) {
            return visitor.visitFile_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Function_name_createContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_function_name_create;
    }
    public override copyFrom(ctx: Function_name_createContext): void {
        super.copyFrom(ctx);
    }
}
export class FunctionNameCreateContext extends Function_name_createContext {
    public constructor(ctx: Function_name_createContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public type_function_name(): Type_function_nameContext | null {
        return this.getRuleContext(0, Type_function_nameContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunctionNameCreate) {
             listener.enterFunctionNameCreate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunctionNameCreate) {
             listener.exitFunctionNameCreate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionNameCreate) {
            return visitor.visitFunctionNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Function_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_function_name;
    }
    public override copyFrom(ctx: Function_nameContext): void {
        super.copyFrom(ctx);
    }
}
export class FunctionNameContext extends Function_nameContext {
    public constructor(ctx: Function_nameContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public type_function_name(): Type_function_nameContext | null {
        return this.getRuleContext(0, Type_function_nameContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFunctionName) {
             listener.enterFunctionName(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFunctionName) {
             listener.exitFunctionName(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionName) {
            return visitor.visitFunctionName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Usual_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public type_usual_name(): Type_usual_nameContext | null {
        return this.getRuleContext(0, Type_usual_nameContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public indirection(): IndirectionContext | null {
        return this.getRuleContext(0, IndirectionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_usual_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterUsual_name) {
             listener.enterUsual_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitUsual_name) {
             listener.exitUsual_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitUsual_name) {
            return visitor.visitUsual_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AexprconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public fconst(): FconstContext | null {
        return this.getRuleContext(0, FconstContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public bconst(): BconstContext | null {
        return this.getRuleContext(0, BconstContext);
    }
    public xconst(): XconstContext | null {
        return this.getRuleContext(0, XconstContext);
    }
    public function_name(): Function_nameContext | null {
        return this.getRuleContext(0, Function_nameContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public func_arg_list(): Func_arg_listContext | null {
        return this.getRuleContext(0, Func_arg_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public opt_sort_clause(): Opt_sort_clauseContext | null {
        return this.getRuleContext(0, Opt_sort_clauseContext);
    }
    public consttypename(): ConsttypenameContext | null {
        return this.getRuleContext(0, ConsttypenameContext);
    }
    public constinterval(): ConstintervalContext | null {
        return this.getRuleContext(0, ConstintervalContext);
    }
    public opt_interval(): Opt_intervalContext | null {
        return this.getRuleContext(0, Opt_intervalContext);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUE, 0);
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FALSE, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_aexprconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAexprconst) {
             listener.enterAexprconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAexprconst) {
             listener.exitAexprconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAexprconst) {
            return visitor.visitAexprconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public HexadecimalStringConstant(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.HexadecimalStringConstant, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_xconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterXconst) {
             listener.enterXconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitXconst) {
             listener.exitXconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitXconst) {
            return visitor.visitXconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public BinaryStringConstant(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.BinaryStringConstant, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_bconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterBconst) {
             listener.enterBconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitBconst) {
             listener.exitBconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitBconst) {
            return visitor.visitBconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public Numeric(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.Numeric, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_fconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFconst) {
             listener.enterFconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFconst) {
             listener.exitFconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFconst) {
            return visitor.visitFconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public Integral(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.Integral, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_iconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIconst) {
             listener.enterIconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIconst) {
             listener.exitIconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIconst) {
            return visitor.visitIconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public anysconst(): AnysconstContext {
        return this.getRuleContext(0, AnysconstContext)!;
    }
    public opt_uescape(): Opt_uescapeContext | null {
        return this.getRuleContext(0, Opt_uescapeContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_sconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSconst) {
             listener.enterSconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSconst) {
             listener.exitSconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSconst) {
            return visitor.visitSconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AnysconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public StringConstant(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.StringConstant, 0);
    }
    public UnicodeEscapeStringConstant(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.UnicodeEscapeStringConstant, 0);
    }
    public BeginDollarStringConstant(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.BeginDollarStringConstant, 0);
    }
    public EndDollarStringConstant(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EndDollarStringConstant, 0);
    }
    public DollarText(): antlr.TerminalNode[];
    public DollarText(i: number): antlr.TerminalNode | null;
    public DollarText(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.DollarText);
    	} else {
    		return this.getToken(PostgreSqlParser.DollarText, i);
    	}
    }
    public EscapeStringConstant(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EscapeStringConstant, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_anysconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAnysconst) {
             listener.enterAnysconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAnysconst) {
             listener.exitAnysconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAnysconst) {
            return visitor.visitAnysconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_uescapeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UESCAPE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UESCAPE, 0)!;
    }
    public anysconst(): AnysconstContext {
        return this.getRuleContext(0, AnysconstContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_uescape;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_uescape) {
             listener.enterOpt_uescape(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_uescape) {
             listener.exitOpt_uescape(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_uescape) {
            return visitor.visitOpt_uescape(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SignediconstContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public iconst(): IconstContext {
        return this.getRuleContext(0, IconstContext)!;
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PLUS, 0);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.MINUS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_signediconst;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSignediconst) {
             listener.enterSignediconst(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSignediconst) {
             listener.exitSignediconst(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSignediconst) {
            return visitor.visitSignediconst(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GroupnameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_groupname;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGroupname) {
             listener.enterGroupname(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGroupname) {
             listener.exitGroupname(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroupname) {
            return visitor.visitGroupname(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RoleidContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public rolespec(): RolespecContext {
        return this.getRuleContext(0, RolespecContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_roleid;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRoleid) {
             listener.enterRoleid(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRoleid) {
             listener.exitRoleid(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoleid) {
            return visitor.visitRoleid(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RolespecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public nonreservedword(): NonreservedwordContext | null {
        return this.getRuleContext(0, NonreservedwordContext);
    }
    public KW_CURRENT_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_USER, 0);
    }
    public KW_CURRENT_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_ROLE, 0);
    }
    public KW_SESSION_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION_USER, 0);
    }
    public KW_PUBLIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PUBLIC, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_rolespec;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRolespec) {
             listener.enterRolespec(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRolespec) {
             listener.exitRolespec(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRolespec) {
            return visitor.visitRolespec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, RolespecContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_role_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterRole_list) {
             listener.enterRole_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitRole_list) {
             listener.exitRole_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitRole_list) {
            return visitor.visitRole_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColidContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public unreserved_keyword(): Unreserved_keywordContext | null {
        return this.getRuleContext(0, Unreserved_keywordContext);
    }
    public col_name_keyword(): Col_name_keywordContext | null {
        return this.getRuleContext(0, Col_name_keywordContext);
    }
    public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext | null {
        return this.getRuleContext(0, Plsql_unreserved_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_colid;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterColid) {
             listener.enterColid(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitColid) {
             listener.exitColid(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitColid) {
            return visitor.visitColid(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Index_method_choicesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext {
        return this.getRuleContext(0, IdentifierContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_method_choices;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_method_choices) {
             listener.enterIndex_method_choices(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_method_choices) {
             listener.exitIndex_method_choices(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_method_choices) {
            return visitor.visitIndex_method_choices(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Exclude_elementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_definition(): Opt_definitionContext | null {
        return this.getRuleContext(0, Opt_definitionContext);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public opt_asc_desc(): Opt_asc_descContext | null {
        return this.getRuleContext(0, Opt_asc_descContext);
    }
    public opt_nulls_order(): Opt_nulls_orderContext | null {
        return this.getRuleContext(0, Opt_nulls_orderContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exclude_element;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExclude_element) {
             listener.enterExclude_element(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExclude_element) {
             listener.exitExclude_element(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExclude_element) {
            return visitor.visitExclude_element(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Index_paramentersContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public reloptions(): ReloptionsContext | null {
        return this.getRuleContext(0, ReloptionsContext);
    }
    public optconstablespace(): OptconstablespaceContext | null {
        return this.getRuleContext(0, OptconstablespaceContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_index_paramenters;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIndex_paramenters) {
             listener.enterIndex_paramenters(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIndex_paramenters) {
             listener.exitIndex_paramenters(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndex_paramenters) {
            return visitor.visitIndex_paramenters(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Type_function_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public unreserved_keyword(): Unreserved_keywordContext | null {
        return this.getRuleContext(0, Unreserved_keywordContext);
    }
    public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext | null {
        return this.getRuleContext(0, Plsql_unreserved_keywordContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_type_function_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterType_function_name) {
             listener.enterType_function_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitType_function_name) {
             listener.exitType_function_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitType_function_name) {
            return visitor.visitType_function_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Type_usual_nameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public unreserved_keyword(): Unreserved_keywordContext | null {
        return this.getRuleContext(0, Unreserved_keywordContext);
    }
    public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext | null {
        return this.getRuleContext(0, Plsql_unreserved_keywordContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_type_usual_name;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterType_usual_name) {
             listener.enterType_usual_name(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitType_usual_name) {
             listener.exitType_usual_name(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitType_usual_name) {
            return visitor.visitType_usual_name(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Nonreservedword_columnContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public column_name(): Column_nameContext | null {
        return this.getRuleContext(0, Column_nameContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_nonreservedword_column;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNonreservedword_column) {
             listener.enterNonreservedword_column(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNonreservedword_column) {
             listener.exitNonreservedword_column(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNonreservedword_column) {
            return visitor.visitNonreservedword_column(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class NonreservedwordContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public unreserved_keyword(): Unreserved_keywordContext | null {
        return this.getRuleContext(0, Unreserved_keywordContext);
    }
    public col_name_keyword(): Col_name_keywordContext | null {
        return this.getRuleContext(0, Col_name_keywordContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_nonreservedword;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterNonreservedword) {
             listener.enterNonreservedword(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitNonreservedword) {
             listener.exitNonreservedword(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitNonreservedword) {
            return visitor.visitNonreservedword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CollabelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext | null {
        return this.getRuleContext(0, Plsql_unreserved_keywordContext);
    }
    public unreserved_keyword(): Unreserved_keywordContext | null {
        return this.getRuleContext(0, Unreserved_keywordContext);
    }
    public col_name_keyword(): Col_name_keywordContext | null {
        return this.getRuleContext(0, Col_name_keywordContext);
    }
    public type_func_name_keyword(): Type_func_name_keywordContext | null {
        return this.getRuleContext(0, Type_func_name_keywordContext);
    }
    public reserved_keyword(): Reserved_keywordContext | null {
        return this.getRuleContext(0, Reserved_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_collabel;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCollabel) {
             listener.enterCollabel(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCollabel) {
             listener.exitCollabel(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCollabel) {
            return visitor.visitCollabel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IdentifierContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public Identifier(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.Identifier, 0);
    }
    public opt_uescape(): Opt_uescapeContext | null {
        return this.getRuleContext(0, Opt_uescapeContext);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public QuotedIdentifier(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.QuotedIdentifier, 0);
    }
    public UnicodeQuotedIdentifier(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.UnicodeQuotedIdentifier, 0);
    }
    public plsqlvariablename(): PlsqlvariablenameContext | null {
        return this.getRuleContext(0, PlsqlvariablenameContext);
    }
    public plsqlidentifier(): PlsqlidentifierContext | null {
        return this.getRuleContext(0, PlsqlidentifierContext);
    }
    public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext | null {
        return this.getRuleContext(0, Plsql_unreserved_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_identifier;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterIdentifier) {
             listener.enterIdentifier(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitIdentifier) {
             listener.exitIdentifier(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitIdentifier) {
            return visitor.visitIdentifier(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PlsqlidentifierContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public PLSQLIDENTIFIER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.PLSQLIDENTIFIER, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_plsqlidentifier;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPlsqlidentifier) {
             listener.enterPlsqlidentifier(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPlsqlidentifier) {
             listener.exitPlsqlidentifier(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPlsqlidentifier) {
            return visitor.visitPlsqlidentifier(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Unreserved_keywordContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ABORT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ABORT, 0);
    }
    public KW_ABSOLUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ABSOLUTE, 0);
    }
    public KW_ACCESS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ACCESS, 0);
    }
    public KW_ACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ACTION, 0);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADD, 0);
    }
    public KW_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ADMIN, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AFTER, 0);
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AGGREGATE, 0);
    }
    public KW_ALSO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALSO, 0);
    }
    public KW_ALTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALTER, 0);
    }
    public KW_ALWAYS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALWAYS, 0);
    }
    public KW_ASSERTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ASSERTION, 0);
    }
    public KW_ASSIGNMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ASSIGNMENT, 0);
    }
    public KW_AT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AT, 0);
    }
    public KW_ATTACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ATTACH, 0);
    }
    public KW_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ATTRIBUTE, 0);
    }
    public KW_BACKWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BACKWARD, 0);
    }
    public KW_BEFORE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BEFORE, 0);
    }
    public KW_BEGIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BEGIN, 0);
    }
    public KW_BUFFER_USAGE_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BUFFER_USAGE_LIMIT, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public KW_CACHE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CACHE, 0);
    }
    public KW_CALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CALL, 0);
    }
    public KW_CALLED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CALLED, 0);
    }
    public KW_CASCADE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CASCADE, 0);
    }
    public KW_CASCADED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CASCADED, 0);
    }
    public KW_CATALOG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CATALOG, 0);
    }
    public KW_CHAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHAIN, 0);
    }
    public KW_CHARACTERISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHARACTERISTICS, 0);
    }
    public KW_CHECKPOINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHECKPOINT, 0);
    }
    public KW_CLASS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLASS, 0);
    }
    public KW_CLOSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLOSE, 0);
    }
    public KW_CLUSTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLUSTER, 0);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLUMNS, 0);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMENT, 0);
    }
    public KW_COMMENTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMENTS, 0);
    }
    public KW_COMMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMIT, 0);
    }
    public KW_COMMITTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMITTED, 0);
    }
    public KW_CONFIGURATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFIGURATION, 0);
    }
    public KW_CONFLICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONFLICT, 0);
    }
    public KW_CONNECTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONNECTION, 0);
    }
    public KW_CONSTRAINTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINTS, 0);
    }
    public KW_CONTENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONTENT, 0);
    }
    public KW_CONTINUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONTINUE, 0);
    }
    public KW_CONVERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONVERSION, 0);
    }
    public KW_COPY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COPY, 0);
    }
    public KW_COST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COST, 0);
    }
    public KW_CSV(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CSV, 0);
    }
    public KW_CUBE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CUBE, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_CURSOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURSOR, 0);
    }
    public KW_CYCLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CYCLE, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATA, 0);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DATABASE, 0);
    }
    public KW_DAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DAY, 0);
    }
    public KW_DEALLOCATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEALLOCATE, 0);
    }
    public KW_DECLARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DECLARE, 0);
    }
    public KW_DEFAULTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULTS, 0);
    }
    public KW_DEFERRED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFERRED, 0);
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFINER, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0);
    }
    public KW_DELIMITER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELIMITER, 0);
    }
    public KW_DELIMITERS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELIMITERS, 0);
    }
    public KW_DEPENDS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEPENDS, 0);
    }
    public KW_DETACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DETACH, 0);
    }
    public KW_DICTIONARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DICTIONARY, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISABLE, 0);
    }
    public KW_DISCARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISCARD, 0);
    }
    public KW_DOCUMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOCUMENT, 0);
    }
    public KW_DOMAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOMAIN, 0);
    }
    public KW_DOUBLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DOUBLE, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DROP, 0);
    }
    public KW_EACH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EACH, 0);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENABLE, 0);
    }
    public KW_ENCODING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENCODING, 0);
    }
    public KW_ENCRYPTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENCRYPTED, 0);
    }
    public KW_ENUM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ENUM, 0);
    }
    public KW_ESCAPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ESCAPE, 0);
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EVENT, 0);
    }
    public KW_EXCLUDE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCLUDE, 0);
    }
    public KW_EXCLUDING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCLUDING, 0);
    }
    public KW_EXCLUSIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCLUSIVE, 0);
    }
    public KW_EXECUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0);
    }
    public KW_EXPLAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXPLAIN, 0);
    }
    public KW_EXPRESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXPRESSION, 0);
    }
    public KW_EXTENSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTENSION, 0);
    }
    public KW_EXTERNAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTERNAL, 0);
    }
    public KW_FAMILY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FAMILY, 0);
    }
    public KW_FILTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FILTER, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FIRST, 0);
    }
    public KW_FOLLOWING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOLLOWING, 0);
    }
    public KW_FORCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FORCE, 0);
    }
    public KW_FORWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FORWARD, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTION, 0);
    }
    public KW_FUNCTIONS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FUNCTIONS, 0);
    }
    public KW_GENERATED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GENERATED, 0);
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GLOBAL, 0);
    }
    public KW_GRANTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GRANTED, 0);
    }
    public KW_GROUPS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUPS, 0);
    }
    public KW_HANDLER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HANDLER, 0);
    }
    public KW_HEADER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HEADER, 0);
    }
    public KW_HOLD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HOLD, 0);
    }
    public KW_HOUR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HOUR, 0);
    }
    public KW_IDENTITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IDENTITY, 0);
    }
    public KW_IF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IF, 0);
    }
    public KW_IMMEDIATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMMEDIATE, 0);
    }
    public KW_IMMUTABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMMUTABLE, 0);
    }
    public KW_IMPLICIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMPLICIT, 0);
    }
    public KW_IMPORT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IMPORT, 0);
    }
    public KW_INCLUDE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INCLUDE, 0);
    }
    public KW_INCLUDING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INCLUDING, 0);
    }
    public KW_INCREMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INCREMENT, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEX, 0);
    }
    public KW_INDEXES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INDEXES, 0);
    }
    public KW_INHERIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INHERIT, 0);
    }
    public KW_INHERITS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INHERITS, 0);
    }
    public KW_INLINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INLINE, 0);
    }
    public KW_INPUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INPUT, 0);
    }
    public KW_INSENSITIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSENSITIVE, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0);
    }
    public KW_INSTEAD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSTEAD, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INVOKER, 0);
    }
    public KW_ISOLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ISOLATION, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_KEY, 0);
    }
    public KW_LABEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LABEL, 0);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LANGUAGE, 0);
    }
    public KW_LARGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LARGE, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LAST, 0);
    }
    public KW_LEAKPROOF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEAKPROOF, 0);
    }
    public KW_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEVEL, 0);
    }
    public KW_LISTEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LISTEN, 0);
    }
    public KW_LOAD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOAD, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCAL, 0);
    }
    public KW_LOCATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCATION, 0);
    }
    public KW_LOCK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCK, 0);
    }
    public KW_LOCKED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCKED, 0);
    }
    public KW_LOGGED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOGGED, 0);
    }
    public KW_MAPPING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MAPPING, 0);
    }
    public KW_MATCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATCH, 0);
    }
    public KW_MATERIALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MATERIALIZED, 0);
    }
    public KW_MAXVALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MAXVALUE, 0);
    }
    public KW_METHOD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_METHOD, 0);
    }
    public KW_MINUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MINUTE, 0);
    }
    public KW_MINVALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MINVALUE, 0);
    }
    public KW_MODE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MODE, 0);
    }
    public KW_MONTH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MONTH, 0);
    }
    public KW_MOVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MOVE, 0);
    }
    public KW_NAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NAME, 0);
    }
    public KW_NAMES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NAMES, 0);
    }
    public KW_NEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEW, 0);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEXT, 0);
    }
    public KW_NFC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFC, 0);
    }
    public KW_NFD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFD, 0);
    }
    public KW_NFKC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFKC, 0);
    }
    public KW_NFKD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NFKD, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_NORMALIZED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NORMALIZED, 0);
    }
    public KW_NOTHING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTHING, 0);
    }
    public KW_NOTIFY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTIFY, 0);
    }
    public KW_NOWAIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOWAIT, 0);
    }
    public KW_NULLS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULLS, 0);
    }
    public KW_OBJECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OBJECT, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OF, 0);
    }
    public KW_OFF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OFF, 0);
    }
    public KW_OIDS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OIDS, 0);
    }
    public KW_OLD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OLD, 0);
    }
    public KW_OPERATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPERATOR, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0);
    }
    public KW_OPTIONS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTIONS, 0);
    }
    public KW_ORDINALITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ORDINALITY, 0);
    }
    public KW_OTHERS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OTHERS, 0);
    }
    public KW_OVER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVER, 0);
    }
    public KW_OVERRIDING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVERRIDING, 0);
    }
    public KW_OWNED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNED, 0);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OWNER, 0);
    }
    public KW_PARALLEL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARALLEL, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARSER, 0);
    }
    public KW_PARTIAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARTIAL, 0);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PARTITION, 0);
    }
    public KW_PASSING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PASSING, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PASSWORD, 0);
    }
    public KW_PLANS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PLANS, 0);
    }
    public KW_POLICY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_POLICY, 0);
    }
    public KW_PRECEDING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRECEDING, 0);
    }
    public KW_PREPARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PREPARE, 0);
    }
    public KW_PREPARED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PREPARED, 0);
    }
    public KW_PRESERVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRESERVE, 0);
    }
    public KW_PRIOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIOR, 0);
    }
    public KW_PRIVILEGES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIVILEGES, 0);
    }
    public KW_PROCEDURAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURAL, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURE, 0);
    }
    public KW_PROCEDURES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROCEDURES, 0);
    }
    public KW_PROGRAM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PROGRAM, 0);
    }
    public KW_PUBLICATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PUBLICATION, 0);
    }
    public KW_QUOTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_QUOTE, 0);
    }
    public KW_RANGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RANGE, 0);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_READ, 0);
    }
    public KW_REASSIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REASSIGN, 0);
    }
    public KW_RECHECK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RECHECK, 0);
    }
    public KW_RECURSIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RECURSIVE, 0);
    }
    public KW_REF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REF, 0);
    }
    public KW_REFERENCING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REFERENCING, 0);
    }
    public KW_REFRESH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REFRESH, 0);
    }
    public KW_REINDEX(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REINDEX, 0);
    }
    public KW_RELATIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RELATIVE, 0);
    }
    public KW_RELEASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RELEASE, 0);
    }
    public KW_RENAME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RENAME, 0);
    }
    public KW_REPEATABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPEATABLE, 0);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPLACE, 0);
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REPLICA, 0);
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public KW_RESTART(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTART, 0);
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESTRICT, 0);
    }
    public KW_RETURNS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RETURNS, 0);
    }
    public KW_REVOKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REVOKE, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLE, 0);
    }
    public KW_ROLLBACK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLLBACK, 0);
    }
    public KW_ROLLUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLLUP, 0);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINE, 0);
    }
    public KW_ROUTINES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROUTINES, 0);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWS, 0);
    }
    public KW_RULE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RULE, 0);
    }
    public KW_SAVEPOINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SAVEPOINT, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public KW_SCHEMAS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMAS, 0);
    }
    public KW_SCROLL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCROLL, 0);
    }
    public KW_SEARCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEARCH, 0);
    }
    public KW_SECOND(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SECOND, 0);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SECURITY, 0);
    }
    public KW_SEQUENCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCE, 0);
    }
    public KW_SEQUENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SEQUENCES, 0);
    }
    public KW_SERIALIZABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERIALIZABLE, 0);
    }
    public KW_SERVER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SERVER, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_SETS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SETS, 0);
    }
    public KW_SHARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SHARE, 0);
    }
    public KW_SHOW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SHOW, 0);
    }
    public KW_SIMPLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SIMPLE, 0);
    }
    public KW_SKIP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SKIP, 0);
    }
    public KW_SKIP_LOCKED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SKIP_LOCKED, 0);
    }
    public KW_SNAPSHOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SNAPSHOT, 0);
    }
    public KW_SQL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SQL, 0);
    }
    public KW_STABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STABLE, 0);
    }
    public KW_STANDALONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STANDALONE, 0);
    }
    public KW_START(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_START, 0);
    }
    public KW_STATEMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATEMENT, 0);
    }
    public KW_STATISTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STATISTICS, 0);
    }
    public KW_STDIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STDIN, 0);
    }
    public KW_STDOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STDOUT, 0);
    }
    public KW_STORAGE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STORAGE, 0);
    }
    public KW_STORED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STORED, 0);
    }
    public KW_STRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STRICT, 0);
    }
    public KW_STRIP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STRIP, 0);
    }
    public KW_SUBSCRIPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUBSCRIPTION, 0);
    }
    public KW_SUPPORT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUPPORT, 0);
    }
    public KW_SYSID(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYSID, 0);
    }
    public KW_SYSTEM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYSTEM, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLES, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESPACE, 0);
    }
    public KW_TEMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMP, 0);
    }
    public KW_TEMPLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPLATE, 0);
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEMPORARY, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TEXT, 0);
    }
    public KW_TIES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIES, 0);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSACTION, 0);
    }
    public KW_TRANSFORM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRANSFORM, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIGGER, 0);
    }
    public KW_TRUNCATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUNCATE, 0);
    }
    public KW_TRUSTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUSTED, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public KW_TYPES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPES, 0);
    }
    public KW_UESCAPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UESCAPE, 0);
    }
    public KW_UNBOUNDED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNBOUNDED, 0);
    }
    public KW_UNCOMMITTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNCOMMITTED, 0);
    }
    public KW_UNENCRYPTED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNENCRYPTED, 0);
    }
    public KW_UNKNOWN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNKNOWN, 0);
    }
    public KW_UNLISTEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNLISTEN, 0);
    }
    public KW_UNLOGGED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNLOGGED, 0);
    }
    public KW_UNTIL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNTIL, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0);
    }
    public KW_VACUUM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VACUUM, 0);
    }
    public KW_VALID(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALID, 0);
    }
    public KW_VALIDATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALIDATE, 0);
    }
    public KW_VALIDATOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALIDATOR, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUE, 0);
    }
    public KW_VARYING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARYING, 0);
    }
    public KW_VERSION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VERSION, 0);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEW, 0);
    }
    public KW_VIEWS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VIEWS, 0);
    }
    public KW_VOLATILE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VOLATILE, 0);
    }
    public KW_WHITESPACE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WHITESPACE, 0);
    }
    public KW_WITHIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITHIN, 0);
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITHOUT, 0);
    }
    public KW_WORK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WORK, 0);
    }
    public KW_WRAPPER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRAPPER, 0);
    }
    public KW_WRITE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WRITE, 0);
    }
    public KW_XML(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XML, 0);
    }
    public KW_YEAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_YEAR, 0);
    }
    public KW_YES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_YES, 0);
    }
    public KW_ZONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ZONE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_unreserved_keyword;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterUnreserved_keyword) {
             listener.enterUnreserved_keyword(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitUnreserved_keyword) {
             listener.exitUnreserved_keyword(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnreserved_keyword) {
            return visitor.visitUnreserved_keyword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Col_name_keywordContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BETWEEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BETWEEN, 0);
    }
    public KW_BIGINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BIGINT, 0);
    }
    public bit(): BitContext | null {
        return this.getRuleContext(0, BitContext);
    }
    public KW_BOOLEAN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BOOLEAN, 0);
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHAR, 0);
    }
    public character(): CharacterContext | null {
        return this.getRuleContext(0, CharacterContext);
    }
    public KW_COALESCE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COALESCE, 0);
    }
    public KW_DEC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEC, 0);
    }
    public KW_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DECIMAL, 0);
    }
    public KW_EXISTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXISTS, 0);
    }
    public KW_EXTRACT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXTRACT, 0);
    }
    public KW_FLOAT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FLOAT, 0);
    }
    public KW_GREATEST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GREATEST, 0);
    }
    public KW_GROUPING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUPING, 0);
    }
    public KW_INOUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INOUT, 0);
    }
    public KW_INT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INT, 0);
    }
    public KW_INTEGER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INTEGER, 0);
    }
    public KW_INTERVAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INTERVAL, 0);
    }
    public KW_LEAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEAST, 0);
    }
    public KW_NATIONAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NATIONAL, 0);
    }
    public KW_NCHAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NCHAR, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NONE, 0);
    }
    public KW_NORMALIZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NORMALIZE, 0);
    }
    public KW_NULLIF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULLIF, 0);
    }
    public numeric(): NumericContext | null {
        return this.getRuleContext(0, NumericContext);
    }
    public KW_OUT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OUT, 0);
    }
    public KW_OVERLAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVERLAY, 0);
    }
    public KW_POSITION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_POSITION, 0);
    }
    public KW_PRECISION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRECISION, 0);
    }
    public KW_REAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REAL, 0);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROW, 0);
    }
    public KW_SETOF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SETOF, 0);
    }
    public KW_SMALLINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SMALLINT, 0);
    }
    public KW_SUBSTRING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SUBSTRING, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIME, 0);
    }
    public KW_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TIMESTAMP, 0);
    }
    public KW_TREAT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TREAT, 0);
    }
    public KW_TRIM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRIM, 0);
    }
    public KW_VALUES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUES, 0);
    }
    public KW_VARCHAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARCHAR, 0);
    }
    public KW_XMLATTRIBUTES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLATTRIBUTES, 0);
    }
    public KW_XMLCONCAT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLCONCAT, 0);
    }
    public KW_XMLELEMENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLELEMENT, 0);
    }
    public KW_XMLEXISTS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLEXISTS, 0);
    }
    public KW_XMLFOREST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLFOREST, 0);
    }
    public KW_XMLNAMESPACES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLNAMESPACES, 0);
    }
    public KW_XMLPARSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLPARSE, 0);
    }
    public KW_XMLPI(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLPI, 0);
    }
    public KW_XMLROOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLROOT, 0);
    }
    public KW_XMLSERIALIZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLSERIALIZE, 0);
    }
    public KW_XMLTABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_XMLTABLE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_col_name_keyword;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCol_name_keyword) {
             listener.enterCol_name_keyword(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCol_name_keyword) {
             listener.exitCol_name_keyword(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCol_name_keyword) {
            return visitor.visitCol_name_keyword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Type_func_name_keywordContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AUTHORIZATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AUTHORIZATION, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BINARY, 0);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATION, 0);
    }
    public KW_CONCURRENTLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONCURRENTLY, 0);
    }
    public KW_CROSS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CROSS, 0);
    }
    public KW_CURRENT_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_SCHEMA, 0);
    }
    public KW_FREEZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FREEZE, 0);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FULL, 0);
    }
    public KW_ILIKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ILIKE, 0);
    }
    public KW_INNER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INNER, 0);
    }
    public KW_IS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IS, 0);
    }
    public KW_ISNULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ISNULL, 0);
    }
    public KW_JOIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_JOIN, 0);
    }
    public KW_LEFT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEFT, 0);
    }
    public KW_LIKE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LIKE, 0);
    }
    public KW_NATURAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NATURAL, 0);
    }
    public KW_NOTNULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTNULL, 0);
    }
    public KW_OUTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OUTER, 0);
    }
    public KW_OVERLAPS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVERLAPS, 0);
    }
    public KW_RIGHT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RIGHT, 0);
    }
    public KW_SIMILAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SIMILAR, 0);
    }
    public KW_TABLESAMPLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLESAMPLE, 0);
    }
    public KW_VERBOSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VERBOSE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_type_func_name_keyword;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterType_func_name_keyword) {
             listener.enterType_func_name_keyword(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitType_func_name_keyword) {
             listener.exitType_func_name_keyword(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitType_func_name_keyword) {
            return visitor.visitType_func_name_keyword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Reserved_keywordContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_ANALYSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ANALYSE, 0);
    }
    public KW_ANALYZE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ANALYZE, 0);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AND, 0);
    }
    public KW_ANY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ANY, 0);
    }
    public KW_ARRAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ARRAY, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public KW_ASC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ASC, 0);
    }
    public KW_ASYMMETRIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ASYMMETRIC, 0);
    }
    public KW_BOTH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BOTH, 0);
    }
    public KW_CASE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CASE, 0);
    }
    public KW_CAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CAST, 0);
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHECK, 0);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATE, 0);
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLUMN, 0);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public KW_CREATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CREATE, 0);
    }
    public KW_CURRENT_CATALOG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_CATALOG, 0);
    }
    public KW_CURRENT_DATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_DATE, 0);
    }
    public KW_CURRENT_ROLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_ROLE, 0);
    }
    public KW_CURRENT_TIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_TIME, 0);
    }
    public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_TIMESTAMP, 0);
    }
    public KW_CURRENT_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT_USER, 0);
    }
    public KW_DEFERRABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFERRABLE, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DESC, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DISTINCT, 0);
    }
    public KW_DO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DO, 0);
    }
    public KW_ELSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ELSE, 0);
    }
    public KW_END(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_END, 0);
    }
    public KW_EXCEPT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCEPT, 0);
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FALSE, 0);
    }
    public KW_FETCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FETCH, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOREIGN, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_GRANT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GRANT, 0);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GROUP, 0);
    }
    public KW_HAVING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_HAVING, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public KW_INITIALLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INITIALLY, 0);
    }
    public KW_INTERSECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INTERSECT, 0);
    }
    public KW_LATERAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LATERAL, 0);
    }
    public KW_LEADING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LEADING, 0);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LIMIT, 0);
    }
    public KW_LOCALTIME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCALTIME, 0);
    }
    public KW_LOCALTIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOCALTIMESTAMP, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public KW_OFFSET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OFFSET, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ON, 0);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public KW_OR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OR, 0);
    }
    public KW_ORDER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ORDER, 0);
    }
    public KW_PLACING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PLACING, 0);
    }
    public KW_PRIMARY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIMARY, 0);
    }
    public KW_REFERENCES(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REFERENCES, 0);
    }
    public KW_RETURNING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RETURNING, 0);
    }
    public KW_SELECT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SELECT, 0);
    }
    public KW_SESSION_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SESSION_USER, 0);
    }
    public KW_SOME(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SOME, 0);
    }
    public KW_SYMMETRIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYMMETRIC, 0);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public KW_THEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_THEN, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public KW_TRAILING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRAILING, 0);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TRUE, 0);
    }
    public KW_UNION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNION, 0);
    }
    public KW_UNIQUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_UNIQUE, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public KW_VARIADIC(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARIADIC, 0);
    }
    public KW_WHEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WHERE, 0);
    }
    public KW_WINDOW(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WINDOW, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WITH, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_reserved_keyword;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterReserved_keyword) {
             listener.enterReserved_keyword(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitReserved_keyword) {
             listener.exitReserved_keyword(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitReserved_keyword) {
            return visitor.visitReserved_keyword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Pl_functionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public comp_options(): Comp_optionsContext {
        return this.getRuleContext(0, Comp_optionsContext)!;
    }
    public pl_block(): Pl_blockContext {
        return this.getRuleContext(0, Pl_blockContext)!;
    }
    public opt_semi(): Opt_semiContext {
        return this.getRuleContext(0, Opt_semiContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_pl_function;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPl_function) {
             listener.enterPl_function(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPl_function) {
             listener.exitPl_function(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPl_function) {
            return visitor.visitPl_function(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Comp_optionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_comp_options;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterComp_options) {
             listener.enterComp_options(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitComp_options) {
             listener.exitComp_options(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitComp_options) {
            return visitor.visitComp_options(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Comp_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sharp(): SharpContext {
        return this.getRuleContext(0, SharpContext)!;
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0);
    }
    public KW_DUMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DUMP, 0);
    }
    public KW_PRINT_STRICT_PARAMS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRINT_STRICT_PARAMS, 0);
    }
    public option_value(): Option_valueContext | null {
        return this.getRuleContext(0, Option_valueContext);
    }
    public KW_VARIABLE_CONFLICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARIABLE_CONFLICT, 0);
    }
    public KW_ERROR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ERROR, 0);
    }
    public KW_USE_VARIABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USE_VARIABLE, 0);
    }
    public KW_USE_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USE_COLUMN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_comp_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterComp_option) {
             listener.enterComp_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitComp_option) {
             listener.exitComp_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitComp_option) {
            return visitor.visitComp_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SharpContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public Operator(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.Operator, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_sharp;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSharp) {
             listener.enterSharp(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSharp) {
             listener.exitSharp(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSharp) {
            return visitor.visitSharp(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Option_valueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public reserved_keyword(): Reserved_keywordContext | null {
        return this.getRuleContext(0, Reserved_keywordContext);
    }
    public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext | null {
        return this.getRuleContext(0, Plsql_unreserved_keywordContext);
    }
    public unreserved_keyword(): Unreserved_keywordContext | null {
        return this.getRuleContext(0, Unreserved_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_option_value;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOption_value) {
             listener.enterOption_value(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOption_value) {
             listener.exitOption_value(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOption_value) {
            return visitor.visitOption_value(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_semiContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public SEMI(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.SEMI, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_semi;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_semi) {
             listener.enterOpt_semi(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_semi) {
             listener.exitOpt_semi(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_semi) {
            return visitor.visitOpt_semi(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Pl_blockContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decl_sect(): Decl_sectContext {
        return this.getRuleContext(0, Decl_sectContext)!;
    }
    public KW_BEGIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_BEGIN, 0)!;
    }
    public proc_sect(): Proc_sectContext {
        return this.getRuleContext(0, Proc_sectContext)!;
    }
    public exception_sect(): Exception_sectContext {
        return this.getRuleContext(0, Exception_sectContext)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_END, 0)!;
    }
    public opt_label(): Opt_labelContext {
        return this.getRuleContext(0, Opt_labelContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_pl_block;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPl_block) {
             listener.enterPl_block(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPl_block) {
             listener.exitPl_block(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPl_block) {
            return visitor.visitPl_block(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_sectContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_block_label(): Opt_block_labelContext {
        return this.getRuleContext(0, Opt_block_labelContext)!;
    }
    public decl_start(): Decl_startContext | null {
        return this.getRuleContext(0, Decl_startContext);
    }
    public decl_stmts(): Decl_stmtsContext | null {
        return this.getRuleContext(0, Decl_stmtsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_sect;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_sect) {
             listener.enterDecl_sect(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_sect) {
             listener.exitDecl_sect(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_sect) {
            return visitor.visitDecl_sect(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_startContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DECLARE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DECLARE, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_start;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_start) {
             listener.enterDecl_start(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_start) {
             listener.exitDecl_start(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_start) {
            return visitor.visitDecl_start(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Decl_stmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_stmts;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_stmts) {
             listener.enterDecl_stmts(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_stmts) {
             listener.exitDecl_stmts(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_stmts) {
            return visitor.visitDecl_stmts(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Label_declContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LESS_LESS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.LESS_LESS, 0)!;
    }
    public any_identifier(): Any_identifierContext {
        return this.getRuleContext(0, Any_identifierContext)!;
    }
    public GREATER_GREATER(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.GREATER_GREATER, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_label_decl;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterLabel_decl) {
             listener.enterLabel_decl(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitLabel_decl) {
             listener.exitLabel_decl(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitLabel_decl) {
            return visitor.visitLabel_decl(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_stmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decl_statement(): Decl_statementContext | null {
        return this.getRuleContext(0, Decl_statementContext);
    }
    public KW_DECLARE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DECLARE, 0);
    }
    public label_decl(): Label_declContext | null {
        return this.getRuleContext(0, Label_declContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_stmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_stmt) {
             listener.enterDecl_stmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_stmt) {
             listener.exitDecl_stmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_stmt) {
            return visitor.visitDecl_stmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_statementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decl_varname(): Decl_varnameContext {
        return this.getRuleContext(0, Decl_varnameContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public KW_ALIAS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALIAS, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public decl_aliasitem(): Decl_aliasitemContext | null {
        return this.getRuleContext(0, Decl_aliasitemContext);
    }
    public decl_const(): Decl_constContext | null {
        return this.getRuleContext(0, Decl_constContext);
    }
    public decl_datatype(): Decl_datatypeContext | null {
        return this.getRuleContext(0, Decl_datatypeContext);
    }
    public decl_collate(): Decl_collateContext | null {
        return this.getRuleContext(0, Decl_collateContext);
    }
    public decl_notnull(): Decl_notnullContext | null {
        return this.getRuleContext(0, Decl_notnullContext);
    }
    public decl_defval(): Decl_defvalContext | null {
        return this.getRuleContext(0, Decl_defvalContext);
    }
    public opt_scrollable(): Opt_scrollableContext | null {
        return this.getRuleContext(0, Opt_scrollableContext);
    }
    public KW_CURSOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURSOR, 0);
    }
    public decl_cursor_args(): Decl_cursor_argsContext | null {
        return this.getRuleContext(0, Decl_cursor_argsContext);
    }
    public decl_is_for(): Decl_is_forContext | null {
        return this.getRuleContext(0, Decl_is_forContext);
    }
    public decl_cursor_query(): Decl_cursor_queryContext | null {
        return this.getRuleContext(0, Decl_cursor_queryContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_statement;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_statement) {
             listener.enterDecl_statement(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_statement) {
             listener.exitDecl_statement(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_statement) {
            return visitor.visitDecl_statement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_scrollableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_SCROLL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCROLL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_scrollable;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_scrollable) {
             listener.enterOpt_scrollable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_scrollable) {
             listener.exitOpt_scrollable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_scrollable) {
            return visitor.visitOpt_scrollable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_cursor_queryContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectstmt(): SelectstmtContext {
        return this.getRuleContext(0, SelectstmtContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_cursor_query;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_cursor_query) {
             listener.enterDecl_cursor_query(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_cursor_query) {
             listener.exitDecl_cursor_query(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_cursor_query) {
            return visitor.visitDecl_cursor_query(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_cursor_argsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public decl_cursor_arglist(): Decl_cursor_arglistContext | null {
        return this.getRuleContext(0, Decl_cursor_arglistContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_cursor_args;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_cursor_args) {
             listener.enterDecl_cursor_args(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_cursor_args) {
             listener.exitDecl_cursor_args(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_cursor_args) {
            return visitor.visitDecl_cursor_args(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Decl_cursor_argContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_cursor_arglist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_cursor_arglist) {
             listener.enterDecl_cursor_arglist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_cursor_arglist) {
             listener.exitDecl_cursor_arglist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_cursor_arglist) {
            return visitor.visitDecl_cursor_arglist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_cursor_argContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decl_varname(): Decl_varnameContext {
        return this.getRuleContext(0, Decl_varnameContext)!;
    }
    public decl_datatype(): Decl_datatypeContext {
        return this.getRuleContext(0, Decl_datatypeContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_cursor_arg;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_cursor_arg) {
             listener.enterDecl_cursor_arg(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_cursor_arg) {
             listener.exitDecl_cursor_arg(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_cursor_arg) {
            return visitor.visitDecl_cursor_arg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_is_forContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IS, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_is_for;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_is_for) {
             listener.enterDecl_is_for(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_is_for) {
             listener.exitDecl_is_for(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_is_for) {
            return visitor.visitDecl_is_for(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_aliasitemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public PARAM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PARAM, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_aliasitem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_aliasitem) {
             listener.enterDecl_aliasitem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_aliasitem) {
             listener.exitDecl_aliasitem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_aliasitem) {
            return visitor.visitDecl_aliasitem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_varnameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public any_identifier(): Any_identifierContext {
        return this.getRuleContext(0, Any_identifierContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_varname;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_varname) {
             listener.enterDecl_varname(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_varname) {
             listener.exitDecl_varname(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_varname) {
            return visitor.visitDecl_varname(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_constContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CONSTANT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTANT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_const;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_const) {
             listener.enterDecl_const(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_const) {
             listener.exitDecl_const(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_const) {
            return visitor.visitDecl_const(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_datatypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public typename(): TypenameContext {
        return this.getRuleContext(0, TypenameContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_datatype;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_datatype) {
             listener.enterDecl_datatype(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_datatype) {
             listener.exitDecl_datatype(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_datatype) {
            return visitor.visitDecl_datatype(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_collateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATE, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_collate;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_collate) {
             listener.enterDecl_collate(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_collate) {
             listener.exitDecl_collate(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_collate) {
            return visitor.visitDecl_collate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_notnullContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public KW_NULL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NULL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_notnull;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_notnull) {
             listener.enterDecl_notnull(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_notnull) {
             listener.exitDecl_notnull(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_notnull) {
            return visitor.visitDecl_notnull(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_defvalContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decl_defkey(): Decl_defkeyContext | null {
        return this.getRuleContext(0, Decl_defkeyContext);
    }
    public sql_expression(): Sql_expressionContext | null {
        return this.getRuleContext(0, Sql_expressionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_defval;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_defval) {
             listener.enterDecl_defval(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_defval) {
             listener.exitDecl_defval(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_defval) {
            return visitor.visitDecl_defval(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Decl_defkeyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public assign_operator(): Assign_operatorContext | null {
        return this.getRuleContext(0, Assign_operatorContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_decl_defkey;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDecl_defkey) {
             listener.enterDecl_defkey(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDecl_defkey) {
             listener.exitDecl_defkey(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecl_defkey) {
            return visitor.visitDecl_defkey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Assign_operatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public EQUAL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.EQUAL, 0);
    }
    public COLON_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COLON_EQUALS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_assign_operator;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAssign_operator) {
             listener.enterAssign_operator(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAssign_operator) {
             listener.exitAssign_operator(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAssign_operator) {
            return visitor.visitAssign_operator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Proc_stmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_proc_sect;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProc_sect) {
             listener.enterProc_sect(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProc_sect) {
             listener.exitProc_sect(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProc_sect) {
            return visitor.visitProc_sect(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Proc_stmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public pl_block(): Pl_blockContext | null {
        return this.getRuleContext(0, Pl_blockContext);
    }
    public SEMI(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.SEMI, 0);
    }
    public stmt_return(): Stmt_returnContext | null {
        return this.getRuleContext(0, Stmt_returnContext);
    }
    public stmt_raise(): Stmt_raiseContext | null {
        return this.getRuleContext(0, Stmt_raiseContext);
    }
    public stmt_assign(): Stmt_assignContext | null {
        return this.getRuleContext(0, Stmt_assignContext);
    }
    public stmt_if(): Stmt_ifContext | null {
        return this.getRuleContext(0, Stmt_ifContext);
    }
    public stmt_case(): Stmt_caseContext | null {
        return this.getRuleContext(0, Stmt_caseContext);
    }
    public stmt_loop(): Stmt_loopContext | null {
        return this.getRuleContext(0, Stmt_loopContext);
    }
    public stmt_while(): Stmt_whileContext | null {
        return this.getRuleContext(0, Stmt_whileContext);
    }
    public stmt_for(): Stmt_forContext | null {
        return this.getRuleContext(0, Stmt_forContext);
    }
    public stmt_foreach_a(): Stmt_foreach_aContext | null {
        return this.getRuleContext(0, Stmt_foreach_aContext);
    }
    public stmt_exit(): Stmt_exitContext | null {
        return this.getRuleContext(0, Stmt_exitContext);
    }
    public stmt_assert(): Stmt_assertContext | null {
        return this.getRuleContext(0, Stmt_assertContext);
    }
    public stmt_execsql(): Stmt_execsqlContext | null {
        return this.getRuleContext(0, Stmt_execsqlContext);
    }
    public stmt_dynexecute(): Stmt_dynexecuteContext | null {
        return this.getRuleContext(0, Stmt_dynexecuteContext);
    }
    public stmt_perform(): Stmt_performContext | null {
        return this.getRuleContext(0, Stmt_performContext);
    }
    public stmt_call(): Stmt_callContext | null {
        return this.getRuleContext(0, Stmt_callContext);
    }
    public stmt_getdiag(): Stmt_getdiagContext | null {
        return this.getRuleContext(0, Stmt_getdiagContext);
    }
    public stmt_open(): Stmt_openContext | null {
        return this.getRuleContext(0, Stmt_openContext);
    }
    public stmt_fetch(): Stmt_fetchContext | null {
        return this.getRuleContext(0, Stmt_fetchContext);
    }
    public stmt_move(): Stmt_moveContext | null {
        return this.getRuleContext(0, Stmt_moveContext);
    }
    public stmt_close(): Stmt_closeContext | null {
        return this.getRuleContext(0, Stmt_closeContext);
    }
    public stmt_null(): Stmt_nullContext | null {
        return this.getRuleContext(0, Stmt_nullContext);
    }
    public stmt_commit(): Stmt_commitContext | null {
        return this.getRuleContext(0, Stmt_commitContext);
    }
    public stmt_rollback(): Stmt_rollbackContext | null {
        return this.getRuleContext(0, Stmt_rollbackContext);
    }
    public stmt_set(): Stmt_setContext | null {
        return this.getRuleContext(0, Stmt_setContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_proc_stmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProc_stmt) {
             listener.enterProc_stmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProc_stmt) {
             listener.exitProc_stmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProc_stmt) {
            return visitor.visitProc_stmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_performContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PERFORM(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_PERFORM, 0)!;
    }
    public expr_until_semi(): Expr_until_semiContext {
        return this.getRuleContext(0, Expr_until_semiContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_perform;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_perform) {
             listener.enterStmt_perform(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_perform) {
             listener.exitStmt_perform(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_perform) {
            return visitor.visitStmt_perform(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_callContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CALL, 0);
    }
    public any_identifier(): Any_identifierContext {
        return this.getRuleContext(0, Any_identifierContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public opt_expr_list(): Opt_expr_listContext | null {
        return this.getRuleContext(0, Opt_expr_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public SEMI(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.SEMI, 0);
    }
    public KW_DO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_call;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_call) {
             listener.enterStmt_call(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_call) {
             listener.exitStmt_call(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_call) {
            return visitor.visitStmt_call(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_expr_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_expr_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_expr_list) {
             listener.enterOpt_expr_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_expr_list) {
             listener.exitOpt_expr_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_expr_list) {
            return visitor.visitOpt_expr_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_assignContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public assign_var(): Assign_varContext {
        return this.getRuleContext(0, Assign_varContext)!;
    }
    public assign_operator(): Assign_operatorContext {
        return this.getRuleContext(0, Assign_operatorContext)!;
    }
    public sql_expression(): Sql_expressionContext {
        return this.getRuleContext(0, Sql_expressionContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_assign;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_assign) {
             listener.enterStmt_assign(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_assign) {
             listener.exitStmt_assign(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_assign) {
            return visitor.visitStmt_assign(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_getdiagContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_GET, 0)!;
    }
    public getdiag_area_opt(): Getdiag_area_optContext {
        return this.getRuleContext(0, Getdiag_area_optContext)!;
    }
    public KW_DIAGNOSTICS(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_DIAGNOSTICS, 0)!;
    }
    public getdiag_list(): Getdiag_listContext {
        return this.getRuleContext(0, Getdiag_listContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_getdiag;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_getdiag) {
             listener.enterStmt_getdiag(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_getdiag) {
             listener.exitStmt_getdiag(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_getdiag) {
            return visitor.visitStmt_getdiag(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Getdiag_area_optContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_STACKED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STACKED, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_getdiag_area_opt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGetdiag_area_opt) {
             listener.enterGetdiag_area_opt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGetdiag_area_opt) {
             listener.exitGetdiag_area_opt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGetdiag_area_opt) {
            return visitor.visitGetdiag_area_opt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Getdiag_list_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_getdiag_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGetdiag_list) {
             listener.enterGetdiag_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGetdiag_list) {
             listener.exitGetdiag_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGetdiag_list) {
            return visitor.visitGetdiag_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Getdiag_list_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public getdiag_target(): Getdiag_targetContext {
        return this.getRuleContext(0, Getdiag_targetContext)!;
    }
    public assign_operator(): Assign_operatorContext {
        return this.getRuleContext(0, Assign_operatorContext)!;
    }
    public getdiag_item(): Getdiag_itemContext {
        return this.getRuleContext(0, Getdiag_itemContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_getdiag_list_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGetdiag_list_item) {
             listener.enterGetdiag_list_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGetdiag_list_item) {
             listener.exitGetdiag_list_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGetdiag_list_item) {
            return visitor.visitGetdiag_list_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Getdiag_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext {
        return this.getRuleContext(0, ColidContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_getdiag_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGetdiag_item) {
             listener.enterGetdiag_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGetdiag_item) {
             listener.exitGetdiag_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGetdiag_item) {
            return visitor.visitGetdiag_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Getdiag_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public assign_var(): Assign_varContext {
        return this.getRuleContext(0, Assign_varContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_getdiag_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterGetdiag_target) {
             listener.enterGetdiag_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitGetdiag_target) {
             listener.exitGetdiag_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitGetdiag_target) {
            return visitor.visitGetdiag_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Assign_varContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public PARAM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PARAM, 0);
    }
    public OPEN_BRACKET(): antlr.TerminalNode[];
    public OPEN_BRACKET(i: number): antlr.TerminalNode | null;
    public OPEN_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.OPEN_BRACKET);
    	} else {
    		return this.getToken(PostgreSqlParser.OPEN_BRACKET, i);
    	}
    }
    public expr_until_rightbracket(): Expr_until_rightbracketContext[];
    public expr_until_rightbracket(i: number): Expr_until_rightbracketContext | null;
    public expr_until_rightbracket(i?: number): Expr_until_rightbracketContext[] | Expr_until_rightbracketContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Expr_until_rightbracketContext);
        }

        return this.getRuleContext(i, Expr_until_rightbracketContext);
    }
    public CLOSE_BRACKET(): antlr.TerminalNode[];
    public CLOSE_BRACKET(i: number): antlr.TerminalNode | null;
    public CLOSE_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.CLOSE_BRACKET);
    	} else {
    		return this.getToken(PostgreSqlParser.CLOSE_BRACKET, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_assign_var;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAssign_var) {
             listener.enterAssign_var(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAssign_var) {
             listener.exitAssign_var(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAssign_var) {
            return visitor.visitAssign_var(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_ifContext extends antlr.ParserRuleContext {
    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(PostgreSqlParser.KW_IF);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_IF, i);
    	}
    }
    public expr_until_then(): Expr_until_thenContext {
        return this.getRuleContext(0, Expr_until_thenContext)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_THEN, 0)!;
    }
    public proc_sect(): Proc_sectContext {
        return this.getRuleContext(0, Proc_sectContext)!;
    }
    public stmt_elsifs(): Stmt_elsifsContext {
        return this.getRuleContext(0, Stmt_elsifsContext)!;
    }
    public stmt_else(): Stmt_elseContext {
        return this.getRuleContext(0, Stmt_elseContext)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_END, 0)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_if;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_if) {
             listener.enterStmt_if(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_if) {
             listener.exitStmt_if(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_if) {
            return visitor.visitStmt_if(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_elsifsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ELSIF(): antlr.TerminalNode[];
    public KW_ELSIF(i: number): antlr.TerminalNode | null;
    public KW_ELSIF(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_ELSIF);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_ELSIF, i);
    	}
    }
    public a_expr(): A_exprContext[];
    public a_expr(i: number): A_exprContext | null;
    public a_expr(i?: number): A_exprContext[] | A_exprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(A_exprContext);
        }

        return this.getRuleContext(i, A_exprContext);
    }
    public KW_THEN(): antlr.TerminalNode[];
    public KW_THEN(i: number): antlr.TerminalNode | null;
    public KW_THEN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_THEN);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_THEN, i);
    	}
    }
    public proc_sect(): Proc_sectContext[];
    public proc_sect(i: number): Proc_sectContext | null;
    public proc_sect(i?: number): Proc_sectContext[] | Proc_sectContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Proc_sectContext);
        }

        return this.getRuleContext(i, Proc_sectContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_elsifs;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_elsifs) {
             listener.enterStmt_elsifs(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_elsifs) {
             listener.exitStmt_elsifs(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_elsifs) {
            return visitor.visitStmt_elsifs(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_elseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ELSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ELSE, 0);
    }
    public proc_sect(): Proc_sectContext | null {
        return this.getRuleContext(0, Proc_sectContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_else;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_else) {
             listener.enterStmt_else(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_else) {
             listener.exitStmt_else(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_else) {
            return visitor.visitStmt_else(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_caseContext extends antlr.ParserRuleContext {
    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(PostgreSqlParser.KW_CASE);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_CASE, i);
    	}
    }
    public opt_expr_until_when(): Opt_expr_until_whenContext {
        return this.getRuleContext(0, Opt_expr_until_whenContext)!;
    }
    public case_when_list(): Case_when_listContext {
        return this.getRuleContext(0, Case_when_listContext)!;
    }
    public opt_case_else(): Opt_case_elseContext {
        return this.getRuleContext(0, Opt_case_elseContext)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_END, 0)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_case;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_case) {
             listener.enterStmt_case(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_case) {
             listener.exitStmt_case(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_case) {
            return visitor.visitStmt_case(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_expr_until_whenContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sql_expression(): Sql_expressionContext | null {
        return this.getRuleContext(0, Sql_expressionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_expr_until_when;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_expr_until_when) {
             listener.enterOpt_expr_until_when(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_expr_until_when) {
             listener.exitOpt_expr_until_when(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_expr_until_when) {
            return visitor.visitOpt_expr_until_when(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Case_whenContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_case_when_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCase_when_list) {
             listener.enterCase_when_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCase_when_list) {
             listener.exitCase_when_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCase_when_list) {
            return visitor.visitCase_when_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Case_whenContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0)!;
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_THEN, 0)!;
    }
    public proc_sect(): Proc_sectContext {
        return this.getRuleContext(0, Proc_sectContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_case_when;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCase_when) {
             listener.enterCase_when(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCase_when) {
             listener.exitCase_when(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCase_when) {
            return visitor.visitCase_when(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_case_elseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ELSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ELSE, 0);
    }
    public proc_sect(): Proc_sectContext | null {
        return this.getRuleContext(0, Proc_sectContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_case_else;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_case_else) {
             listener.enterOpt_case_else(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_case_else) {
             listener.exitOpt_case_else(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_case_else) {
            return visitor.visitOpt_case_else(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_loopContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_loop_label(): Opt_loop_labelContext {
        return this.getRuleContext(0, Opt_loop_labelContext)!;
    }
    public loop_body(): Loop_bodyContext {
        return this.getRuleContext(0, Loop_bodyContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_loop;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_loop) {
             listener.enterStmt_loop(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_loop) {
             listener.exitStmt_loop(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_loop) {
            return visitor.visitStmt_loop(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_whileContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_loop_label(): Opt_loop_labelContext {
        return this.getRuleContext(0, Opt_loop_labelContext)!;
    }
    public KW_WHILE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHILE, 0)!;
    }
    public expr_until_loop(): Expr_until_loopContext {
        return this.getRuleContext(0, Expr_until_loopContext)!;
    }
    public loop_body(): Loop_bodyContext {
        return this.getRuleContext(0, Loop_bodyContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_while;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_while) {
             listener.enterStmt_while(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_while) {
             listener.exitStmt_while(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_while) {
            return visitor.visitStmt_while(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_forContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_loop_label(): Opt_loop_labelContext {
        return this.getRuleContext(0, Opt_loop_labelContext)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOR, 0)!;
    }
    public for_control(): For_controlContext {
        return this.getRuleContext(0, For_controlContext)!;
    }
    public loop_body(): Loop_bodyContext {
        return this.getRuleContext(0, Loop_bodyContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_for;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_for) {
             listener.enterStmt_for(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_for) {
             listener.exitStmt_for(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_for) {
            return visitor.visitStmt_for(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class For_controlContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public for_variable(): For_variableContext {
        return this.getRuleContext(0, For_variableContext)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IN, 0)!;
    }
    public cursor_name(): Cursor_nameContext | null {
        return this.getRuleContext(0, Cursor_nameContext);
    }
    public opt_cursor_parameters(): Opt_cursor_parametersContext | null {
        return this.getRuleContext(0, Opt_cursor_parametersContext);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public explainstmt(): ExplainstmtContext | null {
        return this.getRuleContext(0, ExplainstmtContext);
    }
    public KW_EXECUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0);
    }
    public a_expr(): A_exprContext[];
    public a_expr(i: number): A_exprContext | null;
    public a_expr(i?: number): A_exprContext[] | A_exprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(A_exprContext);
        }

        return this.getRuleContext(i, A_exprContext);
    }
    public opt_for_using_expression(): Opt_for_using_expressionContext | null {
        return this.getRuleContext(0, Opt_for_using_expressionContext);
    }
    public opt_reverse(): Opt_reverseContext | null {
        return this.getRuleContext(0, Opt_reverseContext);
    }
    public DOT_DOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.DOT_DOT, 0);
    }
    public opt_by_expression(): Opt_by_expressionContext | null {
        return this.getRuleContext(0, Opt_by_expressionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_for_control;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFor_control) {
             listener.enterFor_control(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFor_control) {
             listener.exitFor_control(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFor_control) {
            return visitor.visitFor_control(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_for_using_expressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_for_using_expression;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_for_using_expression) {
             listener.enterOpt_for_using_expression(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_for_using_expression) {
             listener.exitOpt_for_using_expression(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_for_using_expression) {
            return visitor.visitOpt_for_using_expression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_cursor_parametersContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public a_expr(): A_exprContext[];
    public a_expr(i: number): A_exprContext | null;
    public a_expr(i?: number): A_exprContext[] | A_exprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(A_exprContext);
        }

        return this.getRuleContext(i, A_exprContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_cursor_parameters;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_cursor_parameters) {
             listener.enterOpt_cursor_parameters(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_cursor_parameters) {
             listener.exitOpt_cursor_parameters(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_cursor_parameters) {
            return visitor.visitOpt_cursor_parameters(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_reverseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REVERSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REVERSE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_reverse;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_reverse) {
             listener.enterOpt_reverse(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_reverse) {
             listener.exitOpt_reverse(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_reverse) {
            return visitor.visitOpt_reverse(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_by_expressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BY, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_by_expression;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_by_expression) {
             listener.enterOpt_by_expression(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_by_expression) {
             listener.exitOpt_by_expression(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_by_expression) {
            return visitor.visitOpt_by_expression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class For_variableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public any_name_list(): Any_name_listContext {
        return this.getRuleContext(0, Any_name_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_for_variable;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterFor_variable) {
             listener.enterFor_variable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitFor_variable) {
             listener.exitFor_variable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitFor_variable) {
            return visitor.visitFor_variable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_foreach_aContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_loop_label(): Opt_loop_labelContext {
        return this.getRuleContext(0, Opt_loop_labelContext)!;
    }
    public KW_FOREACH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FOREACH, 0)!;
    }
    public for_variable(): For_variableContext {
        return this.getRuleContext(0, For_variableContext)!;
    }
    public foreach_slice(): Foreach_sliceContext {
        return this.getRuleContext(0, Foreach_sliceContext)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_IN, 0)!;
    }
    public KW_ARRAY(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ARRAY, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public loop_body(): Loop_bodyContext {
        return this.getRuleContext(0, Loop_bodyContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_foreach_a;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_foreach_a) {
             listener.enterStmt_foreach_a(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_foreach_a) {
             listener.exitStmt_foreach_a(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_foreach_a) {
            return visitor.visitStmt_foreach_a(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Foreach_sliceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SLICE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SLICE, 0);
    }
    public iconst(): IconstContext | null {
        return this.getRuleContext(0, IconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_foreach_slice;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterForeach_slice) {
             listener.enterForeach_slice(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitForeach_slice) {
             listener.exitForeach_slice(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitForeach_slice) {
            return visitor.visitForeach_slice(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_exitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public exit_type(): Exit_typeContext {
        return this.getRuleContext(0, Exit_typeContext)!;
    }
    public opt_label(): Opt_labelContext {
        return this.getRuleContext(0, Opt_labelContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public opt_exitcond(): Opt_exitcondContext | null {
        return this.getRuleContext(0, Opt_exitcondContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_exit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_exit) {
             listener.enterStmt_exit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_exit) {
             listener.exitStmt_exit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_exit) {
            return visitor.visitStmt_exit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Exit_typeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EXIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXIT, 0);
    }
    public KW_CONTINUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONTINUE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exit_type;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExit_type) {
             listener.enterExit_type(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExit_type) {
             listener.exitExit_type(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExit_type) {
            return visitor.visitExit_type(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_returnContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RETURN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RETURN, 0)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEXT, 0);
    }
    public sql_expression(): Sql_expressionContext | null {
        return this.getRuleContext(0, Sql_expressionContext);
    }
    public KW_QUERY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_QUERY, 0);
    }
    public opt_return_result(): Opt_return_resultContext | null {
        return this.getRuleContext(0, Opt_return_resultContext);
    }
    public KW_EXECUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public opt_for_using_expression(): Opt_for_using_expressionContext | null {
        return this.getRuleContext(0, Opt_for_using_expressionContext);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_return;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_return) {
             listener.enterStmt_return(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_return) {
             listener.exitStmt_return(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_return) {
            return visitor.visitStmt_return(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_return_resultContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sql_expression(): Sql_expressionContext | null {
        return this.getRuleContext(0, Sql_expressionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_return_result;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_return_result) {
             listener.enterOpt_return_result(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_return_result) {
             listener.exitOpt_return_result(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_return_result) {
            return visitor.visitOpt_return_result(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_raiseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RAISE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_RAISE, 0)!;
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public opt_raise_list(): Opt_raise_listContext | null {
        return this.getRuleContext(0, Opt_raise_listContext);
    }
    public opt_raise_using(): Opt_raise_usingContext | null {
        return this.getRuleContext(0, Opt_raise_usingContext);
    }
    public SEMI(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.SEMI, 0);
    }
    public opt_stmt_raise_level(): Opt_stmt_raise_levelContext | null {
        return this.getRuleContext(0, Opt_stmt_raise_levelContext);
    }
    public identifier(): IdentifierContext | null {
        return this.getRuleContext(0, IdentifierContext);
    }
    public KW_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SQLSTATE, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_raise;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_raise) {
             listener.enterStmt_raise(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_raise) {
             listener.exitStmt_raise(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_raise) {
            return visitor.visitStmt_raise(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_stmt_raise_levelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEBUG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEBUG, 0);
    }
    public KW_LOG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOG, 0);
    }
    public KW_INFO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INFO, 0);
    }
    public KW_NOTICE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTICE, 0);
    }
    public KW_WARNING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WARNING, 0);
    }
    public KW_EXCEPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCEPTION, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_stmt_raise_level;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_stmt_raise_level) {
             listener.enterOpt_stmt_raise_level(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_stmt_raise_level) {
             listener.exitOpt_stmt_raise_level(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_stmt_raise_level) {
            return visitor.visitOpt_stmt_raise_level(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_raise_listContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public a_expr(): A_exprContext[];
    public a_expr(i: number): A_exprContext | null;
    public a_expr(i?: number): A_exprContext[] | A_exprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(A_exprContext);
        }

        return this.getRuleContext(i, A_exprContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_raise_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_raise_list) {
             listener.enterOpt_raise_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_raise_list) {
             listener.exitOpt_raise_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_raise_list) {
            return visitor.visitOpt_raise_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_raise_usingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public opt_raise_using_elem_list(): Opt_raise_using_elem_listContext | null {
        return this.getRuleContext(0, Opt_raise_using_elem_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_raise_using;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_raise_using) {
             listener.enterOpt_raise_using(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_raise_using) {
             listener.exitOpt_raise_using(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_raise_using) {
            return visitor.visitOpt_raise_using(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_raise_using_elemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public identifier(): IdentifierContext {
        return this.getRuleContext(0, IdentifierContext)!;
    }
    public EQUAL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.EQUAL, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_raise_using_elem;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_raise_using_elem) {
             listener.enterOpt_raise_using_elem(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_raise_using_elem) {
             listener.exitOpt_raise_using_elem(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_raise_using_elem) {
            return visitor.visitOpt_raise_using_elem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Opt_raise_using_elemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_raise_using_elem_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_raise_using_elem_list) {
             listener.enterOpt_raise_using_elem_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_raise_using_elem_list) {
             listener.exitOpt_raise_using_elem_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_raise_using_elem_list) {
            return visitor.visitOpt_raise_using_elem_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_assertContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ASSERT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ASSERT, 0)!;
    }
    public sql_expression(): Sql_expressionContext {
        return this.getRuleContext(0, Sql_expressionContext)!;
    }
    public opt_stmt_assert_message(): Opt_stmt_assert_messageContext {
        return this.getRuleContext(0, Opt_stmt_assert_messageContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_assert;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_assert) {
             listener.enterStmt_assert(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_assert) {
             listener.exitStmt_assert(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_assert) {
            return visitor.visitStmt_assert(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_stmt_assert_messageContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COMMA, 0);
    }
    public sql_expression(): Sql_expressionContext | null {
        return this.getRuleContext(0, Sql_expressionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_stmt_assert_message;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_stmt_assert_message) {
             listener.enterOpt_stmt_assert_message(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_stmt_assert_message) {
             listener.exitOpt_stmt_assert_message(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_stmt_assert_message) {
            return visitor.visitOpt_stmt_assert_message(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Loop_bodyContext extends antlr.ParserRuleContext {
    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(PostgreSqlParser.KW_LOOP);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_LOOP, i);
    	}
    }
    public proc_sect(): Proc_sectContext {
        return this.getRuleContext(0, Proc_sectContext)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_END, 0)!;
    }
    public opt_label(): Opt_labelContext {
        return this.getRuleContext(0, Opt_labelContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_loop_body;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterLoop_body) {
             listener.enterLoop_body(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitLoop_body) {
             listener.exitLoop_body(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitLoop_body) {
            return visitor.visitLoop_body(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_execsqlContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public make_execsql_stmt(): Make_execsql_stmtContext {
        return this.getRuleContext(0, Make_execsql_stmtContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_execsql;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_execsql) {
             listener.enterStmt_execsql(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_execsql) {
             listener.exitStmt_execsql(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_execsql) {
            return visitor.visitStmt_execsql(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_dynexecuteContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EXECUTE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0)!;
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public opt_execute_into(): Opt_execute_intoContext | null {
        return this.getRuleContext(0, Opt_execute_intoContext);
    }
    public opt_execute_using(): Opt_execute_usingContext | null {
        return this.getRuleContext(0, Opt_execute_usingContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_dynexecute;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_dynexecute) {
             listener.enterStmt_dynexecute(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_dynexecute) {
             listener.exitStmt_dynexecute(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_dynexecute) {
            return visitor.visitStmt_dynexecute(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_execute_usingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public opt_execute_using_list(): Opt_execute_using_listContext | null {
        return this.getRuleContext(0, Opt_execute_using_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_execute_using;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_execute_using) {
             listener.enterOpt_execute_using(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_execute_using) {
             listener.exitOpt_execute_using(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_execute_using) {
            return visitor.visitOpt_execute_using(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, A_exprContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_execute_using_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_execute_using_list) {
             listener.enterOpt_execute_using_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_execute_using_list) {
             listener.exitOpt_execute_using_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_execute_using_list) {
            return visitor.visitOpt_execute_using_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_execute_intoContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INTO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INTO, 0);
    }
    public into_target(): Into_targetContext | null {
        return this.getRuleContext(0, Into_targetContext);
    }
    public KW_STRICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STRICT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_execute_into;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_execute_into) {
             listener.enterOpt_execute_into(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_execute_into) {
             listener.exitOpt_execute_into(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_execute_into) {
            return visitor.visitOpt_execute_into(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_openContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OPEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_OPEN, 0)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public cursor_variable(): Cursor_variableContext | null {
        return this.getRuleContext(0, Cursor_variableContext);
    }
    public opt_scroll_option(): Opt_scroll_optionContext | null {
        return this.getRuleContext(0, Opt_scroll_optionContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FOR, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public selectstmt(): SelectstmtContext | null {
        return this.getRuleContext(0, SelectstmtContext);
    }
    public KW_EXECUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXECUTE, 0);
    }
    public sql_expression(): Sql_expressionContext | null {
        return this.getRuleContext(0, Sql_expressionContext);
    }
    public opt_open_using(): Opt_open_usingContext | null {
        return this.getRuleContext(0, Opt_open_usingContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public opt_open_bound_list(): Opt_open_bound_listContext | null {
        return this.getRuleContext(0, Opt_open_bound_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_open;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_open) {
             listener.enterStmt_open(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_open) {
             listener.exitStmt_open(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_open) {
            return visitor.visitStmt_open(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_open_bound_list_itemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public COLON_EQUALS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.COLON_EQUALS, 0);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_open_bound_list_item;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_open_bound_list_item) {
             listener.enterOpt_open_bound_list_item(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_open_bound_list_item) {
             listener.exitOpt_open_bound_list_item(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_open_bound_list_item) {
            return visitor.visitOpt_open_bound_list_item(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Opt_open_bound_list_itemContext);
    }
    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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_open_bound_list;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_open_bound_list) {
             listener.enterOpt_open_bound_list(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_open_bound_list) {
             listener.exitOpt_open_bound_list(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_open_bound_list) {
            return visitor.visitOpt_open_bound_list(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_open_usingContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USING, 0);
    }
    public expr_list(): Expr_listContext | null {
        return this.getRuleContext(0, Expr_listContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_open_using;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_open_using) {
             listener.enterOpt_open_using(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_open_using) {
             listener.exitOpt_open_using(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_open_using) {
            return visitor.visitOpt_open_using(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_scroll_optionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_scroll_option_no(): Opt_scroll_option_noContext | null {
        return this.getRuleContext(0, Opt_scroll_option_noContext);
    }
    public KW_SCROLL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCROLL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_scroll_option;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_scroll_option) {
             listener.enterOpt_scroll_option(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_scroll_option) {
             listener.exitOpt_scroll_option(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_scroll_option) {
            return visitor.visitOpt_scroll_option(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_scroll_option_noContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_scroll_option_no;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_scroll_option_no) {
             listener.enterOpt_scroll_option_no(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_scroll_option_no) {
             listener.exitOpt_scroll_option_no(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_scroll_option_no) {
            return visitor.visitOpt_scroll_option_no(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_fetchContext extends antlr.ParserRuleContext {
    public _direction?: Opt_fetch_directionContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FETCH(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_FETCH, 0)!;
    }
    public opt_cursor_from(): Opt_cursor_fromContext {
        return this.getRuleContext(0, Opt_cursor_fromContext)!;
    }
    public cursor_variable(): Cursor_variableContext {
        return this.getRuleContext(0, Cursor_variableContext)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTO, 0)!;
    }
    public into_target(): Into_targetContext {
        return this.getRuleContext(0, Into_targetContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public opt_fetch_direction(): Opt_fetch_directionContext | null {
        return this.getRuleContext(0, Opt_fetch_directionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_fetch;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_fetch) {
             listener.enterStmt_fetch(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_fetch) {
             listener.exitStmt_fetch(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_fetch) {
            return visitor.visitStmt_fetch(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Into_targetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public expr_list(): Expr_listContext {
        return this.getRuleContext(0, Expr_listContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_into_target;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterInto_target) {
             listener.enterInto_target(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitInto_target) {
             listener.exitInto_target(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitInto_target) {
            return visitor.visitInto_target(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_cursor_fromContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FROM, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IN, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_cursor_from;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_cursor_from) {
             listener.enterOpt_cursor_from(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_cursor_from) {
             listener.exitOpt_cursor_from(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_cursor_from) {
            return visitor.visitOpt_cursor_from(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_fetch_directionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEXT, 0);
    }
    public KW_PRIOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIOR, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FIRST, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LAST, 0);
    }
    public KW_ABSOLUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ABSOLUTE, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_RELATIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RELATIVE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public KW_FORWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FORWARD, 0);
    }
    public KW_BACKWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BACKWARD, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_fetch_direction;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_fetch_direction) {
             listener.enterOpt_fetch_direction(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_fetch_direction) {
             listener.exitOpt_fetch_direction(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_fetch_direction) {
            return visitor.visitOpt_fetch_direction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_moveContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MOVE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MOVE, 0)!;
    }
    public cursor_variable(): Cursor_variableContext {
        return this.getRuleContext(0, Cursor_variableContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public opt_fetch_direction(): Opt_fetch_directionContext | null {
        return this.getRuleContext(0, Opt_fetch_directionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_move;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_move) {
             listener.enterStmt_move(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_move) {
             listener.exitStmt_move(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_move) {
            return visitor.visitStmt_move(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class MergestmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MERGE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MERGE, 0)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTO, 0)!;
    }
    public table_name(): Table_nameContext {
        return this.getRuleContext(0, Table_nameContext)!;
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_USING, 0)!;
    }
    public data_source(): Data_sourceContext {
        return this.getRuleContext(0, Data_sourceContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ON, 0)!;
    }
    public join_condition(): Join_conditionContext {
        return this.getRuleContext(0, Join_conditionContext)!;
    }
    public with_clause(): With_clauseContext | null {
        return this.getRuleContext(0, With_clauseContext);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public merge_when_clause(): Merge_when_clauseContext[];
    public merge_when_clause(i: number): Merge_when_clauseContext | null;
    public merge_when_clause(i?: number): Merge_when_clauseContext[] | Merge_when_clauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Merge_when_clauseContext);
        }

        return this.getRuleContext(i, Merge_when_clauseContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_mergestmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterMergestmt) {
             listener.enterMergestmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitMergestmt) {
             listener.exitMergestmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitMergestmt) {
            return visitor.visitMergestmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Data_sourceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public table_name(): Table_nameContext | null {
        return this.getRuleContext(0, Table_nameContext);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public select_no_parens(): Select_no_parensContext | null {
        return this.getRuleContext(0, Select_no_parensContext);
    }
    public values_clause(): Values_clauseContext | null {
        return this.getRuleContext(0, Values_clauseContext);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ONLY, 0);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.STAR, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_data_source;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterData_source) {
             listener.enterData_source(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitData_source) {
             listener.exitData_source(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitData_source) {
            return visitor.visitData_source(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Join_conditionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_join_condition;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterJoin_condition) {
             listener.enterJoin_condition(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitJoin_condition) {
             listener.exitJoin_condition(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitJoin_condition) {
            return visitor.visitJoin_condition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Merge_when_clauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0)!;
    }
    public KW_MATCHED(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_MATCHED, 0)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_THEN, 0)!;
    }
    public merge_update(): Merge_updateContext | null {
        return this.getRuleContext(0, Merge_updateContext);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DELETE, 0);
    }
    public KW_DO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DO, 0);
    }
    public KW_NOTHING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTHING, 0);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AND, 0);
    }
    public a_expr(): A_exprContext | null {
        return this.getRuleContext(0, A_exprContext);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOT, 0);
    }
    public merge_insert(): Merge_insertContext | null {
        return this.getRuleContext(0, Merge_insertContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_merge_when_clause;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterMerge_when_clause) {
             listener.enterMerge_when_clause(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitMerge_when_clause) {
             listener.exitMerge_when_clause(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitMerge_when_clause) {
            return visitor.visitMerge_when_clause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Merge_insertContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INSERT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0)!;
    }
    public default_values_or_values(): Default_values_or_valuesContext {
        return this.getRuleContext(0, Default_values_or_valuesContext)!;
    }
    public OPEN_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0);
    }
    public column_list(): Column_listContext | null {
        return this.getRuleContext(0, Column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 0);
    }
    public KW_OVERRIDING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OVERRIDING, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VALUE, 0);
    }
    public KW_SYSTEM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SYSTEM, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USER, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_merge_insert;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterMerge_insert) {
             listener.enterMerge_insert(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitMerge_insert) {
             listener.exitMerge_insert(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitMerge_insert) {
            return visitor.visitMerge_insert(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Merge_updateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UPDATE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_UPDATE, 0)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_SET, 0)!;
    }
    public column_name(): Column_nameContext[];
    public column_name(i: number): Column_nameContext | null;
    public column_name(i?: number): Column_nameContext[] | Column_nameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Column_nameContext);
        }

        return this.getRuleContext(i, Column_nameContext);
    }
    public EQUAL(): antlr.TerminalNode[];
    public EQUAL(i: number): antlr.TerminalNode | null;
    public EQUAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.EQUAL);
    	} else {
    		return this.getToken(PostgreSqlParser.EQUAL, i);
    	}
    }
    public exprofdefault(): ExprofdefaultContext[];
    public exprofdefault(i: number): ExprofdefaultContext | null;
    public exprofdefault(i?: number): ExprofdefaultContext[] | ExprofdefaultContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExprofdefaultContext);
        }

        return this.getRuleContext(i, ExprofdefaultContext);
    }
    public OPEN_PAREN(): antlr.TerminalNode[];
    public OPEN_PAREN(i: number): antlr.TerminalNode | null;
    public OPEN_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.OPEN_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.OPEN_PAREN, i);
    	}
    }
    public column_list(): Column_listContext[];
    public column_list(i: number): Column_listContext | null;
    public column_list(i?: number): Column_listContext[] | Column_listContext | null {
        if (i === undefined) {
            return this.getRuleContexts(Column_listContext);
        }

        return this.getRuleContext(i, Column_listContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode[];
    public CLOSE_PAREN(i: number): antlr.TerminalNode | null;
    public CLOSE_PAREN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.CLOSE_PAREN);
    	} else {
    		return this.getToken(PostgreSqlParser.CLOSE_PAREN, i);
    	}
    }
    public exprofdefaultlist(): ExprofdefaultlistContext[];
    public exprofdefaultlist(i: number): ExprofdefaultlistContext | null;
    public exprofdefaultlist(i?: number): ExprofdefaultlistContext[] | ExprofdefaultlistContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExprofdefaultlistContext);
        }

        return this.getRuleContext(i, ExprofdefaultlistContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_merge_update;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterMerge_update) {
             listener.enterMerge_update(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitMerge_update) {
             listener.exitMerge_update(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitMerge_update) {
            return visitor.visitMerge_update(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Default_values_or_valuesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VALUES(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_VALUES, 0)!;
    }
    public exprofdefaultlist(): ExprofdefaultlistContext | null {
        return this.getRuleContext(0, ExprofdefaultlistContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_default_values_or_values;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterDefault_values_or_values) {
             listener.enterDefault_values_or_values(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitDefault_values_or_values) {
             listener.exitDefault_values_or_values(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefault_values_or_values) {
            return visitor.visitDefault_values_or_values(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExprofdefaultlistContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public OPEN_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.OPEN_PAREN, 0)!;
    }
    public exprofdefault(): ExprofdefaultContext[];
    public exprofdefault(i: number): ExprofdefaultContext | null;
    public exprofdefault(i?: number): ExprofdefaultContext[] | ExprofdefaultContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExprofdefaultContext);
        }

        return this.getRuleContext(i, ExprofdefaultContext);
    }
    public CLOSE_PAREN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.CLOSE_PAREN, 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(PostgreSqlParser.COMMA);
    	} else {
    		return this.getToken(PostgreSqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exprofdefaultlist;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExprofdefaultlist) {
             listener.enterExprofdefaultlist(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExprofdefaultlist) {
             listener.exitExprofdefaultlist(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExprofdefaultlist) {
            return visitor.visitExprofdefaultlist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExprofdefaultContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sortby(): SortbyContext | null {
        return this.getRuleContext(0, SortbyContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exprofdefault;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExprofdefault) {
             listener.enterExprofdefault(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExprofdefault) {
             listener.exitExprofdefault(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExprofdefault) {
            return visitor.visitExprofdefault(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_closeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CLOSE(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CLOSE, 0)!;
    }
    public cursor_variable(): Cursor_variableContext {
        return this.getRuleContext(0, Cursor_variableContext)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_close;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_close) {
             listener.enterStmt_close(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_close) {
             listener.exitStmt_close(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_close) {
            return visitor.visitStmt_close(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_nullContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NULL(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_NULL, 0)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_null;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_null) {
             listener.enterStmt_null(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_null) {
             listener.exitStmt_null(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_null) {
            return visitor.visitStmt_null(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_commitContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COMMIT(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_COMMIT, 0)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public plsql_opt_transaction_chain(): Plsql_opt_transaction_chainContext | null {
        return this.getRuleContext(0, Plsql_opt_transaction_chainContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_commit;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_commit) {
             listener.enterStmt_commit(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_commit) {
             listener.exitStmt_commit(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_commit) {
            return visitor.visitStmt_commit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_rollbackContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROLLBACK(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_ROLLBACK, 0)!;
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public plsql_opt_transaction_chain(): Plsql_opt_transaction_chainContext | null {
        return this.getRuleContext(0, Plsql_opt_transaction_chainContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_rollback;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_rollback) {
             listener.enterStmt_rollback(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_rollback) {
             listener.exitStmt_rollback(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_rollback) {
            return visitor.visitStmt_rollback(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Plsql_opt_transaction_chainContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AND(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_AND, 0)!;
    }
    public KW_CHAIN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_CHAIN, 0)!;
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_plsql_opt_transaction_chain;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPlsql_opt_transaction_chain) {
             listener.enterPlsql_opt_transaction_chain(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPlsql_opt_transaction_chain) {
             listener.exitPlsql_opt_transaction_chain(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPlsql_opt_transaction_chain) {
            return visitor.visitPlsql_opt_transaction_chain(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Stmt_setContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public any_name(): Any_nameContext | null {
        return this.getRuleContext(0, Any_nameContext);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TO, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.SEMI, 0)!;
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALL, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_stmt_set;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterStmt_set) {
             listener.enterStmt_set(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitStmt_set) {
             listener.exitStmt_set(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitStmt_set) {
            return visitor.visitStmt_set(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Cursor_variableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public PARAM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.PARAM, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_cursor_variable;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterCursor_variable) {
             listener.enterCursor_variable(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitCursor_variable) {
             listener.exitCursor_variable(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitCursor_variable) {
            return visitor.visitCursor_variable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Exception_sectContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EXCEPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCEPTION, 0);
    }
    public proc_exceptions(): Proc_exceptionsContext | null {
        return this.getRuleContext(0, Proc_exceptionsContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_exception_sect;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterException_sect) {
             listener.enterException_sect(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitException_sect) {
             listener.exitException_sect(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitException_sect) {
            return visitor.visitException_sect(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Proc_exceptionContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_proc_exceptions;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProc_exceptions) {
             listener.enterProc_exceptions(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProc_exceptions) {
             listener.exitProc_exceptions(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProc_exceptions) {
            return visitor.visitProc_exceptions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Proc_exceptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0)!;
    }
    public proc_conditions(): Proc_conditionsContext {
        return this.getRuleContext(0, Proc_conditionsContext)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_THEN, 0)!;
    }
    public proc_sect(): Proc_sectContext {
        return this.getRuleContext(0, Proc_sectContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_proc_exception;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProc_exception) {
             listener.enterProc_exception(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProc_exception) {
             listener.exitProc_exception(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProc_exception) {
            return visitor.visitProc_exception(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


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

        return this.getRuleContext(i, Proc_conditionContext);
    }
    public KW_OR(): antlr.TerminalNode[];
    public KW_OR(i: number): antlr.TerminalNode | null;
    public KW_OR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(PostgreSqlParser.KW_OR);
    	} else {
    		return this.getToken(PostgreSqlParser.KW_OR, i);
    	}
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_proc_conditions;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProc_conditions) {
             listener.enterProc_conditions(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProc_conditions) {
             listener.exitProc_conditions(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProc_conditions) {
            return visitor.visitProc_conditions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Proc_conditionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public any_identifier(): Any_identifierContext | null {
        return this.getRuleContext(0, Any_identifierContext);
    }
    public KW_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SQLSTATE, 0);
    }
    public sconst(): SconstContext | null {
        return this.getRuleContext(0, SconstContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_proc_condition;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterProc_condition) {
             listener.enterProc_condition(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitProc_condition) {
             listener.exitProc_condition(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitProc_condition) {
            return visitor.visitProc_condition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_block_labelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public label_decl(): Label_declContext | null {
        return this.getRuleContext(0, Label_declContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_block_label;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_block_label) {
             listener.enterOpt_block_label(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_block_label) {
             listener.exitOpt_block_label(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_block_label) {
            return visitor.visitOpt_block_label(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_loop_labelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public label_decl(): Label_declContext | null {
        return this.getRuleContext(0, Label_declContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_loop_label;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_loop_label) {
             listener.enterOpt_loop_label(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_loop_label) {
             listener.exitOpt_loop_label(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_loop_label) {
            return visitor.visitOpt_loop_label(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_labelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public any_identifier(): Any_identifierContext | null {
        return this.getRuleContext(0, Any_identifierContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_label;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_label) {
             listener.enterOpt_label(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_label) {
             listener.exitOpt_label(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_label) {
            return visitor.visitOpt_label(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_exitcondContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_WHEN, 0)!;
    }
    public expr_until_semi(): Expr_until_semiContext {
        return this.getRuleContext(0, Expr_until_semiContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_exitcond;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_exitcond) {
             listener.enterOpt_exitcond(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_exitcond) {
             listener.exitOpt_exitcond(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_exitcond) {
            return visitor.visitOpt_exitcond(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Any_identifierContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public colid(): ColidContext | null {
        return this.getRuleContext(0, ColidContext);
    }
    public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext | null {
        return this.getRuleContext(0, Plsql_unreserved_keywordContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_any_identifier;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterAny_identifier) {
             listener.enterAny_identifier(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitAny_identifier) {
             listener.exitAny_identifier(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitAny_identifier) {
            return visitor.visitAny_identifier(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Plsql_unreserved_keywordContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ABSOLUTE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ABSOLUTE, 0);
    }
    public KW_ALIAS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ALIAS, 0);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_AND, 0);
    }
    public KW_ARRAY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ARRAY, 0);
    }
    public KW_ASSERT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ASSERT, 0);
    }
    public KW_BACKWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_BACKWARD, 0);
    }
    public KW_CALL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CALL, 0);
    }
    public KW_CHAIN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CHAIN, 0);
    }
    public KW_CLOSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CLOSE, 0);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COLLATE, 0);
    }
    public KW_COMMIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_COMMIT, 0);
    }
    public KW_CONSTANT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTANT, 0);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONSTRAINT, 0);
    }
    public KW_CONTINUE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CONTINUE, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURRENT, 0);
    }
    public KW_CURSOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_CURSOR, 0);
    }
    public KW_DEBUG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEBUG, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DEFAULT, 0);
    }
    public KW_DIAGNOSTICS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DIAGNOSTICS, 0);
    }
    public KW_DO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DO, 0);
    }
    public KW_DUMP(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_DUMP, 0);
    }
    public KW_ELSIF(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ELSIF, 0);
    }
    public KW_ERROR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ERROR, 0);
    }
    public KW_EXCEPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXCEPTION, 0);
    }
    public KW_EXIT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_EXIT, 0);
    }
    public KW_FETCH(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FETCH, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FIRST, 0);
    }
    public KW_FORWARD(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_FORWARD, 0);
    }
    public KW_GET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_GET, 0);
    }
    public KW_INFO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INFO, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_INSERT, 0);
    }
    public KW_IS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_IS, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LAST, 0);
    }
    public KW_LOG(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_LOG, 0);
    }
    public KW_MOVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_MOVE, 0);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NEXT, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NO, 0);
    }
    public KW_NOTICE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_NOTICE, 0);
    }
    public KW_OPEN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPEN, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OPTION, 0);
    }
    public KW_PERFORM(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PERFORM, 0);
    }
    public KW_PRINT_STRICT_PARAMS(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRINT_STRICT_PARAMS, 0);
    }
    public KW_PRIOR(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_PRIOR, 0);
    }
    public KW_QUERY(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_QUERY, 0);
    }
    public KW_RAISE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RAISE, 0);
    }
    public KW_RELATIVE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RELATIVE, 0);
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RESET, 0);
    }
    public KW_RETURN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_RETURN, 0);
    }
    public KW_REVERSE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_REVERSE, 0);
    }
    public KW_ROLLBACK(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROLLBACK, 0);
    }
    public KW_ROWTYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_ROWTYPE, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCHEMA, 0);
    }
    public KW_SCROLL(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SCROLL, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SET, 0);
    }
    public KW_SLICE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SLICE, 0);
    }
    public KW_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_SQLSTATE, 0);
    }
    public KW_STACKED(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_STACKED, 0);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TABLE, 0);
    }
    public KW_TYPE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_TYPE, 0);
    }
    public KW_USE_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USE_COLUMN, 0);
    }
    public KW_USE_VARIABLE(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_USE_VARIABLE, 0);
    }
    public KW_VARIABLE_CONFLICT(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_VARIABLE_CONFLICT, 0);
    }
    public KW_WARNING(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_WARNING, 0);
    }
    public KW_OUTER(): antlr.TerminalNode | null {
        return this.getToken(PostgreSqlParser.KW_OUTER, 0);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_plsql_unreserved_keyword;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterPlsql_unreserved_keyword) {
             listener.enterPlsql_unreserved_keyword(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitPlsql_unreserved_keyword) {
             listener.exitPlsql_unreserved_keyword(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitPlsql_unreserved_keyword) {
            return visitor.visitPlsql_unreserved_keyword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Sql_expressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public opt_target_list(): Opt_target_listContext | null {
        return this.getRuleContext(0, Opt_target_listContext);
    }
    public into_clause(): Into_clauseContext | null {
        return this.getRuleContext(0, Into_clauseContext);
    }
    public from_clause(): From_clauseContext | null {
        return this.getRuleContext(0, From_clauseContext);
    }
    public where_clause(): Where_clauseContext | null {
        return this.getRuleContext(0, Where_clauseContext);
    }
    public group_clause(): Group_clauseContext | null {
        return this.getRuleContext(0, Group_clauseContext);
    }
    public having_clause(): Having_clauseContext | null {
        return this.getRuleContext(0, Having_clauseContext);
    }
    public window_clause(): Window_clauseContext | null {
        return this.getRuleContext(0, Window_clauseContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_sql_expression;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterSql_expression) {
             listener.enterSql_expression(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitSql_expression) {
             listener.exitSql_expression(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitSql_expression) {
            return visitor.visitSql_expression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Expr_until_thenContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sql_expression(): Sql_expressionContext {
        return this.getRuleContext(0, Sql_expressionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_expr_until_then;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExpr_until_then) {
             listener.enterExpr_until_then(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExpr_until_then) {
             listener.exitExpr_until_then(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpr_until_then) {
            return visitor.visitExpr_until_then(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Expr_until_semiContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sql_expression(): Sql_expressionContext {
        return this.getRuleContext(0, Sql_expressionContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_expr_until_semi;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExpr_until_semi) {
             listener.enterExpr_until_semi(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExpr_until_semi) {
             listener.exitExpr_until_semi(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpr_until_semi) {
            return visitor.visitExpr_until_semi(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Expr_until_rightbracketContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_expr_until_rightbracket;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExpr_until_rightbracket) {
             listener.enterExpr_until_rightbracket(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExpr_until_rightbracket) {
             listener.exitExpr_until_rightbracket(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpr_until_rightbracket) {
            return visitor.visitExpr_until_rightbracket(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Expr_until_loopContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public a_expr(): A_exprContext {
        return this.getRuleContext(0, A_exprContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_expr_until_loop;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterExpr_until_loop) {
             listener.enterExpr_until_loop(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitExpr_until_loop) {
             listener.exitExpr_until_loop(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpr_until_loop) {
            return visitor.visitExpr_until_loop(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Make_execsql_stmtContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public stmt(): StmtContext {
        return this.getRuleContext(0, StmtContext)!;
    }
    public opt_returning_clause_into(): Opt_returning_clause_intoContext | null {
        return this.getRuleContext(0, Opt_returning_clause_intoContext);
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_make_execsql_stmt;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterMake_execsql_stmt) {
             listener.enterMake_execsql_stmt(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitMake_execsql_stmt) {
             listener.exitMake_execsql_stmt(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitMake_execsql_stmt) {
            return visitor.visitMake_execsql_stmt(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class Opt_returning_clause_intoContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(PostgreSqlParser.KW_INTO, 0)!;
    }
    public opt_strict(): Opt_strictContext {
        return this.getRuleContext(0, Opt_strictContext)!;
    }
    public into_target(): Into_targetContext {
        return this.getRuleContext(0, Into_targetContext)!;
    }
    public override get ruleIndex(): number {
        return PostgreSqlParser.RULE_opt_returning_clause_into;
    }
    public override enterRule(listener: PostgreSqlParserListener): void {
        if(listener.enterOpt_returning_clause_into) {
             listener.enterOpt_returning_clause_into(this);
        }
    }
    public override exitRule(listener: PostgreSqlParserListener): void {
        if(listener.exitOpt_returning_clause_into) {
             listener.exitOpt_returning_clause_into(this);
        }
    }
    public override accept<Result>(visitor: PostgreSqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpt_returning_clause_into) {
            return visitor.visitOpt_returning_clause_into(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
