diff --git a/build/antlr4.js b/build/antlr4.js index 05d3085..2689ee4 100644 --- a/build/antlr4.js +++ b/build/antlr4.js @@ -13,6 +13,7 @@ const entry = [ 'plsql', 'spark', 'flinksql', + 'trinosql', ]; function compile(language) { diff --git a/jest.config.js b/jest.config.js index 7a90c13..2e72f4a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -182,7 +182,7 @@ module.exports = { }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: ["/node_modules/(?!antlr4)"], + transformIgnorePatterns: ["/node_modules/.pnpm/(?!antlr4)"], // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, @@ -196,6 +196,6 @@ module.exports = { // Whether to use watchman for file crawling // watchman: true, moduleNameMapper: { - "^antlr4$": "/node_modules/antlr4/src/antlr4/index.web.js", + "^antlr4$": "/node_modules/antlr4/dist/antlr4.web.js", }, }; diff --git a/src/grammar/trinosql/TrinoSqlParser.g4 b/src/grammar/trinosql/TrinoSqlParser.g4 new file mode 100644 index 0000000..3abe89c --- /dev/null +++ b/src/grammar/trinosql/TrinoSqlParser.g4 @@ -0,0 +1,1033 @@ +grammar trinoSqlParser; + +tokens { + DELIMITER +} + +// Modified entrypoint +program: statements* EOF; + +statements: + singleStatement + | standaloneExpression + | standalonePathSpecification + | standaloneType + | standaloneRowPattern; + +singleStatement: statement SEMICOLON?; + +standaloneExpression: expression SEMICOLON?; + +standalonePathSpecification: pathSpecification SEMICOLON?; + +standaloneType: type SEMICOLON?; + +standaloneRowPattern: rowPattern SEMICOLON?; + +statement: + query # statementDefault + | USE schema = identifier # use + | USE catalog = identifier '.' schema = identifier # use + | CREATE SCHEMA (IF NOT EXISTS)? qualifiedName ( + AUTHORIZATION principal + )? (WITH properties)? # createSchema + | DROP SCHEMA (IF EXISTS)? qualifiedName (CASCADE | RESTRICT)? # dropSchema + | ALTER SCHEMA qualifiedName RENAME TO identifier # renameSchema + | ALTER SCHEMA qualifiedName SET AUTHORIZATION principal # setSchemaAuthorization + | CREATE TABLE (IF NOT EXISTS)? qualifiedName columnAliases? ( + COMMENT string + )? (WITH properties)? AS (query | '(' query ')') ( + WITH (NO)? DATA + )? # createTableAsSelect + | CREATE TABLE (IF NOT EXISTS)? qualifiedName '(' tableElement ( + ',' tableElement + )* ')' (COMMENT string)? (WITH properties)? # createTable + | DROP TABLE (IF EXISTS)? qualifiedName # dropTable + | INSERT INTO qualifiedName columnAliases? query # insertInto + | DELETE FROM qualifiedName (WHERE booleanExpression)? # delete + | TRUNCATE TABLE qualifiedName # truncateTable + | ALTER TABLE (IF EXISTS)? from = qualifiedName RENAME TO to = qualifiedName # renameTable + | COMMENT ON TABLE qualifiedName IS (string | NULL) # commentTable + | COMMENT ON COLUMN qualifiedName IS (string | NULL) # commentColumn + | ALTER TABLE (IF EXISTS)? tableName = qualifiedName RENAME COLUMN ( + IF EXISTS + )? from = identifier TO to = identifier # renameColumn + | ALTER TABLE (IF EXISTS)? tableName = qualifiedName DROP COLUMN ( + IF EXISTS + )? column = qualifiedName # dropColumn + | ALTER TABLE (IF EXISTS)? tableName = qualifiedName ADD COLUMN ( + IF NOT EXISTS + )? column = columnDefinition # addColumn + | ALTER TABLE tableName = qualifiedName SET AUTHORIZATION principal # setTableAuthorization + | ALTER TABLE tableName = qualifiedName SET PROPERTIES propertyAssignments # setTableProperties + | ALTER TABLE tableName = qualifiedName EXECUTE procedureName = identifier ( + '(' (callArgument (',' callArgument)*)? ')' + )? (WHERE where = booleanExpression)? # tableExecute + | ANALYZE qualifiedName (WITH properties)? # analyze + | CREATE (OR REPLACE)? MATERIALIZED VIEW (IF NOT EXISTS)? qualifiedName ( + COMMENT string + )? (WITH properties)? AS query # createMaterializedView + | CREATE (OR REPLACE)? VIEW qualifiedName (COMMENT string)? ( + SECURITY (DEFINER | INVOKER) + )? AS query # createView + | REFRESH MATERIALIZED VIEW qualifiedName # refreshMaterializedView + | DROP MATERIALIZED VIEW (IF EXISTS)? qualifiedName # dropMaterializedView + | ALTER MATERIALIZED VIEW (IF EXISTS)? from = qualifiedName RENAME TO to = qualifiedName # renameMaterializedView + | ALTER MATERIALIZED VIEW qualifiedName + SET PROPERTIES propertyAssignments # setMaterializedViewProperties + | DROP VIEW (IF EXISTS)? qualifiedName # dropView + | ALTER VIEW from = qualifiedName RENAME TO to = qualifiedName # renameView + | ALTER VIEW from = qualifiedName SET AUTHORIZATION principal # setViewAuthorization + | CALL qualifiedName '(' (callArgument (',' callArgument)*)? ')' # call + | CREATE ROLE name = identifier + (WITH ADMIN grantor)? + (IN catalog = identifier)? # createRole + | DROP ROLE name = identifier # dropRole + | GRANT roles TO principal + (',' principal)* + (WITH ADMIN OPTION)? + (GRANTED BY grantor)? + (IN catalog = identifier)? # grantRoles + | REVOKE (ADMIN OPTION FOR)? roles FROM principal + (',' principal)* + (GRANTED BY grantor)? + (IN catalog = identifier)? # revokeRoles + | SET ROLE (ALL | NONE | role = identifier) ( + IN catalog = identifier + )? # setRole | GRANT (privilege (',' privilege)* | ALL PRIVILEGES) ON ( + SCHEMA + | TABLE + )? qualifiedName TO grantee = principal (WITH GRANT OPTION)? # grant + | DENY (privilege (',' privilege)* | ALL PRIVILEGES) ON ( + SCHEMA + | TABLE + )? qualifiedName TO grantee = principal # deny + | REVOKE (GRANT OPTION FOR)? ( + privilege (',' privilege)* + | ALL PRIVILEGES + ) ON (SCHEMA | TABLE)? qualifiedName FROM grantee = principal # revoke + | SHOW GRANTS (ON TABLE? qualifiedName)? # showGrants + | EXPLAIN ANALYZE? VERBOSE? ( + '(' explainOption (',' explainOption)* ')' + )? statement # explain + | SHOW CREATE TABLE qualifiedName # showCreateTable + | SHOW CREATE SCHEMA qualifiedName # showCreateSchema + | SHOW CREATE VIEW qualifiedName # showCreateView + | SHOW CREATE MATERIALIZED VIEW qualifiedName # showCreateMaterializedView + | SHOW TABLES ((FROM | IN) qualifiedName)? ( + LIKE pattern = string (ESCAPE escape = string)? + )? # showTables + | SHOW SCHEMAS ((FROM | IN) identifier)? ( + LIKE pattern = string (ESCAPE escape = string)? + )? # showSchemas + | SHOW CATALOGS ( + LIKE pattern = string (ESCAPE escape = string)? + )? # showCatalogs + | SHOW COLUMNS (FROM | IN) qualifiedName? ( + LIKE pattern = string (ESCAPE escape = string)? + )? # showColumns + | SHOW STATS FOR qualifiedName # showStats + | SHOW STATS FOR '(' query ')' # showStatsForQuery + | SHOW CURRENT? ROLES ((FROM | IN) identifier)? # showRoles + | SHOW ROLE GRANTS ((FROM | IN) identifier)? # showRoleGrants + | DESCRIBE qualifiedName # showColumns + | DESC qualifiedName # showColumns + | SHOW FUNCTIONS ( + LIKE pattern = string (ESCAPE escape = string)? + )? # showFunctions + | SHOW SESSION ( + LIKE pattern = string (ESCAPE escape = string)? + )? # showSession + | SET SESSION qualifiedName EQ expression # setSession + | RESET SESSION qualifiedName # resetSession + | START TRANSACTION (transactionMode (',' transactionMode)*)? # startTransaction + | COMMIT WORK? # commit + | ROLLBACK WORK? # rollback + | PREPARE identifier FROM statement # prepare + | DEALLOCATE PREPARE identifier # deallocate + | EXECUTE identifier (USING expression (',' expression)*)? # execute + | DESCRIBE INPUT identifier # describeInput + | DESCRIBE OUTPUT identifier # describeOutput + | SET PATH pathSpecification # setPath + | SET TIME ZONE (LOCAL | expression) # setTimeZone + | UPDATE qualifiedName SET updateAssignment ( + ',' updateAssignment + )* (WHERE where = booleanExpression)? # update + | MERGE INTO qualifiedName (AS? identifier)? USING relation ON expression mergeCase+ # merge + | SHOW COMMENT ON TABLE qualifiedName # showTableComment + | SHOW COMMENT ON COLUMN qualifiedName # showColumnComment; + +query: with? queryNoWith; + +with: WITH RECURSIVE? namedQuery (',' namedQuery)*; + +tableElement: columnDefinition | likeClause; + +columnDefinition: + identifier type (NOT NULL)? (COMMENT string)? ( + WITH properties + )?; + +likeClause: + LIKE qualifiedName ( + optionType = (INCLUDING | EXCLUDING) PROPERTIES + )?; + +properties: '(' propertyAssignments ')'; + +propertyAssignments: property (',' property)*; + +property: identifier EQ propertyValue; + +propertyValue: + DEFAULT # defaultPropertyValue + | expression # nonDefaultPropertyValue; + +queryNoWith: + queryTerm (ORDER BY sortItem (',' sortItem)*)? ( + OFFSET offset = rowCount (ROW | ROWS)? + )? ( + (LIMIT limit = limitRowCount) + | ( + FETCH (FIRST | NEXT) (fetchFirst = rowCount)? ( + ROW + | ROWS + ) (ONLY | WITH TIES) + ) + )?; + +limitRowCount: ALL | rowCount; + +rowCount: INTEGER_VALUE | QUESTION_MARK; + +queryTerm: + queryPrimary # queryTermDefault + | left = queryTerm operator = INTERSECT setQuantifier? right = queryTerm # setOperation + | left = queryTerm operator = (UNION | EXCEPT) setQuantifier? right = queryTerm # setOperation; + +queryPrimary: + querySpecification # queryPrimaryDefault + | TABLE qualifiedName # table + | VALUES expression (',' expression)* # inlineTable + | '(' queryNoWith ')' # subquery; + +sortItem: + expression ordering = (ASC | DESC)? ( + NULLS nullOrdering = (FIRST | LAST) + )?; + +querySpecification: + SELECT setQuantifier? selectItem (',' selectItem)* ( + FROM relation (',' relation)* + )? (WHERE where = booleanExpression)? (GROUP BY groupBy)? ( + HAVING having = booleanExpression + )? (WINDOW windowDefinition (',' windowDefinition)*)?; + +groupBy: setQuantifier? groupingElement (',' groupingElement)*; + +groupingElement: + groupingSet # singleGroupingSet + | ROLLUP '(' (expression (',' expression)*)? ')' # rollup + | CUBE '(' (expression (',' expression)*)? ')' # cube + | GROUPING SETS '(' groupingSet (',' groupingSet)* ')' # multipleGroupingSets; + +groupingSet: + '(' (expression (',' expression)*)? ')' + | expression; + +windowDefinition: + name = identifier AS '(' windowSpecification ')'; + +windowSpecification: (existingWindowName = identifier)? ( + PARTITION BY partition += expression ( + ',' partition += expression + )* + )? (ORDER BY sortItem (',' sortItem)*)? windowFrame?; + +namedQuery: name = identifier (columnAliases)? AS '(' query ')'; + +setQuantifier: DISTINCT | ALL; + +selectItem: + expression (AS? identifier)? # selectSingle + | primaryExpression '.' ASTERISK (AS columnAliases)? # selectAll + | ASTERISK # selectAll; + +relation: + left = relation ( + CROSS JOIN right = sampledRelation + | joinType JOIN rightRelation = relation joinCriteria + | NATURAL joinType JOIN right = sampledRelation + ) # joinRelation + | sampledRelation # relationDefault; + +joinType: INNER? | LEFT OUTER? | RIGHT OUTER? | FULL OUTER?; + +joinCriteria: + ON booleanExpression + | USING '(' identifier (',' identifier)* ')'; + +sampledRelation: + patternRecognition ( + TABLESAMPLE sampleType '(' percentage = expression ')' + )?; + +sampleType: BERNOULLI | SYSTEM; + +patternRecognition: + aliasedRelation ( + MATCH_RECOGNIZE '(' ( + PARTITION BY partition += expression ( + ',' partition += expression + )* + )? (ORDER BY sortItem (',' sortItem)*)? ( + MEASURES measureDefinition (',' measureDefinition)* + )? rowsPerMatch? (AFTER MATCH skipTo)? (INITIAL | SEEK)? PATTERN '(' rowPattern ')' ( + SUBSET subsetDefinition (',' subsetDefinition)* + )? DEFINE variableDefinition (',' variableDefinition)* ')' ( + AS? identifier columnAliases? + )? + )?; + +measureDefinition: expression AS identifier; + +rowsPerMatch: + ONE ROW PER MATCH + | ALL ROWS PER MATCH emptyMatchHandling?; + +emptyMatchHandling: + SHOW EMPTY MATCHES + | OMIT EMPTY MATCHES + | WITH UNMATCHED ROWS; + +skipTo: + 'SKIP' TO NEXT ROW + | 'SKIP' PAST LAST ROW + | 'SKIP' TO FIRST identifier + | 'SKIP' TO LAST identifier + | 'SKIP' TO identifier; + +subsetDefinition: + name = identifier EQ '(' union += identifier ( + ',' union += identifier + )* ')'; + +variableDefinition: identifier AS expression; + +aliasedRelation: + relationPrimary (AS? identifier columnAliases?)?; + +columnAliases: '(' identifier (',' identifier)* ')'; + +relationPrimary: + qualifiedName # tableName + | '(' query ')' # subqueryRelation + | UNNEST '(' expression (',' expression)* ')' ( + WITH ORDINALITY + )? # unnest + | LATERAL '(' query ')' # lateral + | '(' relation ')' # parenthesizedRelation; + +expression: booleanExpression; + +booleanExpression: + valueExpression predicate[$valueExpression.ctx]? # predicated + | NOT booleanExpression # logicalNot + | left = booleanExpression operator = AND right = booleanExpression # logicalBinary + | left = booleanExpression operator = OR right = booleanExpression # logicalBinary; + +// workaround for https://github.com/antlr/antlr4/issues/780 +predicate[ParserRuleContext value]: + comparisonOperator right = valueExpression # comparison + | comparisonOperator comparisonQuantifier '(' query ')' # quantifiedComparison + | NOT? BETWEEN lower = valueExpression AND upper = valueExpression # between + | NOT? IN '(' expression (',' expression)* ')' # inList + | NOT? IN '(' query ')' # inSubquery + | NOT? LIKE pattern = valueExpression ( + ESCAPE escape = valueExpression + )? # like + | IS NOT? NULL # nullPredicate + | IS NOT? DISTINCT FROM right = valueExpression # distinctFrom; + +valueExpression: + primaryExpression # valueExpressionDefault + | valueExpression AT timeZoneSpecifier # atTimeZone + | operator = (MINUS | PLUS) valueExpression # arithmeticUnary + | left = valueExpression operator = ( + ASTERISK + | SLASH + | PERCENT + ) right = valueExpression # arithmeticBinary + | left = valueExpression operator = (PLUS | MINUS) right = valueExpression # arithmeticBinary + | left = valueExpression CONCAT right = valueExpression # concatenation; + +primaryExpression: + NULL # nullLiteral + | interval # intervalLiteral + | identifier string # typeConstructor + | DOUBLE PRECISION string # typeConstructor + | number # numericLiteral + | booleanValue # booleanLiteral + | string # stringLiteral + | BINARY_LITERAL # binaryLiteral + | QUESTION_MARK # parameter + | POSITION '(' valueExpression IN valueExpression ')' # position + | '(' expression (',' expression)+ ')' # rowConstructor + | ROW '(' expression (',' expression)* ')' # rowConstructor + | qualifiedName '(' ASTERISK ')' filter? over? # functionCall + | processingMode? qualifiedName '(' ( + setQuantifier? expression (',' expression)* + )? (ORDER BY sortItem (',' sortItem)*)? ')' filter? ( + nullTreatment? over + )? # functionCall + | identifier over # measure + | identifier '->' expression # lambda + | '(' (identifier (',' identifier)*)? ')' '->' expression # lambda + | '(' query ')' # subqueryExpression + // This is an extension to ANSI SQL, which considers EXISTS to be a + | EXISTS '(' query ')' # exists + | CASE operand = expression whenClause+ ( + ELSE elseExpression = expression + )? END # simpleCase + | CASE whenClause+ (ELSE elseExpression = expression)? END # searchedCase + | CAST '(' expression AS type ')' # cast + | TRY_CAST '(' expression AS type ')' # cast + | ARRAY '[' (expression (',' expression)*)? ']' # arrayConstructor + | value = primaryExpression '[' index = valueExpression ']' # subscript + | identifier # columnReference + | base = primaryExpression '.' fieldName = identifier # dereference + | name = CURRENT_DATE # specialDateTimeFunction + | name = CURRENT_TIME ('(' precision = INTEGER_VALUE ')')? # specialDateTimeFunction + | name = CURRENT_TIMESTAMP ( + '(' precision = INTEGER_VALUE ')' + )? # specialDateTimeFunction + | name = LOCALTIME ('(' precision = INTEGER_VALUE ')')? # specialDateTimeFunction + | name = LOCALTIMESTAMP ('(' precision = INTEGER_VALUE ')')? # specialDateTimeFunction + | name = CURRENT_USER # currentUser + | name = CURRENT_CATALOG # currentCatalog + | name = CURRENT_SCHEMA # currentSchema + | name = CURRENT_PATH # currentPath + | SUBSTRING '(' valueExpression FROM valueExpression ( + FOR valueExpression + )? ')' # substring + | NORMALIZE '(' valueExpression (',' normalForm)? ')' # normalize + | EXTRACT '(' identifier FROM valueExpression ')' # extract + | '(' expression ')' # parenthesizedExpression + | GROUPING '(' (qualifiedName (',' qualifiedName)*)? ')' # groupingOperation; + +processingMode: RUNNING | FINAL; + +nullTreatment: IGNORE NULLS | RESPECT NULLS; + +string: + STRING # basicStringLiteral + | UNICODE_STRING (UESCAPE STRING)? # unicodeStringLiteral; + +timeZoneSpecifier: + TIME ZONE interval # timeZoneInterval + | TIME ZONE string # timeZoneString; + +comparisonOperator: EQ | NEQ | LT | LTE | GT | GTE; + +comparisonQuantifier: ALL | SOME | ANY; + +booleanValue: TRUE | FALSE; + +interval: + INTERVAL sign = (PLUS | MINUS)? string from = intervalField ( + TO to = intervalField + )?; + +intervalField: YEAR | MONTH | DAY | HOUR | MINUTE | SECOND; + +normalForm: NFD | NFC | NFKD | NFKC; + +type: + ROW '(' rowField (',' rowField)* ')' # rowType + | INTERVAL from = intervalField (TO to = intervalField)? # intervalType + | base = TIMESTAMP ('(' precision = typeParameter ')')? ( + WITHOUT TIME ZONE + )? # dateTimeType + | base = TIMESTAMP ('(' precision = typeParameter ')')? WITH TIME ZONE # dateTimeType + | base = TIME ('(' precision = typeParameter ')')? ( + WITHOUT TIME ZONE + )? # dateTimeType + | base = TIME ('(' precision = typeParameter ')')? WITH TIME ZONE # dateTimeType + | DOUBLE PRECISION # doublePrecisionType + | ARRAY '<' type '>' # legacyArrayType + | MAP '<' keyType = type ',' valueType = type '>' # legacyMapType + | type ARRAY ('[' INTEGER_VALUE ']')? # arrayType + | identifier ('(' typeParameter (',' typeParameter)* ')')? # genericType; + +rowField: type | identifier type; + +typeParameter: INTEGER_VALUE | type; + +whenClause: + WHEN condition = expression THEN result = expression; + +filter: FILTER '(' WHERE booleanExpression ')'; + +mergeCase: + WHEN MATCHED (AND condition = expression)? THEN UPDATE SET targets += identifier EQ values += + expression ( + ',' targets += identifier EQ values += expression + )* # mergeUpdate + | WHEN MATCHED (AND condition = expression)? THEN DELETE # mergeDelete + | WHEN NOT MATCHED (AND condition = expression)? THEN INSERT ( + '(' targets += identifier (',' targets += identifier)* ')' + )? VALUES '(' values += expression (',' values += expression)* ')' # mergeInsert; + +over: + OVER (windowName = identifier | '(' windowSpecification ')'); + +windowFrame: ( + MEASURES measureDefinition (',' measureDefinition)* + )? frameExtent (AFTER MATCH skipTo)? (INITIAL | SEEK)? ( + PATTERN '(' rowPattern ')' + )? (SUBSET subsetDefinition (',' subsetDefinition)*)? ( + DEFINE variableDefinition (',' variableDefinition)* + )?; + +frameExtent: + frameType = RANGE start = frameBound + | frameType = ROWS start = frameBound + | frameType = GROUPS start = frameBound + | frameType = RANGE BETWEEN start = frameBound AND end = frameBound + | frameType = ROWS BETWEEN start = frameBound AND end = frameBound + | frameType = GROUPS BETWEEN start = frameBound AND end = frameBound; + +frameBound: + UNBOUNDED boundType = PRECEDING # unboundedFrame + | UNBOUNDED boundType = FOLLOWING # unboundedFrame + | CURRENT ROW # currentRowBound + | expression boundType = (PRECEDING | FOLLOWING) # boundedFrame; + +rowPattern: + patternPrimary patternQuantifier? # quantifiedPrimary + | rowPattern rowPattern # patternConcatenation + | rowPattern '|' rowPattern # patternAlternation; + +patternPrimary: + identifier # patternVariable + | '(' ')' # emptyPattern + | PERMUTE '(' rowPattern (',' rowPattern)* ')' # patternPermutation + | '(' rowPattern ')' # groupedPattern + | '^' # partitionStartAnchor + | '$' # partitionEndAnchor + | '{-' rowPattern '-}' # excludedPattern; + +patternQuantifier: + ASTERISK (reluctant = QUESTION_MARK)? # zeroOrMoreQuantifier + | PLUS (reluctant = QUESTION_MARK)? # oneOrMoreQuantifier + | QUESTION_MARK (reluctant = QUESTION_MARK)? # zeroOrOneQuantifier + | '{' exactly = INTEGER_VALUE '}' (reluctant = QUESTION_MARK)? # rangeQuantifier + | '{' (atLeast = INTEGER_VALUE)? ',' (atMost = INTEGER_VALUE)? '}' ( + reluctant = QUESTION_MARK + )? # rangeQuantifier; + +updateAssignment: identifier EQ expression; + +explainOption: + FORMAT value = (TEXT | GRAPHVIZ | JSON) # explainFormat + | TYPE value = (LOGICAL | DISTRIBUTED | VALIDATE | IO) # explainType; + +transactionMode: + ISOLATION LEVEL levelOfIsolation # isolationLevel + | READ accessMode = (ONLY | WRITE) # transactionAccessMode; + +levelOfIsolation: + READ UNCOMMITTED # readUncommitted + | READ COMMITTED # readCommitted + | REPEATABLE READ # repeatableRead + | SERIALIZABLE # serializable; + +callArgument: + expression # positionalArgument + | identifier '=>' expression # namedArgument; + +pathElement: + identifier '.' identifier # qualifiedArgument + | identifier # unqualifiedArgument; + +pathSpecification: pathElement (',' pathElement)*; + +privilege: SELECT | DELETE | INSERT | UPDATE; + +qualifiedName: identifier ('.' identifier)*; + +grantor: + principal # specifiedPrincipal + | CURRENT_USER # currentUserGrantor + | CURRENT_ROLE # currentRoleGrantor; + +principal: + identifier # unspecifiedPrincipal + | USER identifier # userPrincipal + | ROLE identifier # rolePrincipal; + +roles: identifier (',' identifier)*; + +identifier + : IDENTIFIER #unquotedIdentifier + | QUOTED_IDENTIFIER #quotedIdentifier + | nonReserved #unquotedIdentifier + | BACKQUOTED_IDENTIFIER #backQuotedIdentifier + | DIGIT_IDENTIFIER #digitIdentifier + ; + +number: + MINUS? DECIMAL_VALUE # decimalLiteral + | MINUS? DOUBLE_VALUE # doubleLiteral + | MINUS? INTEGER_VALUE # integerLiteral; + +nonReserved + : ADD + | ADMIN + | AFTER + | ALL + | ANALYZE + | ANY + | ARRAY + | ASC + | AT + | AUTHORIZATION + | BERNOULLI + | CALL + | CASCADE + | CATALOGS + | COLUMN + | COLUMNS + | COMMENT + | COMMIT + | COMMITTED + | CURRENT + | DATA + | DATE + | DAY + | DEFAULT + | DEFINE + | DEFINER + | DESC + | DISTRIBUTED + | DOUBLE + | EMPTY + | EXCLUDING + | EXPLAIN + | FETCH + | FILTER + | FINAL + | FIRST + | FOLLOWING + | FORMAT + | FUNCTIONS + | GRANT + | GRANTED + | GRANTS + | DENY + | GRAPHVIZ + | GROUPS + | HOUR + | IF + | IGNORE + | INCLUDING + | INITIAL + | INPUT + | INTERVAL + | INVOKER + | IO + | ISOLATION + | JSON + | LAST + | LATERAL + | LEVEL + | LIMIT + | LOCAL + | LOGICAL + | MAP + | MATCH + | MATCHED + | MATCHES + | MATCH_RECOGNIZE + | MATERIALIZED + | MEASURES + | MERGE + | MINUTE + | MONTH + | NEXT + | NFC + | NFD + | NFKC + | NFKD + | NO + | NONE + | NULLIF + | NULLS + | OFFSET + | OMIT + | ONE + | ONLY + | OPTION + | ORDINALITY + | OUTPUT + | OVER + | PARTITION + | PARTITIONS + | PAST + | PATH + | PATTERN + | PER + | PERMUTE + | POSITION + | PRECEDING + | PRECISION + | PRIVILEGES + | PROPERTIES + | RANGE + | READ + | REFRESH + | RENAME + | REPEATABLE + | REPLACE + | RESET + | RESPECT + | RESTRICT + | REVOKE + | ROLE + | ROLES + | ROLLBACK + | ROW + | ROWS + | RUNNING + | SCHEMA + | SCHEMAS + | SECOND + | SECURITY + | SEEK + | SERIALIZABLE + | SESSION + | SET + | SETS + | SHOW + | SOME + | START + | STATS + | SUBSET + | SUBSTRING + | SYSTEM + | TABLES + | TABLESAMPLE + | TEXT + | TIES + | TIME + | TIMESTAMP + | TO + | TRANSACTION + | TRUNCATE + | TRY_CAST + | TYPE + | UNBOUNDED + | UNCOMMITTED + | UNMATCHED + | UPDATE + | USE + | USER + | VALIDATE + | VERBOSE + | VIEW + | WINDOW + | WITHOUT + | WORK + | WRITE + | YEAR + | ZONE; + +ADD: 'ADD'; +ADMIN: 'ADMIN'; +AFTER: 'AFTER'; +ALL: 'ALL'; +ALTER: 'ALTER'; +ANALYZE: 'ANALYZE'; +AND: 'AND'; +ANY: 'ANY'; +ARRAY: 'ARRAY'; +AS: 'AS'; +ASC: 'ASC'; +AT: 'AT'; +AUTHORIZATION: 'AUTHORIZATION'; +BERNOULLI: 'BERNOULLI'; +BETWEEN: 'BETWEEN'; +BY: 'BY'; +CALL: 'CALL'; +CASCADE: 'CASCADE'; +CASE: 'CASE'; +CAST: 'CAST'; +CATALOGS: 'CATALOGS'; +COLUMN: 'COLUMN'; +COLUMNS: 'COLUMNS'; +COMMENT: 'COMMENT'; +COMMIT: 'COMMIT'; +COMMITTED: 'COMMITTED'; +CONSTRAINT: 'CONSTRAINT'; +CREATE: 'CREATE'; +CROSS: 'CROSS'; +CUBE: 'CUBE'; +CURRENT: 'CURRENT'; +CURRENT_CATALOG: 'CURRENT_CATALOG'; +CURRENT_DATE: 'CURRENT_DATE'; +CURRENT_PATH: 'CURRENT_PATH'; +CURRENT_ROLE: 'CURRENT_ROLE'; +CURRENT_SCHEMA: 'CURRENT_SCHEMA'; +CURRENT_TIME: 'CURRENT_TIME'; +CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; +CURRENT_USER: 'CURRENT_USER'; +DATA: 'DATA'; +DATE: 'DATE'; +DAY: 'DAY'; +DEFAULT: 'DEFAULT'; +DEALLOCATE: 'DEALLOCATE'; +DEFINER: 'DEFINER'; +DELETE: 'DELETE'; +DESC: 'DESC'; +DESCRIBE: 'DESCRIBE'; +DEFINE: 'DEFINE'; +DISTINCT: 'DISTINCT'; +DISTRIBUTED: 'DISTRIBUTED'; +DOUBLE: 'DOUBLE'; +DROP: 'DROP'; +ELSE: 'ELSE'; +EMPTY: 'EMPTY'; +END: 'END'; +ESCAPE: 'ESCAPE'; +EXCEPT: 'EXCEPT'; +EXCLUDING: 'EXCLUDING'; +EXECUTE: 'EXECUTE'; +EXISTS: 'EXISTS'; +EXPLAIN: 'EXPLAIN'; +EXTRACT: 'EXTRACT'; +FALSE: 'FALSE'; +FETCH: 'FETCH'; +FILTER: 'FILTER'; +FINAL: 'FINAL'; +FIRST: 'FIRST'; +FOLLOWING: 'FOLLOWING'; +FOR: 'FOR'; +FORMAT: 'FORMAT'; +FROM: 'FROM'; +FULL: 'FULL'; +FUNCTIONS: 'FUNCTIONS'; +GRANT: 'GRANT'; +GRANTED: 'GRANTED'; +GRANTS: 'GRANTS'; +DENY: 'DENY'; +GRAPHVIZ: 'GRAPHVIZ'; +GROUP: 'GROUP'; +GROUPING: 'GROUPING'; +GROUPS: 'GROUPS'; +HAVING: 'HAVING'; +HOUR: 'HOUR'; +IF: 'IF'; +IGNORE: 'IGNORE'; +IN: 'IN'; +INCLUDING: 'INCLUDING'; +INITIAL: 'INITIAL'; +INNER: 'INNER'; +INPUT: 'INPUT'; +INSERT: 'INSERT'; +INTERSECT: 'INTERSECT'; +INTERVAL: 'INTERVAL'; +INTO: 'INTO'; +INVOKER: 'INVOKER'; +IO: 'IO'; +IS: 'IS'; +ISOLATION: 'ISOLATION'; +JOIN: 'JOIN'; +JSON: 'JSON'; +LAST: 'LAST'; +LATERAL: 'LATERAL'; +LEFT: 'LEFT'; +LEVEL: 'LEVEL'; +LIKE: 'LIKE'; +LIMIT: 'LIMIT'; +LOCAL: 'LOCAL'; +LOCALTIME: 'LOCALTIME'; +LOCALTIMESTAMP: 'LOCALTIMESTAMP'; +LOGICAL: 'LOGICAL'; +MAP: 'MAP'; +MATCH: 'MATCH'; +MATCHED: 'MATCHED'; +MATCHES: 'MATCHES'; +MATCH_RECOGNIZE: 'MATCH_RECOGNIZE'; +MATERIALIZED: 'MATERIALIZED'; +MEASURES: 'MEASURES'; +MERGE: 'MERGE'; +MINUTE: 'MINUTE'; +MONTH: 'MONTH'; +NATURAL: 'NATURAL'; +NEXT: 'NEXT'; +NFC: 'NFC'; +NFD: 'NFD'; +NFKC: 'NFKC'; +NFKD: 'NFKD'; +NO: 'NO'; +NONE: 'NONE'; +NORMALIZE: 'NORMALIZE'; +NOT: 'NOT'; +NULL: 'NULL'; +NULLIF: 'NULLIF'; +NULLS: 'NULLS'; +OFFSET: 'OFFSET'; +OMIT: 'OMIT'; +ON: 'ON'; +ONE: 'ONE'; +ONLY: 'ONLY'; +OPTION: 'OPTION'; +OR: 'OR'; +ORDER: 'ORDER'; +ORDINALITY: 'ORDINALITY'; +OUTER: 'OUTER'; +OUTPUT: 'OUTPUT'; +OVER: 'OVER'; +PARTITION: 'PARTITION'; +PARTITIONS: 'PARTITIONS'; +PAST: 'PAST'; +PATH: 'PATH'; +PATTERN: 'PATTERN'; +PER: 'PER'; +PERMUTE: 'PERMUTE'; +POSITION: 'POSITION'; +PRECEDING: 'PRECEDING'; +PRECISION: 'PRECISION'; +PREPARE: 'PREPARE'; +PRIVILEGES: 'PRIVILEGES'; +PROPERTIES: 'PROPERTIES'; +RANGE: 'RANGE'; +READ: 'READ'; +RECURSIVE: 'RECURSIVE'; +REFRESH: 'REFRESH'; +RENAME: 'RENAME'; +REPEATABLE: 'REPEATABLE'; +REPLACE: 'REPLACE'; +RESET: 'RESET'; +RESPECT: 'RESPECT'; +RESTRICT: 'RESTRICT'; +REVOKE: 'REVOKE'; +RIGHT: 'RIGHT'; +ROLE: 'ROLE'; +ROLES: 'ROLES'; +ROLLBACK: 'ROLLBACK'; +ROLLUP: 'ROLLUP'; +ROW: 'ROW'; +ROWS: 'ROWS'; +RUNNING: 'RUNNING'; +SCHEMA: 'SCHEMA'; +SCHEMAS: 'SCHEMAS'; +SECOND: 'SECOND'; +SECURITY: 'SECURITY'; +SEEK: 'SEEK'; +SELECT: 'SELECT'; +SERIALIZABLE: 'SERIALIZABLE'; +SESSION: 'SESSION'; +SET: 'SET'; +SETS: 'SETS'; +SHOW: 'SHOW'; +SOME: 'SOME'; +START: 'START'; +STATS: 'STATS'; +SUBSET: 'SUBSET'; +SUBSTRING: 'SUBSTRING'; +SYSTEM: 'SYSTEM'; +TABLE: 'TABLE'; +TABLES: 'TABLES'; +TABLESAMPLE: 'TABLESAMPLE'; +TEXT: 'TEXT'; +THEN: 'THEN'; +TIES: 'TIES'; +TIME: 'TIME'; +TIMESTAMP: 'TIMESTAMP'; +TO: 'TO'; +TRANSACTION: 'TRANSACTION'; +TRUNCATE: 'TRUNCATE'; +TRUE: 'TRUE'; +TRY_CAST: 'TRY_CAST'; +TYPE: 'TYPE'; +UESCAPE: 'UESCAPE'; +UNBOUNDED: 'UNBOUNDED'; +UNCOMMITTED: 'UNCOMMITTED'; +UNION: 'UNION'; +UNMATCHED: 'UNMATCHED'; +UNNEST: 'UNNEST'; +UPDATE: 'UPDATE'; +USE: 'USE'; +USER: 'USER'; +USING: 'USING'; +VALIDATE: 'VALIDATE'; +VALUES: 'VALUES'; +VERBOSE: 'VERBOSE'; +VIEW: 'VIEW'; +WHEN: 'WHEN'; +WHERE: 'WHERE'; +WINDOW: 'WINDOW'; +WITH: 'WITH'; +WITHOUT: 'WITHOUT'; +WORK: 'WORK'; +WRITE: 'WRITE'; +YEAR: 'YEAR'; +ZONE: 'ZONE'; + +EQ: '='; +NEQ: '<>' | '!='; +LT: '<'; +LTE: '<='; +GT: '>'; +GTE: '>='; + +PLUS: '+'; +MINUS: '-'; +ASTERISK: '*'; +SLASH: '/'; +PERCENT: '%'; +CONCAT: '||'; +QUESTION_MARK: '?'; + +STRING: '\'' ( ~'\'' | '\'\'')* '\''; + +UNICODE_STRING: 'U&\'' ( ~'\'' | '\'\'')* '\''; + +// Note: we allow any character inside the binary literal and validate its a correct literal when +// the AST is being constructed. This allows us to provide more meaningful error messages to the +// user +BINARY_LITERAL: 'X\'' (~'\'')* '\''; + +INTEGER_VALUE: DIGIT+; + +DECIMAL_VALUE: DIGIT+ '.' DIGIT* | '.' DIGIT+; + +DOUBLE_VALUE: + DIGIT+ ('.' DIGIT*)? EXPONENT + | '.' DIGIT+ EXPONENT; + +IDENTIFIER: (LETTER | '_') (LETTER | DIGIT | '_')*; + +DIGIT_IDENTIFIER: DIGIT (LETTER | DIGIT | '_')+; + +QUOTED_IDENTIFIER: '"' ( ~'"' | '""')* '"'; + +BACKQUOTED_IDENTIFIER: '`' ( ~'`' | '``')* '`'; +SEMICOLON: ';'; + +fragment EXPONENT: 'E' [+-]? DIGIT+; + +fragment DIGIT: [0-9]; + +fragment LETTER: [A-Za-z]; + +SIMPLE_COMMENT: '--' ~[\r\n]* '\r'? '\n'? -> channel(HIDDEN); + +BRACKETED_COMMENT: '/*' .*? '*/' -> channel(HIDDEN); + +WS: [ \r\n\t]+ -> channel(HIDDEN); + +// Catch-all for anything we can't recognize. We use this to be able to ignore and recover all the +// text when splitting statements with DelimiterLexer +UNRECOGNIZED: .; diff --git a/src/index.ts b/src/index.ts index 4eec148..cf6759f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,3 +12,5 @@ export * from './lib/spark/SparkSqlVisitor'; export * from './lib/spark/SparkSqlListener'; export * from './lib/pgsql/PostgreSQLParserListener'; export * from './lib/pgsql/PostgreSQLParserVisitor'; +export * from './lib/trinosql/trinoSqlParserListener'; +export * from './lib/trinosql/trinoSqlParserVisitor'; diff --git a/src/lib/trinosql/trinoSqlParser.interp b/src/lib/trinosql/trinoSqlParser.interp new file mode 100644 index 0000000..72a3b9c --- /dev/null +++ b/src/lib/trinosql/trinoSqlParser.interp @@ -0,0 +1,655 @@ +token literal names: +null +'.' +'(' +')' +',' +'SKIP' +'->' +'[' +']' +'|' +'^' +'$' +'{-' +'-}' +'{' +'}' +'=>' +'ADD' +'ADMIN' +'AFTER' +'ALL' +'ALTER' +'ANALYZE' +'AND' +'ANY' +'ARRAY' +'AS' +'ASC' +'AT' +'AUTHORIZATION' +'BERNOULLI' +'BETWEEN' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CATALOGS' +'COLUMN' +'COLUMNS' +'COMMENT' +'COMMIT' +'COMMITTED' +'CONSTRAINT' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURRENT_CATALOG' +'CURRENT_DATE' +'CURRENT_PATH' +'CURRENT_ROLE' +'CURRENT_SCHEMA' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURRENT_USER' +'DATA' +'DATE' +'DAY' +'DEFAULT' +'DEALLOCATE' +'DEFINER' +'DELETE' +'DESC' +'DESCRIBE' +'DEFINE' +'DISTINCT' +'DISTRIBUTED' +'DOUBLE' +'DROP' +'ELSE' +'EMPTY' +'END' +'ESCAPE' +'EXCEPT' +'EXCLUDING' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTRACT' +'FALSE' +'FETCH' +'FILTER' +'FINAL' +'FIRST' +'FOLLOWING' +'FOR' +'FORMAT' +'FROM' +'FULL' +'FUNCTIONS' +'GRANT' +'GRANTED' +'GRANTS' +'DENY' +'GRAPHVIZ' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IF' +'IGNORE' +'IN' +'INCLUDING' +'INITIAL' +'INNER' +'INPUT' +'INSERT' +'INTERSECT' +'INTERVAL' +'INTO' +'INVOKER' +'IO' +'IS' +'ISOLATION' +'JOIN' +'JSON' +'LAST' +'LATERAL' +'LEFT' +'LEVEL' +'LIKE' +'LIMIT' +'LOCAL' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOGICAL' +'MAP' +'MATCH' +'MATCHED' +'MATCHES' +'MATCH_RECOGNIZE' +'MATERIALIZED' +'MEASURES' +'MERGE' +'MINUTE' +'MONTH' +'NATURAL' +'NEXT' +'NFC' +'NFD' +'NFKC' +'NFKD' +'NO' +'NONE' +'NORMALIZE' +'NOT' +'NULL' +'NULLIF' +'NULLS' +'OFFSET' +'OMIT' +'ON' +'ONE' +'ONLY' +'OPTION' +'OR' +'ORDER' +'ORDINALITY' +'OUTER' +'OUTPUT' +'OVER' +'PARTITION' +'PARTITIONS' +'PAST' +'PATH' +'PATTERN' +'PER' +'PERMUTE' +'POSITION' +'PRECEDING' +'PRECISION' +'PREPARE' +'PRIVILEGES' +'PROPERTIES' +'RANGE' +'READ' +'RECURSIVE' +'REFRESH' +'RENAME' +'REPEATABLE' +'REPLACE' +'RESET' +'RESPECT' +'RESTRICT' +'REVOKE' +'RIGHT' +'ROLE' +'ROLES' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'RUNNING' +'SCHEMA' +'SCHEMAS' +'SECOND' +'SECURITY' +'SEEK' +'SELECT' +'SERIALIZABLE' +'SESSION' +'SET' +'SETS' +'SHOW' +'SOME' +'START' +'STATS' +'SUBSET' +'SUBSTRING' +'SYSTEM' +'TABLE' +'TABLES' +'TABLESAMPLE' +'TEXT' +'THEN' +'TIES' +'TIME' +'TIMESTAMP' +'TO' +'TRANSACTION' +'TRUNCATE' +'TRUE' +'TRY_CAST' +'TYPE' +'UESCAPE' +'UNBOUNDED' +'UNCOMMITTED' +'UNION' +'UNMATCHED' +'UNNEST' +'UPDATE' +'USE' +'USER' +'USING' +'VALIDATE' +'VALUES' +'VERBOSE' +'VIEW' +'WHEN' +'WHERE' +'WINDOW' +'WITH' +'WITHOUT' +'WORK' +'WRITE' +'YEAR' +'ZONE' +'=' +null +'<' +'<=' +'>' +'>=' +'+' +'-' +'*' +'/' +'%' +'||' +'?' +null +null +null +null +null +null +null +null +null +null +';' +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +ADD +ADMIN +AFTER +ALL +ALTER +ANALYZE +AND +ANY +ARRAY +AS +ASC +AT +AUTHORIZATION +BERNOULLI +BETWEEN +BY +CALL +CASCADE +CASE +CAST +CATALOGS +COLUMN +COLUMNS +COMMENT +COMMIT +COMMITTED +CONSTRAINT +CREATE +CROSS +CUBE +CURRENT +CURRENT_CATALOG +CURRENT_DATE +CURRENT_PATH +CURRENT_ROLE +CURRENT_SCHEMA +CURRENT_TIME +CURRENT_TIMESTAMP +CURRENT_USER +DATA +DATE +DAY +DEFAULT +DEALLOCATE +DEFINER +DELETE +DESC +DESCRIBE +DEFINE +DISTINCT +DISTRIBUTED +DOUBLE +DROP +ELSE +EMPTY +END +ESCAPE +EXCEPT +EXCLUDING +EXECUTE +EXISTS +EXPLAIN +EXTRACT +FALSE +FETCH +FILTER +FINAL +FIRST +FOLLOWING +FOR +FORMAT +FROM +FULL +FUNCTIONS +GRANT +GRANTED +GRANTS +DENY +GRAPHVIZ +GROUP +GROUPING +GROUPS +HAVING +HOUR +IF +IGNORE +IN +INCLUDING +INITIAL +INNER +INPUT +INSERT +INTERSECT +INTERVAL +INTO +INVOKER +IO +IS +ISOLATION +JOIN +JSON +LAST +LATERAL +LEFT +LEVEL +LIKE +LIMIT +LOCAL +LOCALTIME +LOCALTIMESTAMP +LOGICAL +MAP +MATCH +MATCHED +MATCHES +MATCH_RECOGNIZE +MATERIALIZED +MEASURES +MERGE +MINUTE +MONTH +NATURAL +NEXT +NFC +NFD +NFKC +NFKD +NO +NONE +NORMALIZE +NOT +NULL +NULLIF +NULLS +OFFSET +OMIT +ON +ONE +ONLY +OPTION +OR +ORDER +ORDINALITY +OUTER +OUTPUT +OVER +PARTITION +PARTITIONS +PAST +PATH +PATTERN +PER +PERMUTE +POSITION +PRECEDING +PRECISION +PREPARE +PRIVILEGES +PROPERTIES +RANGE +READ +RECURSIVE +REFRESH +RENAME +REPEATABLE +REPLACE +RESET +RESPECT +RESTRICT +REVOKE +RIGHT +ROLE +ROLES +ROLLBACK +ROLLUP +ROW +ROWS +RUNNING +SCHEMA +SCHEMAS +SECOND +SECURITY +SEEK +SELECT +SERIALIZABLE +SESSION +SET +SETS +SHOW +SOME +START +STATS +SUBSET +SUBSTRING +SYSTEM +TABLE +TABLES +TABLESAMPLE +TEXT +THEN +TIES +TIME +TIMESTAMP +TO +TRANSACTION +TRUNCATE +TRUE +TRY_CAST +TYPE +UESCAPE +UNBOUNDED +UNCOMMITTED +UNION +UNMATCHED +UNNEST +UPDATE +USE +USER +USING +VALIDATE +VALUES +VERBOSE +VIEW +WHEN +WHERE +WINDOW +WITH +WITHOUT +WORK +WRITE +YEAR +ZONE +EQ +NEQ +LT +LTE +GT +GTE +PLUS +MINUS +ASTERISK +SLASH +PERCENT +CONCAT +QUESTION_MARK +STRING +UNICODE_STRING +BINARY_LITERAL +INTEGER_VALUE +DECIMAL_VALUE +DOUBLE_VALUE +IDENTIFIER +DIGIT_IDENTIFIER +QUOTED_IDENTIFIER +BACKQUOTED_IDENTIFIER +SEMICOLON +SIMPLE_COMMENT +BRACKETED_COMMENT +WS +UNRECOGNIZED +DELIMITER + +rule names: +program +statements +singleStatement +standaloneExpression +standalonePathSpecification +standaloneType +standaloneRowPattern +statement +query +with +tableElement +columnDefinition +likeClause +properties +propertyAssignments +property +propertyValue +queryNoWith +limitRowCount +rowCount +queryTerm +queryPrimary +sortItem +querySpecification +groupBy +groupingElement +groupingSet +windowDefinition +windowSpecification +namedQuery +setQuantifier +selectItem +relation +joinType +joinCriteria +sampledRelation +sampleType +patternRecognition +measureDefinition +rowsPerMatch +emptyMatchHandling +skipTo +subsetDefinition +variableDefinition +aliasedRelation +columnAliases +relationPrimary +expression +booleanExpression +predicate +valueExpression +primaryExpression +processingMode +nullTreatment +string +timeZoneSpecifier +comparisonOperator +comparisonQuantifier +booleanValue +interval +intervalField +normalForm +type +rowField +typeParameter +whenClause +filter +mergeCase +over +windowFrame +frameExtent +frameBound +rowPattern +patternPrimary +patternQuantifier +updateAssignment +explainOption +transactionMode +levelOfIsolation +callArgument +pathElement +pathSpecification +privilege +qualifiedName +grantor +principal +roles +identifier +number +nonReserved + + +atn: +[4, 1, 277, 2463, 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, 1, 0, 5, 0, 182, 8, 0, 10, 0, 12, 0, 185, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 194, 8, 1, 1, 2, 1, 2, 3, 2, 198, 8, 2, 1, 3, 1, 3, 3, 3, 202, 8, 3, 1, 4, 1, 4, 3, 4, 206, 8, 4, 1, 5, 1, 5, 3, 5, 210, 8, 5, 1, 6, 1, 6, 3, 6, 214, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 229, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 234, 8, 7, 1, 7, 1, 7, 3, 7, 238, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 244, 8, 7, 1, 7, 1, 7, 3, 7, 248, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 269, 8, 7, 1, 7, 1, 7, 3, 7, 273, 8, 7, 1, 7, 1, 7, 3, 7, 277, 8, 7, 1, 7, 1, 7, 3, 7, 281, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 289, 8, 7, 1, 7, 1, 7, 3, 7, 293, 8, 7, 1, 7, 3, 7, 296, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 303, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 310, 8, 7, 10, 7, 12, 7, 313, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 318, 8, 7, 1, 7, 1, 7, 3, 7, 322, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 328, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 335, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 344, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 353, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 367, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 376, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 382, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 389, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 399, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 406, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 414, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 422, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 449, 8, 7, 10, 7, 12, 7, 452, 9, 7, 3, 7, 454, 8, 7, 1, 7, 3, 7, 457, 8, 7, 1, 7, 1, 7, 3, 7, 461, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 467, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 472, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 479, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 484, 8, 7, 1, 7, 1, 7, 3, 7, 488, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 496, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 502, 8, 7, 1, 7, 1, 7, 3, 7, 506, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 520, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 528, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 547, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 570, 8, 7, 10, 7, 12, 7, 573, 9, 7, 3, 7, 575, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 585, 8, 7, 1, 7, 1, 7, 3, 7, 589, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 600, 8, 7, 10, 7, 12, 7, 603, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 608, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 613, 8, 7, 1, 7, 1, 7, 3, 7, 617, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 623, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 630, 8, 7, 10, 7, 12, 7, 633, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 638, 8, 7, 1, 7, 1, 7, 3, 7, 642, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 649, 8, 7, 1, 7, 1, 7, 3, 7, 653, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 659, 8, 7, 10, 7, 12, 7, 662, 9, 7, 1, 7, 1, 7, 3, 7, 666, 8, 7, 1, 7, 1, 7, 3, 7, 670, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 678, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 684, 8, 7, 10, 7, 12, 7, 687, 9, 7, 1, 7, 1, 7, 3, 7, 691, 8, 7, 1, 7, 1, 7, 3, 7, 695, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 705, 8, 7, 1, 7, 1, 7, 1, 7, 5, 7, 710, 8, 7, 10, 7, 12, 7, 713, 9, 7, 1, 7, 1, 7, 3, 7, 717, 8, 7, 1, 7, 1, 7, 3, 7, 721, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 731, 8, 7, 1, 7, 3, 7, 734, 8, 7, 1, 7, 1, 7, 3, 7, 738, 8, 7, 1, 7, 3, 7, 741, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 747, 8, 7, 10, 7, 12, 7, 750, 9, 7, 1, 7, 1, 7, 3, 7, 754, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 778, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 784, 8, 7, 3, 7, 786, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 792, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 798, 8, 7, 3, 7, 800, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 808, 8, 7, 3, 7, 810, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 816, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 822, 8, 7, 3, 7, 824, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 839, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 844, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 851, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 863, 8, 7, 3, 7, 865, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 873, 8, 7, 3, 7, 875, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 891, 8, 7, 10, 7, 12, 7, 894, 9, 7, 3, 7, 896, 8, 7, 1, 7, 1, 7, 3, 7, 900, 8, 7, 1, 7, 1, 7, 3, 7, 904, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 920, 8, 7, 10, 7, 12, 7, 923, 9, 7, 3, 7, 925, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 941, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 949, 8, 7, 10, 7, 12, 7, 952, 9, 7, 1, 7, 1, 7, 3, 7, 956, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 962, 8, 7, 1, 7, 3, 7, 965, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 4, 7, 972, 8, 7, 11, 7, 12, 7, 973, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 986, 8, 7, 1, 8, 3, 8, 989, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 3, 9, 995, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 1000, 8, 9, 10, 9, 12, 9, 1003, 9, 9, 1, 10, 1, 10, 3, 10, 1007, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 1013, 8, 11, 1, 11, 1, 11, 3, 11, 1017, 8, 11, 1, 11, 1, 11, 3, 11, 1021, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1027, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 5, 14, 1036, 8, 14, 10, 14, 12, 14, 1039, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 1047, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 1055, 8, 17, 10, 17, 12, 17, 1058, 9, 17, 3, 17, 1060, 8, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1065, 8, 17, 3, 17, 1067, 8, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1074, 8, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1080, 8, 17, 3, 17, 1082, 8, 17, 1, 18, 1, 18, 3, 18, 1086, 8, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 1096, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 1102, 8, 20, 1, 20, 5, 20, 1105, 8, 20, 10, 20, 12, 20, 1108, 9, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 1117, 8, 21, 10, 21, 12, 21, 1120, 9, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1126, 8, 21, 1, 22, 1, 22, 3, 22, 1130, 8, 22, 1, 22, 1, 22, 3, 22, 1134, 8, 22, 1, 23, 1, 23, 3, 23, 1138, 8, 23, 1, 23, 1, 23, 1, 23, 5, 23, 1143, 8, 23, 10, 23, 12, 23, 1146, 9, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 1152, 8, 23, 10, 23, 12, 23, 1155, 9, 23, 3, 23, 1157, 8, 23, 1, 23, 1, 23, 3, 23, 1161, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 1166, 8, 23, 1, 23, 1, 23, 3, 23, 1170, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 1176, 8, 23, 10, 23, 12, 23, 1179, 9, 23, 3, 23, 1181, 8, 23, 1, 24, 3, 24, 1184, 8, 24, 1, 24, 1, 24, 1, 24, 5, 24, 1189, 8, 24, 10, 24, 12, 24, 1192, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 1200, 8, 25, 10, 25, 12, 25, 1203, 9, 25, 3, 25, 1205, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 1213, 8, 25, 10, 25, 12, 25, 1216, 9, 25, 3, 25, 1218, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 1227, 8, 25, 10, 25, 12, 25, 1230, 9, 25, 1, 25, 1, 25, 3, 25, 1234, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 1240, 8, 26, 10, 26, 12, 26, 1243, 9, 26, 3, 26, 1245, 8, 26, 1, 26, 1, 26, 3, 26, 1249, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 1258, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 5, 28, 1265, 8, 28, 10, 28, 12, 28, 1268, 9, 28, 3, 28, 1270, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 5, 28, 1277, 8, 28, 10, 28, 12, 28, 1280, 9, 28, 3, 28, 1282, 8, 28, 1, 28, 3, 28, 1285, 8, 28, 1, 29, 1, 29, 3, 29, 1289, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 3, 31, 1300, 8, 31, 1, 31, 3, 31, 1303, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 1310, 8, 31, 1, 31, 3, 31, 1313, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1332, 8, 32, 5, 32, 1334, 8, 32, 10, 32, 12, 32, 1337, 9, 32, 1, 33, 3, 33, 1340, 8, 33, 1, 33, 1, 33, 3, 33, 1344, 8, 33, 1, 33, 1, 33, 3, 33, 1348, 8, 33, 1, 33, 1, 33, 3, 33, 1352, 8, 33, 3, 33, 1354, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 1363, 8, 34, 10, 34, 12, 34, 1366, 9, 34, 1, 34, 1, 34, 3, 34, 1370, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 1379, 8, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1391, 8, 37, 10, 37, 12, 37, 1394, 9, 37, 3, 37, 1396, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1403, 8, 37, 10, 37, 12, 37, 1406, 9, 37, 3, 37, 1408, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1414, 8, 37, 10, 37, 12, 37, 1417, 9, 37, 3, 37, 1419, 8, 37, 1, 37, 3, 37, 1422, 8, 37, 1, 37, 1, 37, 1, 37, 3, 37, 1427, 8, 37, 1, 37, 3, 37, 1430, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1440, 8, 37, 10, 37, 12, 37, 1443, 9, 37, 3, 37, 1445, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1451, 8, 37, 10, 37, 12, 37, 1454, 9, 37, 1, 37, 1, 37, 3, 37, 1458, 8, 37, 1, 37, 1, 37, 3, 37, 1462, 8, 37, 3, 37, 1464, 8, 37, 3, 37, 1466, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 1481, 8, 39, 3, 39, 1483, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 1494, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1515, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 1523, 8, 42, 10, 42, 12, 42, 1526, 9, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 1536, 8, 44, 1, 44, 1, 44, 3, 44, 1540, 8, 44, 3, 44, 1542, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 1548, 8, 45, 10, 45, 12, 45, 1551, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1565, 8, 46, 10, 46, 12, 46, 1568, 9, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1573, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1584, 8, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 3, 48, 1591, 8, 48, 1, 48, 1, 48, 3, 48, 1595, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 1603, 8, 48, 10, 48, 12, 48, 1606, 9, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1618, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1626, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 1633, 8, 49, 10, 49, 12, 49, 1636, 9, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1641, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1649, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1655, 8, 49, 1, 49, 1, 49, 3, 49, 1659, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1664, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1669, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1675, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1689, 8, 50, 10, 50, 12, 50, 1692, 9, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 4, 51, 1719, 8, 51, 11, 51, 12, 51, 1720, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1730, 8, 51, 10, 51, 12, 51, 1733, 9, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1742, 8, 51, 1, 51, 3, 51, 1745, 8, 51, 1, 51, 3, 51, 1748, 8, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1753, 8, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1758, 8, 51, 10, 51, 12, 51, 1761, 9, 51, 3, 51, 1763, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1770, 8, 51, 10, 51, 12, 51, 1773, 9, 51, 3, 51, 1775, 8, 51, 1, 51, 1, 51, 3, 51, 1779, 8, 51, 1, 51, 3, 51, 1782, 8, 51, 1, 51, 3, 51, 1785, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1798, 8, 51, 10, 51, 12, 51, 1801, 9, 51, 3, 51, 1803, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 4, 51, 1820, 8, 51, 11, 51, 12, 51, 1821, 1, 51, 1, 51, 3, 51, 1826, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 4, 51, 1832, 8, 51, 11, 51, 12, 51, 1833, 1, 51, 1, 51, 3, 51, 1838, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1861, 8, 51, 10, 51, 12, 51, 1864, 9, 51, 3, 51, 1866, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1875, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1881, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1887, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1893, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1906, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1915, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1935, 8, 51, 10, 51, 12, 51, 1938, 9, 51, 3, 51, 1940, 8, 51, 1, 51, 3, 51, 1943, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1953, 8, 51, 10, 51, 12, 51, 1956, 9, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 1964, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 1970, 8, 54, 3, 54, 1972, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1980, 8, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 3, 59, 1990, 8, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1996, 8, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 2008, 8, 62, 10, 62, 12, 62, 2011, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2019, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2026, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2031, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2038, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2048, 8, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2053, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2060, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 2084, 8, 62, 10, 62, 12, 62, 2087, 9, 62, 1, 62, 1, 62, 3, 62, 2091, 8, 62, 3, 62, 2093, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2100, 8, 62, 5, 62, 2102, 8, 62, 10, 62, 12, 62, 2105, 9, 62, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 2111, 8, 63, 1, 64, 1, 64, 3, 64, 2115, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 2132, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 2145, 8, 67, 10, 67, 12, 67, 2148, 9, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 2154, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 2163, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 2171, 8, 67, 10, 67, 12, 67, 2174, 9, 67, 1, 67, 1, 67, 3, 67, 2178, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 2185, 8, 67, 10, 67, 12, 67, 2188, 9, 67, 1, 67, 1, 67, 3, 67, 2192, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2200, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 2206, 8, 69, 10, 69, 12, 69, 2209, 9, 69, 3, 69, 2211, 8, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 2217, 8, 69, 1, 69, 3, 69, 2220, 8, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 2227, 8, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 2233, 8, 69, 10, 69, 12, 69, 2236, 9, 69, 3, 69, 2238, 8, 69, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 2244, 8, 69, 10, 69, 12, 69, 2247, 9, 69, 3, 69, 2249, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 2275, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2286, 8, 71, 1, 72, 1, 72, 1, 72, 3, 72, 2291, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 2298, 8, 72, 10, 72, 12, 72, 2301, 9, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 5, 73, 2311, 8, 73, 10, 73, 12, 73, 2314, 9, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 2328, 8, 73, 1, 74, 1, 74, 3, 74, 2332, 8, 74, 1, 74, 1, 74, 3, 74, 2336, 8, 74, 1, 74, 1, 74, 3, 74, 2340, 8, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 2346, 8, 74, 1, 74, 1, 74, 3, 74, 2350, 8, 74, 1, 74, 1, 74, 3, 74, 2354, 8, 74, 1, 74, 1, 74, 3, 74, 2358, 8, 74, 3, 74, 2360, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 2370, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2377, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2386, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 2393, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 2400, 8, 80, 1, 81, 1, 81, 1, 81, 5, 81, 2405, 8, 81, 10, 81, 12, 81, 2408, 9, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 5, 83, 2415, 8, 83, 10, 83, 12, 83, 2418, 9, 83, 1, 84, 1, 84, 1, 84, 3, 84, 2423, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 2430, 8, 85, 1, 86, 1, 86, 1, 86, 5, 86, 2435, 8, 86, 10, 86, 12, 86, 2438, 9, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 2445, 8, 87, 1, 88, 3, 88, 2448, 8, 88, 1, 88, 1, 88, 3, 88, 2452, 8, 88, 1, 88, 1, 88, 3, 88, 2456, 8, 88, 1, 88, 3, 88, 2459, 8, 88, 1, 89, 1, 89, 1, 89, 0, 7, 40, 64, 96, 100, 102, 124, 144, 90, 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, 0, 28, 2, 0, 34, 34, 185, 185, 2, 0, 61, 61, 112, 112, 2, 0, 195, 195, 212, 212, 2, 0, 88, 88, 103, 103, 2, 0, 75, 75, 104, 104, 1, 0, 192, 193, 2, 0, 84, 84, 139, 139, 2, 0, 261, 261, 265, 265, 2, 0, 74, 74, 229, 229, 2, 0, 27, 27, 63, 63, 2, 0, 84, 84, 118, 118, 2, 0, 20, 20, 66, 66, 2, 0, 30, 30, 211, 211, 2, 0, 105, 105, 199, 199, 1, 0, 255, 256, 1, 0, 257, 259, 2, 0, 83, 83, 194, 194, 1, 0, 249, 254, 3, 0, 20, 20, 24, 24, 206, 206, 2, 0, 80, 80, 223, 223, 5, 0, 58, 58, 100, 100, 136, 137, 197, 197, 247, 247, 1, 0, 140, 143, 2, 0, 85, 85, 171, 171, 3, 0, 95, 95, 117, 117, 215, 215, 4, 0, 67, 67, 113, 113, 127, 127, 236, 236, 2, 0, 155, 155, 246, 246, 4, 0, 62, 62, 108, 108, 200, 200, 232, 232, 49, 0, 17, 20, 22, 22, 24, 25, 27, 30, 33, 34, 37, 42, 47, 47, 56, 59, 61, 61, 63, 63, 65, 65, 67, 68, 71, 71, 75, 75, 78, 78, 81, 85, 87, 87, 90, 95, 98, 98, 100, 102, 104, 105, 107, 107, 110, 110, 112, 113, 115, 115, 117, 119, 121, 121, 123, 124, 127, 137, 139, 145, 149, 152, 154, 156, 159, 159, 161, 172, 174, 177, 179, 186, 188, 190, 192, 199, 201, 211, 213, 215, 217, 222, 224, 225, 227, 228, 230, 230, 232, 234, 236, 236, 238, 239, 242, 242, 244, 248, 2865, 0, 183, 1, 0, 0, 0, 2, 193, 1, 0, 0, 0, 4, 195, 1, 0, 0, 0, 6, 199, 1, 0, 0, 0, 8, 203, 1, 0, 0, 0, 10, 207, 1, 0, 0, 0, 12, 211, 1, 0, 0, 0, 14, 985, 1, 0, 0, 0, 16, 988, 1, 0, 0, 0, 18, 992, 1, 0, 0, 0, 20, 1006, 1, 0, 0, 0, 22, 1008, 1, 0, 0, 0, 24, 1022, 1, 0, 0, 0, 26, 1028, 1, 0, 0, 0, 28, 1032, 1, 0, 0, 0, 30, 1040, 1, 0, 0, 0, 32, 1046, 1, 0, 0, 0, 34, 1048, 1, 0, 0, 0, 36, 1085, 1, 0, 0, 0, 38, 1087, 1, 0, 0, 0, 40, 1089, 1, 0, 0, 0, 42, 1125, 1, 0, 0, 0, 44, 1127, 1, 0, 0, 0, 46, 1135, 1, 0, 0, 0, 48, 1183, 1, 0, 0, 0, 50, 1233, 1, 0, 0, 0, 52, 1248, 1, 0, 0, 0, 54, 1250, 1, 0, 0, 0, 56, 1257, 1, 0, 0, 0, 58, 1286, 1, 0, 0, 0, 60, 1295, 1, 0, 0, 0, 62, 1312, 1, 0, 0, 0, 64, 1314, 1, 0, 0, 0, 66, 1353, 1, 0, 0, 0, 68, 1369, 1, 0, 0, 0, 70, 1371, 1, 0, 0, 0, 72, 1380, 1, 0, 0, 0, 74, 1382, 1, 0, 0, 0, 76, 1467, 1, 0, 0, 0, 78, 1482, 1, 0, 0, 0, 80, 1493, 1, 0, 0, 0, 82, 1514, 1, 0, 0, 0, 84, 1516, 1, 0, 0, 0, 86, 1529, 1, 0, 0, 0, 88, 1533, 1, 0, 0, 0, 90, 1543, 1, 0, 0, 0, 92, 1583, 1, 0, 0, 0, 94, 1585, 1, 0, 0, 0, 96, 1594, 1, 0, 0, 0, 98, 1668, 1, 0, 0, 0, 100, 1674, 1, 0, 0, 0, 102, 1942, 1, 0, 0, 0, 104, 1957, 1, 0, 0, 0, 106, 1963, 1, 0, 0, 0, 108, 1971, 1, 0, 0, 0, 110, 1979, 1, 0, 0, 0, 112, 1981, 1, 0, 0, 0, 114, 1983, 1, 0, 0, 0, 116, 1985, 1, 0, 0, 0, 118, 1987, 1, 0, 0, 0, 120, 1997, 1, 0, 0, 0, 122, 1999, 1, 0, 0, 0, 124, 2092, 1, 0, 0, 0, 126, 2110, 1, 0, 0, 0, 128, 2114, 1, 0, 0, 0, 130, 2116, 1, 0, 0, 0, 132, 2121, 1, 0, 0, 0, 134, 2191, 1, 0, 0, 0, 136, 2193, 1, 0, 0, 0, 138, 2210, 1, 0, 0, 0, 140, 2274, 1, 0, 0, 0, 142, 2285, 1, 0, 0, 0, 144, 2287, 1, 0, 0, 0, 146, 2327, 1, 0, 0, 0, 148, 2359, 1, 0, 0, 0, 150, 2361, 1, 0, 0, 0, 152, 2369, 1, 0, 0, 0, 154, 2376, 1, 0, 0, 0, 156, 2385, 1, 0, 0, 0, 158, 2392, 1, 0, 0, 0, 160, 2399, 1, 0, 0, 0, 162, 2401, 1, 0, 0, 0, 164, 2409, 1, 0, 0, 0, 166, 2411, 1, 0, 0, 0, 168, 2422, 1, 0, 0, 0, 170, 2429, 1, 0, 0, 0, 172, 2431, 1, 0, 0, 0, 174, 2444, 1, 0, 0, 0, 176, 2458, 1, 0, 0, 0, 178, 2460, 1, 0, 0, 0, 180, 182, 3, 2, 1, 0, 181, 180, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 181, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 183, 1, 0, 0, 0, 186, 187, 5, 0, 0, 1, 187, 1, 1, 0, 0, 0, 188, 194, 3, 4, 2, 0, 189, 194, 3, 6, 3, 0, 190, 194, 3, 8, 4, 0, 191, 194, 3, 10, 5, 0, 192, 194, 3, 12, 6, 0, 193, 188, 1, 0, 0, 0, 193, 189, 1, 0, 0, 0, 193, 190, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 193, 192, 1, 0, 0, 0, 194, 3, 1, 0, 0, 0, 195, 197, 3, 14, 7, 0, 196, 198, 5, 272, 0, 0, 197, 196, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 5, 1, 0, 0, 0, 199, 201, 3, 94, 47, 0, 200, 202, 5, 272, 0, 0, 201, 200, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 7, 1, 0, 0, 0, 203, 205, 3, 162, 81, 0, 204, 206, 5, 272, 0, 0, 205, 204, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 9, 1, 0, 0, 0, 207, 209, 3, 124, 62, 0, 208, 210, 5, 272, 0, 0, 209, 208, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 11, 1, 0, 0, 0, 211, 213, 3, 144, 72, 0, 212, 214, 5, 272, 0, 0, 213, 212, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 13, 1, 0, 0, 0, 215, 986, 3, 16, 8, 0, 216, 217, 5, 233, 0, 0, 217, 986, 3, 174, 87, 0, 218, 219, 5, 233, 0, 0, 219, 220, 3, 174, 87, 0, 220, 221, 5, 1, 0, 0, 221, 222, 3, 174, 87, 0, 222, 986, 1, 0, 0, 0, 223, 224, 5, 44, 0, 0, 224, 228, 5, 195, 0, 0, 225, 226, 5, 101, 0, 0, 226, 227, 5, 147, 0, 0, 227, 229, 5, 77, 0, 0, 228, 225, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 233, 3, 166, 83, 0, 231, 232, 5, 29, 0, 0, 232, 234, 3, 170, 85, 0, 233, 231, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 237, 1, 0, 0, 0, 235, 236, 5, 243, 0, 0, 236, 238, 3, 26, 13, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 986, 1, 0, 0, 0, 239, 240, 5, 69, 0, 0, 240, 243, 5, 195, 0, 0, 241, 242, 5, 101, 0, 0, 242, 244, 5, 77, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 247, 3, 166, 83, 0, 246, 248, 7, 0, 0, 0, 247, 246, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 986, 1, 0, 0, 0, 249, 250, 5, 21, 0, 0, 250, 251, 5, 195, 0, 0, 251, 252, 3, 166, 83, 0, 252, 253, 5, 180, 0, 0, 253, 254, 5, 220, 0, 0, 254, 255, 3, 174, 87, 0, 255, 986, 1, 0, 0, 0, 256, 257, 5, 21, 0, 0, 257, 258, 5, 195, 0, 0, 258, 259, 3, 166, 83, 0, 259, 260, 5, 203, 0, 0, 260, 261, 5, 29, 0, 0, 261, 262, 3, 170, 85, 0, 262, 986, 1, 0, 0, 0, 263, 264, 5, 44, 0, 0, 264, 268, 5, 212, 0, 0, 265, 266, 5, 101, 0, 0, 266, 267, 5, 147, 0, 0, 267, 269, 5, 77, 0, 0, 268, 265, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 272, 3, 166, 83, 0, 271, 273, 3, 90, 45, 0, 272, 271, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 276, 1, 0, 0, 0, 274, 275, 5, 40, 0, 0, 275, 277, 3, 108, 54, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 280, 1, 0, 0, 0, 278, 279, 5, 243, 0, 0, 279, 281, 3, 26, 13, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 288, 5, 26, 0, 0, 283, 289, 3, 16, 8, 0, 284, 285, 5, 2, 0, 0, 285, 286, 3, 16, 8, 0, 286, 287, 5, 3, 0, 0, 287, 289, 1, 0, 0, 0, 288, 283, 1, 0, 0, 0, 288, 284, 1, 0, 0, 0, 289, 295, 1, 0, 0, 0, 290, 292, 5, 243, 0, 0, 291, 293, 5, 144, 0, 0, 292, 291, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 296, 5, 56, 0, 0, 295, 290, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 986, 1, 0, 0, 0, 297, 298, 5, 44, 0, 0, 298, 302, 5, 212, 0, 0, 299, 300, 5, 101, 0, 0, 300, 301, 5, 147, 0, 0, 301, 303, 5, 77, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 305, 3, 166, 83, 0, 305, 306, 5, 2, 0, 0, 306, 311, 3, 20, 10, 0, 307, 308, 5, 4, 0, 0, 308, 310, 3, 20, 10, 0, 309, 307, 1, 0, 0, 0, 310, 313, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 314, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 317, 5, 3, 0, 0, 315, 316, 5, 40, 0, 0, 316, 318, 3, 108, 54, 0, 317, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 320, 5, 243, 0, 0, 320, 322, 3, 26, 13, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 986, 1, 0, 0, 0, 323, 324, 5, 69, 0, 0, 324, 327, 5, 212, 0, 0, 325, 326, 5, 101, 0, 0, 326, 328, 5, 77, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 986, 3, 166, 83, 0, 330, 331, 5, 108, 0, 0, 331, 332, 5, 111, 0, 0, 332, 334, 3, 166, 83, 0, 333, 335, 3, 90, 45, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, 3, 16, 8, 0, 337, 986, 1, 0, 0, 0, 338, 339, 5, 62, 0, 0, 339, 340, 5, 88, 0, 0, 340, 343, 3, 166, 83, 0, 341, 342, 5, 241, 0, 0, 342, 344, 3, 96, 48, 0, 343, 341, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 986, 1, 0, 0, 0, 345, 346, 5, 222, 0, 0, 346, 347, 5, 212, 0, 0, 347, 986, 3, 166, 83, 0, 348, 349, 5, 21, 0, 0, 349, 352, 5, 212, 0, 0, 350, 351, 5, 101, 0, 0, 351, 353, 5, 77, 0, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, 3, 166, 83, 0, 355, 356, 5, 180, 0, 0, 356, 357, 5, 220, 0, 0, 357, 358, 3, 166, 83, 0, 358, 986, 1, 0, 0, 0, 359, 360, 5, 40, 0, 0, 360, 361, 5, 153, 0, 0, 361, 362, 5, 212, 0, 0, 362, 363, 3, 166, 83, 0, 363, 366, 5, 114, 0, 0, 364, 367, 3, 108, 54, 0, 365, 367, 5, 148, 0, 0, 366, 364, 1, 0, 0, 0, 366, 365, 1, 0, 0, 0, 367, 986, 1, 0, 0, 0, 368, 369, 5, 40, 0, 0, 369, 370, 5, 153, 0, 0, 370, 371, 5, 38, 0, 0, 371, 372, 3, 166, 83, 0, 372, 375, 5, 114, 0, 0, 373, 376, 3, 108, 54, 0, 374, 376, 5, 148, 0, 0, 375, 373, 1, 0, 0, 0, 375, 374, 1, 0, 0, 0, 376, 986, 1, 0, 0, 0, 377, 378, 5, 21, 0, 0, 378, 381, 5, 212, 0, 0, 379, 380, 5, 101, 0, 0, 380, 382, 5, 77, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 384, 3, 166, 83, 0, 384, 385, 5, 180, 0, 0, 385, 388, 5, 38, 0, 0, 386, 387, 5, 101, 0, 0, 387, 389, 5, 77, 0, 0, 388, 386, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 391, 3, 174, 87, 0, 391, 392, 5, 220, 0, 0, 392, 393, 3, 174, 87, 0, 393, 986, 1, 0, 0, 0, 394, 395, 5, 21, 0, 0, 395, 398, 5, 212, 0, 0, 396, 397, 5, 101, 0, 0, 397, 399, 5, 77, 0, 0, 398, 396, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 401, 3, 166, 83, 0, 401, 402, 5, 69, 0, 0, 402, 405, 5, 38, 0, 0, 403, 404, 5, 101, 0, 0, 404, 406, 5, 77, 0, 0, 405, 403, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 3, 166, 83, 0, 408, 986, 1, 0, 0, 0, 409, 410, 5, 21, 0, 0, 410, 413, 5, 212, 0, 0, 411, 412, 5, 101, 0, 0, 412, 414, 5, 77, 0, 0, 413, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 416, 3, 166, 83, 0, 416, 417, 5, 17, 0, 0, 417, 421, 5, 38, 0, 0, 418, 419, 5, 101, 0, 0, 419, 420, 5, 147, 0, 0, 420, 422, 5, 77, 0, 0, 421, 418, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 986, 1, 0, 0, 0, 425, 426, 5, 21, 0, 0, 426, 427, 5, 212, 0, 0, 427, 428, 3, 166, 83, 0, 428, 429, 5, 203, 0, 0, 429, 430, 5, 29, 0, 0, 430, 431, 3, 170, 85, 0, 431, 986, 1, 0, 0, 0, 432, 433, 5, 21, 0, 0, 433, 434, 5, 212, 0, 0, 434, 435, 3, 166, 83, 0, 435, 436, 5, 203, 0, 0, 436, 437, 5, 175, 0, 0, 437, 438, 3, 28, 14, 0, 438, 986, 1, 0, 0, 0, 439, 440, 5, 21, 0, 0, 440, 441, 5, 212, 0, 0, 441, 442, 3, 166, 83, 0, 442, 443, 5, 76, 0, 0, 443, 456, 3, 174, 87, 0, 444, 453, 5, 2, 0, 0, 445, 450, 3, 158, 79, 0, 446, 447, 5, 4, 0, 0, 447, 449, 3, 158, 79, 0, 448, 446, 1, 0, 0, 0, 449, 452, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 454, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 453, 445, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 457, 5, 3, 0, 0, 456, 444, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 460, 1, 0, 0, 0, 458, 459, 5, 241, 0, 0, 459, 461, 3, 96, 48, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 986, 1, 0, 0, 0, 462, 463, 5, 22, 0, 0, 463, 466, 3, 166, 83, 0, 464, 465, 5, 243, 0, 0, 465, 467, 3, 26, 13, 0, 466, 464, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 986, 1, 0, 0, 0, 468, 471, 5, 44, 0, 0, 469, 470, 5, 157, 0, 0, 470, 472, 5, 182, 0, 0, 471, 469, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 474, 5, 133, 0, 0, 474, 478, 5, 239, 0, 0, 475, 476, 5, 101, 0, 0, 476, 477, 5, 147, 0, 0, 477, 479, 5, 77, 0, 0, 478, 475, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 483, 3, 166, 83, 0, 481, 482, 5, 40, 0, 0, 482, 484, 3, 108, 54, 0, 483, 481, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 486, 5, 243, 0, 0, 486, 488, 3, 26, 13, 0, 487, 485, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 490, 5, 26, 0, 0, 490, 491, 3, 16, 8, 0, 491, 986, 1, 0, 0, 0, 492, 495, 5, 44, 0, 0, 493, 494, 5, 157, 0, 0, 494, 496, 5, 182, 0, 0, 495, 493, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 498, 5, 239, 0, 0, 498, 501, 3, 166, 83, 0, 499, 500, 5, 40, 0, 0, 500, 502, 3, 108, 54, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 505, 1, 0, 0, 0, 503, 504, 5, 198, 0, 0, 504, 506, 7, 1, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 5, 26, 0, 0, 508, 509, 3, 16, 8, 0, 509, 986, 1, 0, 0, 0, 510, 511, 5, 179, 0, 0, 511, 512, 5, 133, 0, 0, 512, 513, 5, 239, 0, 0, 513, 986, 3, 166, 83, 0, 514, 515, 5, 69, 0, 0, 515, 516, 5, 133, 0, 0, 516, 519, 5, 239, 0, 0, 517, 518, 5, 101, 0, 0, 518, 520, 5, 77, 0, 0, 519, 517, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 986, 3, 166, 83, 0, 522, 523, 5, 21, 0, 0, 523, 524, 5, 133, 0, 0, 524, 527, 5, 239, 0, 0, 525, 526, 5, 101, 0, 0, 526, 528, 5, 77, 0, 0, 527, 525, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 530, 3, 166, 83, 0, 530, 531, 5, 180, 0, 0, 531, 532, 5, 220, 0, 0, 532, 533, 3, 166, 83, 0, 533, 986, 1, 0, 0, 0, 534, 535, 5, 21, 0, 0, 535, 536, 5, 133, 0, 0, 536, 537, 5, 239, 0, 0, 537, 538, 3, 166, 83, 0, 538, 539, 5, 203, 0, 0, 539, 540, 5, 175, 0, 0, 540, 541, 3, 28, 14, 0, 541, 986, 1, 0, 0, 0, 542, 543, 5, 69, 0, 0, 543, 546, 5, 239, 0, 0, 544, 545, 5, 101, 0, 0, 545, 547, 5, 77, 0, 0, 546, 544, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 986, 3, 166, 83, 0, 549, 550, 5, 21, 0, 0, 550, 551, 5, 239, 0, 0, 551, 552, 3, 166, 83, 0, 552, 553, 5, 180, 0, 0, 553, 554, 5, 220, 0, 0, 554, 555, 3, 166, 83, 0, 555, 986, 1, 0, 0, 0, 556, 557, 5, 21, 0, 0, 557, 558, 5, 239, 0, 0, 558, 559, 3, 166, 83, 0, 559, 560, 5, 203, 0, 0, 560, 561, 5, 29, 0, 0, 561, 562, 3, 170, 85, 0, 562, 986, 1, 0, 0, 0, 563, 564, 5, 33, 0, 0, 564, 565, 3, 166, 83, 0, 565, 574, 5, 2, 0, 0, 566, 571, 3, 158, 79, 0, 567, 568, 5, 4, 0, 0, 568, 570, 3, 158, 79, 0, 569, 567, 1, 0, 0, 0, 570, 573, 1, 0, 0, 0, 571, 569, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 571, 1, 0, 0, 0, 574, 566, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 577, 5, 3, 0, 0, 577, 986, 1, 0, 0, 0, 578, 579, 5, 44, 0, 0, 579, 580, 5, 188, 0, 0, 580, 584, 3, 174, 87, 0, 581, 582, 5, 243, 0, 0, 582, 583, 5, 18, 0, 0, 583, 585, 3, 168, 84, 0, 584, 581, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 587, 5, 103, 0, 0, 587, 589, 3, 174, 87, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 986, 1, 0, 0, 0, 590, 591, 5, 69, 0, 0, 591, 592, 5, 188, 0, 0, 592, 986, 3, 174, 87, 0, 593, 594, 5, 91, 0, 0, 594, 595, 3, 172, 86, 0, 595, 596, 5, 220, 0, 0, 596, 601, 3, 170, 85, 0, 597, 598, 5, 4, 0, 0, 598, 600, 3, 170, 85, 0, 599, 597, 1, 0, 0, 0, 600, 603, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 607, 1, 0, 0, 0, 603, 601, 1, 0, 0, 0, 604, 605, 5, 243, 0, 0, 605, 606, 5, 18, 0, 0, 606, 608, 5, 156, 0, 0, 607, 604, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 612, 1, 0, 0, 0, 609, 610, 5, 92, 0, 0, 610, 611, 5, 32, 0, 0, 611, 613, 3, 168, 84, 0, 612, 609, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 616, 1, 0, 0, 0, 614, 615, 5, 103, 0, 0, 615, 617, 3, 174, 87, 0, 616, 614, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 986, 1, 0, 0, 0, 618, 622, 5, 186, 0, 0, 619, 620, 5, 18, 0, 0, 620, 621, 5, 156, 0, 0, 621, 623, 5, 86, 0, 0, 622, 619, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 625, 3, 172, 86, 0, 625, 626, 5, 88, 0, 0, 626, 631, 3, 170, 85, 0, 627, 628, 5, 4, 0, 0, 628, 630, 3, 170, 85, 0, 629, 627, 1, 0, 0, 0, 630, 633, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 637, 1, 0, 0, 0, 633, 631, 1, 0, 0, 0, 634, 635, 5, 92, 0, 0, 635, 636, 5, 32, 0, 0, 636, 638, 3, 168, 84, 0, 637, 634, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 641, 1, 0, 0, 0, 639, 640, 5, 103, 0, 0, 640, 642, 3, 174, 87, 0, 641, 639, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 986, 1, 0, 0, 0, 643, 644, 5, 203, 0, 0, 644, 648, 5, 188, 0, 0, 645, 649, 5, 20, 0, 0, 646, 649, 5, 145, 0, 0, 647, 649, 3, 174, 87, 0, 648, 645, 1, 0, 0, 0, 648, 646, 1, 0, 0, 0, 648, 647, 1, 0, 0, 0, 649, 652, 1, 0, 0, 0, 650, 651, 5, 103, 0, 0, 651, 653, 3, 174, 87, 0, 652, 650, 1, 0, 0, 0, 652, 653, 1, 0, 0, 0, 653, 986, 1, 0, 0, 0, 654, 665, 5, 91, 0, 0, 655, 660, 3, 164, 82, 0, 656, 657, 5, 4, 0, 0, 657, 659, 3, 164, 82, 0, 658, 656, 1, 0, 0, 0, 659, 662, 1, 0, 0, 0, 660, 658, 1, 0, 0, 0, 660, 661, 1, 0, 0, 0, 661, 666, 1, 0, 0, 0, 662, 660, 1, 0, 0, 0, 663, 664, 5, 20, 0, 0, 664, 666, 5, 174, 0, 0, 665, 655, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 669, 5, 153, 0, 0, 668, 670, 7, 2, 0, 0, 669, 668, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 672, 3, 166, 83, 0, 672, 673, 5, 220, 0, 0, 673, 677, 3, 170, 85, 0, 674, 675, 5, 243, 0, 0, 675, 676, 5, 91, 0, 0, 676, 678, 5, 156, 0, 0, 677, 674, 1, 0, 0, 0, 677, 678, 1, 0, 0, 0, 678, 986, 1, 0, 0, 0, 679, 690, 5, 94, 0, 0, 680, 685, 3, 164, 82, 0, 681, 682, 5, 4, 0, 0, 682, 684, 3, 164, 82, 0, 683, 681, 1, 0, 0, 0, 684, 687, 1, 0, 0, 0, 685, 683, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 691, 1, 0, 0, 0, 687, 685, 1, 0, 0, 0, 688, 689, 5, 20, 0, 0, 689, 691, 5, 174, 0, 0, 690, 680, 1, 0, 0, 0, 690, 688, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 694, 5, 153, 0, 0, 693, 695, 7, 2, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 3, 166, 83, 0, 697, 698, 5, 220, 0, 0, 698, 699, 3, 170, 85, 0, 699, 986, 1, 0, 0, 0, 700, 704, 5, 186, 0, 0, 701, 702, 5, 91, 0, 0, 702, 703, 5, 156, 0, 0, 703, 705, 5, 86, 0, 0, 704, 701, 1, 0, 0, 0, 704, 705, 1, 0, 0, 0, 705, 716, 1, 0, 0, 0, 706, 711, 3, 164, 82, 0, 707, 708, 5, 4, 0, 0, 708, 710, 3, 164, 82, 0, 709, 707, 1, 0, 0, 0, 710, 713, 1, 0, 0, 0, 711, 709, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 717, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 714, 715, 5, 20, 0, 0, 715, 717, 5, 174, 0, 0, 716, 706, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 720, 5, 153, 0, 0, 719, 721, 7, 2, 0, 0, 720, 719, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 723, 3, 166, 83, 0, 723, 724, 5, 88, 0, 0, 724, 725, 3, 170, 85, 0, 725, 986, 1, 0, 0, 0, 726, 727, 5, 205, 0, 0, 727, 733, 5, 93, 0, 0, 728, 730, 5, 153, 0, 0, 729, 731, 5, 212, 0, 0, 730, 729, 1, 0, 0, 0, 730, 731, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 734, 3, 166, 83, 0, 733, 728, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 986, 1, 0, 0, 0, 735, 737, 5, 78, 0, 0, 736, 738, 5, 22, 0, 0, 737, 736, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 740, 1, 0, 0, 0, 739, 741, 5, 238, 0, 0, 740, 739, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 753, 1, 0, 0, 0, 742, 743, 5, 2, 0, 0, 743, 748, 3, 152, 76, 0, 744, 745, 5, 4, 0, 0, 745, 747, 3, 152, 76, 0, 746, 744, 1, 0, 0, 0, 747, 750, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 751, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 751, 752, 5, 3, 0, 0, 752, 754, 1, 0, 0, 0, 753, 742, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 986, 3, 14, 7, 0, 756, 757, 5, 205, 0, 0, 757, 758, 5, 44, 0, 0, 758, 759, 5, 212, 0, 0, 759, 986, 3, 166, 83, 0, 760, 761, 5, 205, 0, 0, 761, 762, 5, 44, 0, 0, 762, 763, 5, 195, 0, 0, 763, 986, 3, 166, 83, 0, 764, 765, 5, 205, 0, 0, 765, 766, 5, 44, 0, 0, 766, 767, 5, 239, 0, 0, 767, 986, 3, 166, 83, 0, 768, 769, 5, 205, 0, 0, 769, 770, 5, 44, 0, 0, 770, 771, 5, 133, 0, 0, 771, 772, 5, 239, 0, 0, 772, 986, 3, 166, 83, 0, 773, 774, 5, 205, 0, 0, 774, 777, 5, 213, 0, 0, 775, 776, 7, 3, 0, 0, 776, 778, 3, 166, 83, 0, 777, 775, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 785, 1, 0, 0, 0, 779, 780, 5, 122, 0, 0, 780, 783, 3, 108, 54, 0, 781, 782, 5, 73, 0, 0, 782, 784, 3, 108, 54, 0, 783, 781, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 786, 1, 0, 0, 0, 785, 779, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 986, 1, 0, 0, 0, 787, 788, 5, 205, 0, 0, 788, 791, 5, 196, 0, 0, 789, 790, 7, 3, 0, 0, 790, 792, 3, 174, 87, 0, 791, 789, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 799, 1, 0, 0, 0, 793, 794, 5, 122, 0, 0, 794, 797, 3, 108, 54, 0, 795, 796, 5, 73, 0, 0, 796, 798, 3, 108, 54, 0, 797, 795, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 800, 1, 0, 0, 0, 799, 793, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 986, 1, 0, 0, 0, 801, 802, 5, 205, 0, 0, 802, 809, 5, 37, 0, 0, 803, 804, 5, 122, 0, 0, 804, 807, 3, 108, 54, 0, 805, 806, 5, 73, 0, 0, 806, 808, 3, 108, 54, 0, 807, 805, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 810, 1, 0, 0, 0, 809, 803, 1, 0, 0, 0, 809, 810, 1, 0, 0, 0, 810, 986, 1, 0, 0, 0, 811, 812, 5, 205, 0, 0, 812, 813, 5, 39, 0, 0, 813, 815, 7, 3, 0, 0, 814, 816, 3, 166, 83, 0, 815, 814, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 823, 1, 0, 0, 0, 817, 818, 5, 122, 0, 0, 818, 821, 3, 108, 54, 0, 819, 820, 5, 73, 0, 0, 820, 822, 3, 108, 54, 0, 821, 819, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 824, 1, 0, 0, 0, 823, 817, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 824, 986, 1, 0, 0, 0, 825, 826, 5, 205, 0, 0, 826, 827, 5, 208, 0, 0, 827, 828, 5, 86, 0, 0, 828, 986, 3, 166, 83, 0, 829, 830, 5, 205, 0, 0, 830, 831, 5, 208, 0, 0, 831, 832, 5, 86, 0, 0, 832, 833, 5, 2, 0, 0, 833, 834, 3, 16, 8, 0, 834, 835, 5, 3, 0, 0, 835, 986, 1, 0, 0, 0, 836, 838, 5, 205, 0, 0, 837, 839, 5, 47, 0, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 843, 5, 189, 0, 0, 841, 842, 7, 3, 0, 0, 842, 844, 3, 174, 87, 0, 843, 841, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 986, 1, 0, 0, 0, 845, 846, 5, 205, 0, 0, 846, 847, 5, 188, 0, 0, 847, 850, 5, 93, 0, 0, 848, 849, 7, 3, 0, 0, 849, 851, 3, 174, 87, 0, 850, 848, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 986, 1, 0, 0, 0, 852, 853, 5, 64, 0, 0, 853, 986, 3, 166, 83, 0, 854, 855, 5, 63, 0, 0, 855, 986, 3, 166, 83, 0, 856, 857, 5, 205, 0, 0, 857, 864, 5, 90, 0, 0, 858, 859, 5, 122, 0, 0, 859, 862, 3, 108, 54, 0, 860, 861, 5, 73, 0, 0, 861, 863, 3, 108, 54, 0, 862, 860, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 865, 1, 0, 0, 0, 864, 858, 1, 0, 0, 0, 864, 865, 1, 0, 0, 0, 865, 986, 1, 0, 0, 0, 866, 867, 5, 205, 0, 0, 867, 874, 5, 202, 0, 0, 868, 869, 5, 122, 0, 0, 869, 872, 3, 108, 54, 0, 870, 871, 5, 73, 0, 0, 871, 873, 3, 108, 54, 0, 872, 870, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 875, 1, 0, 0, 0, 874, 868, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 986, 1, 0, 0, 0, 876, 877, 5, 203, 0, 0, 877, 878, 5, 202, 0, 0, 878, 879, 3, 166, 83, 0, 879, 880, 5, 249, 0, 0, 880, 881, 3, 94, 47, 0, 881, 986, 1, 0, 0, 0, 882, 883, 5, 183, 0, 0, 883, 884, 5, 202, 0, 0, 884, 986, 3, 166, 83, 0, 885, 886, 5, 207, 0, 0, 886, 895, 5, 221, 0, 0, 887, 892, 3, 154, 77, 0, 888, 889, 5, 4, 0, 0, 889, 891, 3, 154, 77, 0, 890, 888, 1, 0, 0, 0, 891, 894, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 896, 1, 0, 0, 0, 894, 892, 1, 0, 0, 0, 895, 887, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 986, 1, 0, 0, 0, 897, 899, 5, 41, 0, 0, 898, 900, 5, 245, 0, 0, 899, 898, 1, 0, 0, 0, 899, 900, 1, 0, 0, 0, 900, 986, 1, 0, 0, 0, 901, 903, 5, 190, 0, 0, 902, 904, 5, 245, 0, 0, 903, 902, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 986, 1, 0, 0, 0, 905, 906, 5, 173, 0, 0, 906, 907, 3, 174, 87, 0, 907, 908, 5, 88, 0, 0, 908, 909, 3, 14, 7, 0, 909, 986, 1, 0, 0, 0, 910, 911, 5, 60, 0, 0, 911, 912, 5, 173, 0, 0, 912, 986, 3, 174, 87, 0, 913, 914, 5, 76, 0, 0, 914, 924, 3, 174, 87, 0, 915, 916, 5, 235, 0, 0, 916, 921, 3, 94, 47, 0, 917, 918, 5, 4, 0, 0, 918, 920, 3, 94, 47, 0, 919, 917, 1, 0, 0, 0, 920, 923, 1, 0, 0, 0, 921, 919, 1, 0, 0, 0, 921, 922, 1, 0, 0, 0, 922, 925, 1, 0, 0, 0, 923, 921, 1, 0, 0, 0, 924, 915, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 986, 1, 0, 0, 0, 926, 927, 5, 64, 0, 0, 927, 928, 5, 107, 0, 0, 928, 986, 3, 174, 87, 0, 929, 930, 5, 64, 0, 0, 930, 931, 5, 161, 0, 0, 931, 986, 3, 174, 87, 0, 932, 933, 5, 203, 0, 0, 933, 934, 5, 166, 0, 0, 934, 986, 3, 162, 81, 0, 935, 936, 5, 203, 0, 0, 936, 937, 5, 218, 0, 0, 937, 940, 5, 248, 0, 0, 938, 941, 5, 124, 0, 0, 939, 941, 3, 94, 47, 0, 940, 938, 1, 0, 0, 0, 940, 939, 1, 0, 0, 0, 941, 986, 1, 0, 0, 0, 942, 943, 5, 232, 0, 0, 943, 944, 3, 166, 83, 0, 944, 945, 5, 203, 0, 0, 945, 950, 3, 150, 75, 0, 946, 947, 5, 4, 0, 0, 947, 949, 3, 150, 75, 0, 948, 946, 1, 0, 0, 0, 949, 952, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 955, 1, 0, 0, 0, 952, 950, 1, 0, 0, 0, 953, 954, 5, 241, 0, 0, 954, 956, 3, 96, 48, 0, 955, 953, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 986, 1, 0, 0, 0, 957, 958, 5, 135, 0, 0, 958, 959, 5, 111, 0, 0, 959, 964, 3, 166, 83, 0, 960, 962, 5, 26, 0, 0, 961, 960, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 965, 3, 174, 87, 0, 964, 961, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 967, 5, 235, 0, 0, 967, 968, 3, 64, 32, 0, 968, 969, 5, 153, 0, 0, 969, 971, 3, 94, 47, 0, 970, 972, 3, 134, 67, 0, 971, 970, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 986, 1, 0, 0, 0, 975, 976, 5, 205, 0, 0, 976, 977, 5, 40, 0, 0, 977, 978, 5, 153, 0, 0, 978, 979, 5, 212, 0, 0, 979, 986, 3, 166, 83, 0, 980, 981, 5, 205, 0, 0, 981, 982, 5, 40, 0, 0, 982, 983, 5, 153, 0, 0, 983, 984, 5, 38, 0, 0, 984, 986, 3, 166, 83, 0, 985, 215, 1, 0, 0, 0, 985, 216, 1, 0, 0, 0, 985, 218, 1, 0, 0, 0, 985, 223, 1, 0, 0, 0, 985, 239, 1, 0, 0, 0, 985, 249, 1, 0, 0, 0, 985, 256, 1, 0, 0, 0, 985, 263, 1, 0, 0, 0, 985, 297, 1, 0, 0, 0, 985, 323, 1, 0, 0, 0, 985, 330, 1, 0, 0, 0, 985, 338, 1, 0, 0, 0, 985, 345, 1, 0, 0, 0, 985, 348, 1, 0, 0, 0, 985, 359, 1, 0, 0, 0, 985, 368, 1, 0, 0, 0, 985, 377, 1, 0, 0, 0, 985, 394, 1, 0, 0, 0, 985, 409, 1, 0, 0, 0, 985, 425, 1, 0, 0, 0, 985, 432, 1, 0, 0, 0, 985, 439, 1, 0, 0, 0, 985, 462, 1, 0, 0, 0, 985, 468, 1, 0, 0, 0, 985, 492, 1, 0, 0, 0, 985, 510, 1, 0, 0, 0, 985, 514, 1, 0, 0, 0, 985, 522, 1, 0, 0, 0, 985, 534, 1, 0, 0, 0, 985, 542, 1, 0, 0, 0, 985, 549, 1, 0, 0, 0, 985, 556, 1, 0, 0, 0, 985, 563, 1, 0, 0, 0, 985, 578, 1, 0, 0, 0, 985, 590, 1, 0, 0, 0, 985, 593, 1, 0, 0, 0, 985, 618, 1, 0, 0, 0, 985, 643, 1, 0, 0, 0, 985, 654, 1, 0, 0, 0, 985, 679, 1, 0, 0, 0, 985, 700, 1, 0, 0, 0, 985, 726, 1, 0, 0, 0, 985, 735, 1, 0, 0, 0, 985, 756, 1, 0, 0, 0, 985, 760, 1, 0, 0, 0, 985, 764, 1, 0, 0, 0, 985, 768, 1, 0, 0, 0, 985, 773, 1, 0, 0, 0, 985, 787, 1, 0, 0, 0, 985, 801, 1, 0, 0, 0, 985, 811, 1, 0, 0, 0, 985, 825, 1, 0, 0, 0, 985, 829, 1, 0, 0, 0, 985, 836, 1, 0, 0, 0, 985, 845, 1, 0, 0, 0, 985, 852, 1, 0, 0, 0, 985, 854, 1, 0, 0, 0, 985, 856, 1, 0, 0, 0, 985, 866, 1, 0, 0, 0, 985, 876, 1, 0, 0, 0, 985, 882, 1, 0, 0, 0, 985, 885, 1, 0, 0, 0, 985, 897, 1, 0, 0, 0, 985, 901, 1, 0, 0, 0, 985, 905, 1, 0, 0, 0, 985, 910, 1, 0, 0, 0, 985, 913, 1, 0, 0, 0, 985, 926, 1, 0, 0, 0, 985, 929, 1, 0, 0, 0, 985, 932, 1, 0, 0, 0, 985, 935, 1, 0, 0, 0, 985, 942, 1, 0, 0, 0, 985, 957, 1, 0, 0, 0, 985, 975, 1, 0, 0, 0, 985, 980, 1, 0, 0, 0, 986, 15, 1, 0, 0, 0, 987, 989, 3, 18, 9, 0, 988, 987, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 990, 1, 0, 0, 0, 990, 991, 3, 34, 17, 0, 991, 17, 1, 0, 0, 0, 992, 994, 5, 243, 0, 0, 993, 995, 5, 178, 0, 0, 994, 993, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 1001, 3, 58, 29, 0, 997, 998, 5, 4, 0, 0, 998, 1000, 3, 58, 29, 0, 999, 997, 1, 0, 0, 0, 1000, 1003, 1, 0, 0, 0, 1001, 999, 1, 0, 0, 0, 1001, 1002, 1, 0, 0, 0, 1002, 19, 1, 0, 0, 0, 1003, 1001, 1, 0, 0, 0, 1004, 1007, 3, 22, 11, 0, 1005, 1007, 3, 24, 12, 0, 1006, 1004, 1, 0, 0, 0, 1006, 1005, 1, 0, 0, 0, 1007, 21, 1, 0, 0, 0, 1008, 1009, 3, 174, 87, 0, 1009, 1012, 3, 124, 62, 0, 1010, 1011, 5, 147, 0, 0, 1011, 1013, 5, 148, 0, 0, 1012, 1010, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1016, 1, 0, 0, 0, 1014, 1015, 5, 40, 0, 0, 1015, 1017, 3, 108, 54, 0, 1016, 1014, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1020, 1, 0, 0, 0, 1018, 1019, 5, 243, 0, 0, 1019, 1021, 3, 26, 13, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 23, 1, 0, 0, 0, 1022, 1023, 5, 122, 0, 0, 1023, 1026, 3, 166, 83, 0, 1024, 1025, 7, 4, 0, 0, 1025, 1027, 5, 175, 0, 0, 1026, 1024, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 25, 1, 0, 0, 0, 1028, 1029, 5, 2, 0, 0, 1029, 1030, 3, 28, 14, 0, 1030, 1031, 5, 3, 0, 0, 1031, 27, 1, 0, 0, 0, 1032, 1037, 3, 30, 15, 0, 1033, 1034, 5, 4, 0, 0, 1034, 1036, 3, 30, 15, 0, 1035, 1033, 1, 0, 0, 0, 1036, 1039, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 29, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1040, 1041, 3, 174, 87, 0, 1041, 1042, 5, 249, 0, 0, 1042, 1043, 3, 32, 16, 0, 1043, 31, 1, 0, 0, 0, 1044, 1047, 5, 59, 0, 0, 1045, 1047, 3, 94, 47, 0, 1046, 1044, 1, 0, 0, 0, 1046, 1045, 1, 0, 0, 0, 1047, 33, 1, 0, 0, 0, 1048, 1059, 3, 40, 20, 0, 1049, 1050, 5, 158, 0, 0, 1050, 1051, 5, 32, 0, 0, 1051, 1056, 3, 44, 22, 0, 1052, 1053, 5, 4, 0, 0, 1053, 1055, 3, 44, 22, 0, 1054, 1052, 1, 0, 0, 0, 1055, 1058, 1, 0, 0, 0, 1056, 1054, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1056, 1, 0, 0, 0, 1059, 1049, 1, 0, 0, 0, 1059, 1060, 1, 0, 0, 0, 1060, 1066, 1, 0, 0, 0, 1061, 1062, 5, 151, 0, 0, 1062, 1064, 3, 38, 19, 0, 1063, 1065, 7, 5, 0, 0, 1064, 1063, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1067, 1, 0, 0, 0, 1066, 1061, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1081, 1, 0, 0, 0, 1068, 1069, 5, 123, 0, 0, 1069, 1082, 3, 36, 18, 0, 1070, 1071, 5, 81, 0, 0, 1071, 1073, 7, 6, 0, 0, 1072, 1074, 3, 38, 19, 0, 1073, 1072, 1, 0, 0, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1079, 7, 5, 0, 0, 1076, 1080, 5, 155, 0, 0, 1077, 1078, 5, 243, 0, 0, 1078, 1080, 5, 217, 0, 0, 1079, 1076, 1, 0, 0, 0, 1079, 1077, 1, 0, 0, 0, 1080, 1082, 1, 0, 0, 0, 1081, 1068, 1, 0, 0, 0, 1081, 1070, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 35, 1, 0, 0, 0, 1083, 1086, 5, 20, 0, 0, 1084, 1086, 3, 38, 19, 0, 1085, 1083, 1, 0, 0, 0, 1085, 1084, 1, 0, 0, 0, 1086, 37, 1, 0, 0, 0, 1087, 1088, 7, 7, 0, 0, 1088, 39, 1, 0, 0, 0, 1089, 1090, 6, 20, -1, 0, 1090, 1091, 3, 42, 21, 0, 1091, 1106, 1, 0, 0, 0, 1092, 1093, 10, 2, 0, 0, 1093, 1095, 5, 109, 0, 0, 1094, 1096, 3, 60, 30, 0, 1095, 1094, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1105, 3, 40, 20, 3, 1098, 1099, 10, 1, 0, 0, 1099, 1101, 7, 8, 0, 0, 1100, 1102, 3, 60, 30, 0, 1101, 1100, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1105, 3, 40, 20, 2, 1104, 1092, 1, 0, 0, 0, 1104, 1098, 1, 0, 0, 0, 1105, 1108, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 41, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1109, 1126, 3, 46, 23, 0, 1110, 1111, 5, 212, 0, 0, 1111, 1126, 3, 166, 83, 0, 1112, 1113, 5, 237, 0, 0, 1113, 1118, 3, 94, 47, 0, 1114, 1115, 5, 4, 0, 0, 1115, 1117, 3, 94, 47, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1120, 1, 0, 0, 0, 1118, 1116, 1, 0, 0, 0, 1118, 1119, 1, 0, 0, 0, 1119, 1126, 1, 0, 0, 0, 1120, 1118, 1, 0, 0, 0, 1121, 1122, 5, 2, 0, 0, 1122, 1123, 3, 34, 17, 0, 1123, 1124, 5, 3, 0, 0, 1124, 1126, 1, 0, 0, 0, 1125, 1109, 1, 0, 0, 0, 1125, 1110, 1, 0, 0, 0, 1125, 1112, 1, 0, 0, 0, 1125, 1121, 1, 0, 0, 0, 1126, 43, 1, 0, 0, 0, 1127, 1129, 3, 94, 47, 0, 1128, 1130, 7, 9, 0, 0, 1129, 1128, 1, 0, 0, 0, 1129, 1130, 1, 0, 0, 0, 1130, 1133, 1, 0, 0, 0, 1131, 1132, 5, 150, 0, 0, 1132, 1134, 7, 10, 0, 0, 1133, 1131, 1, 0, 0, 0, 1133, 1134, 1, 0, 0, 0, 1134, 45, 1, 0, 0, 0, 1135, 1137, 5, 200, 0, 0, 1136, 1138, 3, 60, 30, 0, 1137, 1136, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1139, 1, 0, 0, 0, 1139, 1144, 3, 62, 31, 0, 1140, 1141, 5, 4, 0, 0, 1141, 1143, 3, 62, 31, 0, 1142, 1140, 1, 0, 0, 0, 1143, 1146, 1, 0, 0, 0, 1144, 1142, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1156, 1, 0, 0, 0, 1146, 1144, 1, 0, 0, 0, 1147, 1148, 5, 88, 0, 0, 1148, 1153, 3, 64, 32, 0, 1149, 1150, 5, 4, 0, 0, 1150, 1152, 3, 64, 32, 0, 1151, 1149, 1, 0, 0, 0, 1152, 1155, 1, 0, 0, 0, 1153, 1151, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1157, 1, 0, 0, 0, 1155, 1153, 1, 0, 0, 0, 1156, 1147, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1160, 1, 0, 0, 0, 1158, 1159, 5, 241, 0, 0, 1159, 1161, 3, 96, 48, 0, 1160, 1158, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1165, 1, 0, 0, 0, 1162, 1163, 5, 96, 0, 0, 1163, 1164, 5, 32, 0, 0, 1164, 1166, 3, 48, 24, 0, 1165, 1162, 1, 0, 0, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1169, 1, 0, 0, 0, 1167, 1168, 5, 99, 0, 0, 1168, 1170, 3, 96, 48, 0, 1169, 1167, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1180, 1, 0, 0, 0, 1171, 1172, 5, 242, 0, 0, 1172, 1177, 3, 54, 27, 0, 1173, 1174, 5, 4, 0, 0, 1174, 1176, 3, 54, 27, 0, 1175, 1173, 1, 0, 0, 0, 1176, 1179, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, 1177, 1178, 1, 0, 0, 0, 1178, 1181, 1, 0, 0, 0, 1179, 1177, 1, 0, 0, 0, 1180, 1171, 1, 0, 0, 0, 1180, 1181, 1, 0, 0, 0, 1181, 47, 1, 0, 0, 0, 1182, 1184, 3, 60, 30, 0, 1183, 1182, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1190, 3, 50, 25, 0, 1186, 1187, 5, 4, 0, 0, 1187, 1189, 3, 50, 25, 0, 1188, 1186, 1, 0, 0, 0, 1189, 1192, 1, 0, 0, 0, 1190, 1188, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 49, 1, 0, 0, 0, 1192, 1190, 1, 0, 0, 0, 1193, 1234, 3, 52, 26, 0, 1194, 1195, 5, 191, 0, 0, 1195, 1204, 5, 2, 0, 0, 1196, 1201, 3, 94, 47, 0, 1197, 1198, 5, 4, 0, 0, 1198, 1200, 3, 94, 47, 0, 1199, 1197, 1, 0, 0, 0, 1200, 1203, 1, 0, 0, 0, 1201, 1199, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1205, 1, 0, 0, 0, 1203, 1201, 1, 0, 0, 0, 1204, 1196, 1, 0, 0, 0, 1204, 1205, 1, 0, 0, 0, 1205, 1206, 1, 0, 0, 0, 1206, 1234, 5, 3, 0, 0, 1207, 1208, 5, 46, 0, 0, 1208, 1217, 5, 2, 0, 0, 1209, 1214, 3, 94, 47, 0, 1210, 1211, 5, 4, 0, 0, 1211, 1213, 3, 94, 47, 0, 1212, 1210, 1, 0, 0, 0, 1213, 1216, 1, 0, 0, 0, 1214, 1212, 1, 0, 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 1218, 1, 0, 0, 0, 1216, 1214, 1, 0, 0, 0, 1217, 1209, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1234, 5, 3, 0, 0, 1220, 1221, 5, 97, 0, 0, 1221, 1222, 5, 204, 0, 0, 1222, 1223, 5, 2, 0, 0, 1223, 1228, 3, 52, 26, 0, 1224, 1225, 5, 4, 0, 0, 1225, 1227, 3, 52, 26, 0, 1226, 1224, 1, 0, 0, 0, 1227, 1230, 1, 0, 0, 0, 1228, 1226, 1, 0, 0, 0, 1228, 1229, 1, 0, 0, 0, 1229, 1231, 1, 0, 0, 0, 1230, 1228, 1, 0, 0, 0, 1231, 1232, 5, 3, 0, 0, 1232, 1234, 1, 0, 0, 0, 1233, 1193, 1, 0, 0, 0, 1233, 1194, 1, 0, 0, 0, 1233, 1207, 1, 0, 0, 0, 1233, 1220, 1, 0, 0, 0, 1234, 51, 1, 0, 0, 0, 1235, 1244, 5, 2, 0, 0, 1236, 1241, 3, 94, 47, 0, 1237, 1238, 5, 4, 0, 0, 1238, 1240, 3, 94, 47, 0, 1239, 1237, 1, 0, 0, 0, 1240, 1243, 1, 0, 0, 0, 1241, 1239, 1, 0, 0, 0, 1241, 1242, 1, 0, 0, 0, 1242, 1245, 1, 0, 0, 0, 1243, 1241, 1, 0, 0, 0, 1244, 1236, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1246, 1, 0, 0, 0, 1246, 1249, 5, 3, 0, 0, 1247, 1249, 3, 94, 47, 0, 1248, 1235, 1, 0, 0, 0, 1248, 1247, 1, 0, 0, 0, 1249, 53, 1, 0, 0, 0, 1250, 1251, 3, 174, 87, 0, 1251, 1252, 5, 26, 0, 0, 1252, 1253, 5, 2, 0, 0, 1253, 1254, 3, 56, 28, 0, 1254, 1255, 5, 3, 0, 0, 1255, 55, 1, 0, 0, 0, 1256, 1258, 3, 174, 87, 0, 1257, 1256, 1, 0, 0, 0, 1257, 1258, 1, 0, 0, 0, 1258, 1269, 1, 0, 0, 0, 1259, 1260, 5, 163, 0, 0, 1260, 1261, 5, 32, 0, 0, 1261, 1266, 3, 94, 47, 0, 1262, 1263, 5, 4, 0, 0, 1263, 1265, 3, 94, 47, 0, 1264, 1262, 1, 0, 0, 0, 1265, 1268, 1, 0, 0, 0, 1266, 1264, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, 1270, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1269, 1259, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 1281, 1, 0, 0, 0, 1271, 1272, 5, 158, 0, 0, 1272, 1273, 5, 32, 0, 0, 1273, 1278, 3, 44, 22, 0, 1274, 1275, 5, 4, 0, 0, 1275, 1277, 3, 44, 22, 0, 1276, 1274, 1, 0, 0, 0, 1277, 1280, 1, 0, 0, 0, 1278, 1276, 1, 0, 0, 0, 1278, 1279, 1, 0, 0, 0, 1279, 1282, 1, 0, 0, 0, 1280, 1278, 1, 0, 0, 0, 1281, 1271, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1284, 1, 0, 0, 0, 1283, 1285, 3, 138, 69, 0, 1284, 1283, 1, 0, 0, 0, 1284, 1285, 1, 0, 0, 0, 1285, 57, 1, 0, 0, 0, 1286, 1288, 3, 174, 87, 0, 1287, 1289, 3, 90, 45, 0, 1288, 1287, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1291, 5, 26, 0, 0, 1291, 1292, 5, 2, 0, 0, 1292, 1293, 3, 16, 8, 0, 1293, 1294, 5, 3, 0, 0, 1294, 59, 1, 0, 0, 0, 1295, 1296, 7, 11, 0, 0, 1296, 61, 1, 0, 0, 0, 1297, 1302, 3, 94, 47, 0, 1298, 1300, 5, 26, 0, 0, 1299, 1298, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1303, 3, 174, 87, 0, 1302, 1299, 1, 0, 0, 0, 1302, 1303, 1, 0, 0, 0, 1303, 1313, 1, 0, 0, 0, 1304, 1305, 3, 102, 51, 0, 1305, 1306, 5, 1, 0, 0, 1306, 1309, 5, 257, 0, 0, 1307, 1308, 5, 26, 0, 0, 1308, 1310, 3, 90, 45, 0, 1309, 1307, 1, 0, 0, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1313, 1, 0, 0, 0, 1311, 1313, 5, 257, 0, 0, 1312, 1297, 1, 0, 0, 0, 1312, 1304, 1, 0, 0, 0, 1312, 1311, 1, 0, 0, 0, 1313, 63, 1, 0, 0, 0, 1314, 1315, 6, 32, -1, 0, 1315, 1316, 3, 70, 35, 0, 1316, 1335, 1, 0, 0, 0, 1317, 1331, 10, 2, 0, 0, 1318, 1319, 5, 45, 0, 0, 1319, 1320, 5, 116, 0, 0, 1320, 1332, 3, 70, 35, 0, 1321, 1322, 3, 66, 33, 0, 1322, 1323, 5, 116, 0, 0, 1323, 1324, 3, 64, 32, 0, 1324, 1325, 3, 68, 34, 0, 1325, 1332, 1, 0, 0, 0, 1326, 1327, 5, 138, 0, 0, 1327, 1328, 3, 66, 33, 0, 1328, 1329, 5, 116, 0, 0, 1329, 1330, 3, 70, 35, 0, 1330, 1332, 1, 0, 0, 0, 1331, 1318, 1, 0, 0, 0, 1331, 1321, 1, 0, 0, 0, 1331, 1326, 1, 0, 0, 0, 1332, 1334, 1, 0, 0, 0, 1333, 1317, 1, 0, 0, 0, 1334, 1337, 1, 0, 0, 0, 1335, 1333, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, 65, 1, 0, 0, 0, 1337, 1335, 1, 0, 0, 0, 1338, 1340, 5, 106, 0, 0, 1339, 1338, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1354, 1, 0, 0, 0, 1341, 1343, 5, 120, 0, 0, 1342, 1344, 5, 160, 0, 0, 1343, 1342, 1, 0, 0, 0, 1343, 1344, 1, 0, 0, 0, 1344, 1354, 1, 0, 0, 0, 1345, 1347, 5, 187, 0, 0, 1346, 1348, 5, 160, 0, 0, 1347, 1346, 1, 0, 0, 0, 1347, 1348, 1, 0, 0, 0, 1348, 1354, 1, 0, 0, 0, 1349, 1351, 5, 89, 0, 0, 1350, 1352, 5, 160, 0, 0, 1351, 1350, 1, 0, 0, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1354, 1, 0, 0, 0, 1353, 1339, 1, 0, 0, 0, 1353, 1341, 1, 0, 0, 0, 1353, 1345, 1, 0, 0, 0, 1353, 1349, 1, 0, 0, 0, 1354, 67, 1, 0, 0, 0, 1355, 1356, 5, 153, 0, 0, 1356, 1370, 3, 96, 48, 0, 1357, 1358, 5, 235, 0, 0, 1358, 1359, 5, 2, 0, 0, 1359, 1364, 3, 174, 87, 0, 1360, 1361, 5, 4, 0, 0, 1361, 1363, 3, 174, 87, 0, 1362, 1360, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 1367, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1368, 5, 3, 0, 0, 1368, 1370, 1, 0, 0, 0, 1369, 1355, 1, 0, 0, 0, 1369, 1357, 1, 0, 0, 0, 1370, 69, 1, 0, 0, 0, 1371, 1378, 3, 74, 37, 0, 1372, 1373, 5, 214, 0, 0, 1373, 1374, 3, 72, 36, 0, 1374, 1375, 5, 2, 0, 0, 1375, 1376, 3, 94, 47, 0, 1376, 1377, 5, 3, 0, 0, 1377, 1379, 1, 0, 0, 0, 1378, 1372, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 71, 1, 0, 0, 0, 1380, 1381, 7, 12, 0, 0, 1381, 73, 1, 0, 0, 0, 1382, 1465, 3, 88, 44, 0, 1383, 1384, 5, 132, 0, 0, 1384, 1395, 5, 2, 0, 0, 1385, 1386, 5, 163, 0, 0, 1386, 1387, 5, 32, 0, 0, 1387, 1392, 3, 94, 47, 0, 1388, 1389, 5, 4, 0, 0, 1389, 1391, 3, 94, 47, 0, 1390, 1388, 1, 0, 0, 0, 1391, 1394, 1, 0, 0, 0, 1392, 1390, 1, 0, 0, 0, 1392, 1393, 1, 0, 0, 0, 1393, 1396, 1, 0, 0, 0, 1394, 1392, 1, 0, 0, 0, 1395, 1385, 1, 0, 0, 0, 1395, 1396, 1, 0, 0, 0, 1396, 1407, 1, 0, 0, 0, 1397, 1398, 5, 158, 0, 0, 1398, 1399, 5, 32, 0, 0, 1399, 1404, 3, 44, 22, 0, 1400, 1401, 5, 4, 0, 0, 1401, 1403, 3, 44, 22, 0, 1402, 1400, 1, 0, 0, 0, 1403, 1406, 1, 0, 0, 0, 1404, 1402, 1, 0, 0, 0, 1404, 1405, 1, 0, 0, 0, 1405, 1408, 1, 0, 0, 0, 1406, 1404, 1, 0, 0, 0, 1407, 1397, 1, 0, 0, 0, 1407, 1408, 1, 0, 0, 0, 1408, 1418, 1, 0, 0, 0, 1409, 1410, 5, 134, 0, 0, 1410, 1415, 3, 76, 38, 0, 1411, 1412, 5, 4, 0, 0, 1412, 1414, 3, 76, 38, 0, 1413, 1411, 1, 0, 0, 0, 1414, 1417, 1, 0, 0, 0, 1415, 1413, 1, 0, 0, 0, 1415, 1416, 1, 0, 0, 0, 1416, 1419, 1, 0, 0, 0, 1417, 1415, 1, 0, 0, 0, 1418, 1409, 1, 0, 0, 0, 1418, 1419, 1, 0, 0, 0, 1419, 1421, 1, 0, 0, 0, 1420, 1422, 3, 78, 39, 0, 1421, 1420, 1, 0, 0, 0, 1421, 1422, 1, 0, 0, 0, 1422, 1426, 1, 0, 0, 0, 1423, 1424, 5, 19, 0, 0, 1424, 1425, 5, 129, 0, 0, 1425, 1427, 3, 82, 41, 0, 1426, 1423, 1, 0, 0, 0, 1426, 1427, 1, 0, 0, 0, 1427, 1429, 1, 0, 0, 0, 1428, 1430, 7, 13, 0, 0, 1429, 1428, 1, 0, 0, 0, 1429, 1430, 1, 0, 0, 0, 1430, 1431, 1, 0, 0, 0, 1431, 1432, 5, 167, 0, 0, 1432, 1433, 5, 2, 0, 0, 1433, 1434, 3, 144, 72, 0, 1434, 1444, 5, 3, 0, 0, 1435, 1436, 5, 209, 0, 0, 1436, 1441, 3, 84, 42, 0, 1437, 1438, 5, 4, 0, 0, 1438, 1440, 3, 84, 42, 0, 1439, 1437, 1, 0, 0, 0, 1440, 1443, 1, 0, 0, 0, 1441, 1439, 1, 0, 0, 0, 1441, 1442, 1, 0, 0, 0, 1442, 1445, 1, 0, 0, 0, 1443, 1441, 1, 0, 0, 0, 1444, 1435, 1, 0, 0, 0, 1444, 1445, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1447, 5, 65, 0, 0, 1447, 1452, 3, 86, 43, 0, 1448, 1449, 5, 4, 0, 0, 1449, 1451, 3, 86, 43, 0, 1450, 1448, 1, 0, 0, 0, 1451, 1454, 1, 0, 0, 0, 1452, 1450, 1, 0, 0, 0, 1452, 1453, 1, 0, 0, 0, 1453, 1455, 1, 0, 0, 0, 1454, 1452, 1, 0, 0, 0, 1455, 1463, 5, 3, 0, 0, 1456, 1458, 5, 26, 0, 0, 1457, 1456, 1, 0, 0, 0, 1457, 1458, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1461, 3, 174, 87, 0, 1460, 1462, 3, 90, 45, 0, 1461, 1460, 1, 0, 0, 0, 1461, 1462, 1, 0, 0, 0, 1462, 1464, 1, 0, 0, 0, 1463, 1457, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1466, 1, 0, 0, 0, 1465, 1383, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 75, 1, 0, 0, 0, 1467, 1468, 3, 94, 47, 0, 1468, 1469, 5, 26, 0, 0, 1469, 1470, 3, 174, 87, 0, 1470, 77, 1, 0, 0, 0, 1471, 1472, 5, 154, 0, 0, 1472, 1473, 5, 192, 0, 0, 1473, 1474, 5, 168, 0, 0, 1474, 1483, 5, 129, 0, 0, 1475, 1476, 5, 20, 0, 0, 1476, 1477, 5, 193, 0, 0, 1477, 1478, 5, 168, 0, 0, 1478, 1480, 5, 129, 0, 0, 1479, 1481, 3, 80, 40, 0, 1480, 1479, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1483, 1, 0, 0, 0, 1482, 1471, 1, 0, 0, 0, 1482, 1475, 1, 0, 0, 0, 1483, 79, 1, 0, 0, 0, 1484, 1485, 5, 205, 0, 0, 1485, 1486, 5, 71, 0, 0, 1486, 1494, 5, 131, 0, 0, 1487, 1488, 5, 152, 0, 0, 1488, 1489, 5, 71, 0, 0, 1489, 1494, 5, 131, 0, 0, 1490, 1491, 5, 243, 0, 0, 1491, 1492, 5, 230, 0, 0, 1492, 1494, 5, 193, 0, 0, 1493, 1484, 1, 0, 0, 0, 1493, 1487, 1, 0, 0, 0, 1493, 1490, 1, 0, 0, 0, 1494, 81, 1, 0, 0, 0, 1495, 1496, 5, 5, 0, 0, 1496, 1497, 5, 220, 0, 0, 1497, 1498, 5, 139, 0, 0, 1498, 1515, 5, 192, 0, 0, 1499, 1500, 5, 5, 0, 0, 1500, 1501, 5, 165, 0, 0, 1501, 1502, 5, 118, 0, 0, 1502, 1515, 5, 192, 0, 0, 1503, 1504, 5, 5, 0, 0, 1504, 1505, 5, 220, 0, 0, 1505, 1506, 5, 84, 0, 0, 1506, 1515, 3, 174, 87, 0, 1507, 1508, 5, 5, 0, 0, 1508, 1509, 5, 220, 0, 0, 1509, 1510, 5, 118, 0, 0, 1510, 1515, 3, 174, 87, 0, 1511, 1512, 5, 5, 0, 0, 1512, 1513, 5, 220, 0, 0, 1513, 1515, 3, 174, 87, 0, 1514, 1495, 1, 0, 0, 0, 1514, 1499, 1, 0, 0, 0, 1514, 1503, 1, 0, 0, 0, 1514, 1507, 1, 0, 0, 0, 1514, 1511, 1, 0, 0, 0, 1515, 83, 1, 0, 0, 0, 1516, 1517, 3, 174, 87, 0, 1517, 1518, 5, 249, 0, 0, 1518, 1519, 5, 2, 0, 0, 1519, 1524, 3, 174, 87, 0, 1520, 1521, 5, 4, 0, 0, 1521, 1523, 3, 174, 87, 0, 1522, 1520, 1, 0, 0, 0, 1523, 1526, 1, 0, 0, 0, 1524, 1522, 1, 0, 0, 0, 1524, 1525, 1, 0, 0, 0, 1525, 1527, 1, 0, 0, 0, 1526, 1524, 1, 0, 0, 0, 1527, 1528, 5, 3, 0, 0, 1528, 85, 1, 0, 0, 0, 1529, 1530, 3, 174, 87, 0, 1530, 1531, 5, 26, 0, 0, 1531, 1532, 3, 94, 47, 0, 1532, 87, 1, 0, 0, 0, 1533, 1541, 3, 92, 46, 0, 1534, 1536, 5, 26, 0, 0, 1535, 1534, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1537, 1, 0, 0, 0, 1537, 1539, 3, 174, 87, 0, 1538, 1540, 3, 90, 45, 0, 1539, 1538, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1542, 1, 0, 0, 0, 1541, 1535, 1, 0, 0, 0, 1541, 1542, 1, 0, 0, 0, 1542, 89, 1, 0, 0, 0, 1543, 1544, 5, 2, 0, 0, 1544, 1549, 3, 174, 87, 0, 1545, 1546, 5, 4, 0, 0, 1546, 1548, 3, 174, 87, 0, 1547, 1545, 1, 0, 0, 0, 1548, 1551, 1, 0, 0, 0, 1549, 1547, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1552, 1, 0, 0, 0, 1551, 1549, 1, 0, 0, 0, 1552, 1553, 5, 3, 0, 0, 1553, 91, 1, 0, 0, 0, 1554, 1584, 3, 166, 83, 0, 1555, 1556, 5, 2, 0, 0, 1556, 1557, 3, 16, 8, 0, 1557, 1558, 5, 3, 0, 0, 1558, 1584, 1, 0, 0, 0, 1559, 1560, 5, 231, 0, 0, 1560, 1561, 5, 2, 0, 0, 1561, 1566, 3, 94, 47, 0, 1562, 1563, 5, 4, 0, 0, 1563, 1565, 3, 94, 47, 0, 1564, 1562, 1, 0, 0, 0, 1565, 1568, 1, 0, 0, 0, 1566, 1564, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 1569, 1, 0, 0, 0, 1568, 1566, 1, 0, 0, 0, 1569, 1572, 5, 3, 0, 0, 1570, 1571, 5, 243, 0, 0, 1571, 1573, 5, 159, 0, 0, 1572, 1570, 1, 0, 0, 0, 1572, 1573, 1, 0, 0, 0, 1573, 1584, 1, 0, 0, 0, 1574, 1575, 5, 119, 0, 0, 1575, 1576, 5, 2, 0, 0, 1576, 1577, 3, 16, 8, 0, 1577, 1578, 5, 3, 0, 0, 1578, 1584, 1, 0, 0, 0, 1579, 1580, 5, 2, 0, 0, 1580, 1581, 3, 64, 32, 0, 1581, 1582, 5, 3, 0, 0, 1582, 1584, 1, 0, 0, 0, 1583, 1554, 1, 0, 0, 0, 1583, 1555, 1, 0, 0, 0, 1583, 1559, 1, 0, 0, 0, 1583, 1574, 1, 0, 0, 0, 1583, 1579, 1, 0, 0, 0, 1584, 93, 1, 0, 0, 0, 1585, 1586, 3, 96, 48, 0, 1586, 95, 1, 0, 0, 0, 1587, 1588, 6, 48, -1, 0, 1588, 1590, 3, 100, 50, 0, 1589, 1591, 3, 98, 49, 0, 1590, 1589, 1, 0, 0, 0, 1590, 1591, 1, 0, 0, 0, 1591, 1595, 1, 0, 0, 0, 1592, 1593, 5, 147, 0, 0, 1593, 1595, 3, 96, 48, 3, 1594, 1587, 1, 0, 0, 0, 1594, 1592, 1, 0, 0, 0, 1595, 1604, 1, 0, 0, 0, 1596, 1597, 10, 2, 0, 0, 1597, 1598, 5, 23, 0, 0, 1598, 1603, 3, 96, 48, 3, 1599, 1600, 10, 1, 0, 0, 1600, 1601, 5, 157, 0, 0, 1601, 1603, 3, 96, 48, 2, 1602, 1596, 1, 0, 0, 0, 1602, 1599, 1, 0, 0, 0, 1603, 1606, 1, 0, 0, 0, 1604, 1602, 1, 0, 0, 0, 1604, 1605, 1, 0, 0, 0, 1605, 97, 1, 0, 0, 0, 1606, 1604, 1, 0, 0, 0, 1607, 1608, 3, 112, 56, 0, 1608, 1609, 3, 100, 50, 0, 1609, 1669, 1, 0, 0, 0, 1610, 1611, 3, 112, 56, 0, 1611, 1612, 3, 114, 57, 0, 1612, 1613, 5, 2, 0, 0, 1613, 1614, 3, 16, 8, 0, 1614, 1615, 5, 3, 0, 0, 1615, 1669, 1, 0, 0, 0, 1616, 1618, 5, 147, 0, 0, 1617, 1616, 1, 0, 0, 0, 1617, 1618, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 1620, 5, 31, 0, 0, 1620, 1621, 3, 100, 50, 0, 1621, 1622, 5, 23, 0, 0, 1622, 1623, 3, 100, 50, 0, 1623, 1669, 1, 0, 0, 0, 1624, 1626, 5, 147, 0, 0, 1625, 1624, 1, 0, 0, 0, 1625, 1626, 1, 0, 0, 0, 1626, 1627, 1, 0, 0, 0, 1627, 1628, 5, 103, 0, 0, 1628, 1629, 5, 2, 0, 0, 1629, 1634, 3, 94, 47, 0, 1630, 1631, 5, 4, 0, 0, 1631, 1633, 3, 94, 47, 0, 1632, 1630, 1, 0, 0, 0, 1633, 1636, 1, 0, 0, 0, 1634, 1632, 1, 0, 0, 0, 1634, 1635, 1, 0, 0, 0, 1635, 1637, 1, 0, 0, 0, 1636, 1634, 1, 0, 0, 0, 1637, 1638, 5, 3, 0, 0, 1638, 1669, 1, 0, 0, 0, 1639, 1641, 5, 147, 0, 0, 1640, 1639, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1642, 1, 0, 0, 0, 1642, 1643, 5, 103, 0, 0, 1643, 1644, 5, 2, 0, 0, 1644, 1645, 3, 16, 8, 0, 1645, 1646, 5, 3, 0, 0, 1646, 1669, 1, 0, 0, 0, 1647, 1649, 5, 147, 0, 0, 1648, 1647, 1, 0, 0, 0, 1648, 1649, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1651, 5, 122, 0, 0, 1651, 1654, 3, 100, 50, 0, 1652, 1653, 5, 73, 0, 0, 1653, 1655, 3, 100, 50, 0, 1654, 1652, 1, 0, 0, 0, 1654, 1655, 1, 0, 0, 0, 1655, 1669, 1, 0, 0, 0, 1656, 1658, 5, 114, 0, 0, 1657, 1659, 5, 147, 0, 0, 1658, 1657, 1, 0, 0, 0, 1658, 1659, 1, 0, 0, 0, 1659, 1660, 1, 0, 0, 0, 1660, 1669, 5, 148, 0, 0, 1661, 1663, 5, 114, 0, 0, 1662, 1664, 5, 147, 0, 0, 1663, 1662, 1, 0, 0, 0, 1663, 1664, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1666, 5, 66, 0, 0, 1666, 1667, 5, 88, 0, 0, 1667, 1669, 3, 100, 50, 0, 1668, 1607, 1, 0, 0, 0, 1668, 1610, 1, 0, 0, 0, 1668, 1617, 1, 0, 0, 0, 1668, 1625, 1, 0, 0, 0, 1668, 1640, 1, 0, 0, 0, 1668, 1648, 1, 0, 0, 0, 1668, 1656, 1, 0, 0, 0, 1668, 1661, 1, 0, 0, 0, 1669, 99, 1, 0, 0, 0, 1670, 1671, 6, 50, -1, 0, 1671, 1675, 3, 102, 51, 0, 1672, 1673, 7, 14, 0, 0, 1673, 1675, 3, 100, 50, 4, 1674, 1670, 1, 0, 0, 0, 1674, 1672, 1, 0, 0, 0, 1675, 1690, 1, 0, 0, 0, 1676, 1677, 10, 3, 0, 0, 1677, 1678, 7, 15, 0, 0, 1678, 1689, 3, 100, 50, 4, 1679, 1680, 10, 2, 0, 0, 1680, 1681, 7, 14, 0, 0, 1681, 1689, 3, 100, 50, 3, 1682, 1683, 10, 1, 0, 0, 1683, 1684, 5, 260, 0, 0, 1684, 1689, 3, 100, 50, 2, 1685, 1686, 10, 5, 0, 0, 1686, 1687, 5, 28, 0, 0, 1687, 1689, 3, 110, 55, 0, 1688, 1676, 1, 0, 0, 0, 1688, 1679, 1, 0, 0, 0, 1688, 1682, 1, 0, 0, 0, 1688, 1685, 1, 0, 0, 0, 1689, 1692, 1, 0, 0, 0, 1690, 1688, 1, 0, 0, 0, 1690, 1691, 1, 0, 0, 0, 1691, 101, 1, 0, 0, 0, 1692, 1690, 1, 0, 0, 0, 1693, 1694, 6, 51, -1, 0, 1694, 1943, 5, 148, 0, 0, 1695, 1943, 3, 118, 59, 0, 1696, 1697, 3, 174, 87, 0, 1697, 1698, 3, 108, 54, 0, 1698, 1943, 1, 0, 0, 0, 1699, 1700, 5, 68, 0, 0, 1700, 1701, 5, 172, 0, 0, 1701, 1943, 3, 108, 54, 0, 1702, 1943, 3, 176, 88, 0, 1703, 1943, 3, 116, 58, 0, 1704, 1943, 3, 108, 54, 0, 1705, 1943, 5, 264, 0, 0, 1706, 1943, 5, 261, 0, 0, 1707, 1708, 5, 170, 0, 0, 1708, 1709, 5, 2, 0, 0, 1709, 1710, 3, 100, 50, 0, 1710, 1711, 5, 103, 0, 0, 1711, 1712, 3, 100, 50, 0, 1712, 1713, 5, 3, 0, 0, 1713, 1943, 1, 0, 0, 0, 1714, 1715, 5, 2, 0, 0, 1715, 1718, 3, 94, 47, 0, 1716, 1717, 5, 4, 0, 0, 1717, 1719, 3, 94, 47, 0, 1718, 1716, 1, 0, 0, 0, 1719, 1720, 1, 0, 0, 0, 1720, 1718, 1, 0, 0, 0, 1720, 1721, 1, 0, 0, 0, 1721, 1722, 1, 0, 0, 0, 1722, 1723, 5, 3, 0, 0, 1723, 1943, 1, 0, 0, 0, 1724, 1725, 5, 192, 0, 0, 1725, 1726, 5, 2, 0, 0, 1726, 1731, 3, 94, 47, 0, 1727, 1728, 5, 4, 0, 0, 1728, 1730, 3, 94, 47, 0, 1729, 1727, 1, 0, 0, 0, 1730, 1733, 1, 0, 0, 0, 1731, 1729, 1, 0, 0, 0, 1731, 1732, 1, 0, 0, 0, 1732, 1734, 1, 0, 0, 0, 1733, 1731, 1, 0, 0, 0, 1734, 1735, 5, 3, 0, 0, 1735, 1943, 1, 0, 0, 0, 1736, 1737, 3, 166, 83, 0, 1737, 1738, 5, 2, 0, 0, 1738, 1739, 5, 257, 0, 0, 1739, 1741, 5, 3, 0, 0, 1740, 1742, 3, 132, 66, 0, 1741, 1740, 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1744, 1, 0, 0, 0, 1743, 1745, 3, 136, 68, 0, 1744, 1743, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1943, 1, 0, 0, 0, 1746, 1748, 3, 104, 52, 0, 1747, 1746, 1, 0, 0, 0, 1747, 1748, 1, 0, 0, 0, 1748, 1749, 1, 0, 0, 0, 1749, 1750, 3, 166, 83, 0, 1750, 1762, 5, 2, 0, 0, 1751, 1753, 3, 60, 30, 0, 1752, 1751, 1, 0, 0, 0, 1752, 1753, 1, 0, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1759, 3, 94, 47, 0, 1755, 1756, 5, 4, 0, 0, 1756, 1758, 3, 94, 47, 0, 1757, 1755, 1, 0, 0, 0, 1758, 1761, 1, 0, 0, 0, 1759, 1757, 1, 0, 0, 0, 1759, 1760, 1, 0, 0, 0, 1760, 1763, 1, 0, 0, 0, 1761, 1759, 1, 0, 0, 0, 1762, 1752, 1, 0, 0, 0, 1762, 1763, 1, 0, 0, 0, 1763, 1774, 1, 0, 0, 0, 1764, 1765, 5, 158, 0, 0, 1765, 1766, 5, 32, 0, 0, 1766, 1771, 3, 44, 22, 0, 1767, 1768, 5, 4, 0, 0, 1768, 1770, 3, 44, 22, 0, 1769, 1767, 1, 0, 0, 0, 1770, 1773, 1, 0, 0, 0, 1771, 1769, 1, 0, 0, 0, 1771, 1772, 1, 0, 0, 0, 1772, 1775, 1, 0, 0, 0, 1773, 1771, 1, 0, 0, 0, 1774, 1764, 1, 0, 0, 0, 1774, 1775, 1, 0, 0, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1778, 5, 3, 0, 0, 1777, 1779, 3, 132, 66, 0, 1778, 1777, 1, 0, 0, 0, 1778, 1779, 1, 0, 0, 0, 1779, 1784, 1, 0, 0, 0, 1780, 1782, 3, 106, 53, 0, 1781, 1780, 1, 0, 0, 0, 1781, 1782, 1, 0, 0, 0, 1782, 1783, 1, 0, 0, 0, 1783, 1785, 3, 136, 68, 0, 1784, 1781, 1, 0, 0, 0, 1784, 1785, 1, 0, 0, 0, 1785, 1943, 1, 0, 0, 0, 1786, 1787, 3, 174, 87, 0, 1787, 1788, 3, 136, 68, 0, 1788, 1943, 1, 0, 0, 0, 1789, 1790, 3, 174, 87, 0, 1790, 1791, 5, 6, 0, 0, 1791, 1792, 3, 94, 47, 0, 1792, 1943, 1, 0, 0, 0, 1793, 1802, 5, 2, 0, 0, 1794, 1799, 3, 174, 87, 0, 1795, 1796, 5, 4, 0, 0, 1796, 1798, 3, 174, 87, 0, 1797, 1795, 1, 0, 0, 0, 1798, 1801, 1, 0, 0, 0, 1799, 1797, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 1803, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1802, 1794, 1, 0, 0, 0, 1802, 1803, 1, 0, 0, 0, 1803, 1804, 1, 0, 0, 0, 1804, 1805, 5, 3, 0, 0, 1805, 1806, 5, 6, 0, 0, 1806, 1943, 3, 94, 47, 0, 1807, 1808, 5, 2, 0, 0, 1808, 1809, 3, 16, 8, 0, 1809, 1810, 5, 3, 0, 0, 1810, 1943, 1, 0, 0, 0, 1811, 1812, 5, 77, 0, 0, 1812, 1813, 5, 2, 0, 0, 1813, 1814, 3, 16, 8, 0, 1814, 1815, 5, 3, 0, 0, 1815, 1943, 1, 0, 0, 0, 1816, 1817, 5, 35, 0, 0, 1817, 1819, 3, 94, 47, 0, 1818, 1820, 3, 130, 65, 0, 1819, 1818, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 1819, 1, 0, 0, 0, 1821, 1822, 1, 0, 0, 0, 1822, 1825, 1, 0, 0, 0, 1823, 1824, 5, 70, 0, 0, 1824, 1826, 3, 94, 47, 0, 1825, 1823, 1, 0, 0, 0, 1825, 1826, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1828, 5, 72, 0, 0, 1828, 1943, 1, 0, 0, 0, 1829, 1831, 5, 35, 0, 0, 1830, 1832, 3, 130, 65, 0, 1831, 1830, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 1837, 1, 0, 0, 0, 1835, 1836, 5, 70, 0, 0, 1836, 1838, 3, 94, 47, 0, 1837, 1835, 1, 0, 0, 0, 1837, 1838, 1, 0, 0, 0, 1838, 1839, 1, 0, 0, 0, 1839, 1840, 5, 72, 0, 0, 1840, 1943, 1, 0, 0, 0, 1841, 1842, 5, 36, 0, 0, 1842, 1843, 5, 2, 0, 0, 1843, 1844, 3, 94, 47, 0, 1844, 1845, 5, 26, 0, 0, 1845, 1846, 3, 124, 62, 0, 1846, 1847, 5, 3, 0, 0, 1847, 1943, 1, 0, 0, 0, 1848, 1849, 5, 224, 0, 0, 1849, 1850, 5, 2, 0, 0, 1850, 1851, 3, 94, 47, 0, 1851, 1852, 5, 26, 0, 0, 1852, 1853, 3, 124, 62, 0, 1853, 1854, 5, 3, 0, 0, 1854, 1943, 1, 0, 0, 0, 1855, 1856, 5, 25, 0, 0, 1856, 1865, 5, 7, 0, 0, 1857, 1862, 3, 94, 47, 0, 1858, 1859, 5, 4, 0, 0, 1859, 1861, 3, 94, 47, 0, 1860, 1858, 1, 0, 0, 0, 1861, 1864, 1, 0, 0, 0, 1862, 1860, 1, 0, 0, 0, 1862, 1863, 1, 0, 0, 0, 1863, 1866, 1, 0, 0, 0, 1864, 1862, 1, 0, 0, 0, 1865, 1857, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1867, 1, 0, 0, 0, 1867, 1943, 5, 8, 0, 0, 1868, 1943, 3, 174, 87, 0, 1869, 1943, 5, 49, 0, 0, 1870, 1874, 5, 53, 0, 0, 1871, 1872, 5, 2, 0, 0, 1872, 1873, 5, 265, 0, 0, 1873, 1875, 5, 3, 0, 0, 1874, 1871, 1, 0, 0, 0, 1874, 1875, 1, 0, 0, 0, 1875, 1943, 1, 0, 0, 0, 1876, 1880, 5, 54, 0, 0, 1877, 1878, 5, 2, 0, 0, 1878, 1879, 5, 265, 0, 0, 1879, 1881, 5, 3, 0, 0, 1880, 1877, 1, 0, 0, 0, 1880, 1881, 1, 0, 0, 0, 1881, 1943, 1, 0, 0, 0, 1882, 1886, 5, 125, 0, 0, 1883, 1884, 5, 2, 0, 0, 1884, 1885, 5, 265, 0, 0, 1885, 1887, 5, 3, 0, 0, 1886, 1883, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1943, 1, 0, 0, 0, 1888, 1892, 5, 126, 0, 0, 1889, 1890, 5, 2, 0, 0, 1890, 1891, 5, 265, 0, 0, 1891, 1893, 5, 3, 0, 0, 1892, 1889, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1943, 1, 0, 0, 0, 1894, 1943, 5, 55, 0, 0, 1895, 1943, 5, 48, 0, 0, 1896, 1943, 5, 52, 0, 0, 1897, 1943, 5, 50, 0, 0, 1898, 1899, 5, 210, 0, 0, 1899, 1900, 5, 2, 0, 0, 1900, 1901, 3, 100, 50, 0, 1901, 1902, 5, 88, 0, 0, 1902, 1905, 3, 100, 50, 0, 1903, 1904, 5, 86, 0, 0, 1904, 1906, 3, 100, 50, 0, 1905, 1903, 1, 0, 0, 0, 1905, 1906, 1, 0, 0, 0, 1906, 1907, 1, 0, 0, 0, 1907, 1908, 5, 3, 0, 0, 1908, 1943, 1, 0, 0, 0, 1909, 1910, 5, 146, 0, 0, 1910, 1911, 5, 2, 0, 0, 1911, 1914, 3, 100, 50, 0, 1912, 1913, 5, 4, 0, 0, 1913, 1915, 3, 122, 61, 0, 1914, 1912, 1, 0, 0, 0, 1914, 1915, 1, 0, 0, 0, 1915, 1916, 1, 0, 0, 0, 1916, 1917, 5, 3, 0, 0, 1917, 1943, 1, 0, 0, 0, 1918, 1919, 5, 79, 0, 0, 1919, 1920, 5, 2, 0, 0, 1920, 1921, 3, 174, 87, 0, 1921, 1922, 5, 88, 0, 0, 1922, 1923, 3, 100, 50, 0, 1923, 1924, 5, 3, 0, 0, 1924, 1943, 1, 0, 0, 0, 1925, 1926, 5, 2, 0, 0, 1926, 1927, 3, 94, 47, 0, 1927, 1928, 5, 3, 0, 0, 1928, 1943, 1, 0, 0, 0, 1929, 1930, 5, 97, 0, 0, 1930, 1939, 5, 2, 0, 0, 1931, 1936, 3, 166, 83, 0, 1932, 1933, 5, 4, 0, 0, 1933, 1935, 3, 166, 83, 0, 1934, 1932, 1, 0, 0, 0, 1935, 1938, 1, 0, 0, 0, 1936, 1934, 1, 0, 0, 0, 1936, 1937, 1, 0, 0, 0, 1937, 1940, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1939, 1931, 1, 0, 0, 0, 1939, 1940, 1, 0, 0, 0, 1940, 1941, 1, 0, 0, 0, 1941, 1943, 5, 3, 0, 0, 1942, 1693, 1, 0, 0, 0, 1942, 1695, 1, 0, 0, 0, 1942, 1696, 1, 0, 0, 0, 1942, 1699, 1, 0, 0, 0, 1942, 1702, 1, 0, 0, 0, 1942, 1703, 1, 0, 0, 0, 1942, 1704, 1, 0, 0, 0, 1942, 1705, 1, 0, 0, 0, 1942, 1706, 1, 0, 0, 0, 1942, 1707, 1, 0, 0, 0, 1942, 1714, 1, 0, 0, 0, 1942, 1724, 1, 0, 0, 0, 1942, 1736, 1, 0, 0, 0, 1942, 1747, 1, 0, 0, 0, 1942, 1786, 1, 0, 0, 0, 1942, 1789, 1, 0, 0, 0, 1942, 1793, 1, 0, 0, 0, 1942, 1807, 1, 0, 0, 0, 1942, 1811, 1, 0, 0, 0, 1942, 1816, 1, 0, 0, 0, 1942, 1829, 1, 0, 0, 0, 1942, 1841, 1, 0, 0, 0, 1942, 1848, 1, 0, 0, 0, 1942, 1855, 1, 0, 0, 0, 1942, 1868, 1, 0, 0, 0, 1942, 1869, 1, 0, 0, 0, 1942, 1870, 1, 0, 0, 0, 1942, 1876, 1, 0, 0, 0, 1942, 1882, 1, 0, 0, 0, 1942, 1888, 1, 0, 0, 0, 1942, 1894, 1, 0, 0, 0, 1942, 1895, 1, 0, 0, 0, 1942, 1896, 1, 0, 0, 0, 1942, 1897, 1, 0, 0, 0, 1942, 1898, 1, 0, 0, 0, 1942, 1909, 1, 0, 0, 0, 1942, 1918, 1, 0, 0, 0, 1942, 1925, 1, 0, 0, 0, 1942, 1929, 1, 0, 0, 0, 1943, 1954, 1, 0, 0, 0, 1944, 1945, 10, 17, 0, 0, 1945, 1946, 5, 7, 0, 0, 1946, 1947, 3, 100, 50, 0, 1947, 1948, 5, 8, 0, 0, 1948, 1953, 1, 0, 0, 0, 1949, 1950, 10, 15, 0, 0, 1950, 1951, 5, 1, 0, 0, 1951, 1953, 3, 174, 87, 0, 1952, 1944, 1, 0, 0, 0, 1952, 1949, 1, 0, 0, 0, 1953, 1956, 1, 0, 0, 0, 1954, 1952, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 103, 1, 0, 0, 0, 1956, 1954, 1, 0, 0, 0, 1957, 1958, 7, 16, 0, 0, 1958, 105, 1, 0, 0, 0, 1959, 1960, 5, 102, 0, 0, 1960, 1964, 5, 150, 0, 0, 1961, 1962, 5, 184, 0, 0, 1962, 1964, 5, 150, 0, 0, 1963, 1959, 1, 0, 0, 0, 1963, 1961, 1, 0, 0, 0, 1964, 107, 1, 0, 0, 0, 1965, 1972, 5, 262, 0, 0, 1966, 1969, 5, 263, 0, 0, 1967, 1968, 5, 226, 0, 0, 1968, 1970, 5, 262, 0, 0, 1969, 1967, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 1972, 1, 0, 0, 0, 1971, 1965, 1, 0, 0, 0, 1971, 1966, 1, 0, 0, 0, 1972, 109, 1, 0, 0, 0, 1973, 1974, 5, 218, 0, 0, 1974, 1975, 5, 248, 0, 0, 1975, 1980, 3, 118, 59, 0, 1976, 1977, 5, 218, 0, 0, 1977, 1978, 5, 248, 0, 0, 1978, 1980, 3, 108, 54, 0, 1979, 1973, 1, 0, 0, 0, 1979, 1976, 1, 0, 0, 0, 1980, 111, 1, 0, 0, 0, 1981, 1982, 7, 17, 0, 0, 1982, 113, 1, 0, 0, 0, 1983, 1984, 7, 18, 0, 0, 1984, 115, 1, 0, 0, 0, 1985, 1986, 7, 19, 0, 0, 1986, 117, 1, 0, 0, 0, 1987, 1989, 5, 110, 0, 0, 1988, 1990, 7, 14, 0, 0, 1989, 1988, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1991, 1, 0, 0, 0, 1991, 1992, 3, 108, 54, 0, 1992, 1995, 3, 120, 60, 0, 1993, 1994, 5, 220, 0, 0, 1994, 1996, 3, 120, 60, 0, 1995, 1993, 1, 0, 0, 0, 1995, 1996, 1, 0, 0, 0, 1996, 119, 1, 0, 0, 0, 1997, 1998, 7, 20, 0, 0, 1998, 121, 1, 0, 0, 0, 1999, 2000, 7, 21, 0, 0, 2000, 123, 1, 0, 0, 0, 2001, 2002, 6, 62, -1, 0, 2002, 2003, 5, 192, 0, 0, 2003, 2004, 5, 2, 0, 0, 2004, 2009, 3, 126, 63, 0, 2005, 2006, 5, 4, 0, 0, 2006, 2008, 3, 126, 63, 0, 2007, 2005, 1, 0, 0, 0, 2008, 2011, 1, 0, 0, 0, 2009, 2007, 1, 0, 0, 0, 2009, 2010, 1, 0, 0, 0, 2010, 2012, 1, 0, 0, 0, 2011, 2009, 1, 0, 0, 0, 2012, 2013, 5, 3, 0, 0, 2013, 2093, 1, 0, 0, 0, 2014, 2015, 5, 110, 0, 0, 2015, 2018, 3, 120, 60, 0, 2016, 2017, 5, 220, 0, 0, 2017, 2019, 3, 120, 60, 0, 2018, 2016, 1, 0, 0, 0, 2018, 2019, 1, 0, 0, 0, 2019, 2093, 1, 0, 0, 0, 2020, 2025, 5, 219, 0, 0, 2021, 2022, 5, 2, 0, 0, 2022, 2023, 3, 128, 64, 0, 2023, 2024, 5, 3, 0, 0, 2024, 2026, 1, 0, 0, 0, 2025, 2021, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 2030, 1, 0, 0, 0, 2027, 2028, 5, 244, 0, 0, 2028, 2029, 5, 218, 0, 0, 2029, 2031, 5, 248, 0, 0, 2030, 2027, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 2093, 1, 0, 0, 0, 2032, 2037, 5, 219, 0, 0, 2033, 2034, 5, 2, 0, 0, 2034, 2035, 3, 128, 64, 0, 2035, 2036, 5, 3, 0, 0, 2036, 2038, 1, 0, 0, 0, 2037, 2033, 1, 0, 0, 0, 2037, 2038, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 2040, 5, 243, 0, 0, 2040, 2041, 5, 218, 0, 0, 2041, 2093, 5, 248, 0, 0, 2042, 2047, 5, 218, 0, 0, 2043, 2044, 5, 2, 0, 0, 2044, 2045, 3, 128, 64, 0, 2045, 2046, 5, 3, 0, 0, 2046, 2048, 1, 0, 0, 0, 2047, 2043, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 2052, 1, 0, 0, 0, 2049, 2050, 5, 244, 0, 0, 2050, 2051, 5, 218, 0, 0, 2051, 2053, 5, 248, 0, 0, 2052, 2049, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 2093, 1, 0, 0, 0, 2054, 2059, 5, 218, 0, 0, 2055, 2056, 5, 2, 0, 0, 2056, 2057, 3, 128, 64, 0, 2057, 2058, 5, 3, 0, 0, 2058, 2060, 1, 0, 0, 0, 2059, 2055, 1, 0, 0, 0, 2059, 2060, 1, 0, 0, 0, 2060, 2061, 1, 0, 0, 0, 2061, 2062, 5, 243, 0, 0, 2062, 2063, 5, 218, 0, 0, 2063, 2093, 5, 248, 0, 0, 2064, 2065, 5, 68, 0, 0, 2065, 2093, 5, 172, 0, 0, 2066, 2067, 5, 25, 0, 0, 2067, 2068, 5, 251, 0, 0, 2068, 2069, 3, 124, 62, 0, 2069, 2070, 5, 253, 0, 0, 2070, 2093, 1, 0, 0, 0, 2071, 2072, 5, 128, 0, 0, 2072, 2073, 5, 251, 0, 0, 2073, 2074, 3, 124, 62, 0, 2074, 2075, 5, 4, 0, 0, 2075, 2076, 3, 124, 62, 0, 2076, 2077, 5, 253, 0, 0, 2077, 2093, 1, 0, 0, 0, 2078, 2090, 3, 174, 87, 0, 2079, 2080, 5, 2, 0, 0, 2080, 2085, 3, 128, 64, 0, 2081, 2082, 5, 4, 0, 0, 2082, 2084, 3, 128, 64, 0, 2083, 2081, 1, 0, 0, 0, 2084, 2087, 1, 0, 0, 0, 2085, 2083, 1, 0, 0, 0, 2085, 2086, 1, 0, 0, 0, 2086, 2088, 1, 0, 0, 0, 2087, 2085, 1, 0, 0, 0, 2088, 2089, 5, 3, 0, 0, 2089, 2091, 1, 0, 0, 0, 2090, 2079, 1, 0, 0, 0, 2090, 2091, 1, 0, 0, 0, 2091, 2093, 1, 0, 0, 0, 2092, 2001, 1, 0, 0, 0, 2092, 2014, 1, 0, 0, 0, 2092, 2020, 1, 0, 0, 0, 2092, 2032, 1, 0, 0, 0, 2092, 2042, 1, 0, 0, 0, 2092, 2054, 1, 0, 0, 0, 2092, 2064, 1, 0, 0, 0, 2092, 2066, 1, 0, 0, 0, 2092, 2071, 1, 0, 0, 0, 2092, 2078, 1, 0, 0, 0, 2093, 2103, 1, 0, 0, 0, 2094, 2095, 10, 2, 0, 0, 2095, 2099, 5, 25, 0, 0, 2096, 2097, 5, 7, 0, 0, 2097, 2098, 5, 265, 0, 0, 2098, 2100, 5, 8, 0, 0, 2099, 2096, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2102, 1, 0, 0, 0, 2101, 2094, 1, 0, 0, 0, 2102, 2105, 1, 0, 0, 0, 2103, 2101, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 125, 1, 0, 0, 0, 2105, 2103, 1, 0, 0, 0, 2106, 2111, 3, 124, 62, 0, 2107, 2108, 3, 174, 87, 0, 2108, 2109, 3, 124, 62, 0, 2109, 2111, 1, 0, 0, 0, 2110, 2106, 1, 0, 0, 0, 2110, 2107, 1, 0, 0, 0, 2111, 127, 1, 0, 0, 0, 2112, 2115, 5, 265, 0, 0, 2113, 2115, 3, 124, 62, 0, 2114, 2112, 1, 0, 0, 0, 2114, 2113, 1, 0, 0, 0, 2115, 129, 1, 0, 0, 0, 2116, 2117, 5, 240, 0, 0, 2117, 2118, 3, 94, 47, 0, 2118, 2119, 5, 216, 0, 0, 2119, 2120, 3, 94, 47, 0, 2120, 131, 1, 0, 0, 0, 2121, 2122, 5, 82, 0, 0, 2122, 2123, 5, 2, 0, 0, 2123, 2124, 5, 241, 0, 0, 2124, 2125, 3, 96, 48, 0, 2125, 2126, 5, 3, 0, 0, 2126, 133, 1, 0, 0, 0, 2127, 2128, 5, 240, 0, 0, 2128, 2131, 5, 130, 0, 0, 2129, 2130, 5, 23, 0, 0, 2130, 2132, 3, 94, 47, 0, 2131, 2129, 1, 0, 0, 0, 2131, 2132, 1, 0, 0, 0, 2132, 2133, 1, 0, 0, 0, 2133, 2134, 5, 216, 0, 0, 2134, 2135, 5, 232, 0, 0, 2135, 2136, 5, 203, 0, 0, 2136, 2137, 3, 174, 87, 0, 2137, 2138, 5, 249, 0, 0, 2138, 2146, 3, 94, 47, 0, 2139, 2140, 5, 4, 0, 0, 2140, 2141, 3, 174, 87, 0, 2141, 2142, 5, 249, 0, 0, 2142, 2143, 3, 94, 47, 0, 2143, 2145, 1, 0, 0, 0, 2144, 2139, 1, 0, 0, 0, 2145, 2148, 1, 0, 0, 0, 2146, 2144, 1, 0, 0, 0, 2146, 2147, 1, 0, 0, 0, 2147, 2192, 1, 0, 0, 0, 2148, 2146, 1, 0, 0, 0, 2149, 2150, 5, 240, 0, 0, 2150, 2153, 5, 130, 0, 0, 2151, 2152, 5, 23, 0, 0, 2152, 2154, 3, 94, 47, 0, 2153, 2151, 1, 0, 0, 0, 2153, 2154, 1, 0, 0, 0, 2154, 2155, 1, 0, 0, 0, 2155, 2156, 5, 216, 0, 0, 2156, 2192, 5, 62, 0, 0, 2157, 2158, 5, 240, 0, 0, 2158, 2159, 5, 147, 0, 0, 2159, 2162, 5, 130, 0, 0, 2160, 2161, 5, 23, 0, 0, 2161, 2163, 3, 94, 47, 0, 2162, 2160, 1, 0, 0, 0, 2162, 2163, 1, 0, 0, 0, 2163, 2164, 1, 0, 0, 0, 2164, 2165, 5, 216, 0, 0, 2165, 2177, 5, 108, 0, 0, 2166, 2167, 5, 2, 0, 0, 2167, 2172, 3, 174, 87, 0, 2168, 2169, 5, 4, 0, 0, 2169, 2171, 3, 174, 87, 0, 2170, 2168, 1, 0, 0, 0, 2171, 2174, 1, 0, 0, 0, 2172, 2170, 1, 0, 0, 0, 2172, 2173, 1, 0, 0, 0, 2173, 2175, 1, 0, 0, 0, 2174, 2172, 1, 0, 0, 0, 2175, 2176, 5, 3, 0, 0, 2176, 2178, 1, 0, 0, 0, 2177, 2166, 1, 0, 0, 0, 2177, 2178, 1, 0, 0, 0, 2178, 2179, 1, 0, 0, 0, 2179, 2180, 5, 237, 0, 0, 2180, 2181, 5, 2, 0, 0, 2181, 2186, 3, 94, 47, 0, 2182, 2183, 5, 4, 0, 0, 2183, 2185, 3, 94, 47, 0, 2184, 2182, 1, 0, 0, 0, 2185, 2188, 1, 0, 0, 0, 2186, 2184, 1, 0, 0, 0, 2186, 2187, 1, 0, 0, 0, 2187, 2189, 1, 0, 0, 0, 2188, 2186, 1, 0, 0, 0, 2189, 2190, 5, 3, 0, 0, 2190, 2192, 1, 0, 0, 0, 2191, 2127, 1, 0, 0, 0, 2191, 2149, 1, 0, 0, 0, 2191, 2157, 1, 0, 0, 0, 2192, 135, 1, 0, 0, 0, 2193, 2199, 5, 162, 0, 0, 2194, 2200, 3, 174, 87, 0, 2195, 2196, 5, 2, 0, 0, 2196, 2197, 3, 56, 28, 0, 2197, 2198, 5, 3, 0, 0, 2198, 2200, 1, 0, 0, 0, 2199, 2194, 1, 0, 0, 0, 2199, 2195, 1, 0, 0, 0, 2200, 137, 1, 0, 0, 0, 2201, 2202, 5, 134, 0, 0, 2202, 2207, 3, 76, 38, 0, 2203, 2204, 5, 4, 0, 0, 2204, 2206, 3, 76, 38, 0, 2205, 2203, 1, 0, 0, 0, 2206, 2209, 1, 0, 0, 0, 2207, 2205, 1, 0, 0, 0, 2207, 2208, 1, 0, 0, 0, 2208, 2211, 1, 0, 0, 0, 2209, 2207, 1, 0, 0, 0, 2210, 2201, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2212, 1, 0, 0, 0, 2212, 2216, 3, 140, 70, 0, 2213, 2214, 5, 19, 0, 0, 2214, 2215, 5, 129, 0, 0, 2215, 2217, 3, 82, 41, 0, 2216, 2213, 1, 0, 0, 0, 2216, 2217, 1, 0, 0, 0, 2217, 2219, 1, 0, 0, 0, 2218, 2220, 7, 13, 0, 0, 2219, 2218, 1, 0, 0, 0, 2219, 2220, 1, 0, 0, 0, 2220, 2226, 1, 0, 0, 0, 2221, 2222, 5, 167, 0, 0, 2222, 2223, 5, 2, 0, 0, 2223, 2224, 3, 144, 72, 0, 2224, 2225, 5, 3, 0, 0, 2225, 2227, 1, 0, 0, 0, 2226, 2221, 1, 0, 0, 0, 2226, 2227, 1, 0, 0, 0, 2227, 2237, 1, 0, 0, 0, 2228, 2229, 5, 209, 0, 0, 2229, 2234, 3, 84, 42, 0, 2230, 2231, 5, 4, 0, 0, 2231, 2233, 3, 84, 42, 0, 2232, 2230, 1, 0, 0, 0, 2233, 2236, 1, 0, 0, 0, 2234, 2232, 1, 0, 0, 0, 2234, 2235, 1, 0, 0, 0, 2235, 2238, 1, 0, 0, 0, 2236, 2234, 1, 0, 0, 0, 2237, 2228, 1, 0, 0, 0, 2237, 2238, 1, 0, 0, 0, 2238, 2248, 1, 0, 0, 0, 2239, 2240, 5, 65, 0, 0, 2240, 2245, 3, 86, 43, 0, 2241, 2242, 5, 4, 0, 0, 2242, 2244, 3, 86, 43, 0, 2243, 2241, 1, 0, 0, 0, 2244, 2247, 1, 0, 0, 0, 2245, 2243, 1, 0, 0, 0, 2245, 2246, 1, 0, 0, 0, 2246, 2249, 1, 0, 0, 0, 2247, 2245, 1, 0, 0, 0, 2248, 2239, 1, 0, 0, 0, 2248, 2249, 1, 0, 0, 0, 2249, 139, 1, 0, 0, 0, 2250, 2251, 5, 176, 0, 0, 2251, 2275, 3, 142, 71, 0, 2252, 2253, 5, 193, 0, 0, 2253, 2275, 3, 142, 71, 0, 2254, 2255, 5, 98, 0, 0, 2255, 2275, 3, 142, 71, 0, 2256, 2257, 5, 176, 0, 0, 2257, 2258, 5, 31, 0, 0, 2258, 2259, 3, 142, 71, 0, 2259, 2260, 5, 23, 0, 0, 2260, 2261, 3, 142, 71, 0, 2261, 2275, 1, 0, 0, 0, 2262, 2263, 5, 193, 0, 0, 2263, 2264, 5, 31, 0, 0, 2264, 2265, 3, 142, 71, 0, 2265, 2266, 5, 23, 0, 0, 2266, 2267, 3, 142, 71, 0, 2267, 2275, 1, 0, 0, 0, 2268, 2269, 5, 98, 0, 0, 2269, 2270, 5, 31, 0, 0, 2270, 2271, 3, 142, 71, 0, 2271, 2272, 5, 23, 0, 0, 2272, 2273, 3, 142, 71, 0, 2273, 2275, 1, 0, 0, 0, 2274, 2250, 1, 0, 0, 0, 2274, 2252, 1, 0, 0, 0, 2274, 2254, 1, 0, 0, 0, 2274, 2256, 1, 0, 0, 0, 2274, 2262, 1, 0, 0, 0, 2274, 2268, 1, 0, 0, 0, 2275, 141, 1, 0, 0, 0, 2276, 2277, 5, 227, 0, 0, 2277, 2286, 5, 171, 0, 0, 2278, 2279, 5, 227, 0, 0, 2279, 2286, 5, 85, 0, 0, 2280, 2281, 5, 47, 0, 0, 2281, 2286, 5, 192, 0, 0, 2282, 2283, 3, 94, 47, 0, 2283, 2284, 7, 22, 0, 0, 2284, 2286, 1, 0, 0, 0, 2285, 2276, 1, 0, 0, 0, 2285, 2278, 1, 0, 0, 0, 2285, 2280, 1, 0, 0, 0, 2285, 2282, 1, 0, 0, 0, 2286, 143, 1, 0, 0, 0, 2287, 2288, 6, 72, -1, 0, 2288, 2290, 3, 146, 73, 0, 2289, 2291, 3, 148, 74, 0, 2290, 2289, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 2299, 1, 0, 0, 0, 2292, 2293, 10, 2, 0, 0, 2293, 2298, 3, 144, 72, 3, 2294, 2295, 10, 1, 0, 0, 2295, 2296, 5, 9, 0, 0, 2296, 2298, 3, 144, 72, 2, 2297, 2292, 1, 0, 0, 0, 2297, 2294, 1, 0, 0, 0, 2298, 2301, 1, 0, 0, 0, 2299, 2297, 1, 0, 0, 0, 2299, 2300, 1, 0, 0, 0, 2300, 145, 1, 0, 0, 0, 2301, 2299, 1, 0, 0, 0, 2302, 2328, 3, 174, 87, 0, 2303, 2304, 5, 2, 0, 0, 2304, 2328, 5, 3, 0, 0, 2305, 2306, 5, 169, 0, 0, 2306, 2307, 5, 2, 0, 0, 2307, 2312, 3, 144, 72, 0, 2308, 2309, 5, 4, 0, 0, 2309, 2311, 3, 144, 72, 0, 2310, 2308, 1, 0, 0, 0, 2311, 2314, 1, 0, 0, 0, 2312, 2310, 1, 0, 0, 0, 2312, 2313, 1, 0, 0, 0, 2313, 2315, 1, 0, 0, 0, 2314, 2312, 1, 0, 0, 0, 2315, 2316, 5, 3, 0, 0, 2316, 2328, 1, 0, 0, 0, 2317, 2318, 5, 2, 0, 0, 2318, 2319, 3, 144, 72, 0, 2319, 2320, 5, 3, 0, 0, 2320, 2328, 1, 0, 0, 0, 2321, 2328, 5, 10, 0, 0, 2322, 2328, 5, 11, 0, 0, 2323, 2324, 5, 12, 0, 0, 2324, 2325, 3, 144, 72, 0, 2325, 2326, 5, 13, 0, 0, 2326, 2328, 1, 0, 0, 0, 2327, 2302, 1, 0, 0, 0, 2327, 2303, 1, 0, 0, 0, 2327, 2305, 1, 0, 0, 0, 2327, 2317, 1, 0, 0, 0, 2327, 2321, 1, 0, 0, 0, 2327, 2322, 1, 0, 0, 0, 2327, 2323, 1, 0, 0, 0, 2328, 147, 1, 0, 0, 0, 2329, 2331, 5, 257, 0, 0, 2330, 2332, 5, 261, 0, 0, 2331, 2330, 1, 0, 0, 0, 2331, 2332, 1, 0, 0, 0, 2332, 2360, 1, 0, 0, 0, 2333, 2335, 5, 255, 0, 0, 2334, 2336, 5, 261, 0, 0, 2335, 2334, 1, 0, 0, 0, 2335, 2336, 1, 0, 0, 0, 2336, 2360, 1, 0, 0, 0, 2337, 2339, 5, 261, 0, 0, 2338, 2340, 5, 261, 0, 0, 2339, 2338, 1, 0, 0, 0, 2339, 2340, 1, 0, 0, 0, 2340, 2360, 1, 0, 0, 0, 2341, 2342, 5, 14, 0, 0, 2342, 2343, 5, 265, 0, 0, 2343, 2345, 5, 15, 0, 0, 2344, 2346, 5, 261, 0, 0, 2345, 2344, 1, 0, 0, 0, 2345, 2346, 1, 0, 0, 0, 2346, 2360, 1, 0, 0, 0, 2347, 2349, 5, 14, 0, 0, 2348, 2350, 5, 265, 0, 0, 2349, 2348, 1, 0, 0, 0, 2349, 2350, 1, 0, 0, 0, 2350, 2351, 1, 0, 0, 0, 2351, 2353, 5, 4, 0, 0, 2352, 2354, 5, 265, 0, 0, 2353, 2352, 1, 0, 0, 0, 2353, 2354, 1, 0, 0, 0, 2354, 2355, 1, 0, 0, 0, 2355, 2357, 5, 15, 0, 0, 2356, 2358, 5, 261, 0, 0, 2357, 2356, 1, 0, 0, 0, 2357, 2358, 1, 0, 0, 0, 2358, 2360, 1, 0, 0, 0, 2359, 2329, 1, 0, 0, 0, 2359, 2333, 1, 0, 0, 0, 2359, 2337, 1, 0, 0, 0, 2359, 2341, 1, 0, 0, 0, 2359, 2347, 1, 0, 0, 0, 2360, 149, 1, 0, 0, 0, 2361, 2362, 3, 174, 87, 0, 2362, 2363, 5, 249, 0, 0, 2363, 2364, 3, 94, 47, 0, 2364, 151, 1, 0, 0, 0, 2365, 2366, 5, 87, 0, 0, 2366, 2370, 7, 23, 0, 0, 2367, 2368, 5, 225, 0, 0, 2368, 2370, 7, 24, 0, 0, 2369, 2365, 1, 0, 0, 0, 2369, 2367, 1, 0, 0, 0, 2370, 153, 1, 0, 0, 0, 2371, 2372, 5, 115, 0, 0, 2372, 2373, 5, 121, 0, 0, 2373, 2377, 3, 156, 78, 0, 2374, 2375, 5, 177, 0, 0, 2375, 2377, 7, 25, 0, 0, 2376, 2371, 1, 0, 0, 0, 2376, 2374, 1, 0, 0, 0, 2377, 155, 1, 0, 0, 0, 2378, 2379, 5, 177, 0, 0, 2379, 2386, 5, 228, 0, 0, 2380, 2381, 5, 177, 0, 0, 2381, 2386, 5, 42, 0, 0, 2382, 2383, 5, 181, 0, 0, 2383, 2386, 5, 177, 0, 0, 2384, 2386, 5, 201, 0, 0, 2385, 2378, 1, 0, 0, 0, 2385, 2380, 1, 0, 0, 0, 2385, 2382, 1, 0, 0, 0, 2385, 2384, 1, 0, 0, 0, 2386, 157, 1, 0, 0, 0, 2387, 2393, 3, 94, 47, 0, 2388, 2389, 3, 174, 87, 0, 2389, 2390, 5, 16, 0, 0, 2390, 2391, 3, 94, 47, 0, 2391, 2393, 1, 0, 0, 0, 2392, 2387, 1, 0, 0, 0, 2392, 2388, 1, 0, 0, 0, 2393, 159, 1, 0, 0, 0, 2394, 2395, 3, 174, 87, 0, 2395, 2396, 5, 1, 0, 0, 2396, 2397, 3, 174, 87, 0, 2397, 2400, 1, 0, 0, 0, 2398, 2400, 3, 174, 87, 0, 2399, 2394, 1, 0, 0, 0, 2399, 2398, 1, 0, 0, 0, 2400, 161, 1, 0, 0, 0, 2401, 2406, 3, 160, 80, 0, 2402, 2403, 5, 4, 0, 0, 2403, 2405, 3, 160, 80, 0, 2404, 2402, 1, 0, 0, 0, 2405, 2408, 1, 0, 0, 0, 2406, 2404, 1, 0, 0, 0, 2406, 2407, 1, 0, 0, 0, 2407, 163, 1, 0, 0, 0, 2408, 2406, 1, 0, 0, 0, 2409, 2410, 7, 26, 0, 0, 2410, 165, 1, 0, 0, 0, 2411, 2416, 3, 174, 87, 0, 2412, 2413, 5, 1, 0, 0, 2413, 2415, 3, 174, 87, 0, 2414, 2412, 1, 0, 0, 0, 2415, 2418, 1, 0, 0, 0, 2416, 2414, 1, 0, 0, 0, 2416, 2417, 1, 0, 0, 0, 2417, 167, 1, 0, 0, 0, 2418, 2416, 1, 0, 0, 0, 2419, 2423, 3, 170, 85, 0, 2420, 2423, 5, 55, 0, 0, 2421, 2423, 5, 51, 0, 0, 2422, 2419, 1, 0, 0, 0, 2422, 2420, 1, 0, 0, 0, 2422, 2421, 1, 0, 0, 0, 2423, 169, 1, 0, 0, 0, 2424, 2430, 3, 174, 87, 0, 2425, 2426, 5, 234, 0, 0, 2426, 2430, 3, 174, 87, 0, 2427, 2428, 5, 188, 0, 0, 2428, 2430, 3, 174, 87, 0, 2429, 2424, 1, 0, 0, 0, 2429, 2425, 1, 0, 0, 0, 2429, 2427, 1, 0, 0, 0, 2430, 171, 1, 0, 0, 0, 2431, 2436, 3, 174, 87, 0, 2432, 2433, 5, 4, 0, 0, 2433, 2435, 3, 174, 87, 0, 2434, 2432, 1, 0, 0, 0, 2435, 2438, 1, 0, 0, 0, 2436, 2434, 1, 0, 0, 0, 2436, 2437, 1, 0, 0, 0, 2437, 173, 1, 0, 0, 0, 2438, 2436, 1, 0, 0, 0, 2439, 2445, 5, 268, 0, 0, 2440, 2445, 5, 270, 0, 0, 2441, 2445, 3, 178, 89, 0, 2442, 2445, 5, 271, 0, 0, 2443, 2445, 5, 269, 0, 0, 2444, 2439, 1, 0, 0, 0, 2444, 2440, 1, 0, 0, 0, 2444, 2441, 1, 0, 0, 0, 2444, 2442, 1, 0, 0, 0, 2444, 2443, 1, 0, 0, 0, 2445, 175, 1, 0, 0, 0, 2446, 2448, 5, 256, 0, 0, 2447, 2446, 1, 0, 0, 0, 2447, 2448, 1, 0, 0, 0, 2448, 2449, 1, 0, 0, 0, 2449, 2459, 5, 266, 0, 0, 2450, 2452, 5, 256, 0, 0, 2451, 2450, 1, 0, 0, 0, 2451, 2452, 1, 0, 0, 0, 2452, 2453, 1, 0, 0, 0, 2453, 2459, 5, 267, 0, 0, 2454, 2456, 5, 256, 0, 0, 2455, 2454, 1, 0, 0, 0, 2455, 2456, 1, 0, 0, 0, 2456, 2457, 1, 0, 0, 0, 2457, 2459, 5, 265, 0, 0, 2458, 2447, 1, 0, 0, 0, 2458, 2451, 1, 0, 0, 0, 2458, 2455, 1, 0, 0, 0, 2459, 177, 1, 0, 0, 0, 2460, 2461, 7, 27, 0, 0, 2461, 179, 1, 0, 0, 0, 324, 183, 193, 197, 201, 205, 209, 213, 228, 233, 237, 243, 247, 268, 272, 276, 280, 288, 292, 295, 302, 311, 317, 321, 327, 334, 343, 352, 366, 375, 381, 388, 398, 405, 413, 421, 450, 453, 456, 460, 466, 471, 478, 483, 487, 495, 501, 505, 519, 527, 546, 571, 574, 584, 588, 601, 607, 612, 616, 622, 631, 637, 641, 648, 652, 660, 665, 669, 677, 685, 690, 694, 704, 711, 716, 720, 730, 733, 737, 740, 748, 753, 777, 783, 785, 791, 797, 799, 807, 809, 815, 821, 823, 838, 843, 850, 862, 864, 872, 874, 892, 895, 899, 903, 921, 924, 940, 950, 955, 961, 964, 973, 985, 988, 994, 1001, 1006, 1012, 1016, 1020, 1026, 1037, 1046, 1056, 1059, 1064, 1066, 1073, 1079, 1081, 1085, 1095, 1101, 1104, 1106, 1118, 1125, 1129, 1133, 1137, 1144, 1153, 1156, 1160, 1165, 1169, 1177, 1180, 1183, 1190, 1201, 1204, 1214, 1217, 1228, 1233, 1241, 1244, 1248, 1257, 1266, 1269, 1278, 1281, 1284, 1288, 1299, 1302, 1309, 1312, 1331, 1335, 1339, 1343, 1347, 1351, 1353, 1364, 1369, 1378, 1392, 1395, 1404, 1407, 1415, 1418, 1421, 1426, 1429, 1441, 1444, 1452, 1457, 1461, 1463, 1465, 1480, 1482, 1493, 1514, 1524, 1535, 1539, 1541, 1549, 1566, 1572, 1583, 1590, 1594, 1602, 1604, 1617, 1625, 1634, 1640, 1648, 1654, 1658, 1663, 1668, 1674, 1688, 1690, 1720, 1731, 1741, 1744, 1747, 1752, 1759, 1762, 1771, 1774, 1778, 1781, 1784, 1799, 1802, 1821, 1825, 1833, 1837, 1862, 1865, 1874, 1880, 1886, 1892, 1905, 1914, 1936, 1939, 1942, 1952, 1954, 1963, 1969, 1971, 1979, 1989, 1995, 2009, 2018, 2025, 2030, 2037, 2047, 2052, 2059, 2085, 2090, 2092, 2099, 2103, 2110, 2114, 2131, 2146, 2153, 2162, 2172, 2177, 2186, 2191, 2199, 2207, 2210, 2216, 2219, 2226, 2234, 2237, 2245, 2248, 2274, 2285, 2290, 2297, 2299, 2312, 2327, 2331, 2335, 2339, 2345, 2349, 2353, 2357, 2359, 2369, 2376, 2385, 2392, 2399, 2406, 2416, 2422, 2429, 2436, 2444, 2447, 2451, 2455, 2458] \ No newline at end of file diff --git a/src/lib/trinosql/trinoSqlParser.tokens b/src/lib/trinosql/trinoSqlParser.tokens new file mode 100644 index 0000000..5103628 --- /dev/null +++ b/src/lib/trinosql/trinoSqlParser.tokens @@ -0,0 +1,538 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +ADD=17 +ADMIN=18 +AFTER=19 +ALL=20 +ALTER=21 +ANALYZE=22 +AND=23 +ANY=24 +ARRAY=25 +AS=26 +ASC=27 +AT=28 +AUTHORIZATION=29 +BERNOULLI=30 +BETWEEN=31 +BY=32 +CALL=33 +CASCADE=34 +CASE=35 +CAST=36 +CATALOGS=37 +COLUMN=38 +COLUMNS=39 +COMMENT=40 +COMMIT=41 +COMMITTED=42 +CONSTRAINT=43 +CREATE=44 +CROSS=45 +CUBE=46 +CURRENT=47 +CURRENT_CATALOG=48 +CURRENT_DATE=49 +CURRENT_PATH=50 +CURRENT_ROLE=51 +CURRENT_SCHEMA=52 +CURRENT_TIME=53 +CURRENT_TIMESTAMP=54 +CURRENT_USER=55 +DATA=56 +DATE=57 +DAY=58 +DEFAULT=59 +DEALLOCATE=60 +DEFINER=61 +DELETE=62 +DESC=63 +DESCRIBE=64 +DEFINE=65 +DISTINCT=66 +DISTRIBUTED=67 +DOUBLE=68 +DROP=69 +ELSE=70 +EMPTY=71 +END=72 +ESCAPE=73 +EXCEPT=74 +EXCLUDING=75 +EXECUTE=76 +EXISTS=77 +EXPLAIN=78 +EXTRACT=79 +FALSE=80 +FETCH=81 +FILTER=82 +FINAL=83 +FIRST=84 +FOLLOWING=85 +FOR=86 +FORMAT=87 +FROM=88 +FULL=89 +FUNCTIONS=90 +GRANT=91 +GRANTED=92 +GRANTS=93 +DENY=94 +GRAPHVIZ=95 +GROUP=96 +GROUPING=97 +GROUPS=98 +HAVING=99 +HOUR=100 +IF=101 +IGNORE=102 +IN=103 +INCLUDING=104 +INITIAL=105 +INNER=106 +INPUT=107 +INSERT=108 +INTERSECT=109 +INTERVAL=110 +INTO=111 +INVOKER=112 +IO=113 +IS=114 +ISOLATION=115 +JOIN=116 +JSON=117 +LAST=118 +LATERAL=119 +LEFT=120 +LEVEL=121 +LIKE=122 +LIMIT=123 +LOCAL=124 +LOCALTIME=125 +LOCALTIMESTAMP=126 +LOGICAL=127 +MAP=128 +MATCH=129 +MATCHED=130 +MATCHES=131 +MATCH_RECOGNIZE=132 +MATERIALIZED=133 +MEASURES=134 +MERGE=135 +MINUTE=136 +MONTH=137 +NATURAL=138 +NEXT=139 +NFC=140 +NFD=141 +NFKC=142 +NFKD=143 +NO=144 +NONE=145 +NORMALIZE=146 +NOT=147 +NULL=148 +NULLIF=149 +NULLS=150 +OFFSET=151 +OMIT=152 +ON=153 +ONE=154 +ONLY=155 +OPTION=156 +OR=157 +ORDER=158 +ORDINALITY=159 +OUTER=160 +OUTPUT=161 +OVER=162 +PARTITION=163 +PARTITIONS=164 +PAST=165 +PATH=166 +PATTERN=167 +PER=168 +PERMUTE=169 +POSITION=170 +PRECEDING=171 +PRECISION=172 +PREPARE=173 +PRIVILEGES=174 +PROPERTIES=175 +RANGE=176 +READ=177 +RECURSIVE=178 +REFRESH=179 +RENAME=180 +REPEATABLE=181 +REPLACE=182 +RESET=183 +RESPECT=184 +RESTRICT=185 +REVOKE=186 +RIGHT=187 +ROLE=188 +ROLES=189 +ROLLBACK=190 +ROLLUP=191 +ROW=192 +ROWS=193 +RUNNING=194 +SCHEMA=195 +SCHEMAS=196 +SECOND=197 +SECURITY=198 +SEEK=199 +SELECT=200 +SERIALIZABLE=201 +SESSION=202 +SET=203 +SETS=204 +SHOW=205 +SOME=206 +START=207 +STATS=208 +SUBSET=209 +SUBSTRING=210 +SYSTEM=211 +TABLE=212 +TABLES=213 +TABLESAMPLE=214 +TEXT=215 +THEN=216 +TIES=217 +TIME=218 +TIMESTAMP=219 +TO=220 +TRANSACTION=221 +TRUNCATE=222 +TRUE=223 +TRY_CAST=224 +TYPE=225 +UESCAPE=226 +UNBOUNDED=227 +UNCOMMITTED=228 +UNION=229 +UNMATCHED=230 +UNNEST=231 +UPDATE=232 +USE=233 +USER=234 +USING=235 +VALIDATE=236 +VALUES=237 +VERBOSE=238 +VIEW=239 +WHEN=240 +WHERE=241 +WINDOW=242 +WITH=243 +WITHOUT=244 +WORK=245 +WRITE=246 +YEAR=247 +ZONE=248 +EQ=249 +NEQ=250 +LT=251 +LTE=252 +GT=253 +GTE=254 +PLUS=255 +MINUS=256 +ASTERISK=257 +SLASH=258 +PERCENT=259 +CONCAT=260 +QUESTION_MARK=261 +STRING=262 +UNICODE_STRING=263 +BINARY_LITERAL=264 +INTEGER_VALUE=265 +DECIMAL_VALUE=266 +DOUBLE_VALUE=267 +IDENTIFIER=268 +DIGIT_IDENTIFIER=269 +QUOTED_IDENTIFIER=270 +BACKQUOTED_IDENTIFIER=271 +SEMICOLON=272 +SIMPLE_COMMENT=273 +BRACKETED_COMMENT=274 +WS=275 +UNRECOGNIZED=276 +DELIMITER=277 +'.'=1 +'('=2 +')'=3 +','=4 +'SKIP'=5 +'->'=6 +'['=7 +']'=8 +'|'=9 +'^'=10 +'$'=11 +'{-'=12 +'-}'=13 +'{'=14 +'}'=15 +'=>'=16 +'ADD'=17 +'ADMIN'=18 +'AFTER'=19 +'ALL'=20 +'ALTER'=21 +'ANALYZE'=22 +'AND'=23 +'ANY'=24 +'ARRAY'=25 +'AS'=26 +'ASC'=27 +'AT'=28 +'AUTHORIZATION'=29 +'BERNOULLI'=30 +'BETWEEN'=31 +'BY'=32 +'CALL'=33 +'CASCADE'=34 +'CASE'=35 +'CAST'=36 +'CATALOGS'=37 +'COLUMN'=38 +'COLUMNS'=39 +'COMMENT'=40 +'COMMIT'=41 +'COMMITTED'=42 +'CONSTRAINT'=43 +'CREATE'=44 +'CROSS'=45 +'CUBE'=46 +'CURRENT'=47 +'CURRENT_CATALOG'=48 +'CURRENT_DATE'=49 +'CURRENT_PATH'=50 +'CURRENT_ROLE'=51 +'CURRENT_SCHEMA'=52 +'CURRENT_TIME'=53 +'CURRENT_TIMESTAMP'=54 +'CURRENT_USER'=55 +'DATA'=56 +'DATE'=57 +'DAY'=58 +'DEFAULT'=59 +'DEALLOCATE'=60 +'DEFINER'=61 +'DELETE'=62 +'DESC'=63 +'DESCRIBE'=64 +'DEFINE'=65 +'DISTINCT'=66 +'DISTRIBUTED'=67 +'DOUBLE'=68 +'DROP'=69 +'ELSE'=70 +'EMPTY'=71 +'END'=72 +'ESCAPE'=73 +'EXCEPT'=74 +'EXCLUDING'=75 +'EXECUTE'=76 +'EXISTS'=77 +'EXPLAIN'=78 +'EXTRACT'=79 +'FALSE'=80 +'FETCH'=81 +'FILTER'=82 +'FINAL'=83 +'FIRST'=84 +'FOLLOWING'=85 +'FOR'=86 +'FORMAT'=87 +'FROM'=88 +'FULL'=89 +'FUNCTIONS'=90 +'GRANT'=91 +'GRANTED'=92 +'GRANTS'=93 +'DENY'=94 +'GRAPHVIZ'=95 +'GROUP'=96 +'GROUPING'=97 +'GROUPS'=98 +'HAVING'=99 +'HOUR'=100 +'IF'=101 +'IGNORE'=102 +'IN'=103 +'INCLUDING'=104 +'INITIAL'=105 +'INNER'=106 +'INPUT'=107 +'INSERT'=108 +'INTERSECT'=109 +'INTERVAL'=110 +'INTO'=111 +'INVOKER'=112 +'IO'=113 +'IS'=114 +'ISOLATION'=115 +'JOIN'=116 +'JSON'=117 +'LAST'=118 +'LATERAL'=119 +'LEFT'=120 +'LEVEL'=121 +'LIKE'=122 +'LIMIT'=123 +'LOCAL'=124 +'LOCALTIME'=125 +'LOCALTIMESTAMP'=126 +'LOGICAL'=127 +'MAP'=128 +'MATCH'=129 +'MATCHED'=130 +'MATCHES'=131 +'MATCH_RECOGNIZE'=132 +'MATERIALIZED'=133 +'MEASURES'=134 +'MERGE'=135 +'MINUTE'=136 +'MONTH'=137 +'NATURAL'=138 +'NEXT'=139 +'NFC'=140 +'NFD'=141 +'NFKC'=142 +'NFKD'=143 +'NO'=144 +'NONE'=145 +'NORMALIZE'=146 +'NOT'=147 +'NULL'=148 +'NULLIF'=149 +'NULLS'=150 +'OFFSET'=151 +'OMIT'=152 +'ON'=153 +'ONE'=154 +'ONLY'=155 +'OPTION'=156 +'OR'=157 +'ORDER'=158 +'ORDINALITY'=159 +'OUTER'=160 +'OUTPUT'=161 +'OVER'=162 +'PARTITION'=163 +'PARTITIONS'=164 +'PAST'=165 +'PATH'=166 +'PATTERN'=167 +'PER'=168 +'PERMUTE'=169 +'POSITION'=170 +'PRECEDING'=171 +'PRECISION'=172 +'PREPARE'=173 +'PRIVILEGES'=174 +'PROPERTIES'=175 +'RANGE'=176 +'READ'=177 +'RECURSIVE'=178 +'REFRESH'=179 +'RENAME'=180 +'REPEATABLE'=181 +'REPLACE'=182 +'RESET'=183 +'RESPECT'=184 +'RESTRICT'=185 +'REVOKE'=186 +'RIGHT'=187 +'ROLE'=188 +'ROLES'=189 +'ROLLBACK'=190 +'ROLLUP'=191 +'ROW'=192 +'ROWS'=193 +'RUNNING'=194 +'SCHEMA'=195 +'SCHEMAS'=196 +'SECOND'=197 +'SECURITY'=198 +'SEEK'=199 +'SELECT'=200 +'SERIALIZABLE'=201 +'SESSION'=202 +'SET'=203 +'SETS'=204 +'SHOW'=205 +'SOME'=206 +'START'=207 +'STATS'=208 +'SUBSET'=209 +'SUBSTRING'=210 +'SYSTEM'=211 +'TABLE'=212 +'TABLES'=213 +'TABLESAMPLE'=214 +'TEXT'=215 +'THEN'=216 +'TIES'=217 +'TIME'=218 +'TIMESTAMP'=219 +'TO'=220 +'TRANSACTION'=221 +'TRUNCATE'=222 +'TRUE'=223 +'TRY_CAST'=224 +'TYPE'=225 +'UESCAPE'=226 +'UNBOUNDED'=227 +'UNCOMMITTED'=228 +'UNION'=229 +'UNMATCHED'=230 +'UNNEST'=231 +'UPDATE'=232 +'USE'=233 +'USER'=234 +'USING'=235 +'VALIDATE'=236 +'VALUES'=237 +'VERBOSE'=238 +'VIEW'=239 +'WHEN'=240 +'WHERE'=241 +'WINDOW'=242 +'WITH'=243 +'WITHOUT'=244 +'WORK'=245 +'WRITE'=246 +'YEAR'=247 +'ZONE'=248 +'='=249 +'<'=251 +'<='=252 +'>'=253 +'>='=254 +'+'=255 +'-'=256 +'*'=257 +'/'=258 +'%'=259 +'||'=260 +'?'=261 +';'=272 diff --git a/src/lib/trinosql/trinoSqlParserLexer.interp b/src/lib/trinosql/trinoSqlParserLexer.interp new file mode 100644 index 0000000..f265e04 --- /dev/null +++ b/src/lib/trinosql/trinoSqlParserLexer.interp @@ -0,0 +1,848 @@ +token literal names: +null +'.' +'(' +')' +',' +'SKIP' +'->' +'[' +']' +'|' +'^' +'$' +'{-' +'-}' +'{' +'}' +'=>' +'ADD' +'ADMIN' +'AFTER' +'ALL' +'ALTER' +'ANALYZE' +'AND' +'ANY' +'ARRAY' +'AS' +'ASC' +'AT' +'AUTHORIZATION' +'BERNOULLI' +'BETWEEN' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CATALOGS' +'COLUMN' +'COLUMNS' +'COMMENT' +'COMMIT' +'COMMITTED' +'CONSTRAINT' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURRENT_CATALOG' +'CURRENT_DATE' +'CURRENT_PATH' +'CURRENT_ROLE' +'CURRENT_SCHEMA' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURRENT_USER' +'DATA' +'DATE' +'DAY' +'DEFAULT' +'DEALLOCATE' +'DEFINER' +'DELETE' +'DESC' +'DESCRIBE' +'DEFINE' +'DISTINCT' +'DISTRIBUTED' +'DOUBLE' +'DROP' +'ELSE' +'EMPTY' +'END' +'ESCAPE' +'EXCEPT' +'EXCLUDING' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTRACT' +'FALSE' +'FETCH' +'FILTER' +'FINAL' +'FIRST' +'FOLLOWING' +'FOR' +'FORMAT' +'FROM' +'FULL' +'FUNCTIONS' +'GRANT' +'GRANTED' +'GRANTS' +'DENY' +'GRAPHVIZ' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IF' +'IGNORE' +'IN' +'INCLUDING' +'INITIAL' +'INNER' +'INPUT' +'INSERT' +'INTERSECT' +'INTERVAL' +'INTO' +'INVOKER' +'IO' +'IS' +'ISOLATION' +'JOIN' +'JSON' +'LAST' +'LATERAL' +'LEFT' +'LEVEL' +'LIKE' +'LIMIT' +'LOCAL' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOGICAL' +'MAP' +'MATCH' +'MATCHED' +'MATCHES' +'MATCH_RECOGNIZE' +'MATERIALIZED' +'MEASURES' +'MERGE' +'MINUTE' +'MONTH' +'NATURAL' +'NEXT' +'NFC' +'NFD' +'NFKC' +'NFKD' +'NO' +'NONE' +'NORMALIZE' +'NOT' +'NULL' +'NULLIF' +'NULLS' +'OFFSET' +'OMIT' +'ON' +'ONE' +'ONLY' +'OPTION' +'OR' +'ORDER' +'ORDINALITY' +'OUTER' +'OUTPUT' +'OVER' +'PARTITION' +'PARTITIONS' +'PAST' +'PATH' +'PATTERN' +'PER' +'PERMUTE' +'POSITION' +'PRECEDING' +'PRECISION' +'PREPARE' +'PRIVILEGES' +'PROPERTIES' +'RANGE' +'READ' +'RECURSIVE' +'REFRESH' +'RENAME' +'REPEATABLE' +'REPLACE' +'RESET' +'RESPECT' +'RESTRICT' +'REVOKE' +'RIGHT' +'ROLE' +'ROLES' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'RUNNING' +'SCHEMA' +'SCHEMAS' +'SECOND' +'SECURITY' +'SEEK' +'SELECT' +'SERIALIZABLE' +'SESSION' +'SET' +'SETS' +'SHOW' +'SOME' +'START' +'STATS' +'SUBSET' +'SUBSTRING' +'SYSTEM' +'TABLE' +'TABLES' +'TABLESAMPLE' +'TEXT' +'THEN' +'TIES' +'TIME' +'TIMESTAMP' +'TO' +'TRANSACTION' +'TRUNCATE' +'TRUE' +'TRY_CAST' +'TYPE' +'UESCAPE' +'UNBOUNDED' +'UNCOMMITTED' +'UNION' +'UNMATCHED' +'UNNEST' +'UPDATE' +'USE' +'USER' +'USING' +'VALIDATE' +'VALUES' +'VERBOSE' +'VIEW' +'WHEN' +'WHERE' +'WINDOW' +'WITH' +'WITHOUT' +'WORK' +'WRITE' +'YEAR' +'ZONE' +'=' +null +'<' +'<=' +'>' +'>=' +'+' +'-' +'*' +'/' +'%' +'||' +'?' +null +null +null +null +null +null +null +null +null +null +';' +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +ADD +ADMIN +AFTER +ALL +ALTER +ANALYZE +AND +ANY +ARRAY +AS +ASC +AT +AUTHORIZATION +BERNOULLI +BETWEEN +BY +CALL +CASCADE +CASE +CAST +CATALOGS +COLUMN +COLUMNS +COMMENT +COMMIT +COMMITTED +CONSTRAINT +CREATE +CROSS +CUBE +CURRENT +CURRENT_CATALOG +CURRENT_DATE +CURRENT_PATH +CURRENT_ROLE +CURRENT_SCHEMA +CURRENT_TIME +CURRENT_TIMESTAMP +CURRENT_USER +DATA +DATE +DAY +DEFAULT +DEALLOCATE +DEFINER +DELETE +DESC +DESCRIBE +DEFINE +DISTINCT +DISTRIBUTED +DOUBLE +DROP +ELSE +EMPTY +END +ESCAPE +EXCEPT +EXCLUDING +EXECUTE +EXISTS +EXPLAIN +EXTRACT +FALSE +FETCH +FILTER +FINAL +FIRST +FOLLOWING +FOR +FORMAT +FROM +FULL +FUNCTIONS +GRANT +GRANTED +GRANTS +DENY +GRAPHVIZ +GROUP +GROUPING +GROUPS +HAVING +HOUR +IF +IGNORE +IN +INCLUDING +INITIAL +INNER +INPUT +INSERT +INTERSECT +INTERVAL +INTO +INVOKER +IO +IS +ISOLATION +JOIN +JSON +LAST +LATERAL +LEFT +LEVEL +LIKE +LIMIT +LOCAL +LOCALTIME +LOCALTIMESTAMP +LOGICAL +MAP +MATCH +MATCHED +MATCHES +MATCH_RECOGNIZE +MATERIALIZED +MEASURES +MERGE +MINUTE +MONTH +NATURAL +NEXT +NFC +NFD +NFKC +NFKD +NO +NONE +NORMALIZE +NOT +NULL +NULLIF +NULLS +OFFSET +OMIT +ON +ONE +ONLY +OPTION +OR +ORDER +ORDINALITY +OUTER +OUTPUT +OVER +PARTITION +PARTITIONS +PAST +PATH +PATTERN +PER +PERMUTE +POSITION +PRECEDING +PRECISION +PREPARE +PRIVILEGES +PROPERTIES +RANGE +READ +RECURSIVE +REFRESH +RENAME +REPEATABLE +REPLACE +RESET +RESPECT +RESTRICT +REVOKE +RIGHT +ROLE +ROLES +ROLLBACK +ROLLUP +ROW +ROWS +RUNNING +SCHEMA +SCHEMAS +SECOND +SECURITY +SEEK +SELECT +SERIALIZABLE +SESSION +SET +SETS +SHOW +SOME +START +STATS +SUBSET +SUBSTRING +SYSTEM +TABLE +TABLES +TABLESAMPLE +TEXT +THEN +TIES +TIME +TIMESTAMP +TO +TRANSACTION +TRUNCATE +TRUE +TRY_CAST +TYPE +UESCAPE +UNBOUNDED +UNCOMMITTED +UNION +UNMATCHED +UNNEST +UPDATE +USE +USER +USING +VALIDATE +VALUES +VERBOSE +VIEW +WHEN +WHERE +WINDOW +WITH +WITHOUT +WORK +WRITE +YEAR +ZONE +EQ +NEQ +LT +LTE +GT +GTE +PLUS +MINUS +ASTERISK +SLASH +PERCENT +CONCAT +QUESTION_MARK +STRING +UNICODE_STRING +BINARY_LITERAL +INTEGER_VALUE +DECIMAL_VALUE +DOUBLE_VALUE +IDENTIFIER +DIGIT_IDENTIFIER +QUOTED_IDENTIFIER +BACKQUOTED_IDENTIFIER +SEMICOLON +SIMPLE_COMMENT +BRACKETED_COMMENT +WS +UNRECOGNIZED + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +T__5 +T__6 +T__7 +T__8 +T__9 +T__10 +T__11 +T__12 +T__13 +T__14 +T__15 +ADD +ADMIN +AFTER +ALL +ALTER +ANALYZE +AND +ANY +ARRAY +AS +ASC +AT +AUTHORIZATION +BERNOULLI +BETWEEN +BY +CALL +CASCADE +CASE +CAST +CATALOGS +COLUMN +COLUMNS +COMMENT +COMMIT +COMMITTED +CONSTRAINT +CREATE +CROSS +CUBE +CURRENT +CURRENT_CATALOG +CURRENT_DATE +CURRENT_PATH +CURRENT_ROLE +CURRENT_SCHEMA +CURRENT_TIME +CURRENT_TIMESTAMP +CURRENT_USER +DATA +DATE +DAY +DEFAULT +DEALLOCATE +DEFINER +DELETE +DESC +DESCRIBE +DEFINE +DISTINCT +DISTRIBUTED +DOUBLE +DROP +ELSE +EMPTY +END +ESCAPE +EXCEPT +EXCLUDING +EXECUTE +EXISTS +EXPLAIN +EXTRACT +FALSE +FETCH +FILTER +FINAL +FIRST +FOLLOWING +FOR +FORMAT +FROM +FULL +FUNCTIONS +GRANT +GRANTED +GRANTS +DENY +GRAPHVIZ +GROUP +GROUPING +GROUPS +HAVING +HOUR +IF +IGNORE +IN +INCLUDING +INITIAL +INNER +INPUT +INSERT +INTERSECT +INTERVAL +INTO +INVOKER +IO +IS +ISOLATION +JOIN +JSON +LAST +LATERAL +LEFT +LEVEL +LIKE +LIMIT +LOCAL +LOCALTIME +LOCALTIMESTAMP +LOGICAL +MAP +MATCH +MATCHED +MATCHES +MATCH_RECOGNIZE +MATERIALIZED +MEASURES +MERGE +MINUTE +MONTH +NATURAL +NEXT +NFC +NFD +NFKC +NFKD +NO +NONE +NORMALIZE +NOT +NULL +NULLIF +NULLS +OFFSET +OMIT +ON +ONE +ONLY +OPTION +OR +ORDER +ORDINALITY +OUTER +OUTPUT +OVER +PARTITION +PARTITIONS +PAST +PATH +PATTERN +PER +PERMUTE +POSITION +PRECEDING +PRECISION +PREPARE +PRIVILEGES +PROPERTIES +RANGE +READ +RECURSIVE +REFRESH +RENAME +REPEATABLE +REPLACE +RESET +RESPECT +RESTRICT +REVOKE +RIGHT +ROLE +ROLES +ROLLBACK +ROLLUP +ROW +ROWS +RUNNING +SCHEMA +SCHEMAS +SECOND +SECURITY +SEEK +SELECT +SERIALIZABLE +SESSION +SET +SETS +SHOW +SOME +START +STATS +SUBSET +SUBSTRING +SYSTEM +TABLE +TABLES +TABLESAMPLE +TEXT +THEN +TIES +TIME +TIMESTAMP +TO +TRANSACTION +TRUNCATE +TRUE +TRY_CAST +TYPE +UESCAPE +UNBOUNDED +UNCOMMITTED +UNION +UNMATCHED +UNNEST +UPDATE +USE +USER +USING +VALIDATE +VALUES +VERBOSE +VIEW +WHEN +WHERE +WINDOW +WITH +WITHOUT +WORK +WRITE +YEAR +ZONE +EQ +NEQ +LT +LTE +GT +GTE +PLUS +MINUS +ASTERISK +SLASH +PERCENT +CONCAT +QUESTION_MARK +STRING +UNICODE_STRING +BINARY_LITERAL +INTEGER_VALUE +DECIMAL_VALUE +DOUBLE_VALUE +IDENTIFIER +DIGIT_IDENTIFIER +QUOTED_IDENTIFIER +BACKQUOTED_IDENTIFIER +SEMICOLON +EXPONENT +DIGIT +LETTER +SIMPLE_COMMENT +BRACKETED_COMMENT +WS +UNRECOGNIZED + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 276, 2467, 6, -1, 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, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 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, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 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, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 3, 249, 2257, 8, 249, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 255, 1, 255, 1, 256, 1, 256, 1, 257, 1, 257, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 5, 261, 2288, 8, 261, 10, 261, 12, 261, 2291, 9, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 5, 262, 2302, 8, 262, 10, 262, 12, 262, 2305, 9, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 5, 263, 2313, 8, 263, 10, 263, 12, 263, 2316, 9, 263, 1, 263, 1, 263, 1, 264, 4, 264, 2321, 8, 264, 11, 264, 12, 264, 2322, 1, 265, 4, 265, 2326, 8, 265, 11, 265, 12, 265, 2327, 1, 265, 1, 265, 5, 265, 2332, 8, 265, 10, 265, 12, 265, 2335, 9, 265, 1, 265, 1, 265, 4, 265, 2339, 8, 265, 11, 265, 12, 265, 2340, 3, 265, 2343, 8, 265, 1, 266, 4, 266, 2346, 8, 266, 11, 266, 12, 266, 2347, 1, 266, 1, 266, 5, 266, 2352, 8, 266, 10, 266, 12, 266, 2355, 9, 266, 3, 266, 2357, 8, 266, 1, 266, 1, 266, 1, 266, 1, 266, 4, 266, 2363, 8, 266, 11, 266, 12, 266, 2364, 1, 266, 1, 266, 3, 266, 2369, 8, 266, 1, 267, 1, 267, 3, 267, 2373, 8, 267, 1, 267, 1, 267, 1, 267, 5, 267, 2378, 8, 267, 10, 267, 12, 267, 2381, 9, 267, 1, 268, 1, 268, 1, 268, 1, 268, 4, 268, 2387, 8, 268, 11, 268, 12, 268, 2388, 1, 269, 1, 269, 1, 269, 1, 269, 5, 269, 2395, 8, 269, 10, 269, 12, 269, 2398, 9, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 5, 270, 2406, 8, 270, 10, 270, 12, 270, 2409, 9, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 272, 1, 272, 3, 272, 2417, 8, 272, 1, 272, 4, 272, 2420, 8, 272, 11, 272, 12, 272, 2421, 1, 273, 1, 273, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 5, 275, 2432, 8, 275, 10, 275, 12, 275, 2435, 9, 275, 1, 275, 3, 275, 2438, 8, 275, 1, 275, 3, 275, 2441, 8, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 5, 276, 2449, 8, 276, 10, 276, 12, 276, 2452, 9, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 4, 277, 2460, 8, 277, 11, 277, 12, 277, 2461, 1, 277, 1, 277, 1, 278, 1, 278, 1, 2450, 0, 279, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 0, 547, 0, 549, 0, 551, 273, 553, 274, 555, 275, 557, 276, 1, 0, 8, 1, 0, 39, 39, 1, 0, 34, 34, 1, 0, 96, 96, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2497, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 1, 559, 1, 0, 0, 0, 3, 561, 1, 0, 0, 0, 5, 563, 1, 0, 0, 0, 7, 565, 1, 0, 0, 0, 9, 567, 1, 0, 0, 0, 11, 572, 1, 0, 0, 0, 13, 575, 1, 0, 0, 0, 15, 577, 1, 0, 0, 0, 17, 579, 1, 0, 0, 0, 19, 581, 1, 0, 0, 0, 21, 583, 1, 0, 0, 0, 23, 585, 1, 0, 0, 0, 25, 588, 1, 0, 0, 0, 27, 591, 1, 0, 0, 0, 29, 593, 1, 0, 0, 0, 31, 595, 1, 0, 0, 0, 33, 598, 1, 0, 0, 0, 35, 602, 1, 0, 0, 0, 37, 608, 1, 0, 0, 0, 39, 614, 1, 0, 0, 0, 41, 618, 1, 0, 0, 0, 43, 624, 1, 0, 0, 0, 45, 632, 1, 0, 0, 0, 47, 636, 1, 0, 0, 0, 49, 640, 1, 0, 0, 0, 51, 646, 1, 0, 0, 0, 53, 649, 1, 0, 0, 0, 55, 653, 1, 0, 0, 0, 57, 656, 1, 0, 0, 0, 59, 670, 1, 0, 0, 0, 61, 680, 1, 0, 0, 0, 63, 688, 1, 0, 0, 0, 65, 691, 1, 0, 0, 0, 67, 696, 1, 0, 0, 0, 69, 704, 1, 0, 0, 0, 71, 709, 1, 0, 0, 0, 73, 714, 1, 0, 0, 0, 75, 723, 1, 0, 0, 0, 77, 730, 1, 0, 0, 0, 79, 738, 1, 0, 0, 0, 81, 746, 1, 0, 0, 0, 83, 753, 1, 0, 0, 0, 85, 763, 1, 0, 0, 0, 87, 774, 1, 0, 0, 0, 89, 781, 1, 0, 0, 0, 91, 787, 1, 0, 0, 0, 93, 792, 1, 0, 0, 0, 95, 800, 1, 0, 0, 0, 97, 816, 1, 0, 0, 0, 99, 829, 1, 0, 0, 0, 101, 842, 1, 0, 0, 0, 103, 855, 1, 0, 0, 0, 105, 870, 1, 0, 0, 0, 107, 883, 1, 0, 0, 0, 109, 901, 1, 0, 0, 0, 111, 914, 1, 0, 0, 0, 113, 919, 1, 0, 0, 0, 115, 924, 1, 0, 0, 0, 117, 928, 1, 0, 0, 0, 119, 936, 1, 0, 0, 0, 121, 947, 1, 0, 0, 0, 123, 955, 1, 0, 0, 0, 125, 962, 1, 0, 0, 0, 127, 967, 1, 0, 0, 0, 129, 976, 1, 0, 0, 0, 131, 983, 1, 0, 0, 0, 133, 992, 1, 0, 0, 0, 135, 1004, 1, 0, 0, 0, 137, 1011, 1, 0, 0, 0, 139, 1016, 1, 0, 0, 0, 141, 1021, 1, 0, 0, 0, 143, 1027, 1, 0, 0, 0, 145, 1031, 1, 0, 0, 0, 147, 1038, 1, 0, 0, 0, 149, 1045, 1, 0, 0, 0, 151, 1055, 1, 0, 0, 0, 153, 1063, 1, 0, 0, 0, 155, 1070, 1, 0, 0, 0, 157, 1078, 1, 0, 0, 0, 159, 1086, 1, 0, 0, 0, 161, 1092, 1, 0, 0, 0, 163, 1098, 1, 0, 0, 0, 165, 1105, 1, 0, 0, 0, 167, 1111, 1, 0, 0, 0, 169, 1117, 1, 0, 0, 0, 171, 1127, 1, 0, 0, 0, 173, 1131, 1, 0, 0, 0, 175, 1138, 1, 0, 0, 0, 177, 1143, 1, 0, 0, 0, 179, 1148, 1, 0, 0, 0, 181, 1158, 1, 0, 0, 0, 183, 1164, 1, 0, 0, 0, 185, 1172, 1, 0, 0, 0, 187, 1179, 1, 0, 0, 0, 189, 1184, 1, 0, 0, 0, 191, 1193, 1, 0, 0, 0, 193, 1199, 1, 0, 0, 0, 195, 1208, 1, 0, 0, 0, 197, 1215, 1, 0, 0, 0, 199, 1222, 1, 0, 0, 0, 201, 1227, 1, 0, 0, 0, 203, 1230, 1, 0, 0, 0, 205, 1237, 1, 0, 0, 0, 207, 1240, 1, 0, 0, 0, 209, 1250, 1, 0, 0, 0, 211, 1258, 1, 0, 0, 0, 213, 1264, 1, 0, 0, 0, 215, 1270, 1, 0, 0, 0, 217, 1277, 1, 0, 0, 0, 219, 1287, 1, 0, 0, 0, 221, 1296, 1, 0, 0, 0, 223, 1301, 1, 0, 0, 0, 225, 1309, 1, 0, 0, 0, 227, 1312, 1, 0, 0, 0, 229, 1315, 1, 0, 0, 0, 231, 1325, 1, 0, 0, 0, 233, 1330, 1, 0, 0, 0, 235, 1335, 1, 0, 0, 0, 237, 1340, 1, 0, 0, 0, 239, 1348, 1, 0, 0, 0, 241, 1353, 1, 0, 0, 0, 243, 1359, 1, 0, 0, 0, 245, 1364, 1, 0, 0, 0, 247, 1370, 1, 0, 0, 0, 249, 1376, 1, 0, 0, 0, 251, 1386, 1, 0, 0, 0, 253, 1401, 1, 0, 0, 0, 255, 1409, 1, 0, 0, 0, 257, 1413, 1, 0, 0, 0, 259, 1419, 1, 0, 0, 0, 261, 1427, 1, 0, 0, 0, 263, 1435, 1, 0, 0, 0, 265, 1451, 1, 0, 0, 0, 267, 1464, 1, 0, 0, 0, 269, 1473, 1, 0, 0, 0, 271, 1479, 1, 0, 0, 0, 273, 1486, 1, 0, 0, 0, 275, 1492, 1, 0, 0, 0, 277, 1500, 1, 0, 0, 0, 279, 1505, 1, 0, 0, 0, 281, 1509, 1, 0, 0, 0, 283, 1513, 1, 0, 0, 0, 285, 1518, 1, 0, 0, 0, 287, 1523, 1, 0, 0, 0, 289, 1526, 1, 0, 0, 0, 291, 1531, 1, 0, 0, 0, 293, 1541, 1, 0, 0, 0, 295, 1545, 1, 0, 0, 0, 297, 1550, 1, 0, 0, 0, 299, 1557, 1, 0, 0, 0, 301, 1563, 1, 0, 0, 0, 303, 1570, 1, 0, 0, 0, 305, 1575, 1, 0, 0, 0, 307, 1578, 1, 0, 0, 0, 309, 1582, 1, 0, 0, 0, 311, 1587, 1, 0, 0, 0, 313, 1594, 1, 0, 0, 0, 315, 1597, 1, 0, 0, 0, 317, 1603, 1, 0, 0, 0, 319, 1614, 1, 0, 0, 0, 321, 1620, 1, 0, 0, 0, 323, 1627, 1, 0, 0, 0, 325, 1632, 1, 0, 0, 0, 327, 1642, 1, 0, 0, 0, 329, 1653, 1, 0, 0, 0, 331, 1658, 1, 0, 0, 0, 333, 1663, 1, 0, 0, 0, 335, 1671, 1, 0, 0, 0, 337, 1675, 1, 0, 0, 0, 339, 1683, 1, 0, 0, 0, 341, 1692, 1, 0, 0, 0, 343, 1702, 1, 0, 0, 0, 345, 1712, 1, 0, 0, 0, 347, 1720, 1, 0, 0, 0, 349, 1731, 1, 0, 0, 0, 351, 1742, 1, 0, 0, 0, 353, 1748, 1, 0, 0, 0, 355, 1753, 1, 0, 0, 0, 357, 1763, 1, 0, 0, 0, 359, 1771, 1, 0, 0, 0, 361, 1778, 1, 0, 0, 0, 363, 1789, 1, 0, 0, 0, 365, 1797, 1, 0, 0, 0, 367, 1803, 1, 0, 0, 0, 369, 1811, 1, 0, 0, 0, 371, 1820, 1, 0, 0, 0, 373, 1827, 1, 0, 0, 0, 375, 1833, 1, 0, 0, 0, 377, 1838, 1, 0, 0, 0, 379, 1844, 1, 0, 0, 0, 381, 1853, 1, 0, 0, 0, 383, 1860, 1, 0, 0, 0, 385, 1864, 1, 0, 0, 0, 387, 1869, 1, 0, 0, 0, 389, 1877, 1, 0, 0, 0, 391, 1884, 1, 0, 0, 0, 393, 1892, 1, 0, 0, 0, 395, 1899, 1, 0, 0, 0, 397, 1908, 1, 0, 0, 0, 399, 1913, 1, 0, 0, 0, 401, 1920, 1, 0, 0, 0, 403, 1933, 1, 0, 0, 0, 405, 1941, 1, 0, 0, 0, 407, 1945, 1, 0, 0, 0, 409, 1950, 1, 0, 0, 0, 411, 1955, 1, 0, 0, 0, 413, 1960, 1, 0, 0, 0, 415, 1966, 1, 0, 0, 0, 417, 1972, 1, 0, 0, 0, 419, 1979, 1, 0, 0, 0, 421, 1989, 1, 0, 0, 0, 423, 1996, 1, 0, 0, 0, 425, 2002, 1, 0, 0, 0, 427, 2009, 1, 0, 0, 0, 429, 2021, 1, 0, 0, 0, 431, 2026, 1, 0, 0, 0, 433, 2031, 1, 0, 0, 0, 435, 2036, 1, 0, 0, 0, 437, 2041, 1, 0, 0, 0, 439, 2051, 1, 0, 0, 0, 441, 2054, 1, 0, 0, 0, 443, 2066, 1, 0, 0, 0, 445, 2075, 1, 0, 0, 0, 447, 2080, 1, 0, 0, 0, 449, 2089, 1, 0, 0, 0, 451, 2094, 1, 0, 0, 0, 453, 2102, 1, 0, 0, 0, 455, 2112, 1, 0, 0, 0, 457, 2124, 1, 0, 0, 0, 459, 2130, 1, 0, 0, 0, 461, 2140, 1, 0, 0, 0, 463, 2147, 1, 0, 0, 0, 465, 2154, 1, 0, 0, 0, 467, 2158, 1, 0, 0, 0, 469, 2163, 1, 0, 0, 0, 471, 2169, 1, 0, 0, 0, 473, 2178, 1, 0, 0, 0, 475, 2185, 1, 0, 0, 0, 477, 2193, 1, 0, 0, 0, 479, 2198, 1, 0, 0, 0, 481, 2203, 1, 0, 0, 0, 483, 2209, 1, 0, 0, 0, 485, 2216, 1, 0, 0, 0, 487, 2221, 1, 0, 0, 0, 489, 2229, 1, 0, 0, 0, 491, 2234, 1, 0, 0, 0, 493, 2240, 1, 0, 0, 0, 495, 2245, 1, 0, 0, 0, 497, 2250, 1, 0, 0, 0, 499, 2256, 1, 0, 0, 0, 501, 2258, 1, 0, 0, 0, 503, 2260, 1, 0, 0, 0, 505, 2263, 1, 0, 0, 0, 507, 2265, 1, 0, 0, 0, 509, 2268, 1, 0, 0, 0, 511, 2270, 1, 0, 0, 0, 513, 2272, 1, 0, 0, 0, 515, 2274, 1, 0, 0, 0, 517, 2276, 1, 0, 0, 0, 519, 2278, 1, 0, 0, 0, 521, 2281, 1, 0, 0, 0, 523, 2283, 1, 0, 0, 0, 525, 2294, 1, 0, 0, 0, 527, 2308, 1, 0, 0, 0, 529, 2320, 1, 0, 0, 0, 531, 2342, 1, 0, 0, 0, 533, 2368, 1, 0, 0, 0, 535, 2372, 1, 0, 0, 0, 537, 2382, 1, 0, 0, 0, 539, 2390, 1, 0, 0, 0, 541, 2401, 1, 0, 0, 0, 543, 2412, 1, 0, 0, 0, 545, 2414, 1, 0, 0, 0, 547, 2423, 1, 0, 0, 0, 549, 2425, 1, 0, 0, 0, 551, 2427, 1, 0, 0, 0, 553, 2444, 1, 0, 0, 0, 555, 2459, 1, 0, 0, 0, 557, 2465, 1, 0, 0, 0, 559, 560, 5, 46, 0, 0, 560, 2, 1, 0, 0, 0, 561, 562, 5, 40, 0, 0, 562, 4, 1, 0, 0, 0, 563, 564, 5, 41, 0, 0, 564, 6, 1, 0, 0, 0, 565, 566, 5, 44, 0, 0, 566, 8, 1, 0, 0, 0, 567, 568, 5, 83, 0, 0, 568, 569, 5, 75, 0, 0, 569, 570, 5, 73, 0, 0, 570, 571, 5, 80, 0, 0, 571, 10, 1, 0, 0, 0, 572, 573, 5, 45, 0, 0, 573, 574, 5, 62, 0, 0, 574, 12, 1, 0, 0, 0, 575, 576, 5, 91, 0, 0, 576, 14, 1, 0, 0, 0, 577, 578, 5, 93, 0, 0, 578, 16, 1, 0, 0, 0, 579, 580, 5, 124, 0, 0, 580, 18, 1, 0, 0, 0, 581, 582, 5, 94, 0, 0, 582, 20, 1, 0, 0, 0, 583, 584, 5, 36, 0, 0, 584, 22, 1, 0, 0, 0, 585, 586, 5, 123, 0, 0, 586, 587, 5, 45, 0, 0, 587, 24, 1, 0, 0, 0, 588, 589, 5, 45, 0, 0, 589, 590, 5, 125, 0, 0, 590, 26, 1, 0, 0, 0, 591, 592, 5, 123, 0, 0, 592, 28, 1, 0, 0, 0, 593, 594, 5, 125, 0, 0, 594, 30, 1, 0, 0, 0, 595, 596, 5, 61, 0, 0, 596, 597, 5, 62, 0, 0, 597, 32, 1, 0, 0, 0, 598, 599, 5, 65, 0, 0, 599, 600, 5, 68, 0, 0, 600, 601, 5, 68, 0, 0, 601, 34, 1, 0, 0, 0, 602, 603, 5, 65, 0, 0, 603, 604, 5, 68, 0, 0, 604, 605, 5, 77, 0, 0, 605, 606, 5, 73, 0, 0, 606, 607, 5, 78, 0, 0, 607, 36, 1, 0, 0, 0, 608, 609, 5, 65, 0, 0, 609, 610, 5, 70, 0, 0, 610, 611, 5, 84, 0, 0, 611, 612, 5, 69, 0, 0, 612, 613, 5, 82, 0, 0, 613, 38, 1, 0, 0, 0, 614, 615, 5, 65, 0, 0, 615, 616, 5, 76, 0, 0, 616, 617, 5, 76, 0, 0, 617, 40, 1, 0, 0, 0, 618, 619, 5, 65, 0, 0, 619, 620, 5, 76, 0, 0, 620, 621, 5, 84, 0, 0, 621, 622, 5, 69, 0, 0, 622, 623, 5, 82, 0, 0, 623, 42, 1, 0, 0, 0, 624, 625, 5, 65, 0, 0, 625, 626, 5, 78, 0, 0, 626, 627, 5, 65, 0, 0, 627, 628, 5, 76, 0, 0, 628, 629, 5, 89, 0, 0, 629, 630, 5, 90, 0, 0, 630, 631, 5, 69, 0, 0, 631, 44, 1, 0, 0, 0, 632, 633, 5, 65, 0, 0, 633, 634, 5, 78, 0, 0, 634, 635, 5, 68, 0, 0, 635, 46, 1, 0, 0, 0, 636, 637, 5, 65, 0, 0, 637, 638, 5, 78, 0, 0, 638, 639, 5, 89, 0, 0, 639, 48, 1, 0, 0, 0, 640, 641, 5, 65, 0, 0, 641, 642, 5, 82, 0, 0, 642, 643, 5, 82, 0, 0, 643, 644, 5, 65, 0, 0, 644, 645, 5, 89, 0, 0, 645, 50, 1, 0, 0, 0, 646, 647, 5, 65, 0, 0, 647, 648, 5, 83, 0, 0, 648, 52, 1, 0, 0, 0, 649, 650, 5, 65, 0, 0, 650, 651, 5, 83, 0, 0, 651, 652, 5, 67, 0, 0, 652, 54, 1, 0, 0, 0, 653, 654, 5, 65, 0, 0, 654, 655, 5, 84, 0, 0, 655, 56, 1, 0, 0, 0, 656, 657, 5, 65, 0, 0, 657, 658, 5, 85, 0, 0, 658, 659, 5, 84, 0, 0, 659, 660, 5, 72, 0, 0, 660, 661, 5, 79, 0, 0, 661, 662, 5, 82, 0, 0, 662, 663, 5, 73, 0, 0, 663, 664, 5, 90, 0, 0, 664, 665, 5, 65, 0, 0, 665, 666, 5, 84, 0, 0, 666, 667, 5, 73, 0, 0, 667, 668, 5, 79, 0, 0, 668, 669, 5, 78, 0, 0, 669, 58, 1, 0, 0, 0, 670, 671, 5, 66, 0, 0, 671, 672, 5, 69, 0, 0, 672, 673, 5, 82, 0, 0, 673, 674, 5, 78, 0, 0, 674, 675, 5, 79, 0, 0, 675, 676, 5, 85, 0, 0, 676, 677, 5, 76, 0, 0, 677, 678, 5, 76, 0, 0, 678, 679, 5, 73, 0, 0, 679, 60, 1, 0, 0, 0, 680, 681, 5, 66, 0, 0, 681, 682, 5, 69, 0, 0, 682, 683, 5, 84, 0, 0, 683, 684, 5, 87, 0, 0, 684, 685, 5, 69, 0, 0, 685, 686, 5, 69, 0, 0, 686, 687, 5, 78, 0, 0, 687, 62, 1, 0, 0, 0, 688, 689, 5, 66, 0, 0, 689, 690, 5, 89, 0, 0, 690, 64, 1, 0, 0, 0, 691, 692, 5, 67, 0, 0, 692, 693, 5, 65, 0, 0, 693, 694, 5, 76, 0, 0, 694, 695, 5, 76, 0, 0, 695, 66, 1, 0, 0, 0, 696, 697, 5, 67, 0, 0, 697, 698, 5, 65, 0, 0, 698, 699, 5, 83, 0, 0, 699, 700, 5, 67, 0, 0, 700, 701, 5, 65, 0, 0, 701, 702, 5, 68, 0, 0, 702, 703, 5, 69, 0, 0, 703, 68, 1, 0, 0, 0, 704, 705, 5, 67, 0, 0, 705, 706, 5, 65, 0, 0, 706, 707, 5, 83, 0, 0, 707, 708, 5, 69, 0, 0, 708, 70, 1, 0, 0, 0, 709, 710, 5, 67, 0, 0, 710, 711, 5, 65, 0, 0, 711, 712, 5, 83, 0, 0, 712, 713, 5, 84, 0, 0, 713, 72, 1, 0, 0, 0, 714, 715, 5, 67, 0, 0, 715, 716, 5, 65, 0, 0, 716, 717, 5, 84, 0, 0, 717, 718, 5, 65, 0, 0, 718, 719, 5, 76, 0, 0, 719, 720, 5, 79, 0, 0, 720, 721, 5, 71, 0, 0, 721, 722, 5, 83, 0, 0, 722, 74, 1, 0, 0, 0, 723, 724, 5, 67, 0, 0, 724, 725, 5, 79, 0, 0, 725, 726, 5, 76, 0, 0, 726, 727, 5, 85, 0, 0, 727, 728, 5, 77, 0, 0, 728, 729, 5, 78, 0, 0, 729, 76, 1, 0, 0, 0, 730, 731, 5, 67, 0, 0, 731, 732, 5, 79, 0, 0, 732, 733, 5, 76, 0, 0, 733, 734, 5, 85, 0, 0, 734, 735, 5, 77, 0, 0, 735, 736, 5, 78, 0, 0, 736, 737, 5, 83, 0, 0, 737, 78, 1, 0, 0, 0, 738, 739, 5, 67, 0, 0, 739, 740, 5, 79, 0, 0, 740, 741, 5, 77, 0, 0, 741, 742, 5, 77, 0, 0, 742, 743, 5, 69, 0, 0, 743, 744, 5, 78, 0, 0, 744, 745, 5, 84, 0, 0, 745, 80, 1, 0, 0, 0, 746, 747, 5, 67, 0, 0, 747, 748, 5, 79, 0, 0, 748, 749, 5, 77, 0, 0, 749, 750, 5, 77, 0, 0, 750, 751, 5, 73, 0, 0, 751, 752, 5, 84, 0, 0, 752, 82, 1, 0, 0, 0, 753, 754, 5, 67, 0, 0, 754, 755, 5, 79, 0, 0, 755, 756, 5, 77, 0, 0, 756, 757, 5, 77, 0, 0, 757, 758, 5, 73, 0, 0, 758, 759, 5, 84, 0, 0, 759, 760, 5, 84, 0, 0, 760, 761, 5, 69, 0, 0, 761, 762, 5, 68, 0, 0, 762, 84, 1, 0, 0, 0, 763, 764, 5, 67, 0, 0, 764, 765, 5, 79, 0, 0, 765, 766, 5, 78, 0, 0, 766, 767, 5, 83, 0, 0, 767, 768, 5, 84, 0, 0, 768, 769, 5, 82, 0, 0, 769, 770, 5, 65, 0, 0, 770, 771, 5, 73, 0, 0, 771, 772, 5, 78, 0, 0, 772, 773, 5, 84, 0, 0, 773, 86, 1, 0, 0, 0, 774, 775, 5, 67, 0, 0, 775, 776, 5, 82, 0, 0, 776, 777, 5, 69, 0, 0, 777, 778, 5, 65, 0, 0, 778, 779, 5, 84, 0, 0, 779, 780, 5, 69, 0, 0, 780, 88, 1, 0, 0, 0, 781, 782, 5, 67, 0, 0, 782, 783, 5, 82, 0, 0, 783, 784, 5, 79, 0, 0, 784, 785, 5, 83, 0, 0, 785, 786, 5, 83, 0, 0, 786, 90, 1, 0, 0, 0, 787, 788, 5, 67, 0, 0, 788, 789, 5, 85, 0, 0, 789, 790, 5, 66, 0, 0, 790, 791, 5, 69, 0, 0, 791, 92, 1, 0, 0, 0, 792, 793, 5, 67, 0, 0, 793, 794, 5, 85, 0, 0, 794, 795, 5, 82, 0, 0, 795, 796, 5, 82, 0, 0, 796, 797, 5, 69, 0, 0, 797, 798, 5, 78, 0, 0, 798, 799, 5, 84, 0, 0, 799, 94, 1, 0, 0, 0, 800, 801, 5, 67, 0, 0, 801, 802, 5, 85, 0, 0, 802, 803, 5, 82, 0, 0, 803, 804, 5, 82, 0, 0, 804, 805, 5, 69, 0, 0, 805, 806, 5, 78, 0, 0, 806, 807, 5, 84, 0, 0, 807, 808, 5, 95, 0, 0, 808, 809, 5, 67, 0, 0, 809, 810, 5, 65, 0, 0, 810, 811, 5, 84, 0, 0, 811, 812, 5, 65, 0, 0, 812, 813, 5, 76, 0, 0, 813, 814, 5, 79, 0, 0, 814, 815, 5, 71, 0, 0, 815, 96, 1, 0, 0, 0, 816, 817, 5, 67, 0, 0, 817, 818, 5, 85, 0, 0, 818, 819, 5, 82, 0, 0, 819, 820, 5, 82, 0, 0, 820, 821, 5, 69, 0, 0, 821, 822, 5, 78, 0, 0, 822, 823, 5, 84, 0, 0, 823, 824, 5, 95, 0, 0, 824, 825, 5, 68, 0, 0, 825, 826, 5, 65, 0, 0, 826, 827, 5, 84, 0, 0, 827, 828, 5, 69, 0, 0, 828, 98, 1, 0, 0, 0, 829, 830, 5, 67, 0, 0, 830, 831, 5, 85, 0, 0, 831, 832, 5, 82, 0, 0, 832, 833, 5, 82, 0, 0, 833, 834, 5, 69, 0, 0, 834, 835, 5, 78, 0, 0, 835, 836, 5, 84, 0, 0, 836, 837, 5, 95, 0, 0, 837, 838, 5, 80, 0, 0, 838, 839, 5, 65, 0, 0, 839, 840, 5, 84, 0, 0, 840, 841, 5, 72, 0, 0, 841, 100, 1, 0, 0, 0, 842, 843, 5, 67, 0, 0, 843, 844, 5, 85, 0, 0, 844, 845, 5, 82, 0, 0, 845, 846, 5, 82, 0, 0, 846, 847, 5, 69, 0, 0, 847, 848, 5, 78, 0, 0, 848, 849, 5, 84, 0, 0, 849, 850, 5, 95, 0, 0, 850, 851, 5, 82, 0, 0, 851, 852, 5, 79, 0, 0, 852, 853, 5, 76, 0, 0, 853, 854, 5, 69, 0, 0, 854, 102, 1, 0, 0, 0, 855, 856, 5, 67, 0, 0, 856, 857, 5, 85, 0, 0, 857, 858, 5, 82, 0, 0, 858, 859, 5, 82, 0, 0, 859, 860, 5, 69, 0, 0, 860, 861, 5, 78, 0, 0, 861, 862, 5, 84, 0, 0, 862, 863, 5, 95, 0, 0, 863, 864, 5, 83, 0, 0, 864, 865, 5, 67, 0, 0, 865, 866, 5, 72, 0, 0, 866, 867, 5, 69, 0, 0, 867, 868, 5, 77, 0, 0, 868, 869, 5, 65, 0, 0, 869, 104, 1, 0, 0, 0, 870, 871, 5, 67, 0, 0, 871, 872, 5, 85, 0, 0, 872, 873, 5, 82, 0, 0, 873, 874, 5, 82, 0, 0, 874, 875, 5, 69, 0, 0, 875, 876, 5, 78, 0, 0, 876, 877, 5, 84, 0, 0, 877, 878, 5, 95, 0, 0, 878, 879, 5, 84, 0, 0, 879, 880, 5, 73, 0, 0, 880, 881, 5, 77, 0, 0, 881, 882, 5, 69, 0, 0, 882, 106, 1, 0, 0, 0, 883, 884, 5, 67, 0, 0, 884, 885, 5, 85, 0, 0, 885, 886, 5, 82, 0, 0, 886, 887, 5, 82, 0, 0, 887, 888, 5, 69, 0, 0, 888, 889, 5, 78, 0, 0, 889, 890, 5, 84, 0, 0, 890, 891, 5, 95, 0, 0, 891, 892, 5, 84, 0, 0, 892, 893, 5, 73, 0, 0, 893, 894, 5, 77, 0, 0, 894, 895, 5, 69, 0, 0, 895, 896, 5, 83, 0, 0, 896, 897, 5, 84, 0, 0, 897, 898, 5, 65, 0, 0, 898, 899, 5, 77, 0, 0, 899, 900, 5, 80, 0, 0, 900, 108, 1, 0, 0, 0, 901, 902, 5, 67, 0, 0, 902, 903, 5, 85, 0, 0, 903, 904, 5, 82, 0, 0, 904, 905, 5, 82, 0, 0, 905, 906, 5, 69, 0, 0, 906, 907, 5, 78, 0, 0, 907, 908, 5, 84, 0, 0, 908, 909, 5, 95, 0, 0, 909, 910, 5, 85, 0, 0, 910, 911, 5, 83, 0, 0, 911, 912, 5, 69, 0, 0, 912, 913, 5, 82, 0, 0, 913, 110, 1, 0, 0, 0, 914, 915, 5, 68, 0, 0, 915, 916, 5, 65, 0, 0, 916, 917, 5, 84, 0, 0, 917, 918, 5, 65, 0, 0, 918, 112, 1, 0, 0, 0, 919, 920, 5, 68, 0, 0, 920, 921, 5, 65, 0, 0, 921, 922, 5, 84, 0, 0, 922, 923, 5, 69, 0, 0, 923, 114, 1, 0, 0, 0, 924, 925, 5, 68, 0, 0, 925, 926, 5, 65, 0, 0, 926, 927, 5, 89, 0, 0, 927, 116, 1, 0, 0, 0, 928, 929, 5, 68, 0, 0, 929, 930, 5, 69, 0, 0, 930, 931, 5, 70, 0, 0, 931, 932, 5, 65, 0, 0, 932, 933, 5, 85, 0, 0, 933, 934, 5, 76, 0, 0, 934, 935, 5, 84, 0, 0, 935, 118, 1, 0, 0, 0, 936, 937, 5, 68, 0, 0, 937, 938, 5, 69, 0, 0, 938, 939, 5, 65, 0, 0, 939, 940, 5, 76, 0, 0, 940, 941, 5, 76, 0, 0, 941, 942, 5, 79, 0, 0, 942, 943, 5, 67, 0, 0, 943, 944, 5, 65, 0, 0, 944, 945, 5, 84, 0, 0, 945, 946, 5, 69, 0, 0, 946, 120, 1, 0, 0, 0, 947, 948, 5, 68, 0, 0, 948, 949, 5, 69, 0, 0, 949, 950, 5, 70, 0, 0, 950, 951, 5, 73, 0, 0, 951, 952, 5, 78, 0, 0, 952, 953, 5, 69, 0, 0, 953, 954, 5, 82, 0, 0, 954, 122, 1, 0, 0, 0, 955, 956, 5, 68, 0, 0, 956, 957, 5, 69, 0, 0, 957, 958, 5, 76, 0, 0, 958, 959, 5, 69, 0, 0, 959, 960, 5, 84, 0, 0, 960, 961, 5, 69, 0, 0, 961, 124, 1, 0, 0, 0, 962, 963, 5, 68, 0, 0, 963, 964, 5, 69, 0, 0, 964, 965, 5, 83, 0, 0, 965, 966, 5, 67, 0, 0, 966, 126, 1, 0, 0, 0, 967, 968, 5, 68, 0, 0, 968, 969, 5, 69, 0, 0, 969, 970, 5, 83, 0, 0, 970, 971, 5, 67, 0, 0, 971, 972, 5, 82, 0, 0, 972, 973, 5, 73, 0, 0, 973, 974, 5, 66, 0, 0, 974, 975, 5, 69, 0, 0, 975, 128, 1, 0, 0, 0, 976, 977, 5, 68, 0, 0, 977, 978, 5, 69, 0, 0, 978, 979, 5, 70, 0, 0, 979, 980, 5, 73, 0, 0, 980, 981, 5, 78, 0, 0, 981, 982, 5, 69, 0, 0, 982, 130, 1, 0, 0, 0, 983, 984, 5, 68, 0, 0, 984, 985, 5, 73, 0, 0, 985, 986, 5, 83, 0, 0, 986, 987, 5, 84, 0, 0, 987, 988, 5, 73, 0, 0, 988, 989, 5, 78, 0, 0, 989, 990, 5, 67, 0, 0, 990, 991, 5, 84, 0, 0, 991, 132, 1, 0, 0, 0, 992, 993, 5, 68, 0, 0, 993, 994, 5, 73, 0, 0, 994, 995, 5, 83, 0, 0, 995, 996, 5, 84, 0, 0, 996, 997, 5, 82, 0, 0, 997, 998, 5, 73, 0, 0, 998, 999, 5, 66, 0, 0, 999, 1000, 5, 85, 0, 0, 1000, 1001, 5, 84, 0, 0, 1001, 1002, 5, 69, 0, 0, 1002, 1003, 5, 68, 0, 0, 1003, 134, 1, 0, 0, 0, 1004, 1005, 5, 68, 0, 0, 1005, 1006, 5, 79, 0, 0, 1006, 1007, 5, 85, 0, 0, 1007, 1008, 5, 66, 0, 0, 1008, 1009, 5, 76, 0, 0, 1009, 1010, 5, 69, 0, 0, 1010, 136, 1, 0, 0, 0, 1011, 1012, 5, 68, 0, 0, 1012, 1013, 5, 82, 0, 0, 1013, 1014, 5, 79, 0, 0, 1014, 1015, 5, 80, 0, 0, 1015, 138, 1, 0, 0, 0, 1016, 1017, 5, 69, 0, 0, 1017, 1018, 5, 76, 0, 0, 1018, 1019, 5, 83, 0, 0, 1019, 1020, 5, 69, 0, 0, 1020, 140, 1, 0, 0, 0, 1021, 1022, 5, 69, 0, 0, 1022, 1023, 5, 77, 0, 0, 1023, 1024, 5, 80, 0, 0, 1024, 1025, 5, 84, 0, 0, 1025, 1026, 5, 89, 0, 0, 1026, 142, 1, 0, 0, 0, 1027, 1028, 5, 69, 0, 0, 1028, 1029, 5, 78, 0, 0, 1029, 1030, 5, 68, 0, 0, 1030, 144, 1, 0, 0, 0, 1031, 1032, 5, 69, 0, 0, 1032, 1033, 5, 83, 0, 0, 1033, 1034, 5, 67, 0, 0, 1034, 1035, 5, 65, 0, 0, 1035, 1036, 5, 80, 0, 0, 1036, 1037, 5, 69, 0, 0, 1037, 146, 1, 0, 0, 0, 1038, 1039, 5, 69, 0, 0, 1039, 1040, 5, 88, 0, 0, 1040, 1041, 5, 67, 0, 0, 1041, 1042, 5, 69, 0, 0, 1042, 1043, 5, 80, 0, 0, 1043, 1044, 5, 84, 0, 0, 1044, 148, 1, 0, 0, 0, 1045, 1046, 5, 69, 0, 0, 1046, 1047, 5, 88, 0, 0, 1047, 1048, 5, 67, 0, 0, 1048, 1049, 5, 76, 0, 0, 1049, 1050, 5, 85, 0, 0, 1050, 1051, 5, 68, 0, 0, 1051, 1052, 5, 73, 0, 0, 1052, 1053, 5, 78, 0, 0, 1053, 1054, 5, 71, 0, 0, 1054, 150, 1, 0, 0, 0, 1055, 1056, 5, 69, 0, 0, 1056, 1057, 5, 88, 0, 0, 1057, 1058, 5, 69, 0, 0, 1058, 1059, 5, 67, 0, 0, 1059, 1060, 5, 85, 0, 0, 1060, 1061, 5, 84, 0, 0, 1061, 1062, 5, 69, 0, 0, 1062, 152, 1, 0, 0, 0, 1063, 1064, 5, 69, 0, 0, 1064, 1065, 5, 88, 0, 0, 1065, 1066, 5, 73, 0, 0, 1066, 1067, 5, 83, 0, 0, 1067, 1068, 5, 84, 0, 0, 1068, 1069, 5, 83, 0, 0, 1069, 154, 1, 0, 0, 0, 1070, 1071, 5, 69, 0, 0, 1071, 1072, 5, 88, 0, 0, 1072, 1073, 5, 80, 0, 0, 1073, 1074, 5, 76, 0, 0, 1074, 1075, 5, 65, 0, 0, 1075, 1076, 5, 73, 0, 0, 1076, 1077, 5, 78, 0, 0, 1077, 156, 1, 0, 0, 0, 1078, 1079, 5, 69, 0, 0, 1079, 1080, 5, 88, 0, 0, 1080, 1081, 5, 84, 0, 0, 1081, 1082, 5, 82, 0, 0, 1082, 1083, 5, 65, 0, 0, 1083, 1084, 5, 67, 0, 0, 1084, 1085, 5, 84, 0, 0, 1085, 158, 1, 0, 0, 0, 1086, 1087, 5, 70, 0, 0, 1087, 1088, 5, 65, 0, 0, 1088, 1089, 5, 76, 0, 0, 1089, 1090, 5, 83, 0, 0, 1090, 1091, 5, 69, 0, 0, 1091, 160, 1, 0, 0, 0, 1092, 1093, 5, 70, 0, 0, 1093, 1094, 5, 69, 0, 0, 1094, 1095, 5, 84, 0, 0, 1095, 1096, 5, 67, 0, 0, 1096, 1097, 5, 72, 0, 0, 1097, 162, 1, 0, 0, 0, 1098, 1099, 5, 70, 0, 0, 1099, 1100, 5, 73, 0, 0, 1100, 1101, 5, 76, 0, 0, 1101, 1102, 5, 84, 0, 0, 1102, 1103, 5, 69, 0, 0, 1103, 1104, 5, 82, 0, 0, 1104, 164, 1, 0, 0, 0, 1105, 1106, 5, 70, 0, 0, 1106, 1107, 5, 73, 0, 0, 1107, 1108, 5, 78, 0, 0, 1108, 1109, 5, 65, 0, 0, 1109, 1110, 5, 76, 0, 0, 1110, 166, 1, 0, 0, 0, 1111, 1112, 5, 70, 0, 0, 1112, 1113, 5, 73, 0, 0, 1113, 1114, 5, 82, 0, 0, 1114, 1115, 5, 83, 0, 0, 1115, 1116, 5, 84, 0, 0, 1116, 168, 1, 0, 0, 0, 1117, 1118, 5, 70, 0, 0, 1118, 1119, 5, 79, 0, 0, 1119, 1120, 5, 76, 0, 0, 1120, 1121, 5, 76, 0, 0, 1121, 1122, 5, 79, 0, 0, 1122, 1123, 5, 87, 0, 0, 1123, 1124, 5, 73, 0, 0, 1124, 1125, 5, 78, 0, 0, 1125, 1126, 5, 71, 0, 0, 1126, 170, 1, 0, 0, 0, 1127, 1128, 5, 70, 0, 0, 1128, 1129, 5, 79, 0, 0, 1129, 1130, 5, 82, 0, 0, 1130, 172, 1, 0, 0, 0, 1131, 1132, 5, 70, 0, 0, 1132, 1133, 5, 79, 0, 0, 1133, 1134, 5, 82, 0, 0, 1134, 1135, 5, 77, 0, 0, 1135, 1136, 5, 65, 0, 0, 1136, 1137, 5, 84, 0, 0, 1137, 174, 1, 0, 0, 0, 1138, 1139, 5, 70, 0, 0, 1139, 1140, 5, 82, 0, 0, 1140, 1141, 5, 79, 0, 0, 1141, 1142, 5, 77, 0, 0, 1142, 176, 1, 0, 0, 0, 1143, 1144, 5, 70, 0, 0, 1144, 1145, 5, 85, 0, 0, 1145, 1146, 5, 76, 0, 0, 1146, 1147, 5, 76, 0, 0, 1147, 178, 1, 0, 0, 0, 1148, 1149, 5, 70, 0, 0, 1149, 1150, 5, 85, 0, 0, 1150, 1151, 5, 78, 0, 0, 1151, 1152, 5, 67, 0, 0, 1152, 1153, 5, 84, 0, 0, 1153, 1154, 5, 73, 0, 0, 1154, 1155, 5, 79, 0, 0, 1155, 1156, 5, 78, 0, 0, 1156, 1157, 5, 83, 0, 0, 1157, 180, 1, 0, 0, 0, 1158, 1159, 5, 71, 0, 0, 1159, 1160, 5, 82, 0, 0, 1160, 1161, 5, 65, 0, 0, 1161, 1162, 5, 78, 0, 0, 1162, 1163, 5, 84, 0, 0, 1163, 182, 1, 0, 0, 0, 1164, 1165, 5, 71, 0, 0, 1165, 1166, 5, 82, 0, 0, 1166, 1167, 5, 65, 0, 0, 1167, 1168, 5, 78, 0, 0, 1168, 1169, 5, 84, 0, 0, 1169, 1170, 5, 69, 0, 0, 1170, 1171, 5, 68, 0, 0, 1171, 184, 1, 0, 0, 0, 1172, 1173, 5, 71, 0, 0, 1173, 1174, 5, 82, 0, 0, 1174, 1175, 5, 65, 0, 0, 1175, 1176, 5, 78, 0, 0, 1176, 1177, 5, 84, 0, 0, 1177, 1178, 5, 83, 0, 0, 1178, 186, 1, 0, 0, 0, 1179, 1180, 5, 68, 0, 0, 1180, 1181, 5, 69, 0, 0, 1181, 1182, 5, 78, 0, 0, 1182, 1183, 5, 89, 0, 0, 1183, 188, 1, 0, 0, 0, 1184, 1185, 5, 71, 0, 0, 1185, 1186, 5, 82, 0, 0, 1186, 1187, 5, 65, 0, 0, 1187, 1188, 5, 80, 0, 0, 1188, 1189, 5, 72, 0, 0, 1189, 1190, 5, 86, 0, 0, 1190, 1191, 5, 73, 0, 0, 1191, 1192, 5, 90, 0, 0, 1192, 190, 1, 0, 0, 0, 1193, 1194, 5, 71, 0, 0, 1194, 1195, 5, 82, 0, 0, 1195, 1196, 5, 79, 0, 0, 1196, 1197, 5, 85, 0, 0, 1197, 1198, 5, 80, 0, 0, 1198, 192, 1, 0, 0, 0, 1199, 1200, 5, 71, 0, 0, 1200, 1201, 5, 82, 0, 0, 1201, 1202, 5, 79, 0, 0, 1202, 1203, 5, 85, 0, 0, 1203, 1204, 5, 80, 0, 0, 1204, 1205, 5, 73, 0, 0, 1205, 1206, 5, 78, 0, 0, 1206, 1207, 5, 71, 0, 0, 1207, 194, 1, 0, 0, 0, 1208, 1209, 5, 71, 0, 0, 1209, 1210, 5, 82, 0, 0, 1210, 1211, 5, 79, 0, 0, 1211, 1212, 5, 85, 0, 0, 1212, 1213, 5, 80, 0, 0, 1213, 1214, 5, 83, 0, 0, 1214, 196, 1, 0, 0, 0, 1215, 1216, 5, 72, 0, 0, 1216, 1217, 5, 65, 0, 0, 1217, 1218, 5, 86, 0, 0, 1218, 1219, 5, 73, 0, 0, 1219, 1220, 5, 78, 0, 0, 1220, 1221, 5, 71, 0, 0, 1221, 198, 1, 0, 0, 0, 1222, 1223, 5, 72, 0, 0, 1223, 1224, 5, 79, 0, 0, 1224, 1225, 5, 85, 0, 0, 1225, 1226, 5, 82, 0, 0, 1226, 200, 1, 0, 0, 0, 1227, 1228, 5, 73, 0, 0, 1228, 1229, 5, 70, 0, 0, 1229, 202, 1, 0, 0, 0, 1230, 1231, 5, 73, 0, 0, 1231, 1232, 5, 71, 0, 0, 1232, 1233, 5, 78, 0, 0, 1233, 1234, 5, 79, 0, 0, 1234, 1235, 5, 82, 0, 0, 1235, 1236, 5, 69, 0, 0, 1236, 204, 1, 0, 0, 0, 1237, 1238, 5, 73, 0, 0, 1238, 1239, 5, 78, 0, 0, 1239, 206, 1, 0, 0, 0, 1240, 1241, 5, 73, 0, 0, 1241, 1242, 5, 78, 0, 0, 1242, 1243, 5, 67, 0, 0, 1243, 1244, 5, 76, 0, 0, 1244, 1245, 5, 85, 0, 0, 1245, 1246, 5, 68, 0, 0, 1246, 1247, 5, 73, 0, 0, 1247, 1248, 5, 78, 0, 0, 1248, 1249, 5, 71, 0, 0, 1249, 208, 1, 0, 0, 0, 1250, 1251, 5, 73, 0, 0, 1251, 1252, 5, 78, 0, 0, 1252, 1253, 5, 73, 0, 0, 1253, 1254, 5, 84, 0, 0, 1254, 1255, 5, 73, 0, 0, 1255, 1256, 5, 65, 0, 0, 1256, 1257, 5, 76, 0, 0, 1257, 210, 1, 0, 0, 0, 1258, 1259, 5, 73, 0, 0, 1259, 1260, 5, 78, 0, 0, 1260, 1261, 5, 78, 0, 0, 1261, 1262, 5, 69, 0, 0, 1262, 1263, 5, 82, 0, 0, 1263, 212, 1, 0, 0, 0, 1264, 1265, 5, 73, 0, 0, 1265, 1266, 5, 78, 0, 0, 1266, 1267, 5, 80, 0, 0, 1267, 1268, 5, 85, 0, 0, 1268, 1269, 5, 84, 0, 0, 1269, 214, 1, 0, 0, 0, 1270, 1271, 5, 73, 0, 0, 1271, 1272, 5, 78, 0, 0, 1272, 1273, 5, 83, 0, 0, 1273, 1274, 5, 69, 0, 0, 1274, 1275, 5, 82, 0, 0, 1275, 1276, 5, 84, 0, 0, 1276, 216, 1, 0, 0, 0, 1277, 1278, 5, 73, 0, 0, 1278, 1279, 5, 78, 0, 0, 1279, 1280, 5, 84, 0, 0, 1280, 1281, 5, 69, 0, 0, 1281, 1282, 5, 82, 0, 0, 1282, 1283, 5, 83, 0, 0, 1283, 1284, 5, 69, 0, 0, 1284, 1285, 5, 67, 0, 0, 1285, 1286, 5, 84, 0, 0, 1286, 218, 1, 0, 0, 0, 1287, 1288, 5, 73, 0, 0, 1288, 1289, 5, 78, 0, 0, 1289, 1290, 5, 84, 0, 0, 1290, 1291, 5, 69, 0, 0, 1291, 1292, 5, 82, 0, 0, 1292, 1293, 5, 86, 0, 0, 1293, 1294, 5, 65, 0, 0, 1294, 1295, 5, 76, 0, 0, 1295, 220, 1, 0, 0, 0, 1296, 1297, 5, 73, 0, 0, 1297, 1298, 5, 78, 0, 0, 1298, 1299, 5, 84, 0, 0, 1299, 1300, 5, 79, 0, 0, 1300, 222, 1, 0, 0, 0, 1301, 1302, 5, 73, 0, 0, 1302, 1303, 5, 78, 0, 0, 1303, 1304, 5, 86, 0, 0, 1304, 1305, 5, 79, 0, 0, 1305, 1306, 5, 75, 0, 0, 1306, 1307, 5, 69, 0, 0, 1307, 1308, 5, 82, 0, 0, 1308, 224, 1, 0, 0, 0, 1309, 1310, 5, 73, 0, 0, 1310, 1311, 5, 79, 0, 0, 1311, 226, 1, 0, 0, 0, 1312, 1313, 5, 73, 0, 0, 1313, 1314, 5, 83, 0, 0, 1314, 228, 1, 0, 0, 0, 1315, 1316, 5, 73, 0, 0, 1316, 1317, 5, 83, 0, 0, 1317, 1318, 5, 79, 0, 0, 1318, 1319, 5, 76, 0, 0, 1319, 1320, 5, 65, 0, 0, 1320, 1321, 5, 84, 0, 0, 1321, 1322, 5, 73, 0, 0, 1322, 1323, 5, 79, 0, 0, 1323, 1324, 5, 78, 0, 0, 1324, 230, 1, 0, 0, 0, 1325, 1326, 5, 74, 0, 0, 1326, 1327, 5, 79, 0, 0, 1327, 1328, 5, 73, 0, 0, 1328, 1329, 5, 78, 0, 0, 1329, 232, 1, 0, 0, 0, 1330, 1331, 5, 74, 0, 0, 1331, 1332, 5, 83, 0, 0, 1332, 1333, 5, 79, 0, 0, 1333, 1334, 5, 78, 0, 0, 1334, 234, 1, 0, 0, 0, 1335, 1336, 5, 76, 0, 0, 1336, 1337, 5, 65, 0, 0, 1337, 1338, 5, 83, 0, 0, 1338, 1339, 5, 84, 0, 0, 1339, 236, 1, 0, 0, 0, 1340, 1341, 5, 76, 0, 0, 1341, 1342, 5, 65, 0, 0, 1342, 1343, 5, 84, 0, 0, 1343, 1344, 5, 69, 0, 0, 1344, 1345, 5, 82, 0, 0, 1345, 1346, 5, 65, 0, 0, 1346, 1347, 5, 76, 0, 0, 1347, 238, 1, 0, 0, 0, 1348, 1349, 5, 76, 0, 0, 1349, 1350, 5, 69, 0, 0, 1350, 1351, 5, 70, 0, 0, 1351, 1352, 5, 84, 0, 0, 1352, 240, 1, 0, 0, 0, 1353, 1354, 5, 76, 0, 0, 1354, 1355, 5, 69, 0, 0, 1355, 1356, 5, 86, 0, 0, 1356, 1357, 5, 69, 0, 0, 1357, 1358, 5, 76, 0, 0, 1358, 242, 1, 0, 0, 0, 1359, 1360, 5, 76, 0, 0, 1360, 1361, 5, 73, 0, 0, 1361, 1362, 5, 75, 0, 0, 1362, 1363, 5, 69, 0, 0, 1363, 244, 1, 0, 0, 0, 1364, 1365, 5, 76, 0, 0, 1365, 1366, 5, 73, 0, 0, 1366, 1367, 5, 77, 0, 0, 1367, 1368, 5, 73, 0, 0, 1368, 1369, 5, 84, 0, 0, 1369, 246, 1, 0, 0, 0, 1370, 1371, 5, 76, 0, 0, 1371, 1372, 5, 79, 0, 0, 1372, 1373, 5, 67, 0, 0, 1373, 1374, 5, 65, 0, 0, 1374, 1375, 5, 76, 0, 0, 1375, 248, 1, 0, 0, 0, 1376, 1377, 5, 76, 0, 0, 1377, 1378, 5, 79, 0, 0, 1378, 1379, 5, 67, 0, 0, 1379, 1380, 5, 65, 0, 0, 1380, 1381, 5, 76, 0, 0, 1381, 1382, 5, 84, 0, 0, 1382, 1383, 5, 73, 0, 0, 1383, 1384, 5, 77, 0, 0, 1384, 1385, 5, 69, 0, 0, 1385, 250, 1, 0, 0, 0, 1386, 1387, 5, 76, 0, 0, 1387, 1388, 5, 79, 0, 0, 1388, 1389, 5, 67, 0, 0, 1389, 1390, 5, 65, 0, 0, 1390, 1391, 5, 76, 0, 0, 1391, 1392, 5, 84, 0, 0, 1392, 1393, 5, 73, 0, 0, 1393, 1394, 5, 77, 0, 0, 1394, 1395, 5, 69, 0, 0, 1395, 1396, 5, 83, 0, 0, 1396, 1397, 5, 84, 0, 0, 1397, 1398, 5, 65, 0, 0, 1398, 1399, 5, 77, 0, 0, 1399, 1400, 5, 80, 0, 0, 1400, 252, 1, 0, 0, 0, 1401, 1402, 5, 76, 0, 0, 1402, 1403, 5, 79, 0, 0, 1403, 1404, 5, 71, 0, 0, 1404, 1405, 5, 73, 0, 0, 1405, 1406, 5, 67, 0, 0, 1406, 1407, 5, 65, 0, 0, 1407, 1408, 5, 76, 0, 0, 1408, 254, 1, 0, 0, 0, 1409, 1410, 5, 77, 0, 0, 1410, 1411, 5, 65, 0, 0, 1411, 1412, 5, 80, 0, 0, 1412, 256, 1, 0, 0, 0, 1413, 1414, 5, 77, 0, 0, 1414, 1415, 5, 65, 0, 0, 1415, 1416, 5, 84, 0, 0, 1416, 1417, 5, 67, 0, 0, 1417, 1418, 5, 72, 0, 0, 1418, 258, 1, 0, 0, 0, 1419, 1420, 5, 77, 0, 0, 1420, 1421, 5, 65, 0, 0, 1421, 1422, 5, 84, 0, 0, 1422, 1423, 5, 67, 0, 0, 1423, 1424, 5, 72, 0, 0, 1424, 1425, 5, 69, 0, 0, 1425, 1426, 5, 68, 0, 0, 1426, 260, 1, 0, 0, 0, 1427, 1428, 5, 77, 0, 0, 1428, 1429, 5, 65, 0, 0, 1429, 1430, 5, 84, 0, 0, 1430, 1431, 5, 67, 0, 0, 1431, 1432, 5, 72, 0, 0, 1432, 1433, 5, 69, 0, 0, 1433, 1434, 5, 83, 0, 0, 1434, 262, 1, 0, 0, 0, 1435, 1436, 5, 77, 0, 0, 1436, 1437, 5, 65, 0, 0, 1437, 1438, 5, 84, 0, 0, 1438, 1439, 5, 67, 0, 0, 1439, 1440, 5, 72, 0, 0, 1440, 1441, 5, 95, 0, 0, 1441, 1442, 5, 82, 0, 0, 1442, 1443, 5, 69, 0, 0, 1443, 1444, 5, 67, 0, 0, 1444, 1445, 5, 79, 0, 0, 1445, 1446, 5, 71, 0, 0, 1446, 1447, 5, 78, 0, 0, 1447, 1448, 5, 73, 0, 0, 1448, 1449, 5, 90, 0, 0, 1449, 1450, 5, 69, 0, 0, 1450, 264, 1, 0, 0, 0, 1451, 1452, 5, 77, 0, 0, 1452, 1453, 5, 65, 0, 0, 1453, 1454, 5, 84, 0, 0, 1454, 1455, 5, 69, 0, 0, 1455, 1456, 5, 82, 0, 0, 1456, 1457, 5, 73, 0, 0, 1457, 1458, 5, 65, 0, 0, 1458, 1459, 5, 76, 0, 0, 1459, 1460, 5, 73, 0, 0, 1460, 1461, 5, 90, 0, 0, 1461, 1462, 5, 69, 0, 0, 1462, 1463, 5, 68, 0, 0, 1463, 266, 1, 0, 0, 0, 1464, 1465, 5, 77, 0, 0, 1465, 1466, 5, 69, 0, 0, 1466, 1467, 5, 65, 0, 0, 1467, 1468, 5, 83, 0, 0, 1468, 1469, 5, 85, 0, 0, 1469, 1470, 5, 82, 0, 0, 1470, 1471, 5, 69, 0, 0, 1471, 1472, 5, 83, 0, 0, 1472, 268, 1, 0, 0, 0, 1473, 1474, 5, 77, 0, 0, 1474, 1475, 5, 69, 0, 0, 1475, 1476, 5, 82, 0, 0, 1476, 1477, 5, 71, 0, 0, 1477, 1478, 5, 69, 0, 0, 1478, 270, 1, 0, 0, 0, 1479, 1480, 5, 77, 0, 0, 1480, 1481, 5, 73, 0, 0, 1481, 1482, 5, 78, 0, 0, 1482, 1483, 5, 85, 0, 0, 1483, 1484, 5, 84, 0, 0, 1484, 1485, 5, 69, 0, 0, 1485, 272, 1, 0, 0, 0, 1486, 1487, 5, 77, 0, 0, 1487, 1488, 5, 79, 0, 0, 1488, 1489, 5, 78, 0, 0, 1489, 1490, 5, 84, 0, 0, 1490, 1491, 5, 72, 0, 0, 1491, 274, 1, 0, 0, 0, 1492, 1493, 5, 78, 0, 0, 1493, 1494, 5, 65, 0, 0, 1494, 1495, 5, 84, 0, 0, 1495, 1496, 5, 85, 0, 0, 1496, 1497, 5, 82, 0, 0, 1497, 1498, 5, 65, 0, 0, 1498, 1499, 5, 76, 0, 0, 1499, 276, 1, 0, 0, 0, 1500, 1501, 5, 78, 0, 0, 1501, 1502, 5, 69, 0, 0, 1502, 1503, 5, 88, 0, 0, 1503, 1504, 5, 84, 0, 0, 1504, 278, 1, 0, 0, 0, 1505, 1506, 5, 78, 0, 0, 1506, 1507, 5, 70, 0, 0, 1507, 1508, 5, 67, 0, 0, 1508, 280, 1, 0, 0, 0, 1509, 1510, 5, 78, 0, 0, 1510, 1511, 5, 70, 0, 0, 1511, 1512, 5, 68, 0, 0, 1512, 282, 1, 0, 0, 0, 1513, 1514, 5, 78, 0, 0, 1514, 1515, 5, 70, 0, 0, 1515, 1516, 5, 75, 0, 0, 1516, 1517, 5, 67, 0, 0, 1517, 284, 1, 0, 0, 0, 1518, 1519, 5, 78, 0, 0, 1519, 1520, 5, 70, 0, 0, 1520, 1521, 5, 75, 0, 0, 1521, 1522, 5, 68, 0, 0, 1522, 286, 1, 0, 0, 0, 1523, 1524, 5, 78, 0, 0, 1524, 1525, 5, 79, 0, 0, 1525, 288, 1, 0, 0, 0, 1526, 1527, 5, 78, 0, 0, 1527, 1528, 5, 79, 0, 0, 1528, 1529, 5, 78, 0, 0, 1529, 1530, 5, 69, 0, 0, 1530, 290, 1, 0, 0, 0, 1531, 1532, 5, 78, 0, 0, 1532, 1533, 5, 79, 0, 0, 1533, 1534, 5, 82, 0, 0, 1534, 1535, 5, 77, 0, 0, 1535, 1536, 5, 65, 0, 0, 1536, 1537, 5, 76, 0, 0, 1537, 1538, 5, 73, 0, 0, 1538, 1539, 5, 90, 0, 0, 1539, 1540, 5, 69, 0, 0, 1540, 292, 1, 0, 0, 0, 1541, 1542, 5, 78, 0, 0, 1542, 1543, 5, 79, 0, 0, 1543, 1544, 5, 84, 0, 0, 1544, 294, 1, 0, 0, 0, 1545, 1546, 5, 78, 0, 0, 1546, 1547, 5, 85, 0, 0, 1547, 1548, 5, 76, 0, 0, 1548, 1549, 5, 76, 0, 0, 1549, 296, 1, 0, 0, 0, 1550, 1551, 5, 78, 0, 0, 1551, 1552, 5, 85, 0, 0, 1552, 1553, 5, 76, 0, 0, 1553, 1554, 5, 76, 0, 0, 1554, 1555, 5, 73, 0, 0, 1555, 1556, 5, 70, 0, 0, 1556, 298, 1, 0, 0, 0, 1557, 1558, 5, 78, 0, 0, 1558, 1559, 5, 85, 0, 0, 1559, 1560, 5, 76, 0, 0, 1560, 1561, 5, 76, 0, 0, 1561, 1562, 5, 83, 0, 0, 1562, 300, 1, 0, 0, 0, 1563, 1564, 5, 79, 0, 0, 1564, 1565, 5, 70, 0, 0, 1565, 1566, 5, 70, 0, 0, 1566, 1567, 5, 83, 0, 0, 1567, 1568, 5, 69, 0, 0, 1568, 1569, 5, 84, 0, 0, 1569, 302, 1, 0, 0, 0, 1570, 1571, 5, 79, 0, 0, 1571, 1572, 5, 77, 0, 0, 1572, 1573, 5, 73, 0, 0, 1573, 1574, 5, 84, 0, 0, 1574, 304, 1, 0, 0, 0, 1575, 1576, 5, 79, 0, 0, 1576, 1577, 5, 78, 0, 0, 1577, 306, 1, 0, 0, 0, 1578, 1579, 5, 79, 0, 0, 1579, 1580, 5, 78, 0, 0, 1580, 1581, 5, 69, 0, 0, 1581, 308, 1, 0, 0, 0, 1582, 1583, 5, 79, 0, 0, 1583, 1584, 5, 78, 0, 0, 1584, 1585, 5, 76, 0, 0, 1585, 1586, 5, 89, 0, 0, 1586, 310, 1, 0, 0, 0, 1587, 1588, 5, 79, 0, 0, 1588, 1589, 5, 80, 0, 0, 1589, 1590, 5, 84, 0, 0, 1590, 1591, 5, 73, 0, 0, 1591, 1592, 5, 79, 0, 0, 1592, 1593, 5, 78, 0, 0, 1593, 312, 1, 0, 0, 0, 1594, 1595, 5, 79, 0, 0, 1595, 1596, 5, 82, 0, 0, 1596, 314, 1, 0, 0, 0, 1597, 1598, 5, 79, 0, 0, 1598, 1599, 5, 82, 0, 0, 1599, 1600, 5, 68, 0, 0, 1600, 1601, 5, 69, 0, 0, 1601, 1602, 5, 82, 0, 0, 1602, 316, 1, 0, 0, 0, 1603, 1604, 5, 79, 0, 0, 1604, 1605, 5, 82, 0, 0, 1605, 1606, 5, 68, 0, 0, 1606, 1607, 5, 73, 0, 0, 1607, 1608, 5, 78, 0, 0, 1608, 1609, 5, 65, 0, 0, 1609, 1610, 5, 76, 0, 0, 1610, 1611, 5, 73, 0, 0, 1611, 1612, 5, 84, 0, 0, 1612, 1613, 5, 89, 0, 0, 1613, 318, 1, 0, 0, 0, 1614, 1615, 5, 79, 0, 0, 1615, 1616, 5, 85, 0, 0, 1616, 1617, 5, 84, 0, 0, 1617, 1618, 5, 69, 0, 0, 1618, 1619, 5, 82, 0, 0, 1619, 320, 1, 0, 0, 0, 1620, 1621, 5, 79, 0, 0, 1621, 1622, 5, 85, 0, 0, 1622, 1623, 5, 84, 0, 0, 1623, 1624, 5, 80, 0, 0, 1624, 1625, 5, 85, 0, 0, 1625, 1626, 5, 84, 0, 0, 1626, 322, 1, 0, 0, 0, 1627, 1628, 5, 79, 0, 0, 1628, 1629, 5, 86, 0, 0, 1629, 1630, 5, 69, 0, 0, 1630, 1631, 5, 82, 0, 0, 1631, 324, 1, 0, 0, 0, 1632, 1633, 5, 80, 0, 0, 1633, 1634, 5, 65, 0, 0, 1634, 1635, 5, 82, 0, 0, 1635, 1636, 5, 84, 0, 0, 1636, 1637, 5, 73, 0, 0, 1637, 1638, 5, 84, 0, 0, 1638, 1639, 5, 73, 0, 0, 1639, 1640, 5, 79, 0, 0, 1640, 1641, 5, 78, 0, 0, 1641, 326, 1, 0, 0, 0, 1642, 1643, 5, 80, 0, 0, 1643, 1644, 5, 65, 0, 0, 1644, 1645, 5, 82, 0, 0, 1645, 1646, 5, 84, 0, 0, 1646, 1647, 5, 73, 0, 0, 1647, 1648, 5, 84, 0, 0, 1648, 1649, 5, 73, 0, 0, 1649, 1650, 5, 79, 0, 0, 1650, 1651, 5, 78, 0, 0, 1651, 1652, 5, 83, 0, 0, 1652, 328, 1, 0, 0, 0, 1653, 1654, 5, 80, 0, 0, 1654, 1655, 5, 65, 0, 0, 1655, 1656, 5, 83, 0, 0, 1656, 1657, 5, 84, 0, 0, 1657, 330, 1, 0, 0, 0, 1658, 1659, 5, 80, 0, 0, 1659, 1660, 5, 65, 0, 0, 1660, 1661, 5, 84, 0, 0, 1661, 1662, 5, 72, 0, 0, 1662, 332, 1, 0, 0, 0, 1663, 1664, 5, 80, 0, 0, 1664, 1665, 5, 65, 0, 0, 1665, 1666, 5, 84, 0, 0, 1666, 1667, 5, 84, 0, 0, 1667, 1668, 5, 69, 0, 0, 1668, 1669, 5, 82, 0, 0, 1669, 1670, 5, 78, 0, 0, 1670, 334, 1, 0, 0, 0, 1671, 1672, 5, 80, 0, 0, 1672, 1673, 5, 69, 0, 0, 1673, 1674, 5, 82, 0, 0, 1674, 336, 1, 0, 0, 0, 1675, 1676, 5, 80, 0, 0, 1676, 1677, 5, 69, 0, 0, 1677, 1678, 5, 82, 0, 0, 1678, 1679, 5, 77, 0, 0, 1679, 1680, 5, 85, 0, 0, 1680, 1681, 5, 84, 0, 0, 1681, 1682, 5, 69, 0, 0, 1682, 338, 1, 0, 0, 0, 1683, 1684, 5, 80, 0, 0, 1684, 1685, 5, 79, 0, 0, 1685, 1686, 5, 83, 0, 0, 1686, 1687, 5, 73, 0, 0, 1687, 1688, 5, 84, 0, 0, 1688, 1689, 5, 73, 0, 0, 1689, 1690, 5, 79, 0, 0, 1690, 1691, 5, 78, 0, 0, 1691, 340, 1, 0, 0, 0, 1692, 1693, 5, 80, 0, 0, 1693, 1694, 5, 82, 0, 0, 1694, 1695, 5, 69, 0, 0, 1695, 1696, 5, 67, 0, 0, 1696, 1697, 5, 69, 0, 0, 1697, 1698, 5, 68, 0, 0, 1698, 1699, 5, 73, 0, 0, 1699, 1700, 5, 78, 0, 0, 1700, 1701, 5, 71, 0, 0, 1701, 342, 1, 0, 0, 0, 1702, 1703, 5, 80, 0, 0, 1703, 1704, 5, 82, 0, 0, 1704, 1705, 5, 69, 0, 0, 1705, 1706, 5, 67, 0, 0, 1706, 1707, 5, 73, 0, 0, 1707, 1708, 5, 83, 0, 0, 1708, 1709, 5, 73, 0, 0, 1709, 1710, 5, 79, 0, 0, 1710, 1711, 5, 78, 0, 0, 1711, 344, 1, 0, 0, 0, 1712, 1713, 5, 80, 0, 0, 1713, 1714, 5, 82, 0, 0, 1714, 1715, 5, 69, 0, 0, 1715, 1716, 5, 80, 0, 0, 1716, 1717, 5, 65, 0, 0, 1717, 1718, 5, 82, 0, 0, 1718, 1719, 5, 69, 0, 0, 1719, 346, 1, 0, 0, 0, 1720, 1721, 5, 80, 0, 0, 1721, 1722, 5, 82, 0, 0, 1722, 1723, 5, 73, 0, 0, 1723, 1724, 5, 86, 0, 0, 1724, 1725, 5, 73, 0, 0, 1725, 1726, 5, 76, 0, 0, 1726, 1727, 5, 69, 0, 0, 1727, 1728, 5, 71, 0, 0, 1728, 1729, 5, 69, 0, 0, 1729, 1730, 5, 83, 0, 0, 1730, 348, 1, 0, 0, 0, 1731, 1732, 5, 80, 0, 0, 1732, 1733, 5, 82, 0, 0, 1733, 1734, 5, 79, 0, 0, 1734, 1735, 5, 80, 0, 0, 1735, 1736, 5, 69, 0, 0, 1736, 1737, 5, 82, 0, 0, 1737, 1738, 5, 84, 0, 0, 1738, 1739, 5, 73, 0, 0, 1739, 1740, 5, 69, 0, 0, 1740, 1741, 5, 83, 0, 0, 1741, 350, 1, 0, 0, 0, 1742, 1743, 5, 82, 0, 0, 1743, 1744, 5, 65, 0, 0, 1744, 1745, 5, 78, 0, 0, 1745, 1746, 5, 71, 0, 0, 1746, 1747, 5, 69, 0, 0, 1747, 352, 1, 0, 0, 0, 1748, 1749, 5, 82, 0, 0, 1749, 1750, 5, 69, 0, 0, 1750, 1751, 5, 65, 0, 0, 1751, 1752, 5, 68, 0, 0, 1752, 354, 1, 0, 0, 0, 1753, 1754, 5, 82, 0, 0, 1754, 1755, 5, 69, 0, 0, 1755, 1756, 5, 67, 0, 0, 1756, 1757, 5, 85, 0, 0, 1757, 1758, 5, 82, 0, 0, 1758, 1759, 5, 83, 0, 0, 1759, 1760, 5, 73, 0, 0, 1760, 1761, 5, 86, 0, 0, 1761, 1762, 5, 69, 0, 0, 1762, 356, 1, 0, 0, 0, 1763, 1764, 5, 82, 0, 0, 1764, 1765, 5, 69, 0, 0, 1765, 1766, 5, 70, 0, 0, 1766, 1767, 5, 82, 0, 0, 1767, 1768, 5, 69, 0, 0, 1768, 1769, 5, 83, 0, 0, 1769, 1770, 5, 72, 0, 0, 1770, 358, 1, 0, 0, 0, 1771, 1772, 5, 82, 0, 0, 1772, 1773, 5, 69, 0, 0, 1773, 1774, 5, 78, 0, 0, 1774, 1775, 5, 65, 0, 0, 1775, 1776, 5, 77, 0, 0, 1776, 1777, 5, 69, 0, 0, 1777, 360, 1, 0, 0, 0, 1778, 1779, 5, 82, 0, 0, 1779, 1780, 5, 69, 0, 0, 1780, 1781, 5, 80, 0, 0, 1781, 1782, 5, 69, 0, 0, 1782, 1783, 5, 65, 0, 0, 1783, 1784, 5, 84, 0, 0, 1784, 1785, 5, 65, 0, 0, 1785, 1786, 5, 66, 0, 0, 1786, 1787, 5, 76, 0, 0, 1787, 1788, 5, 69, 0, 0, 1788, 362, 1, 0, 0, 0, 1789, 1790, 5, 82, 0, 0, 1790, 1791, 5, 69, 0, 0, 1791, 1792, 5, 80, 0, 0, 1792, 1793, 5, 76, 0, 0, 1793, 1794, 5, 65, 0, 0, 1794, 1795, 5, 67, 0, 0, 1795, 1796, 5, 69, 0, 0, 1796, 364, 1, 0, 0, 0, 1797, 1798, 5, 82, 0, 0, 1798, 1799, 5, 69, 0, 0, 1799, 1800, 5, 83, 0, 0, 1800, 1801, 5, 69, 0, 0, 1801, 1802, 5, 84, 0, 0, 1802, 366, 1, 0, 0, 0, 1803, 1804, 5, 82, 0, 0, 1804, 1805, 5, 69, 0, 0, 1805, 1806, 5, 83, 0, 0, 1806, 1807, 5, 80, 0, 0, 1807, 1808, 5, 69, 0, 0, 1808, 1809, 5, 67, 0, 0, 1809, 1810, 5, 84, 0, 0, 1810, 368, 1, 0, 0, 0, 1811, 1812, 5, 82, 0, 0, 1812, 1813, 5, 69, 0, 0, 1813, 1814, 5, 83, 0, 0, 1814, 1815, 5, 84, 0, 0, 1815, 1816, 5, 82, 0, 0, 1816, 1817, 5, 73, 0, 0, 1817, 1818, 5, 67, 0, 0, 1818, 1819, 5, 84, 0, 0, 1819, 370, 1, 0, 0, 0, 1820, 1821, 5, 82, 0, 0, 1821, 1822, 5, 69, 0, 0, 1822, 1823, 5, 86, 0, 0, 1823, 1824, 5, 79, 0, 0, 1824, 1825, 5, 75, 0, 0, 1825, 1826, 5, 69, 0, 0, 1826, 372, 1, 0, 0, 0, 1827, 1828, 5, 82, 0, 0, 1828, 1829, 5, 73, 0, 0, 1829, 1830, 5, 71, 0, 0, 1830, 1831, 5, 72, 0, 0, 1831, 1832, 5, 84, 0, 0, 1832, 374, 1, 0, 0, 0, 1833, 1834, 5, 82, 0, 0, 1834, 1835, 5, 79, 0, 0, 1835, 1836, 5, 76, 0, 0, 1836, 1837, 5, 69, 0, 0, 1837, 376, 1, 0, 0, 0, 1838, 1839, 5, 82, 0, 0, 1839, 1840, 5, 79, 0, 0, 1840, 1841, 5, 76, 0, 0, 1841, 1842, 5, 69, 0, 0, 1842, 1843, 5, 83, 0, 0, 1843, 378, 1, 0, 0, 0, 1844, 1845, 5, 82, 0, 0, 1845, 1846, 5, 79, 0, 0, 1846, 1847, 5, 76, 0, 0, 1847, 1848, 5, 76, 0, 0, 1848, 1849, 5, 66, 0, 0, 1849, 1850, 5, 65, 0, 0, 1850, 1851, 5, 67, 0, 0, 1851, 1852, 5, 75, 0, 0, 1852, 380, 1, 0, 0, 0, 1853, 1854, 5, 82, 0, 0, 1854, 1855, 5, 79, 0, 0, 1855, 1856, 5, 76, 0, 0, 1856, 1857, 5, 76, 0, 0, 1857, 1858, 5, 85, 0, 0, 1858, 1859, 5, 80, 0, 0, 1859, 382, 1, 0, 0, 0, 1860, 1861, 5, 82, 0, 0, 1861, 1862, 5, 79, 0, 0, 1862, 1863, 5, 87, 0, 0, 1863, 384, 1, 0, 0, 0, 1864, 1865, 5, 82, 0, 0, 1865, 1866, 5, 79, 0, 0, 1866, 1867, 5, 87, 0, 0, 1867, 1868, 5, 83, 0, 0, 1868, 386, 1, 0, 0, 0, 1869, 1870, 5, 82, 0, 0, 1870, 1871, 5, 85, 0, 0, 1871, 1872, 5, 78, 0, 0, 1872, 1873, 5, 78, 0, 0, 1873, 1874, 5, 73, 0, 0, 1874, 1875, 5, 78, 0, 0, 1875, 1876, 5, 71, 0, 0, 1876, 388, 1, 0, 0, 0, 1877, 1878, 5, 83, 0, 0, 1878, 1879, 5, 67, 0, 0, 1879, 1880, 5, 72, 0, 0, 1880, 1881, 5, 69, 0, 0, 1881, 1882, 5, 77, 0, 0, 1882, 1883, 5, 65, 0, 0, 1883, 390, 1, 0, 0, 0, 1884, 1885, 5, 83, 0, 0, 1885, 1886, 5, 67, 0, 0, 1886, 1887, 5, 72, 0, 0, 1887, 1888, 5, 69, 0, 0, 1888, 1889, 5, 77, 0, 0, 1889, 1890, 5, 65, 0, 0, 1890, 1891, 5, 83, 0, 0, 1891, 392, 1, 0, 0, 0, 1892, 1893, 5, 83, 0, 0, 1893, 1894, 5, 69, 0, 0, 1894, 1895, 5, 67, 0, 0, 1895, 1896, 5, 79, 0, 0, 1896, 1897, 5, 78, 0, 0, 1897, 1898, 5, 68, 0, 0, 1898, 394, 1, 0, 0, 0, 1899, 1900, 5, 83, 0, 0, 1900, 1901, 5, 69, 0, 0, 1901, 1902, 5, 67, 0, 0, 1902, 1903, 5, 85, 0, 0, 1903, 1904, 5, 82, 0, 0, 1904, 1905, 5, 73, 0, 0, 1905, 1906, 5, 84, 0, 0, 1906, 1907, 5, 89, 0, 0, 1907, 396, 1, 0, 0, 0, 1908, 1909, 5, 83, 0, 0, 1909, 1910, 5, 69, 0, 0, 1910, 1911, 5, 69, 0, 0, 1911, 1912, 5, 75, 0, 0, 1912, 398, 1, 0, 0, 0, 1913, 1914, 5, 83, 0, 0, 1914, 1915, 5, 69, 0, 0, 1915, 1916, 5, 76, 0, 0, 1916, 1917, 5, 69, 0, 0, 1917, 1918, 5, 67, 0, 0, 1918, 1919, 5, 84, 0, 0, 1919, 400, 1, 0, 0, 0, 1920, 1921, 5, 83, 0, 0, 1921, 1922, 5, 69, 0, 0, 1922, 1923, 5, 82, 0, 0, 1923, 1924, 5, 73, 0, 0, 1924, 1925, 5, 65, 0, 0, 1925, 1926, 5, 76, 0, 0, 1926, 1927, 5, 73, 0, 0, 1927, 1928, 5, 90, 0, 0, 1928, 1929, 5, 65, 0, 0, 1929, 1930, 5, 66, 0, 0, 1930, 1931, 5, 76, 0, 0, 1931, 1932, 5, 69, 0, 0, 1932, 402, 1, 0, 0, 0, 1933, 1934, 5, 83, 0, 0, 1934, 1935, 5, 69, 0, 0, 1935, 1936, 5, 83, 0, 0, 1936, 1937, 5, 83, 0, 0, 1937, 1938, 5, 73, 0, 0, 1938, 1939, 5, 79, 0, 0, 1939, 1940, 5, 78, 0, 0, 1940, 404, 1, 0, 0, 0, 1941, 1942, 5, 83, 0, 0, 1942, 1943, 5, 69, 0, 0, 1943, 1944, 5, 84, 0, 0, 1944, 406, 1, 0, 0, 0, 1945, 1946, 5, 83, 0, 0, 1946, 1947, 5, 69, 0, 0, 1947, 1948, 5, 84, 0, 0, 1948, 1949, 5, 83, 0, 0, 1949, 408, 1, 0, 0, 0, 1950, 1951, 5, 83, 0, 0, 1951, 1952, 5, 72, 0, 0, 1952, 1953, 5, 79, 0, 0, 1953, 1954, 5, 87, 0, 0, 1954, 410, 1, 0, 0, 0, 1955, 1956, 5, 83, 0, 0, 1956, 1957, 5, 79, 0, 0, 1957, 1958, 5, 77, 0, 0, 1958, 1959, 5, 69, 0, 0, 1959, 412, 1, 0, 0, 0, 1960, 1961, 5, 83, 0, 0, 1961, 1962, 5, 84, 0, 0, 1962, 1963, 5, 65, 0, 0, 1963, 1964, 5, 82, 0, 0, 1964, 1965, 5, 84, 0, 0, 1965, 414, 1, 0, 0, 0, 1966, 1967, 5, 83, 0, 0, 1967, 1968, 5, 84, 0, 0, 1968, 1969, 5, 65, 0, 0, 1969, 1970, 5, 84, 0, 0, 1970, 1971, 5, 83, 0, 0, 1971, 416, 1, 0, 0, 0, 1972, 1973, 5, 83, 0, 0, 1973, 1974, 5, 85, 0, 0, 1974, 1975, 5, 66, 0, 0, 1975, 1976, 5, 83, 0, 0, 1976, 1977, 5, 69, 0, 0, 1977, 1978, 5, 84, 0, 0, 1978, 418, 1, 0, 0, 0, 1979, 1980, 5, 83, 0, 0, 1980, 1981, 5, 85, 0, 0, 1981, 1982, 5, 66, 0, 0, 1982, 1983, 5, 83, 0, 0, 1983, 1984, 5, 84, 0, 0, 1984, 1985, 5, 82, 0, 0, 1985, 1986, 5, 73, 0, 0, 1986, 1987, 5, 78, 0, 0, 1987, 1988, 5, 71, 0, 0, 1988, 420, 1, 0, 0, 0, 1989, 1990, 5, 83, 0, 0, 1990, 1991, 5, 89, 0, 0, 1991, 1992, 5, 83, 0, 0, 1992, 1993, 5, 84, 0, 0, 1993, 1994, 5, 69, 0, 0, 1994, 1995, 5, 77, 0, 0, 1995, 422, 1, 0, 0, 0, 1996, 1997, 5, 84, 0, 0, 1997, 1998, 5, 65, 0, 0, 1998, 1999, 5, 66, 0, 0, 1999, 2000, 5, 76, 0, 0, 2000, 2001, 5, 69, 0, 0, 2001, 424, 1, 0, 0, 0, 2002, 2003, 5, 84, 0, 0, 2003, 2004, 5, 65, 0, 0, 2004, 2005, 5, 66, 0, 0, 2005, 2006, 5, 76, 0, 0, 2006, 2007, 5, 69, 0, 0, 2007, 2008, 5, 83, 0, 0, 2008, 426, 1, 0, 0, 0, 2009, 2010, 5, 84, 0, 0, 2010, 2011, 5, 65, 0, 0, 2011, 2012, 5, 66, 0, 0, 2012, 2013, 5, 76, 0, 0, 2013, 2014, 5, 69, 0, 0, 2014, 2015, 5, 83, 0, 0, 2015, 2016, 5, 65, 0, 0, 2016, 2017, 5, 77, 0, 0, 2017, 2018, 5, 80, 0, 0, 2018, 2019, 5, 76, 0, 0, 2019, 2020, 5, 69, 0, 0, 2020, 428, 1, 0, 0, 0, 2021, 2022, 5, 84, 0, 0, 2022, 2023, 5, 69, 0, 0, 2023, 2024, 5, 88, 0, 0, 2024, 2025, 5, 84, 0, 0, 2025, 430, 1, 0, 0, 0, 2026, 2027, 5, 84, 0, 0, 2027, 2028, 5, 72, 0, 0, 2028, 2029, 5, 69, 0, 0, 2029, 2030, 5, 78, 0, 0, 2030, 432, 1, 0, 0, 0, 2031, 2032, 5, 84, 0, 0, 2032, 2033, 5, 73, 0, 0, 2033, 2034, 5, 69, 0, 0, 2034, 2035, 5, 83, 0, 0, 2035, 434, 1, 0, 0, 0, 2036, 2037, 5, 84, 0, 0, 2037, 2038, 5, 73, 0, 0, 2038, 2039, 5, 77, 0, 0, 2039, 2040, 5, 69, 0, 0, 2040, 436, 1, 0, 0, 0, 2041, 2042, 5, 84, 0, 0, 2042, 2043, 5, 73, 0, 0, 2043, 2044, 5, 77, 0, 0, 2044, 2045, 5, 69, 0, 0, 2045, 2046, 5, 83, 0, 0, 2046, 2047, 5, 84, 0, 0, 2047, 2048, 5, 65, 0, 0, 2048, 2049, 5, 77, 0, 0, 2049, 2050, 5, 80, 0, 0, 2050, 438, 1, 0, 0, 0, 2051, 2052, 5, 84, 0, 0, 2052, 2053, 5, 79, 0, 0, 2053, 440, 1, 0, 0, 0, 2054, 2055, 5, 84, 0, 0, 2055, 2056, 5, 82, 0, 0, 2056, 2057, 5, 65, 0, 0, 2057, 2058, 5, 78, 0, 0, 2058, 2059, 5, 83, 0, 0, 2059, 2060, 5, 65, 0, 0, 2060, 2061, 5, 67, 0, 0, 2061, 2062, 5, 84, 0, 0, 2062, 2063, 5, 73, 0, 0, 2063, 2064, 5, 79, 0, 0, 2064, 2065, 5, 78, 0, 0, 2065, 442, 1, 0, 0, 0, 2066, 2067, 5, 84, 0, 0, 2067, 2068, 5, 82, 0, 0, 2068, 2069, 5, 85, 0, 0, 2069, 2070, 5, 78, 0, 0, 2070, 2071, 5, 67, 0, 0, 2071, 2072, 5, 65, 0, 0, 2072, 2073, 5, 84, 0, 0, 2073, 2074, 5, 69, 0, 0, 2074, 444, 1, 0, 0, 0, 2075, 2076, 5, 84, 0, 0, 2076, 2077, 5, 82, 0, 0, 2077, 2078, 5, 85, 0, 0, 2078, 2079, 5, 69, 0, 0, 2079, 446, 1, 0, 0, 0, 2080, 2081, 5, 84, 0, 0, 2081, 2082, 5, 82, 0, 0, 2082, 2083, 5, 89, 0, 0, 2083, 2084, 5, 95, 0, 0, 2084, 2085, 5, 67, 0, 0, 2085, 2086, 5, 65, 0, 0, 2086, 2087, 5, 83, 0, 0, 2087, 2088, 5, 84, 0, 0, 2088, 448, 1, 0, 0, 0, 2089, 2090, 5, 84, 0, 0, 2090, 2091, 5, 89, 0, 0, 2091, 2092, 5, 80, 0, 0, 2092, 2093, 5, 69, 0, 0, 2093, 450, 1, 0, 0, 0, 2094, 2095, 5, 85, 0, 0, 2095, 2096, 5, 69, 0, 0, 2096, 2097, 5, 83, 0, 0, 2097, 2098, 5, 67, 0, 0, 2098, 2099, 5, 65, 0, 0, 2099, 2100, 5, 80, 0, 0, 2100, 2101, 5, 69, 0, 0, 2101, 452, 1, 0, 0, 0, 2102, 2103, 5, 85, 0, 0, 2103, 2104, 5, 78, 0, 0, 2104, 2105, 5, 66, 0, 0, 2105, 2106, 5, 79, 0, 0, 2106, 2107, 5, 85, 0, 0, 2107, 2108, 5, 78, 0, 0, 2108, 2109, 5, 68, 0, 0, 2109, 2110, 5, 69, 0, 0, 2110, 2111, 5, 68, 0, 0, 2111, 454, 1, 0, 0, 0, 2112, 2113, 5, 85, 0, 0, 2113, 2114, 5, 78, 0, 0, 2114, 2115, 5, 67, 0, 0, 2115, 2116, 5, 79, 0, 0, 2116, 2117, 5, 77, 0, 0, 2117, 2118, 5, 77, 0, 0, 2118, 2119, 5, 73, 0, 0, 2119, 2120, 5, 84, 0, 0, 2120, 2121, 5, 84, 0, 0, 2121, 2122, 5, 69, 0, 0, 2122, 2123, 5, 68, 0, 0, 2123, 456, 1, 0, 0, 0, 2124, 2125, 5, 85, 0, 0, 2125, 2126, 5, 78, 0, 0, 2126, 2127, 5, 73, 0, 0, 2127, 2128, 5, 79, 0, 0, 2128, 2129, 5, 78, 0, 0, 2129, 458, 1, 0, 0, 0, 2130, 2131, 5, 85, 0, 0, 2131, 2132, 5, 78, 0, 0, 2132, 2133, 5, 77, 0, 0, 2133, 2134, 5, 65, 0, 0, 2134, 2135, 5, 84, 0, 0, 2135, 2136, 5, 67, 0, 0, 2136, 2137, 5, 72, 0, 0, 2137, 2138, 5, 69, 0, 0, 2138, 2139, 5, 68, 0, 0, 2139, 460, 1, 0, 0, 0, 2140, 2141, 5, 85, 0, 0, 2141, 2142, 5, 78, 0, 0, 2142, 2143, 5, 78, 0, 0, 2143, 2144, 5, 69, 0, 0, 2144, 2145, 5, 83, 0, 0, 2145, 2146, 5, 84, 0, 0, 2146, 462, 1, 0, 0, 0, 2147, 2148, 5, 85, 0, 0, 2148, 2149, 5, 80, 0, 0, 2149, 2150, 5, 68, 0, 0, 2150, 2151, 5, 65, 0, 0, 2151, 2152, 5, 84, 0, 0, 2152, 2153, 5, 69, 0, 0, 2153, 464, 1, 0, 0, 0, 2154, 2155, 5, 85, 0, 0, 2155, 2156, 5, 83, 0, 0, 2156, 2157, 5, 69, 0, 0, 2157, 466, 1, 0, 0, 0, 2158, 2159, 5, 85, 0, 0, 2159, 2160, 5, 83, 0, 0, 2160, 2161, 5, 69, 0, 0, 2161, 2162, 5, 82, 0, 0, 2162, 468, 1, 0, 0, 0, 2163, 2164, 5, 85, 0, 0, 2164, 2165, 5, 83, 0, 0, 2165, 2166, 5, 73, 0, 0, 2166, 2167, 5, 78, 0, 0, 2167, 2168, 5, 71, 0, 0, 2168, 470, 1, 0, 0, 0, 2169, 2170, 5, 86, 0, 0, 2170, 2171, 5, 65, 0, 0, 2171, 2172, 5, 76, 0, 0, 2172, 2173, 5, 73, 0, 0, 2173, 2174, 5, 68, 0, 0, 2174, 2175, 5, 65, 0, 0, 2175, 2176, 5, 84, 0, 0, 2176, 2177, 5, 69, 0, 0, 2177, 472, 1, 0, 0, 0, 2178, 2179, 5, 86, 0, 0, 2179, 2180, 5, 65, 0, 0, 2180, 2181, 5, 76, 0, 0, 2181, 2182, 5, 85, 0, 0, 2182, 2183, 5, 69, 0, 0, 2183, 2184, 5, 83, 0, 0, 2184, 474, 1, 0, 0, 0, 2185, 2186, 5, 86, 0, 0, 2186, 2187, 5, 69, 0, 0, 2187, 2188, 5, 82, 0, 0, 2188, 2189, 5, 66, 0, 0, 2189, 2190, 5, 79, 0, 0, 2190, 2191, 5, 83, 0, 0, 2191, 2192, 5, 69, 0, 0, 2192, 476, 1, 0, 0, 0, 2193, 2194, 5, 86, 0, 0, 2194, 2195, 5, 73, 0, 0, 2195, 2196, 5, 69, 0, 0, 2196, 2197, 5, 87, 0, 0, 2197, 478, 1, 0, 0, 0, 2198, 2199, 5, 87, 0, 0, 2199, 2200, 5, 72, 0, 0, 2200, 2201, 5, 69, 0, 0, 2201, 2202, 5, 78, 0, 0, 2202, 480, 1, 0, 0, 0, 2203, 2204, 5, 87, 0, 0, 2204, 2205, 5, 72, 0, 0, 2205, 2206, 5, 69, 0, 0, 2206, 2207, 5, 82, 0, 0, 2207, 2208, 5, 69, 0, 0, 2208, 482, 1, 0, 0, 0, 2209, 2210, 5, 87, 0, 0, 2210, 2211, 5, 73, 0, 0, 2211, 2212, 5, 78, 0, 0, 2212, 2213, 5, 68, 0, 0, 2213, 2214, 5, 79, 0, 0, 2214, 2215, 5, 87, 0, 0, 2215, 484, 1, 0, 0, 0, 2216, 2217, 5, 87, 0, 0, 2217, 2218, 5, 73, 0, 0, 2218, 2219, 5, 84, 0, 0, 2219, 2220, 5, 72, 0, 0, 2220, 486, 1, 0, 0, 0, 2221, 2222, 5, 87, 0, 0, 2222, 2223, 5, 73, 0, 0, 2223, 2224, 5, 84, 0, 0, 2224, 2225, 5, 72, 0, 0, 2225, 2226, 5, 79, 0, 0, 2226, 2227, 5, 85, 0, 0, 2227, 2228, 5, 84, 0, 0, 2228, 488, 1, 0, 0, 0, 2229, 2230, 5, 87, 0, 0, 2230, 2231, 5, 79, 0, 0, 2231, 2232, 5, 82, 0, 0, 2232, 2233, 5, 75, 0, 0, 2233, 490, 1, 0, 0, 0, 2234, 2235, 5, 87, 0, 0, 2235, 2236, 5, 82, 0, 0, 2236, 2237, 5, 73, 0, 0, 2237, 2238, 5, 84, 0, 0, 2238, 2239, 5, 69, 0, 0, 2239, 492, 1, 0, 0, 0, 2240, 2241, 5, 89, 0, 0, 2241, 2242, 5, 69, 0, 0, 2242, 2243, 5, 65, 0, 0, 2243, 2244, 5, 82, 0, 0, 2244, 494, 1, 0, 0, 0, 2245, 2246, 5, 90, 0, 0, 2246, 2247, 5, 79, 0, 0, 2247, 2248, 5, 78, 0, 0, 2248, 2249, 5, 69, 0, 0, 2249, 496, 1, 0, 0, 0, 2250, 2251, 5, 61, 0, 0, 2251, 498, 1, 0, 0, 0, 2252, 2253, 5, 60, 0, 0, 2253, 2257, 5, 62, 0, 0, 2254, 2255, 5, 33, 0, 0, 2255, 2257, 5, 61, 0, 0, 2256, 2252, 1, 0, 0, 0, 2256, 2254, 1, 0, 0, 0, 2257, 500, 1, 0, 0, 0, 2258, 2259, 5, 60, 0, 0, 2259, 502, 1, 0, 0, 0, 2260, 2261, 5, 60, 0, 0, 2261, 2262, 5, 61, 0, 0, 2262, 504, 1, 0, 0, 0, 2263, 2264, 5, 62, 0, 0, 2264, 506, 1, 0, 0, 0, 2265, 2266, 5, 62, 0, 0, 2266, 2267, 5, 61, 0, 0, 2267, 508, 1, 0, 0, 0, 2268, 2269, 5, 43, 0, 0, 2269, 510, 1, 0, 0, 0, 2270, 2271, 5, 45, 0, 0, 2271, 512, 1, 0, 0, 0, 2272, 2273, 5, 42, 0, 0, 2273, 514, 1, 0, 0, 0, 2274, 2275, 5, 47, 0, 0, 2275, 516, 1, 0, 0, 0, 2276, 2277, 5, 37, 0, 0, 2277, 518, 1, 0, 0, 0, 2278, 2279, 5, 124, 0, 0, 2279, 2280, 5, 124, 0, 0, 2280, 520, 1, 0, 0, 0, 2281, 2282, 5, 63, 0, 0, 2282, 522, 1, 0, 0, 0, 2283, 2289, 5, 39, 0, 0, 2284, 2288, 8, 0, 0, 0, 2285, 2286, 5, 39, 0, 0, 2286, 2288, 5, 39, 0, 0, 2287, 2284, 1, 0, 0, 0, 2287, 2285, 1, 0, 0, 0, 2288, 2291, 1, 0, 0, 0, 2289, 2287, 1, 0, 0, 0, 2289, 2290, 1, 0, 0, 0, 2290, 2292, 1, 0, 0, 0, 2291, 2289, 1, 0, 0, 0, 2292, 2293, 5, 39, 0, 0, 2293, 524, 1, 0, 0, 0, 2294, 2295, 5, 85, 0, 0, 2295, 2296, 5, 38, 0, 0, 2296, 2297, 5, 39, 0, 0, 2297, 2303, 1, 0, 0, 0, 2298, 2302, 8, 0, 0, 0, 2299, 2300, 5, 39, 0, 0, 2300, 2302, 5, 39, 0, 0, 2301, 2298, 1, 0, 0, 0, 2301, 2299, 1, 0, 0, 0, 2302, 2305, 1, 0, 0, 0, 2303, 2301, 1, 0, 0, 0, 2303, 2304, 1, 0, 0, 0, 2304, 2306, 1, 0, 0, 0, 2305, 2303, 1, 0, 0, 0, 2306, 2307, 5, 39, 0, 0, 2307, 526, 1, 0, 0, 0, 2308, 2309, 5, 88, 0, 0, 2309, 2310, 5, 39, 0, 0, 2310, 2314, 1, 0, 0, 0, 2311, 2313, 8, 0, 0, 0, 2312, 2311, 1, 0, 0, 0, 2313, 2316, 1, 0, 0, 0, 2314, 2312, 1, 0, 0, 0, 2314, 2315, 1, 0, 0, 0, 2315, 2317, 1, 0, 0, 0, 2316, 2314, 1, 0, 0, 0, 2317, 2318, 5, 39, 0, 0, 2318, 528, 1, 0, 0, 0, 2319, 2321, 3, 547, 273, 0, 2320, 2319, 1, 0, 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 2320, 1, 0, 0, 0, 2322, 2323, 1, 0, 0, 0, 2323, 530, 1, 0, 0, 0, 2324, 2326, 3, 547, 273, 0, 2325, 2324, 1, 0, 0, 0, 2326, 2327, 1, 0, 0, 0, 2327, 2325, 1, 0, 0, 0, 2327, 2328, 1, 0, 0, 0, 2328, 2329, 1, 0, 0, 0, 2329, 2333, 5, 46, 0, 0, 2330, 2332, 3, 547, 273, 0, 2331, 2330, 1, 0, 0, 0, 2332, 2335, 1, 0, 0, 0, 2333, 2331, 1, 0, 0, 0, 2333, 2334, 1, 0, 0, 0, 2334, 2343, 1, 0, 0, 0, 2335, 2333, 1, 0, 0, 0, 2336, 2338, 5, 46, 0, 0, 2337, 2339, 3, 547, 273, 0, 2338, 2337, 1, 0, 0, 0, 2339, 2340, 1, 0, 0, 0, 2340, 2338, 1, 0, 0, 0, 2340, 2341, 1, 0, 0, 0, 2341, 2343, 1, 0, 0, 0, 2342, 2325, 1, 0, 0, 0, 2342, 2336, 1, 0, 0, 0, 2343, 532, 1, 0, 0, 0, 2344, 2346, 3, 547, 273, 0, 2345, 2344, 1, 0, 0, 0, 2346, 2347, 1, 0, 0, 0, 2347, 2345, 1, 0, 0, 0, 2347, 2348, 1, 0, 0, 0, 2348, 2356, 1, 0, 0, 0, 2349, 2353, 5, 46, 0, 0, 2350, 2352, 3, 547, 273, 0, 2351, 2350, 1, 0, 0, 0, 2352, 2355, 1, 0, 0, 0, 2353, 2351, 1, 0, 0, 0, 2353, 2354, 1, 0, 0, 0, 2354, 2357, 1, 0, 0, 0, 2355, 2353, 1, 0, 0, 0, 2356, 2349, 1, 0, 0, 0, 2356, 2357, 1, 0, 0, 0, 2357, 2358, 1, 0, 0, 0, 2358, 2359, 3, 545, 272, 0, 2359, 2369, 1, 0, 0, 0, 2360, 2362, 5, 46, 0, 0, 2361, 2363, 3, 547, 273, 0, 2362, 2361, 1, 0, 0, 0, 2363, 2364, 1, 0, 0, 0, 2364, 2362, 1, 0, 0, 0, 2364, 2365, 1, 0, 0, 0, 2365, 2366, 1, 0, 0, 0, 2366, 2367, 3, 545, 272, 0, 2367, 2369, 1, 0, 0, 0, 2368, 2345, 1, 0, 0, 0, 2368, 2360, 1, 0, 0, 0, 2369, 534, 1, 0, 0, 0, 2370, 2373, 3, 549, 274, 0, 2371, 2373, 5, 95, 0, 0, 2372, 2370, 1, 0, 0, 0, 2372, 2371, 1, 0, 0, 0, 2373, 2379, 1, 0, 0, 0, 2374, 2378, 3, 549, 274, 0, 2375, 2378, 3, 547, 273, 0, 2376, 2378, 5, 95, 0, 0, 2377, 2374, 1, 0, 0, 0, 2377, 2375, 1, 0, 0, 0, 2377, 2376, 1, 0, 0, 0, 2378, 2381, 1, 0, 0, 0, 2379, 2377, 1, 0, 0, 0, 2379, 2380, 1, 0, 0, 0, 2380, 536, 1, 0, 0, 0, 2381, 2379, 1, 0, 0, 0, 2382, 2386, 3, 547, 273, 0, 2383, 2387, 3, 549, 274, 0, 2384, 2387, 3, 547, 273, 0, 2385, 2387, 5, 95, 0, 0, 2386, 2383, 1, 0, 0, 0, 2386, 2384, 1, 0, 0, 0, 2386, 2385, 1, 0, 0, 0, 2387, 2388, 1, 0, 0, 0, 2388, 2386, 1, 0, 0, 0, 2388, 2389, 1, 0, 0, 0, 2389, 538, 1, 0, 0, 0, 2390, 2396, 5, 34, 0, 0, 2391, 2395, 8, 1, 0, 0, 2392, 2393, 5, 34, 0, 0, 2393, 2395, 5, 34, 0, 0, 2394, 2391, 1, 0, 0, 0, 2394, 2392, 1, 0, 0, 0, 2395, 2398, 1, 0, 0, 0, 2396, 2394, 1, 0, 0, 0, 2396, 2397, 1, 0, 0, 0, 2397, 2399, 1, 0, 0, 0, 2398, 2396, 1, 0, 0, 0, 2399, 2400, 5, 34, 0, 0, 2400, 540, 1, 0, 0, 0, 2401, 2407, 5, 96, 0, 0, 2402, 2406, 8, 2, 0, 0, 2403, 2404, 5, 96, 0, 0, 2404, 2406, 5, 96, 0, 0, 2405, 2402, 1, 0, 0, 0, 2405, 2403, 1, 0, 0, 0, 2406, 2409, 1, 0, 0, 0, 2407, 2405, 1, 0, 0, 0, 2407, 2408, 1, 0, 0, 0, 2408, 2410, 1, 0, 0, 0, 2409, 2407, 1, 0, 0, 0, 2410, 2411, 5, 96, 0, 0, 2411, 542, 1, 0, 0, 0, 2412, 2413, 5, 59, 0, 0, 2413, 544, 1, 0, 0, 0, 2414, 2416, 5, 69, 0, 0, 2415, 2417, 7, 3, 0, 0, 2416, 2415, 1, 0, 0, 0, 2416, 2417, 1, 0, 0, 0, 2417, 2419, 1, 0, 0, 0, 2418, 2420, 3, 547, 273, 0, 2419, 2418, 1, 0, 0, 0, 2420, 2421, 1, 0, 0, 0, 2421, 2419, 1, 0, 0, 0, 2421, 2422, 1, 0, 0, 0, 2422, 546, 1, 0, 0, 0, 2423, 2424, 7, 4, 0, 0, 2424, 548, 1, 0, 0, 0, 2425, 2426, 7, 5, 0, 0, 2426, 550, 1, 0, 0, 0, 2427, 2428, 5, 45, 0, 0, 2428, 2429, 5, 45, 0, 0, 2429, 2433, 1, 0, 0, 0, 2430, 2432, 8, 6, 0, 0, 2431, 2430, 1, 0, 0, 0, 2432, 2435, 1, 0, 0, 0, 2433, 2431, 1, 0, 0, 0, 2433, 2434, 1, 0, 0, 0, 2434, 2437, 1, 0, 0, 0, 2435, 2433, 1, 0, 0, 0, 2436, 2438, 5, 13, 0, 0, 2437, 2436, 1, 0, 0, 0, 2437, 2438, 1, 0, 0, 0, 2438, 2440, 1, 0, 0, 0, 2439, 2441, 5, 10, 0, 0, 2440, 2439, 1, 0, 0, 0, 2440, 2441, 1, 0, 0, 0, 2441, 2442, 1, 0, 0, 0, 2442, 2443, 6, 275, 0, 0, 2443, 552, 1, 0, 0, 0, 2444, 2445, 5, 47, 0, 0, 2445, 2446, 5, 42, 0, 0, 2446, 2450, 1, 0, 0, 0, 2447, 2449, 9, 0, 0, 0, 2448, 2447, 1, 0, 0, 0, 2449, 2452, 1, 0, 0, 0, 2450, 2451, 1, 0, 0, 0, 2450, 2448, 1, 0, 0, 0, 2451, 2453, 1, 0, 0, 0, 2452, 2450, 1, 0, 0, 0, 2453, 2454, 5, 42, 0, 0, 2454, 2455, 5, 47, 0, 0, 2455, 2456, 1, 0, 0, 0, 2456, 2457, 6, 276, 0, 0, 2457, 554, 1, 0, 0, 0, 2458, 2460, 7, 7, 0, 0, 2459, 2458, 1, 0, 0, 0, 2460, 2461, 1, 0, 0, 0, 2461, 2459, 1, 0, 0, 0, 2461, 2462, 1, 0, 0, 0, 2462, 2463, 1, 0, 0, 0, 2463, 2464, 6, 277, 0, 0, 2464, 556, 1, 0, 0, 0, 2465, 2466, 9, 0, 0, 0, 2466, 558, 1, 0, 0, 0, 33, 0, 2256, 2287, 2289, 2301, 2303, 2314, 2322, 2327, 2333, 2340, 2342, 2347, 2353, 2356, 2364, 2368, 2372, 2377, 2379, 2386, 2388, 2394, 2396, 2405, 2407, 2416, 2421, 2433, 2437, 2440, 2450, 2461, 1, 0, 1, 0] \ No newline at end of file diff --git a/src/lib/trinosql/trinoSqlParserLexer.tokens b/src/lib/trinosql/trinoSqlParserLexer.tokens new file mode 100644 index 0000000..709bdcd --- /dev/null +++ b/src/lib/trinosql/trinoSqlParserLexer.tokens @@ -0,0 +1,537 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +ADD=17 +ADMIN=18 +AFTER=19 +ALL=20 +ALTER=21 +ANALYZE=22 +AND=23 +ANY=24 +ARRAY=25 +AS=26 +ASC=27 +AT=28 +AUTHORIZATION=29 +BERNOULLI=30 +BETWEEN=31 +BY=32 +CALL=33 +CASCADE=34 +CASE=35 +CAST=36 +CATALOGS=37 +COLUMN=38 +COLUMNS=39 +COMMENT=40 +COMMIT=41 +COMMITTED=42 +CONSTRAINT=43 +CREATE=44 +CROSS=45 +CUBE=46 +CURRENT=47 +CURRENT_CATALOG=48 +CURRENT_DATE=49 +CURRENT_PATH=50 +CURRENT_ROLE=51 +CURRENT_SCHEMA=52 +CURRENT_TIME=53 +CURRENT_TIMESTAMP=54 +CURRENT_USER=55 +DATA=56 +DATE=57 +DAY=58 +DEFAULT=59 +DEALLOCATE=60 +DEFINER=61 +DELETE=62 +DESC=63 +DESCRIBE=64 +DEFINE=65 +DISTINCT=66 +DISTRIBUTED=67 +DOUBLE=68 +DROP=69 +ELSE=70 +EMPTY=71 +END=72 +ESCAPE=73 +EXCEPT=74 +EXCLUDING=75 +EXECUTE=76 +EXISTS=77 +EXPLAIN=78 +EXTRACT=79 +FALSE=80 +FETCH=81 +FILTER=82 +FINAL=83 +FIRST=84 +FOLLOWING=85 +FOR=86 +FORMAT=87 +FROM=88 +FULL=89 +FUNCTIONS=90 +GRANT=91 +GRANTED=92 +GRANTS=93 +DENY=94 +GRAPHVIZ=95 +GROUP=96 +GROUPING=97 +GROUPS=98 +HAVING=99 +HOUR=100 +IF=101 +IGNORE=102 +IN=103 +INCLUDING=104 +INITIAL=105 +INNER=106 +INPUT=107 +INSERT=108 +INTERSECT=109 +INTERVAL=110 +INTO=111 +INVOKER=112 +IO=113 +IS=114 +ISOLATION=115 +JOIN=116 +JSON=117 +LAST=118 +LATERAL=119 +LEFT=120 +LEVEL=121 +LIKE=122 +LIMIT=123 +LOCAL=124 +LOCALTIME=125 +LOCALTIMESTAMP=126 +LOGICAL=127 +MAP=128 +MATCH=129 +MATCHED=130 +MATCHES=131 +MATCH_RECOGNIZE=132 +MATERIALIZED=133 +MEASURES=134 +MERGE=135 +MINUTE=136 +MONTH=137 +NATURAL=138 +NEXT=139 +NFC=140 +NFD=141 +NFKC=142 +NFKD=143 +NO=144 +NONE=145 +NORMALIZE=146 +NOT=147 +NULL=148 +NULLIF=149 +NULLS=150 +OFFSET=151 +OMIT=152 +ON=153 +ONE=154 +ONLY=155 +OPTION=156 +OR=157 +ORDER=158 +ORDINALITY=159 +OUTER=160 +OUTPUT=161 +OVER=162 +PARTITION=163 +PARTITIONS=164 +PAST=165 +PATH=166 +PATTERN=167 +PER=168 +PERMUTE=169 +POSITION=170 +PRECEDING=171 +PRECISION=172 +PREPARE=173 +PRIVILEGES=174 +PROPERTIES=175 +RANGE=176 +READ=177 +RECURSIVE=178 +REFRESH=179 +RENAME=180 +REPEATABLE=181 +REPLACE=182 +RESET=183 +RESPECT=184 +RESTRICT=185 +REVOKE=186 +RIGHT=187 +ROLE=188 +ROLES=189 +ROLLBACK=190 +ROLLUP=191 +ROW=192 +ROWS=193 +RUNNING=194 +SCHEMA=195 +SCHEMAS=196 +SECOND=197 +SECURITY=198 +SEEK=199 +SELECT=200 +SERIALIZABLE=201 +SESSION=202 +SET=203 +SETS=204 +SHOW=205 +SOME=206 +START=207 +STATS=208 +SUBSET=209 +SUBSTRING=210 +SYSTEM=211 +TABLE=212 +TABLES=213 +TABLESAMPLE=214 +TEXT=215 +THEN=216 +TIES=217 +TIME=218 +TIMESTAMP=219 +TO=220 +TRANSACTION=221 +TRUNCATE=222 +TRUE=223 +TRY_CAST=224 +TYPE=225 +UESCAPE=226 +UNBOUNDED=227 +UNCOMMITTED=228 +UNION=229 +UNMATCHED=230 +UNNEST=231 +UPDATE=232 +USE=233 +USER=234 +USING=235 +VALIDATE=236 +VALUES=237 +VERBOSE=238 +VIEW=239 +WHEN=240 +WHERE=241 +WINDOW=242 +WITH=243 +WITHOUT=244 +WORK=245 +WRITE=246 +YEAR=247 +ZONE=248 +EQ=249 +NEQ=250 +LT=251 +LTE=252 +GT=253 +GTE=254 +PLUS=255 +MINUS=256 +ASTERISK=257 +SLASH=258 +PERCENT=259 +CONCAT=260 +QUESTION_MARK=261 +STRING=262 +UNICODE_STRING=263 +BINARY_LITERAL=264 +INTEGER_VALUE=265 +DECIMAL_VALUE=266 +DOUBLE_VALUE=267 +IDENTIFIER=268 +DIGIT_IDENTIFIER=269 +QUOTED_IDENTIFIER=270 +BACKQUOTED_IDENTIFIER=271 +SEMICOLON=272 +SIMPLE_COMMENT=273 +BRACKETED_COMMENT=274 +WS=275 +UNRECOGNIZED=276 +'.'=1 +'('=2 +')'=3 +','=4 +'SKIP'=5 +'->'=6 +'['=7 +']'=8 +'|'=9 +'^'=10 +'$'=11 +'{-'=12 +'-}'=13 +'{'=14 +'}'=15 +'=>'=16 +'ADD'=17 +'ADMIN'=18 +'AFTER'=19 +'ALL'=20 +'ALTER'=21 +'ANALYZE'=22 +'AND'=23 +'ANY'=24 +'ARRAY'=25 +'AS'=26 +'ASC'=27 +'AT'=28 +'AUTHORIZATION'=29 +'BERNOULLI'=30 +'BETWEEN'=31 +'BY'=32 +'CALL'=33 +'CASCADE'=34 +'CASE'=35 +'CAST'=36 +'CATALOGS'=37 +'COLUMN'=38 +'COLUMNS'=39 +'COMMENT'=40 +'COMMIT'=41 +'COMMITTED'=42 +'CONSTRAINT'=43 +'CREATE'=44 +'CROSS'=45 +'CUBE'=46 +'CURRENT'=47 +'CURRENT_CATALOG'=48 +'CURRENT_DATE'=49 +'CURRENT_PATH'=50 +'CURRENT_ROLE'=51 +'CURRENT_SCHEMA'=52 +'CURRENT_TIME'=53 +'CURRENT_TIMESTAMP'=54 +'CURRENT_USER'=55 +'DATA'=56 +'DATE'=57 +'DAY'=58 +'DEFAULT'=59 +'DEALLOCATE'=60 +'DEFINER'=61 +'DELETE'=62 +'DESC'=63 +'DESCRIBE'=64 +'DEFINE'=65 +'DISTINCT'=66 +'DISTRIBUTED'=67 +'DOUBLE'=68 +'DROP'=69 +'ELSE'=70 +'EMPTY'=71 +'END'=72 +'ESCAPE'=73 +'EXCEPT'=74 +'EXCLUDING'=75 +'EXECUTE'=76 +'EXISTS'=77 +'EXPLAIN'=78 +'EXTRACT'=79 +'FALSE'=80 +'FETCH'=81 +'FILTER'=82 +'FINAL'=83 +'FIRST'=84 +'FOLLOWING'=85 +'FOR'=86 +'FORMAT'=87 +'FROM'=88 +'FULL'=89 +'FUNCTIONS'=90 +'GRANT'=91 +'GRANTED'=92 +'GRANTS'=93 +'DENY'=94 +'GRAPHVIZ'=95 +'GROUP'=96 +'GROUPING'=97 +'GROUPS'=98 +'HAVING'=99 +'HOUR'=100 +'IF'=101 +'IGNORE'=102 +'IN'=103 +'INCLUDING'=104 +'INITIAL'=105 +'INNER'=106 +'INPUT'=107 +'INSERT'=108 +'INTERSECT'=109 +'INTERVAL'=110 +'INTO'=111 +'INVOKER'=112 +'IO'=113 +'IS'=114 +'ISOLATION'=115 +'JOIN'=116 +'JSON'=117 +'LAST'=118 +'LATERAL'=119 +'LEFT'=120 +'LEVEL'=121 +'LIKE'=122 +'LIMIT'=123 +'LOCAL'=124 +'LOCALTIME'=125 +'LOCALTIMESTAMP'=126 +'LOGICAL'=127 +'MAP'=128 +'MATCH'=129 +'MATCHED'=130 +'MATCHES'=131 +'MATCH_RECOGNIZE'=132 +'MATERIALIZED'=133 +'MEASURES'=134 +'MERGE'=135 +'MINUTE'=136 +'MONTH'=137 +'NATURAL'=138 +'NEXT'=139 +'NFC'=140 +'NFD'=141 +'NFKC'=142 +'NFKD'=143 +'NO'=144 +'NONE'=145 +'NORMALIZE'=146 +'NOT'=147 +'NULL'=148 +'NULLIF'=149 +'NULLS'=150 +'OFFSET'=151 +'OMIT'=152 +'ON'=153 +'ONE'=154 +'ONLY'=155 +'OPTION'=156 +'OR'=157 +'ORDER'=158 +'ORDINALITY'=159 +'OUTER'=160 +'OUTPUT'=161 +'OVER'=162 +'PARTITION'=163 +'PARTITIONS'=164 +'PAST'=165 +'PATH'=166 +'PATTERN'=167 +'PER'=168 +'PERMUTE'=169 +'POSITION'=170 +'PRECEDING'=171 +'PRECISION'=172 +'PREPARE'=173 +'PRIVILEGES'=174 +'PROPERTIES'=175 +'RANGE'=176 +'READ'=177 +'RECURSIVE'=178 +'REFRESH'=179 +'RENAME'=180 +'REPEATABLE'=181 +'REPLACE'=182 +'RESET'=183 +'RESPECT'=184 +'RESTRICT'=185 +'REVOKE'=186 +'RIGHT'=187 +'ROLE'=188 +'ROLES'=189 +'ROLLBACK'=190 +'ROLLUP'=191 +'ROW'=192 +'ROWS'=193 +'RUNNING'=194 +'SCHEMA'=195 +'SCHEMAS'=196 +'SECOND'=197 +'SECURITY'=198 +'SEEK'=199 +'SELECT'=200 +'SERIALIZABLE'=201 +'SESSION'=202 +'SET'=203 +'SETS'=204 +'SHOW'=205 +'SOME'=206 +'START'=207 +'STATS'=208 +'SUBSET'=209 +'SUBSTRING'=210 +'SYSTEM'=211 +'TABLE'=212 +'TABLES'=213 +'TABLESAMPLE'=214 +'TEXT'=215 +'THEN'=216 +'TIES'=217 +'TIME'=218 +'TIMESTAMP'=219 +'TO'=220 +'TRANSACTION'=221 +'TRUNCATE'=222 +'TRUE'=223 +'TRY_CAST'=224 +'TYPE'=225 +'UESCAPE'=226 +'UNBOUNDED'=227 +'UNCOMMITTED'=228 +'UNION'=229 +'UNMATCHED'=230 +'UNNEST'=231 +'UPDATE'=232 +'USE'=233 +'USER'=234 +'USING'=235 +'VALIDATE'=236 +'VALUES'=237 +'VERBOSE'=238 +'VIEW'=239 +'WHEN'=240 +'WHERE'=241 +'WINDOW'=242 +'WITH'=243 +'WITHOUT'=244 +'WORK'=245 +'WRITE'=246 +'YEAR'=247 +'ZONE'=248 +'='=249 +'<'=251 +'<='=252 +'>'=253 +'>='=254 +'+'=255 +'-'=256 +'*'=257 +'/'=258 +'%'=259 +'||'=260 +'?'=261 +';'=272 diff --git a/src/lib/trinosql/trinoSqlParserLexer.ts b/src/lib/trinosql/trinoSqlParserLexer.ts new file mode 100644 index 0000000..295fd9a --- /dev/null +++ b/src/lib/trinosql/trinoSqlParserLexer.ts @@ -0,0 +1,1436 @@ +// Generated from /Users/zhenglin/Documents/parser/dt-sql-parser/src/grammar/trinosql/trinoSqlParser.g4 by ANTLR 4.12.0 +// noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols +import { + ATN, + ATNDeserializer, + CharStream, + DecisionState, DFA, + Lexer, + LexerATNSimulator, + RuleContext, + PredictionContextCache, + Token +} from "antlr4"; +export default class trinoSqlParserLexer extends Lexer { + public static readonly T__0 = 1; + public static readonly T__1 = 2; + public static readonly T__2 = 3; + public static readonly T__3 = 4; + public static readonly T__4 = 5; + public static readonly T__5 = 6; + public static readonly T__6 = 7; + public static readonly T__7 = 8; + public static readonly T__8 = 9; + public static readonly T__9 = 10; + public static readonly T__10 = 11; + public static readonly T__11 = 12; + public static readonly T__12 = 13; + public static readonly T__13 = 14; + public static readonly T__14 = 15; + public static readonly T__15 = 16; + public static readonly ADD = 17; + public static readonly ADMIN = 18; + public static readonly AFTER = 19; + public static readonly ALL = 20; + public static readonly ALTER = 21; + public static readonly ANALYZE = 22; + public static readonly AND = 23; + public static readonly ANY = 24; + public static readonly ARRAY = 25; + public static readonly AS = 26; + public static readonly ASC = 27; + public static readonly AT = 28; + public static readonly AUTHORIZATION = 29; + public static readonly BERNOULLI = 30; + public static readonly BETWEEN = 31; + public static readonly BY = 32; + public static readonly CALL = 33; + public static readonly CASCADE = 34; + public static readonly CASE = 35; + public static readonly CAST = 36; + public static readonly CATALOGS = 37; + public static readonly COLUMN = 38; + public static readonly COLUMNS = 39; + public static readonly COMMENT = 40; + public static readonly COMMIT = 41; + public static readonly COMMITTED = 42; + public static readonly CONSTRAINT = 43; + public static readonly CREATE = 44; + public static readonly CROSS = 45; + public static readonly CUBE = 46; + public static readonly CURRENT = 47; + public static readonly CURRENT_CATALOG = 48; + public static readonly CURRENT_DATE = 49; + public static readonly CURRENT_PATH = 50; + public static readonly CURRENT_ROLE = 51; + public static readonly CURRENT_SCHEMA = 52; + public static readonly CURRENT_TIME = 53; + public static readonly CURRENT_TIMESTAMP = 54; + public static readonly CURRENT_USER = 55; + public static readonly DATA = 56; + public static readonly DATE = 57; + public static readonly DAY = 58; + public static readonly DEFAULT = 59; + public static readonly DEALLOCATE = 60; + public static readonly DEFINER = 61; + public static readonly DELETE = 62; + public static readonly DESC = 63; + public static readonly DESCRIBE = 64; + public static readonly DEFINE = 65; + public static readonly DISTINCT = 66; + public static readonly DISTRIBUTED = 67; + public static readonly DOUBLE = 68; + public static readonly DROP = 69; + public static readonly ELSE = 70; + public static readonly EMPTY = 71; + public static readonly END = 72; + public static readonly ESCAPE = 73; + public static readonly EXCEPT = 74; + public static readonly EXCLUDING = 75; + public static readonly EXECUTE = 76; + public static readonly EXISTS = 77; + public static readonly EXPLAIN = 78; + public static readonly EXTRACT = 79; + public static readonly FALSE = 80; + public static readonly FETCH = 81; + public static readonly FILTER = 82; + public static readonly FINAL = 83; + public static readonly FIRST = 84; + public static readonly FOLLOWING = 85; + public static readonly FOR = 86; + public static readonly FORMAT = 87; + public static readonly FROM = 88; + public static readonly FULL = 89; + public static readonly FUNCTIONS = 90; + public static readonly GRANT = 91; + public static readonly GRANTED = 92; + public static readonly GRANTS = 93; + public static readonly DENY = 94; + public static readonly GRAPHVIZ = 95; + public static readonly GROUP = 96; + public static readonly GROUPING = 97; + public static readonly GROUPS = 98; + public static readonly HAVING = 99; + public static readonly HOUR = 100; + public static readonly IF = 101; + public static readonly IGNORE = 102; + public static readonly IN = 103; + public static readonly INCLUDING = 104; + public static readonly INITIAL = 105; + public static readonly INNER = 106; + public static readonly INPUT = 107; + public static readonly INSERT = 108; + public static readonly INTERSECT = 109; + public static readonly INTERVAL = 110; + public static readonly INTO = 111; + public static readonly INVOKER = 112; + public static readonly IO = 113; + public static readonly IS = 114; + public static readonly ISOLATION = 115; + public static readonly JOIN = 116; + public static readonly JSON = 117; + public static readonly LAST = 118; + public static readonly LATERAL = 119; + public static readonly LEFT = 120; + public static readonly LEVEL = 121; + public static readonly LIKE = 122; + public static readonly LIMIT = 123; + public static readonly LOCAL = 124; + public static readonly LOCALTIME = 125; + public static readonly LOCALTIMESTAMP = 126; + public static readonly LOGICAL = 127; + public static readonly MAP = 128; + public static readonly MATCH = 129; + public static readonly MATCHED = 130; + public static readonly MATCHES = 131; + public static readonly MATCH_RECOGNIZE = 132; + public static readonly MATERIALIZED = 133; + public static readonly MEASURES = 134; + public static readonly MERGE = 135; + public static readonly MINUTE = 136; + public static readonly MONTH = 137; + public static readonly NATURAL = 138; + public static readonly NEXT = 139; + public static readonly NFC = 140; + public static readonly NFD = 141; + public static readonly NFKC = 142; + public static readonly NFKD = 143; + public static readonly NO = 144; + public static readonly NONE = 145; + public static readonly NORMALIZE = 146; + public static readonly NOT = 147; + public static readonly NULL = 148; + public static readonly NULLIF = 149; + public static readonly NULLS = 150; + public static readonly OFFSET = 151; + public static readonly OMIT = 152; + public static readonly ON = 153; + public static readonly ONE = 154; + public static readonly ONLY = 155; + public static readonly OPTION = 156; + public static readonly OR = 157; + public static readonly ORDER = 158; + public static readonly ORDINALITY = 159; + public static readonly OUTER = 160; + public static readonly OUTPUT = 161; + public static readonly OVER = 162; + public static readonly PARTITION = 163; + public static readonly PARTITIONS = 164; + public static readonly PAST = 165; + public static readonly PATH = 166; + public static readonly PATTERN = 167; + public static readonly PER = 168; + public static readonly PERMUTE = 169; + public static readonly POSITION = 170; + public static readonly PRECEDING = 171; + public static readonly PRECISION = 172; + public static readonly PREPARE = 173; + public static readonly PRIVILEGES = 174; + public static readonly PROPERTIES = 175; + public static readonly RANGE = 176; + public static readonly READ = 177; + public static readonly RECURSIVE = 178; + public static readonly REFRESH = 179; + public static readonly RENAME = 180; + public static readonly REPEATABLE = 181; + public static readonly REPLACE = 182; + public static readonly RESET = 183; + public static readonly RESPECT = 184; + public static readonly RESTRICT = 185; + public static readonly REVOKE = 186; + public static readonly RIGHT = 187; + public static readonly ROLE = 188; + public static readonly ROLES = 189; + public static readonly ROLLBACK = 190; + public static readonly ROLLUP = 191; + public static readonly ROW = 192; + public static readonly ROWS = 193; + public static readonly RUNNING = 194; + public static readonly SCHEMA = 195; + public static readonly SCHEMAS = 196; + public static readonly SECOND = 197; + public static readonly SECURITY = 198; + public static readonly SEEK = 199; + public static readonly SELECT = 200; + public static readonly SERIALIZABLE = 201; + public static readonly SESSION = 202; + public static readonly SET = 203; + public static readonly SETS = 204; + public static readonly SHOW = 205; + public static readonly SOME = 206; + public static readonly START = 207; + public static readonly STATS = 208; + public static readonly SUBSET = 209; + public static readonly SUBSTRING = 210; + public static readonly SYSTEM = 211; + public static readonly TABLE = 212; + public static readonly TABLES = 213; + public static readonly TABLESAMPLE = 214; + public static readonly TEXT = 215; + public static readonly THEN = 216; + public static readonly TIES = 217; + public static readonly TIME = 218; + public static readonly TIMESTAMP = 219; + public static readonly TO = 220; + public static readonly TRANSACTION = 221; + public static readonly TRUNCATE = 222; + public static readonly TRUE = 223; + public static readonly TRY_CAST = 224; + public static readonly TYPE = 225; + public static readonly UESCAPE = 226; + public static readonly UNBOUNDED = 227; + public static readonly UNCOMMITTED = 228; + public static readonly UNION = 229; + public static readonly UNMATCHED = 230; + public static readonly UNNEST = 231; + public static readonly UPDATE = 232; + public static readonly USE = 233; + public static readonly USER = 234; + public static readonly USING = 235; + public static readonly VALIDATE = 236; + public static readonly VALUES = 237; + public static readonly VERBOSE = 238; + public static readonly VIEW = 239; + public static readonly WHEN = 240; + public static readonly WHERE = 241; + public static readonly WINDOW = 242; + public static readonly WITH = 243; + public static readonly WITHOUT = 244; + public static readonly WORK = 245; + public static readonly WRITE = 246; + public static readonly YEAR = 247; + public static readonly ZONE = 248; + public static readonly EQ = 249; + public static readonly NEQ = 250; + public static readonly LT = 251; + public static readonly LTE = 252; + public static readonly GT = 253; + public static readonly GTE = 254; + public static readonly PLUS = 255; + public static readonly MINUS = 256; + public static readonly ASTERISK = 257; + public static readonly SLASH = 258; + public static readonly PERCENT = 259; + public static readonly CONCAT = 260; + public static readonly QUESTION_MARK = 261; + public static readonly STRING = 262; + public static readonly UNICODE_STRING = 263; + public static readonly BINARY_LITERAL = 264; + public static readonly INTEGER_VALUE = 265; + public static readonly DECIMAL_VALUE = 266; + public static readonly DOUBLE_VALUE = 267; + public static readonly IDENTIFIER = 268; + public static readonly DIGIT_IDENTIFIER = 269; + public static readonly QUOTED_IDENTIFIER = 270; + public static readonly BACKQUOTED_IDENTIFIER = 271; + public static readonly SEMICOLON = 272; + public static readonly SIMPLE_COMMENT = 273; + public static readonly BRACKETED_COMMENT = 274; + public static readonly WS = 275; + public static readonly UNRECOGNIZED = 276; + public static readonly EOF = Token.EOF; + + public static readonly channelNames: string[] = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ]; + public static readonly literalNames: string[] = [ null, "'.'", "'('", "')'", + "','", "'SKIP'", "'->'", + "'['", "']'", "'|'", + "'^'", "'$'", "'{-'", + "'-}'", "'{'", "'}'", + "'=>'", "'ADD'", "'ADMIN'", + "'AFTER'", "'ALL'", "'ALTER'", + "'ANALYZE'", "'AND'", + "'ANY'", "'ARRAY'", "'AS'", + "'ASC'", "'AT'", "'AUTHORIZATION'", + "'BERNOULLI'", "'BETWEEN'", + "'BY'", "'CALL'", "'CASCADE'", + "'CASE'", "'CAST'", "'CATALOGS'", + "'COLUMN'", "'COLUMNS'", + "'COMMENT'", "'COMMIT'", + "'COMMITTED'", "'CONSTRAINT'", + "'CREATE'", "'CROSS'", + "'CUBE'", "'CURRENT'", + "'CURRENT_CATALOG'", + "'CURRENT_DATE'", "'CURRENT_PATH'", + "'CURRENT_ROLE'", "'CURRENT_SCHEMA'", + "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'CURRENT_USER'", "'DATA'", + "'DATE'", "'DAY'", "'DEFAULT'", + "'DEALLOCATE'", "'DEFINER'", + "'DELETE'", "'DESC'", + "'DESCRIBE'", "'DEFINE'", + "'DISTINCT'", "'DISTRIBUTED'", + "'DOUBLE'", "'DROP'", + "'ELSE'", "'EMPTY'", + "'END'", "'ESCAPE'", + "'EXCEPT'", "'EXCLUDING'", + "'EXECUTE'", "'EXISTS'", + "'EXPLAIN'", "'EXTRACT'", + "'FALSE'", "'FETCH'", + "'FILTER'", "'FINAL'", + "'FIRST'", "'FOLLOWING'", + "'FOR'", "'FORMAT'", + "'FROM'", "'FULL'", "'FUNCTIONS'", + "'GRANT'", "'GRANTED'", + "'GRANTS'", "'DENY'", + "'GRAPHVIZ'", "'GROUP'", + "'GROUPING'", "'GROUPS'", + "'HAVING'", "'HOUR'", + "'IF'", "'IGNORE'", "'IN'", + "'INCLUDING'", "'INITIAL'", + "'INNER'", "'INPUT'", + "'INSERT'", "'INTERSECT'", + "'INTERVAL'", "'INTO'", + "'INVOKER'", "'IO'", + "'IS'", "'ISOLATION'", + "'JOIN'", "'JSON'", "'LAST'", + "'LATERAL'", "'LEFT'", + "'LEVEL'", "'LIKE'", + "'LIMIT'", "'LOCAL'", + "'LOCALTIME'", "'LOCALTIMESTAMP'", + "'LOGICAL'", "'MAP'", + "'MATCH'", "'MATCHED'", + "'MATCHES'", "'MATCH_RECOGNIZE'", + "'MATERIALIZED'", "'MEASURES'", + "'MERGE'", "'MINUTE'", + "'MONTH'", "'NATURAL'", + "'NEXT'", "'NFC'", "'NFD'", + "'NFKC'", "'NFKD'", "'NO'", + "'NONE'", "'NORMALIZE'", + "'NOT'", "'NULL'", "'NULLIF'", + "'NULLS'", "'OFFSET'", + "'OMIT'", "'ON'", "'ONE'", + "'ONLY'", "'OPTION'", + "'OR'", "'ORDER'", "'ORDINALITY'", + "'OUTER'", "'OUTPUT'", + "'OVER'", "'PARTITION'", + "'PARTITIONS'", "'PAST'", + "'PATH'", "'PATTERN'", + "'PER'", "'PERMUTE'", + "'POSITION'", "'PRECEDING'", + "'PRECISION'", "'PREPARE'", + "'PRIVILEGES'", "'PROPERTIES'", + "'RANGE'", "'READ'", + "'RECURSIVE'", "'REFRESH'", + "'RENAME'", "'REPEATABLE'", + "'REPLACE'", "'RESET'", + "'RESPECT'", "'RESTRICT'", + "'REVOKE'", "'RIGHT'", + "'ROLE'", "'ROLES'", + "'ROLLBACK'", "'ROLLUP'", + "'ROW'", "'ROWS'", "'RUNNING'", + "'SCHEMA'", "'SCHEMAS'", + "'SECOND'", "'SECURITY'", + "'SEEK'", "'SELECT'", + "'SERIALIZABLE'", "'SESSION'", + "'SET'", "'SETS'", "'SHOW'", + "'SOME'", "'START'", + "'STATS'", "'SUBSET'", + "'SUBSTRING'", "'SYSTEM'", + "'TABLE'", "'TABLES'", + "'TABLESAMPLE'", "'TEXT'", + "'THEN'", "'TIES'", "'TIME'", + "'TIMESTAMP'", "'TO'", + "'TRANSACTION'", "'TRUNCATE'", + "'TRUE'", "'TRY_CAST'", + "'TYPE'", "'UESCAPE'", + "'UNBOUNDED'", "'UNCOMMITTED'", + "'UNION'", "'UNMATCHED'", + "'UNNEST'", "'UPDATE'", + "'USE'", "'USER'", "'USING'", + "'VALIDATE'", "'VALUES'", + "'VERBOSE'", "'VIEW'", + "'WHEN'", "'WHERE'", + "'WINDOW'", "'WITH'", + "'WITHOUT'", "'WORK'", + "'WRITE'", "'YEAR'", + "'ZONE'", "'='", null, + "'<'", "'<='", "'>'", + "'>='", "'+'", "'-'", + "'*'", "'/'", "'%'", + "'||'", "'?'", null, + null, null, null, null, + null, null, null, null, + null, "';'" ]; + public static readonly symbolicNames: string[] = [ null, null, null, null, + null, null, null, null, + null, null, null, null, + null, null, null, null, + null, "ADD", "ADMIN", + "AFTER", "ALL", "ALTER", + "ANALYZE", "AND", "ANY", + "ARRAY", "AS", "ASC", + "AT", "AUTHORIZATION", + "BERNOULLI", "BETWEEN", + "BY", "CALL", "CASCADE", + "CASE", "CAST", "CATALOGS", + "COLUMN", "COLUMNS", + "COMMENT", "COMMIT", + "COMMITTED", "CONSTRAINT", + "CREATE", "CROSS", "CUBE", + "CURRENT", "CURRENT_CATALOG", + "CURRENT_DATE", "CURRENT_PATH", + "CURRENT_ROLE", "CURRENT_SCHEMA", + "CURRENT_TIME", "CURRENT_TIMESTAMP", + "CURRENT_USER", "DATA", + "DATE", "DAY", "DEFAULT", + "DEALLOCATE", "DEFINER", + "DELETE", "DESC", "DESCRIBE", + "DEFINE", "DISTINCT", + "DISTRIBUTED", "DOUBLE", + "DROP", "ELSE", "EMPTY", + "END", "ESCAPE", "EXCEPT", + "EXCLUDING", "EXECUTE", + "EXISTS", "EXPLAIN", + "EXTRACT", "FALSE", + "FETCH", "FILTER", "FINAL", + "FIRST", "FOLLOWING", + "FOR", "FORMAT", "FROM", + "FULL", "FUNCTIONS", + "GRANT", "GRANTED", + "GRANTS", "DENY", "GRAPHVIZ", + "GROUP", "GROUPING", + "GROUPS", "HAVING", + "HOUR", "IF", "IGNORE", + "IN", "INCLUDING", "INITIAL", + "INNER", "INPUT", "INSERT", + "INTERSECT", "INTERVAL", + "INTO", "INVOKER", "IO", + "IS", "ISOLATION", "JOIN", + "JSON", "LAST", "LATERAL", + "LEFT", "LEVEL", "LIKE", + "LIMIT", "LOCAL", "LOCALTIME", + "LOCALTIMESTAMP", "LOGICAL", + "MAP", "MATCH", "MATCHED", + "MATCHES", "MATCH_RECOGNIZE", + "MATERIALIZED", "MEASURES", + "MERGE", "MINUTE", "MONTH", + "NATURAL", "NEXT", "NFC", + "NFD", "NFKC", "NFKD", + "NO", "NONE", "NORMALIZE", + "NOT", "NULL", "NULLIF", + "NULLS", "OFFSET", "OMIT", + "ON", "ONE", "ONLY", + "OPTION", "OR", "ORDER", + "ORDINALITY", "OUTER", + "OUTPUT", "OVER", "PARTITION", + "PARTITIONS", "PAST", + "PATH", "PATTERN", "PER", + "PERMUTE", "POSITION", + "PRECEDING", "PRECISION", + "PREPARE", "PRIVILEGES", + "PROPERTIES", "RANGE", + "READ", "RECURSIVE", + "REFRESH", "RENAME", + "REPEATABLE", "REPLACE", + "RESET", "RESPECT", + "RESTRICT", "REVOKE", + "RIGHT", "ROLE", "ROLES", + "ROLLBACK", "ROLLUP", + "ROW", "ROWS", "RUNNING", + "SCHEMA", "SCHEMAS", + "SECOND", "SECURITY", + "SEEK", "SELECT", "SERIALIZABLE", + "SESSION", "SET", "SETS", + "SHOW", "SOME", "START", + "STATS", "SUBSET", "SUBSTRING", + "SYSTEM", "TABLE", "TABLES", + "TABLESAMPLE", "TEXT", + "THEN", "TIES", "TIME", + "TIMESTAMP", "TO", "TRANSACTION", + "TRUNCATE", "TRUE", + "TRY_CAST", "TYPE", + "UESCAPE", "UNBOUNDED", + "UNCOMMITTED", "UNION", + "UNMATCHED", "UNNEST", + "UPDATE", "USE", "USER", + "USING", "VALIDATE", + "VALUES", "VERBOSE", + "VIEW", "WHEN", "WHERE", + "WINDOW", "WITH", "WITHOUT", + "WORK", "WRITE", "YEAR", + "ZONE", "EQ", "NEQ", + "LT", "LTE", "GT", "GTE", + "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", + "CONCAT", "QUESTION_MARK", + "STRING", "UNICODE_STRING", + "BINARY_LITERAL", "INTEGER_VALUE", + "DECIMAL_VALUE", "DOUBLE_VALUE", + "IDENTIFIER", "DIGIT_IDENTIFIER", + "QUOTED_IDENTIFIER", + "BACKQUOTED_IDENTIFIER", + "SEMICOLON", "SIMPLE_COMMENT", + "BRACKETED_COMMENT", + "WS", "UNRECOGNIZED" ]; + public static readonly modeNames: string[] = [ "DEFAULT_MODE", ]; + + public static readonly ruleNames: string[] = [ + "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", + "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "ADD", "ADMIN", + "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "ANY", "ARRAY", "AS", "ASC", + "AT", "AUTHORIZATION", "BERNOULLI", "BETWEEN", "BY", "CALL", "CASCADE", + "CASE", "CAST", "CATALOGS", "COLUMN", "COLUMNS", "COMMENT", "COMMIT", + "COMMITTED", "CONSTRAINT", "CREATE", "CROSS", "CUBE", "CURRENT", "CURRENT_CATALOG", + "CURRENT_DATE", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_TIME", + "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", "DATE", "DAY", "DEFAULT", + "DEALLOCATE", "DEFINER", "DELETE", "DESC", "DESCRIBE", "DEFINE", "DISTINCT", + "DISTRIBUTED", "DOUBLE", "DROP", "ELSE", "EMPTY", "END", "ESCAPE", "EXCEPT", + "EXCLUDING", "EXECUTE", "EXISTS", "EXPLAIN", "EXTRACT", "FALSE", "FETCH", + "FILTER", "FINAL", "FIRST", "FOLLOWING", "FOR", "FORMAT", "FROM", "FULL", + "FUNCTIONS", "GRANT", "GRANTED", "GRANTS", "DENY", "GRAPHVIZ", "GROUP", + "GROUPING", "GROUPS", "HAVING", "HOUR", "IF", "IGNORE", "IN", "INCLUDING", + "INITIAL", "INNER", "INPUT", "INSERT", "INTERSECT", "INTERVAL", "INTO", + "INVOKER", "IO", "IS", "ISOLATION", "JOIN", "JSON", "LAST", "LATERAL", + "LEFT", "LEVEL", "LIKE", "LIMIT", "LOCAL", "LOCALTIME", "LOCALTIMESTAMP", + "LOGICAL", "MAP", "MATCH", "MATCHED", "MATCHES", "MATCH_RECOGNIZE", "MATERIALIZED", + "MEASURES", "MERGE", "MINUTE", "MONTH", "NATURAL", "NEXT", "NFC", "NFD", + "NFKC", "NFKD", "NO", "NONE", "NORMALIZE", "NOT", "NULL", "NULLIF", "NULLS", + "OFFSET", "OMIT", "ON", "ONE", "ONLY", "OPTION", "OR", "ORDER", "ORDINALITY", + "OUTER", "OUTPUT", "OVER", "PARTITION", "PARTITIONS", "PAST", "PATH", + "PATTERN", "PER", "PERMUTE", "POSITION", "PRECEDING", "PRECISION", "PREPARE", + "PRIVILEGES", "PROPERTIES", "RANGE", "READ", "RECURSIVE", "REFRESH", "RENAME", + "REPEATABLE", "REPLACE", "RESET", "RESPECT", "RESTRICT", "REVOKE", "RIGHT", + "ROLE", "ROLES", "ROLLBACK", "ROLLUP", "ROW", "ROWS", "RUNNING", "SCHEMA", + "SCHEMAS", "SECOND", "SECURITY", "SEEK", "SELECT", "SERIALIZABLE", "SESSION", + "SET", "SETS", "SHOW", "SOME", "START", "STATS", "SUBSET", "SUBSTRING", + "SYSTEM", "TABLE", "TABLES", "TABLESAMPLE", "TEXT", "THEN", "TIES", "TIME", + "TIMESTAMP", "TO", "TRANSACTION", "TRUNCATE", "TRUE", "TRY_CAST", "TYPE", + "UESCAPE", "UNBOUNDED", "UNCOMMITTED", "UNION", "UNMATCHED", "UNNEST", + "UPDATE", "USE", "USER", "USING", "VALIDATE", "VALUES", "VERBOSE", "VIEW", + "WHEN", "WHERE", "WINDOW", "WITH", "WITHOUT", "WORK", "WRITE", "YEAR", + "ZONE", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "CONCAT", "QUESTION_MARK", "STRING", "UNICODE_STRING", + "BINARY_LITERAL", "INTEGER_VALUE", "DECIMAL_VALUE", "DOUBLE_VALUE", "IDENTIFIER", + "DIGIT_IDENTIFIER", "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", "SEMICOLON", + "EXPONENT", "DIGIT", "LETTER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", + "WS", "UNRECOGNIZED", + ]; + + + constructor(input: CharStream) { + super(input); + this._interp = new LexerATNSimulator(this, trinoSqlParserLexer._ATN, trinoSqlParserLexer.DecisionsToDFA, new PredictionContextCache()); + } + + public get grammarFileName(): string { return "trinoSqlParser.g4"; } + + public get literalNames(): (string | null)[] { return trinoSqlParserLexer.literalNames; } + public get symbolicNames(): (string | null)[] { return trinoSqlParserLexer.symbolicNames; } + public get ruleNames(): string[] { return trinoSqlParserLexer.ruleNames; } + + public get serializedATN(): number[] { return trinoSqlParserLexer._serializedATN; } + + public get channelNames(): string[] { return trinoSqlParserLexer.channelNames; } + + public get modeNames(): string[] { return trinoSqlParserLexer.modeNames; } + + public static readonly _serializedATN: number[] = [4,0,276,2467,6,-1,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,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,4,1,4, + 1,4,1,5,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,11,1,11,1,11, + 1,12,1,12,1,12,1,13,1,13,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1, + 17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19, + 1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1, + 21,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24, + 1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29, + 1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1, + 31,1,31,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, + 1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1, + 36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38, + 1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1, + 40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41, + 1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1, + 43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45, + 1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48, + 1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1, + 49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50, + 1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1, + 51,1,51,1,51,1,51,1,51,1,51,1,51,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,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1, + 53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54, + 1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1, + 56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58, + 1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1, + 60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62, + 1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1, + 64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66, + 1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1, + 67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,70,1,70, + 1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1, + 72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74, + 1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1, + 76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78, + 1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1, + 80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82, + 1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1, + 84,1,84,1,84,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87, + 1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,1, + 89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91, + 1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1, + 93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95, + 1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1, + 97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99, + 1,99,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,102, + 1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103, + 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105, + 1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107, + 1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108, + 1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110, + 1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112, + 1,112,1,112,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114, + 1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116, + 1,116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120, + 1,120,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122, + 1,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, + 1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,128,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,1,130,1,130,1,130, + 1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1,131, + 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,132,1,132,1,132, + 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,133,1,133, + 1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,134,1,134,1,134,1,134,1,134, + 1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136, + 1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,138,1,138, + 1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,141, + 1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143, + 1,144,1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145, + 1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,147,1,147,1,147,1,147,1,147, + 1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,149,1,149,1,149,1,149,1,149, + 1,149,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,151, + 1,151,1,152,1,152,1,152,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154, + 1,154,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,157, + 1,157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160, + 1,160,1,160,1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,162,1,162, + 1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,163,1,163,1,163,1,163, + 1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,164, + 1,165,1,165,1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166, + 1,166,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168, + 1,168,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,170,1,170, + 1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171, + 1,171,1,171,1,171,1,171,1,171,1,171,1,172,1,172,1,172,1,172,1,172,1,172, + 1,172,1,172,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173, + 1,173,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174, + 1,175,1,175,1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176,1,177, + 1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178, + 1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179,1,179, + 1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181, + 1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182, + 1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,184,1,184,1,184, + 1,184,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,1,185,1,185,1,185, + 1,185,1,186,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187, + 1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,189,1,189, + 1,189,1,189,1,189,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,191,1,191, + 1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,193, + 1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,195,1,195, + 1,195,1,195,1,195,1,195,1,195,1,195,1,196,1,196,1,196,1,196,1,196,1,196, + 1,196,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,198,1,198, + 1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,200,1,200, + 1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,201, + 1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,202,1,202,1,202,1,202,1,203, + 1,203,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,205,1,205,1,205, + 1,205,1,205,1,206,1,206,1,206,1,206,1,206,1,206,1,207,1,207,1,207,1,207, + 1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,209,1,209,1,209, + 1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210, + 1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1,212, + 1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213, + 1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,215,1,215,1,215,1,215, + 1,215,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217,1,217,1,218, + 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219, + 1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220, + 1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,222,1,222,1,222, + 1,222,1,222,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,224, + 1,224,1,224,1,224,1,224,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225, + 1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,227,1,227, + 1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,228,1,228, + 1,228,1,228,1,228,1,228,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229, + 1,229,1,229,1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,231,1,231,1,231, + 1,231,1,231,1,231,1,231,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233, + 1,233,1,234,1,234,1,234,1,234,1,234,1,234,1,235,1,235,1,235,1,235,1,235, + 1,235,1,235,1,235,1,235,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,237, + 1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,238,1,238,1,238,1,238,1,238, + 1,239,1,239,1,239,1,239,1,239,1,240,1,240,1,240,1,240,1,240,1,240,1,241, + 1,241,1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,242,1,242,1,242,1,243, + 1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,244,1,244,1,244,1,244,1,244, + 1,245,1,245,1,245,1,245,1,245,1,245,1,246,1,246,1,246,1,246,1,246,1,247, + 1,247,1,247,1,247,1,247,1,248,1,248,1,249,1,249,1,249,1,249,3,249,2257, + 8,249,1,250,1,250,1,251,1,251,1,251,1,252,1,252,1,253,1,253,1,253,1,254, + 1,254,1,255,1,255,1,256,1,256,1,257,1,257,1,258,1,258,1,259,1,259,1,259, + 1,260,1,260,1,261,1,261,1,261,1,261,5,261,2288,8,261,10,261,12,261,2291, + 9,261,1,261,1,261,1,262,1,262,1,262,1,262,1,262,1,262,1,262,5,262,2302, + 8,262,10,262,12,262,2305,9,262,1,262,1,262,1,263,1,263,1,263,1,263,5,263, + 2313,8,263,10,263,12,263,2316,9,263,1,263,1,263,1,264,4,264,2321,8,264, + 11,264,12,264,2322,1,265,4,265,2326,8,265,11,265,12,265,2327,1,265,1,265, + 5,265,2332,8,265,10,265,12,265,2335,9,265,1,265,1,265,4,265,2339,8,265, + 11,265,12,265,2340,3,265,2343,8,265,1,266,4,266,2346,8,266,11,266,12,266, + 2347,1,266,1,266,5,266,2352,8,266,10,266,12,266,2355,9,266,3,266,2357,8, + 266,1,266,1,266,1,266,1,266,4,266,2363,8,266,11,266,12,266,2364,1,266,1, + 266,3,266,2369,8,266,1,267,1,267,3,267,2373,8,267,1,267,1,267,1,267,5,267, + 2378,8,267,10,267,12,267,2381,9,267,1,268,1,268,1,268,1,268,4,268,2387, + 8,268,11,268,12,268,2388,1,269,1,269,1,269,1,269,5,269,2395,8,269,10,269, + 12,269,2398,9,269,1,269,1,269,1,270,1,270,1,270,1,270,5,270,2406,8,270, + 10,270,12,270,2409,9,270,1,270,1,270,1,271,1,271,1,272,1,272,3,272,2417, + 8,272,1,272,4,272,2420,8,272,11,272,12,272,2421,1,273,1,273,1,274,1,274, + 1,275,1,275,1,275,1,275,5,275,2432,8,275,10,275,12,275,2435,9,275,1,275, + 3,275,2438,8,275,1,275,3,275,2441,8,275,1,275,1,275,1,276,1,276,1,276,1, + 276,5,276,2449,8,276,10,276,12,276,2452,9,276,1,276,1,276,1,276,1,276,1, + 276,1,277,4,277,2460,8,277,11,277,12,277,2461,1,277,1,277,1,278,1,278,1, + 2450,0,279,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25, + 13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49, + 25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73, + 37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97, + 49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59, + 119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139, + 70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80, + 161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90,181, + 91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100,201, + 101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217,109,219, + 110,221,111,223,112,225,113,227,114,229,115,231,116,233,117,235,118,237, + 119,239,120,241,121,243,122,245,123,247,124,249,125,251,126,253,127,255, + 128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271,136,273, + 137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289,145,291, + 146,293,147,295,148,297,149,299,150,301,151,303,152,305,153,307,154,309, + 155,311,156,313,157,315,158,317,159,319,160,321,161,323,162,325,163,327, + 164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343,172,345, + 173,347,174,349,175,351,176,353,177,355,178,357,179,359,180,361,181,363, + 182,365,183,367,184,369,185,371,186,373,187,375,188,377,189,379,190,381, + 191,383,192,385,193,387,194,389,195,391,196,393,197,395,198,397,199,399, + 200,401,201,403,202,405,203,407,204,409,205,411,206,413,207,415,208,417, + 209,419,210,421,211,423,212,425,213,427,214,429,215,431,216,433,217,435, + 218,437,219,439,220,441,221,443,222,445,223,447,224,449,225,451,226,453, + 227,455,228,457,229,459,230,461,231,463,232,465,233,467,234,469,235,471, + 236,473,237,475,238,477,239,479,240,481,241,483,242,485,243,487,244,489, + 245,491,246,493,247,495,248,497,249,499,250,501,251,503,252,505,253,507, + 254,509,255,511,256,513,257,515,258,517,259,519,260,521,261,523,262,525, + 263,527,264,529,265,531,266,533,267,535,268,537,269,539,270,541,271,543, + 272,545,0,547,0,549,0,551,273,553,274,555,275,557,276,1,0,8,1,0,39,39,1, + 0,34,34,1,0,96,96,2,0,43,43,45,45,1,0,48,57,2,0,65,90,97,122,2,0,10,10, + 13,13,3,0,9,10,13,13,32,32,2497,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7, + 1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0, + 0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1, + 0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0, + 0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1, + 0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0, + 0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1, + 0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0, + 0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1, + 0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0, + 0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0, + 0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0, + 127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137, + 1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1, + 0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0, + 0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0, + 0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0, + 0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0, + 189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199, + 1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1, + 0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0, + 0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0, + 0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0,0, + 0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,0,0, + 251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0,0,261, + 1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1, + 0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0, + 0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0, + 0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0, + 0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0, + 313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0,323, + 1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0,333,1, + 0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0, + 0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0, + 0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0, + 0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0, + 375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385, + 1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1, + 0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0,405,1,0, + 0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0,415,1,0,0, + 0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0, + 0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,0, + 437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0,0,443,1,0,0,0,0,445,1,0,0,0,0,447, + 1,0,0,0,0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1, + 0,0,0,0,459,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0, + 0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0, + 0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0, + 0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1,0,0,0,0, + 499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0,0,507,1,0,0,0,0,509, + 1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0,0,0,0,517,1,0,0,0,0,519,1, + 0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525,1,0,0,0,0,527,1,0,0,0,0,529,1,0, + 0,0,0,531,1,0,0,0,0,533,1,0,0,0,0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0, + 0,0,541,1,0,0,0,0,543,1,0,0,0,0,551,1,0,0,0,0,553,1,0,0,0,0,555,1,0,0,0, + 0,557,1,0,0,0,1,559,1,0,0,0,3,561,1,0,0,0,5,563,1,0,0,0,7,565,1,0,0,0,9, + 567,1,0,0,0,11,572,1,0,0,0,13,575,1,0,0,0,15,577,1,0,0,0,17,579,1,0,0,0, + 19,581,1,0,0,0,21,583,1,0,0,0,23,585,1,0,0,0,25,588,1,0,0,0,27,591,1,0, + 0,0,29,593,1,0,0,0,31,595,1,0,0,0,33,598,1,0,0,0,35,602,1,0,0,0,37,608, + 1,0,0,0,39,614,1,0,0,0,41,618,1,0,0,0,43,624,1,0,0,0,45,632,1,0,0,0,47, + 636,1,0,0,0,49,640,1,0,0,0,51,646,1,0,0,0,53,649,1,0,0,0,55,653,1,0,0,0, + 57,656,1,0,0,0,59,670,1,0,0,0,61,680,1,0,0,0,63,688,1,0,0,0,65,691,1,0, + 0,0,67,696,1,0,0,0,69,704,1,0,0,0,71,709,1,0,0,0,73,714,1,0,0,0,75,723, + 1,0,0,0,77,730,1,0,0,0,79,738,1,0,0,0,81,746,1,0,0,0,83,753,1,0,0,0,85, + 763,1,0,0,0,87,774,1,0,0,0,89,781,1,0,0,0,91,787,1,0,0,0,93,792,1,0,0,0, + 95,800,1,0,0,0,97,816,1,0,0,0,99,829,1,0,0,0,101,842,1,0,0,0,103,855,1, + 0,0,0,105,870,1,0,0,0,107,883,1,0,0,0,109,901,1,0,0,0,111,914,1,0,0,0,113, + 919,1,0,0,0,115,924,1,0,0,0,117,928,1,0,0,0,119,936,1,0,0,0,121,947,1,0, + 0,0,123,955,1,0,0,0,125,962,1,0,0,0,127,967,1,0,0,0,129,976,1,0,0,0,131, + 983,1,0,0,0,133,992,1,0,0,0,135,1004,1,0,0,0,137,1011,1,0,0,0,139,1016, + 1,0,0,0,141,1021,1,0,0,0,143,1027,1,0,0,0,145,1031,1,0,0,0,147,1038,1,0, + 0,0,149,1045,1,0,0,0,151,1055,1,0,0,0,153,1063,1,0,0,0,155,1070,1,0,0,0, + 157,1078,1,0,0,0,159,1086,1,0,0,0,161,1092,1,0,0,0,163,1098,1,0,0,0,165, + 1105,1,0,0,0,167,1111,1,0,0,0,169,1117,1,0,0,0,171,1127,1,0,0,0,173,1131, + 1,0,0,0,175,1138,1,0,0,0,177,1143,1,0,0,0,179,1148,1,0,0,0,181,1158,1,0, + 0,0,183,1164,1,0,0,0,185,1172,1,0,0,0,187,1179,1,0,0,0,189,1184,1,0,0,0, + 191,1193,1,0,0,0,193,1199,1,0,0,0,195,1208,1,0,0,0,197,1215,1,0,0,0,199, + 1222,1,0,0,0,201,1227,1,0,0,0,203,1230,1,0,0,0,205,1237,1,0,0,0,207,1240, + 1,0,0,0,209,1250,1,0,0,0,211,1258,1,0,0,0,213,1264,1,0,0,0,215,1270,1,0, + 0,0,217,1277,1,0,0,0,219,1287,1,0,0,0,221,1296,1,0,0,0,223,1301,1,0,0,0, + 225,1309,1,0,0,0,227,1312,1,0,0,0,229,1315,1,0,0,0,231,1325,1,0,0,0,233, + 1330,1,0,0,0,235,1335,1,0,0,0,237,1340,1,0,0,0,239,1348,1,0,0,0,241,1353, + 1,0,0,0,243,1359,1,0,0,0,245,1364,1,0,0,0,247,1370,1,0,0,0,249,1376,1,0, + 0,0,251,1386,1,0,0,0,253,1401,1,0,0,0,255,1409,1,0,0,0,257,1413,1,0,0,0, + 259,1419,1,0,0,0,261,1427,1,0,0,0,263,1435,1,0,0,0,265,1451,1,0,0,0,267, + 1464,1,0,0,0,269,1473,1,0,0,0,271,1479,1,0,0,0,273,1486,1,0,0,0,275,1492, + 1,0,0,0,277,1500,1,0,0,0,279,1505,1,0,0,0,281,1509,1,0,0,0,283,1513,1,0, + 0,0,285,1518,1,0,0,0,287,1523,1,0,0,0,289,1526,1,0,0,0,291,1531,1,0,0,0, + 293,1541,1,0,0,0,295,1545,1,0,0,0,297,1550,1,0,0,0,299,1557,1,0,0,0,301, + 1563,1,0,0,0,303,1570,1,0,0,0,305,1575,1,0,0,0,307,1578,1,0,0,0,309,1582, + 1,0,0,0,311,1587,1,0,0,0,313,1594,1,0,0,0,315,1597,1,0,0,0,317,1603,1,0, + 0,0,319,1614,1,0,0,0,321,1620,1,0,0,0,323,1627,1,0,0,0,325,1632,1,0,0,0, + 327,1642,1,0,0,0,329,1653,1,0,0,0,331,1658,1,0,0,0,333,1663,1,0,0,0,335, + 1671,1,0,0,0,337,1675,1,0,0,0,339,1683,1,0,0,0,341,1692,1,0,0,0,343,1702, + 1,0,0,0,345,1712,1,0,0,0,347,1720,1,0,0,0,349,1731,1,0,0,0,351,1742,1,0, + 0,0,353,1748,1,0,0,0,355,1753,1,0,0,0,357,1763,1,0,0,0,359,1771,1,0,0,0, + 361,1778,1,0,0,0,363,1789,1,0,0,0,365,1797,1,0,0,0,367,1803,1,0,0,0,369, + 1811,1,0,0,0,371,1820,1,0,0,0,373,1827,1,0,0,0,375,1833,1,0,0,0,377,1838, + 1,0,0,0,379,1844,1,0,0,0,381,1853,1,0,0,0,383,1860,1,0,0,0,385,1864,1,0, + 0,0,387,1869,1,0,0,0,389,1877,1,0,0,0,391,1884,1,0,0,0,393,1892,1,0,0,0, + 395,1899,1,0,0,0,397,1908,1,0,0,0,399,1913,1,0,0,0,401,1920,1,0,0,0,403, + 1933,1,0,0,0,405,1941,1,0,0,0,407,1945,1,0,0,0,409,1950,1,0,0,0,411,1955, + 1,0,0,0,413,1960,1,0,0,0,415,1966,1,0,0,0,417,1972,1,0,0,0,419,1979,1,0, + 0,0,421,1989,1,0,0,0,423,1996,1,0,0,0,425,2002,1,0,0,0,427,2009,1,0,0,0, + 429,2021,1,0,0,0,431,2026,1,0,0,0,433,2031,1,0,0,0,435,2036,1,0,0,0,437, + 2041,1,0,0,0,439,2051,1,0,0,0,441,2054,1,0,0,0,443,2066,1,0,0,0,445,2075, + 1,0,0,0,447,2080,1,0,0,0,449,2089,1,0,0,0,451,2094,1,0,0,0,453,2102,1,0, + 0,0,455,2112,1,0,0,0,457,2124,1,0,0,0,459,2130,1,0,0,0,461,2140,1,0,0,0, + 463,2147,1,0,0,0,465,2154,1,0,0,0,467,2158,1,0,0,0,469,2163,1,0,0,0,471, + 2169,1,0,0,0,473,2178,1,0,0,0,475,2185,1,0,0,0,477,2193,1,0,0,0,479,2198, + 1,0,0,0,481,2203,1,0,0,0,483,2209,1,0,0,0,485,2216,1,0,0,0,487,2221,1,0, + 0,0,489,2229,1,0,0,0,491,2234,1,0,0,0,493,2240,1,0,0,0,495,2245,1,0,0,0, + 497,2250,1,0,0,0,499,2256,1,0,0,0,501,2258,1,0,0,0,503,2260,1,0,0,0,505, + 2263,1,0,0,0,507,2265,1,0,0,0,509,2268,1,0,0,0,511,2270,1,0,0,0,513,2272, + 1,0,0,0,515,2274,1,0,0,0,517,2276,1,0,0,0,519,2278,1,0,0,0,521,2281,1,0, + 0,0,523,2283,1,0,0,0,525,2294,1,0,0,0,527,2308,1,0,0,0,529,2320,1,0,0,0, + 531,2342,1,0,0,0,533,2368,1,0,0,0,535,2372,1,0,0,0,537,2382,1,0,0,0,539, + 2390,1,0,0,0,541,2401,1,0,0,0,543,2412,1,0,0,0,545,2414,1,0,0,0,547,2423, + 1,0,0,0,549,2425,1,0,0,0,551,2427,1,0,0,0,553,2444,1,0,0,0,555,2459,1,0, + 0,0,557,2465,1,0,0,0,559,560,5,46,0,0,560,2,1,0,0,0,561,562,5,40,0,0,562, + 4,1,0,0,0,563,564,5,41,0,0,564,6,1,0,0,0,565,566,5,44,0,0,566,8,1,0,0,0, + 567,568,5,83,0,0,568,569,5,75,0,0,569,570,5,73,0,0,570,571,5,80,0,0,571, + 10,1,0,0,0,572,573,5,45,0,0,573,574,5,62,0,0,574,12,1,0,0,0,575,576,5,91, + 0,0,576,14,1,0,0,0,577,578,5,93,0,0,578,16,1,0,0,0,579,580,5,124,0,0,580, + 18,1,0,0,0,581,582,5,94,0,0,582,20,1,0,0,0,583,584,5,36,0,0,584,22,1,0, + 0,0,585,586,5,123,0,0,586,587,5,45,0,0,587,24,1,0,0,0,588,589,5,45,0,0, + 589,590,5,125,0,0,590,26,1,0,0,0,591,592,5,123,0,0,592,28,1,0,0,0,593,594, + 5,125,0,0,594,30,1,0,0,0,595,596,5,61,0,0,596,597,5,62,0,0,597,32,1,0,0, + 0,598,599,5,65,0,0,599,600,5,68,0,0,600,601,5,68,0,0,601,34,1,0,0,0,602, + 603,5,65,0,0,603,604,5,68,0,0,604,605,5,77,0,0,605,606,5,73,0,0,606,607, + 5,78,0,0,607,36,1,0,0,0,608,609,5,65,0,0,609,610,5,70,0,0,610,611,5,84, + 0,0,611,612,5,69,0,0,612,613,5,82,0,0,613,38,1,0,0,0,614,615,5,65,0,0,615, + 616,5,76,0,0,616,617,5,76,0,0,617,40,1,0,0,0,618,619,5,65,0,0,619,620,5, + 76,0,0,620,621,5,84,0,0,621,622,5,69,0,0,622,623,5,82,0,0,623,42,1,0,0, + 0,624,625,5,65,0,0,625,626,5,78,0,0,626,627,5,65,0,0,627,628,5,76,0,0,628, + 629,5,89,0,0,629,630,5,90,0,0,630,631,5,69,0,0,631,44,1,0,0,0,632,633,5, + 65,0,0,633,634,5,78,0,0,634,635,5,68,0,0,635,46,1,0,0,0,636,637,5,65,0, + 0,637,638,5,78,0,0,638,639,5,89,0,0,639,48,1,0,0,0,640,641,5,65,0,0,641, + 642,5,82,0,0,642,643,5,82,0,0,643,644,5,65,0,0,644,645,5,89,0,0,645,50, + 1,0,0,0,646,647,5,65,0,0,647,648,5,83,0,0,648,52,1,0,0,0,649,650,5,65,0, + 0,650,651,5,83,0,0,651,652,5,67,0,0,652,54,1,0,0,0,653,654,5,65,0,0,654, + 655,5,84,0,0,655,56,1,0,0,0,656,657,5,65,0,0,657,658,5,85,0,0,658,659,5, + 84,0,0,659,660,5,72,0,0,660,661,5,79,0,0,661,662,5,82,0,0,662,663,5,73, + 0,0,663,664,5,90,0,0,664,665,5,65,0,0,665,666,5,84,0,0,666,667,5,73,0,0, + 667,668,5,79,0,0,668,669,5,78,0,0,669,58,1,0,0,0,670,671,5,66,0,0,671,672, + 5,69,0,0,672,673,5,82,0,0,673,674,5,78,0,0,674,675,5,79,0,0,675,676,5,85, + 0,0,676,677,5,76,0,0,677,678,5,76,0,0,678,679,5,73,0,0,679,60,1,0,0,0,680, + 681,5,66,0,0,681,682,5,69,0,0,682,683,5,84,0,0,683,684,5,87,0,0,684,685, + 5,69,0,0,685,686,5,69,0,0,686,687,5,78,0,0,687,62,1,0,0,0,688,689,5,66, + 0,0,689,690,5,89,0,0,690,64,1,0,0,0,691,692,5,67,0,0,692,693,5,65,0,0,693, + 694,5,76,0,0,694,695,5,76,0,0,695,66,1,0,0,0,696,697,5,67,0,0,697,698,5, + 65,0,0,698,699,5,83,0,0,699,700,5,67,0,0,700,701,5,65,0,0,701,702,5,68, + 0,0,702,703,5,69,0,0,703,68,1,0,0,0,704,705,5,67,0,0,705,706,5,65,0,0,706, + 707,5,83,0,0,707,708,5,69,0,0,708,70,1,0,0,0,709,710,5,67,0,0,710,711,5, + 65,0,0,711,712,5,83,0,0,712,713,5,84,0,0,713,72,1,0,0,0,714,715,5,67,0, + 0,715,716,5,65,0,0,716,717,5,84,0,0,717,718,5,65,0,0,718,719,5,76,0,0,719, + 720,5,79,0,0,720,721,5,71,0,0,721,722,5,83,0,0,722,74,1,0,0,0,723,724,5, + 67,0,0,724,725,5,79,0,0,725,726,5,76,0,0,726,727,5,85,0,0,727,728,5,77, + 0,0,728,729,5,78,0,0,729,76,1,0,0,0,730,731,5,67,0,0,731,732,5,79,0,0,732, + 733,5,76,0,0,733,734,5,85,0,0,734,735,5,77,0,0,735,736,5,78,0,0,736,737, + 5,83,0,0,737,78,1,0,0,0,738,739,5,67,0,0,739,740,5,79,0,0,740,741,5,77, + 0,0,741,742,5,77,0,0,742,743,5,69,0,0,743,744,5,78,0,0,744,745,5,84,0,0, + 745,80,1,0,0,0,746,747,5,67,0,0,747,748,5,79,0,0,748,749,5,77,0,0,749,750, + 5,77,0,0,750,751,5,73,0,0,751,752,5,84,0,0,752,82,1,0,0,0,753,754,5,67, + 0,0,754,755,5,79,0,0,755,756,5,77,0,0,756,757,5,77,0,0,757,758,5,73,0,0, + 758,759,5,84,0,0,759,760,5,84,0,0,760,761,5,69,0,0,761,762,5,68,0,0,762, + 84,1,0,0,0,763,764,5,67,0,0,764,765,5,79,0,0,765,766,5,78,0,0,766,767,5, + 83,0,0,767,768,5,84,0,0,768,769,5,82,0,0,769,770,5,65,0,0,770,771,5,73, + 0,0,771,772,5,78,0,0,772,773,5,84,0,0,773,86,1,0,0,0,774,775,5,67,0,0,775, + 776,5,82,0,0,776,777,5,69,0,0,777,778,5,65,0,0,778,779,5,84,0,0,779,780, + 5,69,0,0,780,88,1,0,0,0,781,782,5,67,0,0,782,783,5,82,0,0,783,784,5,79, + 0,0,784,785,5,83,0,0,785,786,5,83,0,0,786,90,1,0,0,0,787,788,5,67,0,0,788, + 789,5,85,0,0,789,790,5,66,0,0,790,791,5,69,0,0,791,92,1,0,0,0,792,793,5, + 67,0,0,793,794,5,85,0,0,794,795,5,82,0,0,795,796,5,82,0,0,796,797,5,69, + 0,0,797,798,5,78,0,0,798,799,5,84,0,0,799,94,1,0,0,0,800,801,5,67,0,0,801, + 802,5,85,0,0,802,803,5,82,0,0,803,804,5,82,0,0,804,805,5,69,0,0,805,806, + 5,78,0,0,806,807,5,84,0,0,807,808,5,95,0,0,808,809,5,67,0,0,809,810,5,65, + 0,0,810,811,5,84,0,0,811,812,5,65,0,0,812,813,5,76,0,0,813,814,5,79,0,0, + 814,815,5,71,0,0,815,96,1,0,0,0,816,817,5,67,0,0,817,818,5,85,0,0,818,819, + 5,82,0,0,819,820,5,82,0,0,820,821,5,69,0,0,821,822,5,78,0,0,822,823,5,84, + 0,0,823,824,5,95,0,0,824,825,5,68,0,0,825,826,5,65,0,0,826,827,5,84,0,0, + 827,828,5,69,0,0,828,98,1,0,0,0,829,830,5,67,0,0,830,831,5,85,0,0,831,832, + 5,82,0,0,832,833,5,82,0,0,833,834,5,69,0,0,834,835,5,78,0,0,835,836,5,84, + 0,0,836,837,5,95,0,0,837,838,5,80,0,0,838,839,5,65,0,0,839,840,5,84,0,0, + 840,841,5,72,0,0,841,100,1,0,0,0,842,843,5,67,0,0,843,844,5,85,0,0,844, + 845,5,82,0,0,845,846,5,82,0,0,846,847,5,69,0,0,847,848,5,78,0,0,848,849, + 5,84,0,0,849,850,5,95,0,0,850,851,5,82,0,0,851,852,5,79,0,0,852,853,5,76, + 0,0,853,854,5,69,0,0,854,102,1,0,0,0,855,856,5,67,0,0,856,857,5,85,0,0, + 857,858,5,82,0,0,858,859,5,82,0,0,859,860,5,69,0,0,860,861,5,78,0,0,861, + 862,5,84,0,0,862,863,5,95,0,0,863,864,5,83,0,0,864,865,5,67,0,0,865,866, + 5,72,0,0,866,867,5,69,0,0,867,868,5,77,0,0,868,869,5,65,0,0,869,104,1,0, + 0,0,870,871,5,67,0,0,871,872,5,85,0,0,872,873,5,82,0,0,873,874,5,82,0,0, + 874,875,5,69,0,0,875,876,5,78,0,0,876,877,5,84,0,0,877,878,5,95,0,0,878, + 879,5,84,0,0,879,880,5,73,0,0,880,881,5,77,0,0,881,882,5,69,0,0,882,106, + 1,0,0,0,883,884,5,67,0,0,884,885,5,85,0,0,885,886,5,82,0,0,886,887,5,82, + 0,0,887,888,5,69,0,0,888,889,5,78,0,0,889,890,5,84,0,0,890,891,5,95,0,0, + 891,892,5,84,0,0,892,893,5,73,0,0,893,894,5,77,0,0,894,895,5,69,0,0,895, + 896,5,83,0,0,896,897,5,84,0,0,897,898,5,65,0,0,898,899,5,77,0,0,899,900, + 5,80,0,0,900,108,1,0,0,0,901,902,5,67,0,0,902,903,5,85,0,0,903,904,5,82, + 0,0,904,905,5,82,0,0,905,906,5,69,0,0,906,907,5,78,0,0,907,908,5,84,0,0, + 908,909,5,95,0,0,909,910,5,85,0,0,910,911,5,83,0,0,911,912,5,69,0,0,912, + 913,5,82,0,0,913,110,1,0,0,0,914,915,5,68,0,0,915,916,5,65,0,0,916,917, + 5,84,0,0,917,918,5,65,0,0,918,112,1,0,0,0,919,920,5,68,0,0,920,921,5,65, + 0,0,921,922,5,84,0,0,922,923,5,69,0,0,923,114,1,0,0,0,924,925,5,68,0,0, + 925,926,5,65,0,0,926,927,5,89,0,0,927,116,1,0,0,0,928,929,5,68,0,0,929, + 930,5,69,0,0,930,931,5,70,0,0,931,932,5,65,0,0,932,933,5,85,0,0,933,934, + 5,76,0,0,934,935,5,84,0,0,935,118,1,0,0,0,936,937,5,68,0,0,937,938,5,69, + 0,0,938,939,5,65,0,0,939,940,5,76,0,0,940,941,5,76,0,0,941,942,5,79,0,0, + 942,943,5,67,0,0,943,944,5,65,0,0,944,945,5,84,0,0,945,946,5,69,0,0,946, + 120,1,0,0,0,947,948,5,68,0,0,948,949,5,69,0,0,949,950,5,70,0,0,950,951, + 5,73,0,0,951,952,5,78,0,0,952,953,5,69,0,0,953,954,5,82,0,0,954,122,1,0, + 0,0,955,956,5,68,0,0,956,957,5,69,0,0,957,958,5,76,0,0,958,959,5,69,0,0, + 959,960,5,84,0,0,960,961,5,69,0,0,961,124,1,0,0,0,962,963,5,68,0,0,963, + 964,5,69,0,0,964,965,5,83,0,0,965,966,5,67,0,0,966,126,1,0,0,0,967,968, + 5,68,0,0,968,969,5,69,0,0,969,970,5,83,0,0,970,971,5,67,0,0,971,972,5,82, + 0,0,972,973,5,73,0,0,973,974,5,66,0,0,974,975,5,69,0,0,975,128,1,0,0,0, + 976,977,5,68,0,0,977,978,5,69,0,0,978,979,5,70,0,0,979,980,5,73,0,0,980, + 981,5,78,0,0,981,982,5,69,0,0,982,130,1,0,0,0,983,984,5,68,0,0,984,985, + 5,73,0,0,985,986,5,83,0,0,986,987,5,84,0,0,987,988,5,73,0,0,988,989,5,78, + 0,0,989,990,5,67,0,0,990,991,5,84,0,0,991,132,1,0,0,0,992,993,5,68,0,0, + 993,994,5,73,0,0,994,995,5,83,0,0,995,996,5,84,0,0,996,997,5,82,0,0,997, + 998,5,73,0,0,998,999,5,66,0,0,999,1000,5,85,0,0,1000,1001,5,84,0,0,1001, + 1002,5,69,0,0,1002,1003,5,68,0,0,1003,134,1,0,0,0,1004,1005,5,68,0,0,1005, + 1006,5,79,0,0,1006,1007,5,85,0,0,1007,1008,5,66,0,0,1008,1009,5,76,0,0, + 1009,1010,5,69,0,0,1010,136,1,0,0,0,1011,1012,5,68,0,0,1012,1013,5,82,0, + 0,1013,1014,5,79,0,0,1014,1015,5,80,0,0,1015,138,1,0,0,0,1016,1017,5,69, + 0,0,1017,1018,5,76,0,0,1018,1019,5,83,0,0,1019,1020,5,69,0,0,1020,140,1, + 0,0,0,1021,1022,5,69,0,0,1022,1023,5,77,0,0,1023,1024,5,80,0,0,1024,1025, + 5,84,0,0,1025,1026,5,89,0,0,1026,142,1,0,0,0,1027,1028,5,69,0,0,1028,1029, + 5,78,0,0,1029,1030,5,68,0,0,1030,144,1,0,0,0,1031,1032,5,69,0,0,1032,1033, + 5,83,0,0,1033,1034,5,67,0,0,1034,1035,5,65,0,0,1035,1036,5,80,0,0,1036, + 1037,5,69,0,0,1037,146,1,0,0,0,1038,1039,5,69,0,0,1039,1040,5,88,0,0,1040, + 1041,5,67,0,0,1041,1042,5,69,0,0,1042,1043,5,80,0,0,1043,1044,5,84,0,0, + 1044,148,1,0,0,0,1045,1046,5,69,0,0,1046,1047,5,88,0,0,1047,1048,5,67,0, + 0,1048,1049,5,76,0,0,1049,1050,5,85,0,0,1050,1051,5,68,0,0,1051,1052,5, + 73,0,0,1052,1053,5,78,0,0,1053,1054,5,71,0,0,1054,150,1,0,0,0,1055,1056, + 5,69,0,0,1056,1057,5,88,0,0,1057,1058,5,69,0,0,1058,1059,5,67,0,0,1059, + 1060,5,85,0,0,1060,1061,5,84,0,0,1061,1062,5,69,0,0,1062,152,1,0,0,0,1063, + 1064,5,69,0,0,1064,1065,5,88,0,0,1065,1066,5,73,0,0,1066,1067,5,83,0,0, + 1067,1068,5,84,0,0,1068,1069,5,83,0,0,1069,154,1,0,0,0,1070,1071,5,69,0, + 0,1071,1072,5,88,0,0,1072,1073,5,80,0,0,1073,1074,5,76,0,0,1074,1075,5, + 65,0,0,1075,1076,5,73,0,0,1076,1077,5,78,0,0,1077,156,1,0,0,0,1078,1079, + 5,69,0,0,1079,1080,5,88,0,0,1080,1081,5,84,0,0,1081,1082,5,82,0,0,1082, + 1083,5,65,0,0,1083,1084,5,67,0,0,1084,1085,5,84,0,0,1085,158,1,0,0,0,1086, + 1087,5,70,0,0,1087,1088,5,65,0,0,1088,1089,5,76,0,0,1089,1090,5,83,0,0, + 1090,1091,5,69,0,0,1091,160,1,0,0,0,1092,1093,5,70,0,0,1093,1094,5,69,0, + 0,1094,1095,5,84,0,0,1095,1096,5,67,0,0,1096,1097,5,72,0,0,1097,162,1,0, + 0,0,1098,1099,5,70,0,0,1099,1100,5,73,0,0,1100,1101,5,76,0,0,1101,1102, + 5,84,0,0,1102,1103,5,69,0,0,1103,1104,5,82,0,0,1104,164,1,0,0,0,1105,1106, + 5,70,0,0,1106,1107,5,73,0,0,1107,1108,5,78,0,0,1108,1109,5,65,0,0,1109, + 1110,5,76,0,0,1110,166,1,0,0,0,1111,1112,5,70,0,0,1112,1113,5,73,0,0,1113, + 1114,5,82,0,0,1114,1115,5,83,0,0,1115,1116,5,84,0,0,1116,168,1,0,0,0,1117, + 1118,5,70,0,0,1118,1119,5,79,0,0,1119,1120,5,76,0,0,1120,1121,5,76,0,0, + 1121,1122,5,79,0,0,1122,1123,5,87,0,0,1123,1124,5,73,0,0,1124,1125,5,78, + 0,0,1125,1126,5,71,0,0,1126,170,1,0,0,0,1127,1128,5,70,0,0,1128,1129,5, + 79,0,0,1129,1130,5,82,0,0,1130,172,1,0,0,0,1131,1132,5,70,0,0,1132,1133, + 5,79,0,0,1133,1134,5,82,0,0,1134,1135,5,77,0,0,1135,1136,5,65,0,0,1136, + 1137,5,84,0,0,1137,174,1,0,0,0,1138,1139,5,70,0,0,1139,1140,5,82,0,0,1140, + 1141,5,79,0,0,1141,1142,5,77,0,0,1142,176,1,0,0,0,1143,1144,5,70,0,0,1144, + 1145,5,85,0,0,1145,1146,5,76,0,0,1146,1147,5,76,0,0,1147,178,1,0,0,0,1148, + 1149,5,70,0,0,1149,1150,5,85,0,0,1150,1151,5,78,0,0,1151,1152,5,67,0,0, + 1152,1153,5,84,0,0,1153,1154,5,73,0,0,1154,1155,5,79,0,0,1155,1156,5,78, + 0,0,1156,1157,5,83,0,0,1157,180,1,0,0,0,1158,1159,5,71,0,0,1159,1160,5, + 82,0,0,1160,1161,5,65,0,0,1161,1162,5,78,0,0,1162,1163,5,84,0,0,1163,182, + 1,0,0,0,1164,1165,5,71,0,0,1165,1166,5,82,0,0,1166,1167,5,65,0,0,1167,1168, + 5,78,0,0,1168,1169,5,84,0,0,1169,1170,5,69,0,0,1170,1171,5,68,0,0,1171, + 184,1,0,0,0,1172,1173,5,71,0,0,1173,1174,5,82,0,0,1174,1175,5,65,0,0,1175, + 1176,5,78,0,0,1176,1177,5,84,0,0,1177,1178,5,83,0,0,1178,186,1,0,0,0,1179, + 1180,5,68,0,0,1180,1181,5,69,0,0,1181,1182,5,78,0,0,1182,1183,5,89,0,0, + 1183,188,1,0,0,0,1184,1185,5,71,0,0,1185,1186,5,82,0,0,1186,1187,5,65,0, + 0,1187,1188,5,80,0,0,1188,1189,5,72,0,0,1189,1190,5,86,0,0,1190,1191,5, + 73,0,0,1191,1192,5,90,0,0,1192,190,1,0,0,0,1193,1194,5,71,0,0,1194,1195, + 5,82,0,0,1195,1196,5,79,0,0,1196,1197,5,85,0,0,1197,1198,5,80,0,0,1198, + 192,1,0,0,0,1199,1200,5,71,0,0,1200,1201,5,82,0,0,1201,1202,5,79,0,0,1202, + 1203,5,85,0,0,1203,1204,5,80,0,0,1204,1205,5,73,0,0,1205,1206,5,78,0,0, + 1206,1207,5,71,0,0,1207,194,1,0,0,0,1208,1209,5,71,0,0,1209,1210,5,82,0, + 0,1210,1211,5,79,0,0,1211,1212,5,85,0,0,1212,1213,5,80,0,0,1213,1214,5, + 83,0,0,1214,196,1,0,0,0,1215,1216,5,72,0,0,1216,1217,5,65,0,0,1217,1218, + 5,86,0,0,1218,1219,5,73,0,0,1219,1220,5,78,0,0,1220,1221,5,71,0,0,1221, + 198,1,0,0,0,1222,1223,5,72,0,0,1223,1224,5,79,0,0,1224,1225,5,85,0,0,1225, + 1226,5,82,0,0,1226,200,1,0,0,0,1227,1228,5,73,0,0,1228,1229,5,70,0,0,1229, + 202,1,0,0,0,1230,1231,5,73,0,0,1231,1232,5,71,0,0,1232,1233,5,78,0,0,1233, + 1234,5,79,0,0,1234,1235,5,82,0,0,1235,1236,5,69,0,0,1236,204,1,0,0,0,1237, + 1238,5,73,0,0,1238,1239,5,78,0,0,1239,206,1,0,0,0,1240,1241,5,73,0,0,1241, + 1242,5,78,0,0,1242,1243,5,67,0,0,1243,1244,5,76,0,0,1244,1245,5,85,0,0, + 1245,1246,5,68,0,0,1246,1247,5,73,0,0,1247,1248,5,78,0,0,1248,1249,5,71, + 0,0,1249,208,1,0,0,0,1250,1251,5,73,0,0,1251,1252,5,78,0,0,1252,1253,5, + 73,0,0,1253,1254,5,84,0,0,1254,1255,5,73,0,0,1255,1256,5,65,0,0,1256,1257, + 5,76,0,0,1257,210,1,0,0,0,1258,1259,5,73,0,0,1259,1260,5,78,0,0,1260,1261, + 5,78,0,0,1261,1262,5,69,0,0,1262,1263,5,82,0,0,1263,212,1,0,0,0,1264,1265, + 5,73,0,0,1265,1266,5,78,0,0,1266,1267,5,80,0,0,1267,1268,5,85,0,0,1268, + 1269,5,84,0,0,1269,214,1,0,0,0,1270,1271,5,73,0,0,1271,1272,5,78,0,0,1272, + 1273,5,83,0,0,1273,1274,5,69,0,0,1274,1275,5,82,0,0,1275,1276,5,84,0,0, + 1276,216,1,0,0,0,1277,1278,5,73,0,0,1278,1279,5,78,0,0,1279,1280,5,84,0, + 0,1280,1281,5,69,0,0,1281,1282,5,82,0,0,1282,1283,5,83,0,0,1283,1284,5, + 69,0,0,1284,1285,5,67,0,0,1285,1286,5,84,0,0,1286,218,1,0,0,0,1287,1288, + 5,73,0,0,1288,1289,5,78,0,0,1289,1290,5,84,0,0,1290,1291,5,69,0,0,1291, + 1292,5,82,0,0,1292,1293,5,86,0,0,1293,1294,5,65,0,0,1294,1295,5,76,0,0, + 1295,220,1,0,0,0,1296,1297,5,73,0,0,1297,1298,5,78,0,0,1298,1299,5,84,0, + 0,1299,1300,5,79,0,0,1300,222,1,0,0,0,1301,1302,5,73,0,0,1302,1303,5,78, + 0,0,1303,1304,5,86,0,0,1304,1305,5,79,0,0,1305,1306,5,75,0,0,1306,1307, + 5,69,0,0,1307,1308,5,82,0,0,1308,224,1,0,0,0,1309,1310,5,73,0,0,1310,1311, + 5,79,0,0,1311,226,1,0,0,0,1312,1313,5,73,0,0,1313,1314,5,83,0,0,1314,228, + 1,0,0,0,1315,1316,5,73,0,0,1316,1317,5,83,0,0,1317,1318,5,79,0,0,1318,1319, + 5,76,0,0,1319,1320,5,65,0,0,1320,1321,5,84,0,0,1321,1322,5,73,0,0,1322, + 1323,5,79,0,0,1323,1324,5,78,0,0,1324,230,1,0,0,0,1325,1326,5,74,0,0,1326, + 1327,5,79,0,0,1327,1328,5,73,0,0,1328,1329,5,78,0,0,1329,232,1,0,0,0,1330, + 1331,5,74,0,0,1331,1332,5,83,0,0,1332,1333,5,79,0,0,1333,1334,5,78,0,0, + 1334,234,1,0,0,0,1335,1336,5,76,0,0,1336,1337,5,65,0,0,1337,1338,5,83,0, + 0,1338,1339,5,84,0,0,1339,236,1,0,0,0,1340,1341,5,76,0,0,1341,1342,5,65, + 0,0,1342,1343,5,84,0,0,1343,1344,5,69,0,0,1344,1345,5,82,0,0,1345,1346, + 5,65,0,0,1346,1347,5,76,0,0,1347,238,1,0,0,0,1348,1349,5,76,0,0,1349,1350, + 5,69,0,0,1350,1351,5,70,0,0,1351,1352,5,84,0,0,1352,240,1,0,0,0,1353,1354, + 5,76,0,0,1354,1355,5,69,0,0,1355,1356,5,86,0,0,1356,1357,5,69,0,0,1357, + 1358,5,76,0,0,1358,242,1,0,0,0,1359,1360,5,76,0,0,1360,1361,5,73,0,0,1361, + 1362,5,75,0,0,1362,1363,5,69,0,0,1363,244,1,0,0,0,1364,1365,5,76,0,0,1365, + 1366,5,73,0,0,1366,1367,5,77,0,0,1367,1368,5,73,0,0,1368,1369,5,84,0,0, + 1369,246,1,0,0,0,1370,1371,5,76,0,0,1371,1372,5,79,0,0,1372,1373,5,67,0, + 0,1373,1374,5,65,0,0,1374,1375,5,76,0,0,1375,248,1,0,0,0,1376,1377,5,76, + 0,0,1377,1378,5,79,0,0,1378,1379,5,67,0,0,1379,1380,5,65,0,0,1380,1381, + 5,76,0,0,1381,1382,5,84,0,0,1382,1383,5,73,0,0,1383,1384,5,77,0,0,1384, + 1385,5,69,0,0,1385,250,1,0,0,0,1386,1387,5,76,0,0,1387,1388,5,79,0,0,1388, + 1389,5,67,0,0,1389,1390,5,65,0,0,1390,1391,5,76,0,0,1391,1392,5,84,0,0, + 1392,1393,5,73,0,0,1393,1394,5,77,0,0,1394,1395,5,69,0,0,1395,1396,5,83, + 0,0,1396,1397,5,84,0,0,1397,1398,5,65,0,0,1398,1399,5,77,0,0,1399,1400, + 5,80,0,0,1400,252,1,0,0,0,1401,1402,5,76,0,0,1402,1403,5,79,0,0,1403,1404, + 5,71,0,0,1404,1405,5,73,0,0,1405,1406,5,67,0,0,1406,1407,5,65,0,0,1407, + 1408,5,76,0,0,1408,254,1,0,0,0,1409,1410,5,77,0,0,1410,1411,5,65,0,0,1411, + 1412,5,80,0,0,1412,256,1,0,0,0,1413,1414,5,77,0,0,1414,1415,5,65,0,0,1415, + 1416,5,84,0,0,1416,1417,5,67,0,0,1417,1418,5,72,0,0,1418,258,1,0,0,0,1419, + 1420,5,77,0,0,1420,1421,5,65,0,0,1421,1422,5,84,0,0,1422,1423,5,67,0,0, + 1423,1424,5,72,0,0,1424,1425,5,69,0,0,1425,1426,5,68,0,0,1426,260,1,0,0, + 0,1427,1428,5,77,0,0,1428,1429,5,65,0,0,1429,1430,5,84,0,0,1430,1431,5, + 67,0,0,1431,1432,5,72,0,0,1432,1433,5,69,0,0,1433,1434,5,83,0,0,1434,262, + 1,0,0,0,1435,1436,5,77,0,0,1436,1437,5,65,0,0,1437,1438,5,84,0,0,1438,1439, + 5,67,0,0,1439,1440,5,72,0,0,1440,1441,5,95,0,0,1441,1442,5,82,0,0,1442, + 1443,5,69,0,0,1443,1444,5,67,0,0,1444,1445,5,79,0,0,1445,1446,5,71,0,0, + 1446,1447,5,78,0,0,1447,1448,5,73,0,0,1448,1449,5,90,0,0,1449,1450,5,69, + 0,0,1450,264,1,0,0,0,1451,1452,5,77,0,0,1452,1453,5,65,0,0,1453,1454,5, + 84,0,0,1454,1455,5,69,0,0,1455,1456,5,82,0,0,1456,1457,5,73,0,0,1457,1458, + 5,65,0,0,1458,1459,5,76,0,0,1459,1460,5,73,0,0,1460,1461,5,90,0,0,1461, + 1462,5,69,0,0,1462,1463,5,68,0,0,1463,266,1,0,0,0,1464,1465,5,77,0,0,1465, + 1466,5,69,0,0,1466,1467,5,65,0,0,1467,1468,5,83,0,0,1468,1469,5,85,0,0, + 1469,1470,5,82,0,0,1470,1471,5,69,0,0,1471,1472,5,83,0,0,1472,268,1,0,0, + 0,1473,1474,5,77,0,0,1474,1475,5,69,0,0,1475,1476,5,82,0,0,1476,1477,5, + 71,0,0,1477,1478,5,69,0,0,1478,270,1,0,0,0,1479,1480,5,77,0,0,1480,1481, + 5,73,0,0,1481,1482,5,78,0,0,1482,1483,5,85,0,0,1483,1484,5,84,0,0,1484, + 1485,5,69,0,0,1485,272,1,0,0,0,1486,1487,5,77,0,0,1487,1488,5,79,0,0,1488, + 1489,5,78,0,0,1489,1490,5,84,0,0,1490,1491,5,72,0,0,1491,274,1,0,0,0,1492, + 1493,5,78,0,0,1493,1494,5,65,0,0,1494,1495,5,84,0,0,1495,1496,5,85,0,0, + 1496,1497,5,82,0,0,1497,1498,5,65,0,0,1498,1499,5,76,0,0,1499,276,1,0,0, + 0,1500,1501,5,78,0,0,1501,1502,5,69,0,0,1502,1503,5,88,0,0,1503,1504,5, + 84,0,0,1504,278,1,0,0,0,1505,1506,5,78,0,0,1506,1507,5,70,0,0,1507,1508, + 5,67,0,0,1508,280,1,0,0,0,1509,1510,5,78,0,0,1510,1511,5,70,0,0,1511,1512, + 5,68,0,0,1512,282,1,0,0,0,1513,1514,5,78,0,0,1514,1515,5,70,0,0,1515,1516, + 5,75,0,0,1516,1517,5,67,0,0,1517,284,1,0,0,0,1518,1519,5,78,0,0,1519,1520, + 5,70,0,0,1520,1521,5,75,0,0,1521,1522,5,68,0,0,1522,286,1,0,0,0,1523,1524, + 5,78,0,0,1524,1525,5,79,0,0,1525,288,1,0,0,0,1526,1527,5,78,0,0,1527,1528, + 5,79,0,0,1528,1529,5,78,0,0,1529,1530,5,69,0,0,1530,290,1,0,0,0,1531,1532, + 5,78,0,0,1532,1533,5,79,0,0,1533,1534,5,82,0,0,1534,1535,5,77,0,0,1535, + 1536,5,65,0,0,1536,1537,5,76,0,0,1537,1538,5,73,0,0,1538,1539,5,90,0,0, + 1539,1540,5,69,0,0,1540,292,1,0,0,0,1541,1542,5,78,0,0,1542,1543,5,79,0, + 0,1543,1544,5,84,0,0,1544,294,1,0,0,0,1545,1546,5,78,0,0,1546,1547,5,85, + 0,0,1547,1548,5,76,0,0,1548,1549,5,76,0,0,1549,296,1,0,0,0,1550,1551,5, + 78,0,0,1551,1552,5,85,0,0,1552,1553,5,76,0,0,1553,1554,5,76,0,0,1554,1555, + 5,73,0,0,1555,1556,5,70,0,0,1556,298,1,0,0,0,1557,1558,5,78,0,0,1558,1559, + 5,85,0,0,1559,1560,5,76,0,0,1560,1561,5,76,0,0,1561,1562,5,83,0,0,1562, + 300,1,0,0,0,1563,1564,5,79,0,0,1564,1565,5,70,0,0,1565,1566,5,70,0,0,1566, + 1567,5,83,0,0,1567,1568,5,69,0,0,1568,1569,5,84,0,0,1569,302,1,0,0,0,1570, + 1571,5,79,0,0,1571,1572,5,77,0,0,1572,1573,5,73,0,0,1573,1574,5,84,0,0, + 1574,304,1,0,0,0,1575,1576,5,79,0,0,1576,1577,5,78,0,0,1577,306,1,0,0,0, + 1578,1579,5,79,0,0,1579,1580,5,78,0,0,1580,1581,5,69,0,0,1581,308,1,0,0, + 0,1582,1583,5,79,0,0,1583,1584,5,78,0,0,1584,1585,5,76,0,0,1585,1586,5, + 89,0,0,1586,310,1,0,0,0,1587,1588,5,79,0,0,1588,1589,5,80,0,0,1589,1590, + 5,84,0,0,1590,1591,5,73,0,0,1591,1592,5,79,0,0,1592,1593,5,78,0,0,1593, + 312,1,0,0,0,1594,1595,5,79,0,0,1595,1596,5,82,0,0,1596,314,1,0,0,0,1597, + 1598,5,79,0,0,1598,1599,5,82,0,0,1599,1600,5,68,0,0,1600,1601,5,69,0,0, + 1601,1602,5,82,0,0,1602,316,1,0,0,0,1603,1604,5,79,0,0,1604,1605,5,82,0, + 0,1605,1606,5,68,0,0,1606,1607,5,73,0,0,1607,1608,5,78,0,0,1608,1609,5, + 65,0,0,1609,1610,5,76,0,0,1610,1611,5,73,0,0,1611,1612,5,84,0,0,1612,1613, + 5,89,0,0,1613,318,1,0,0,0,1614,1615,5,79,0,0,1615,1616,5,85,0,0,1616,1617, + 5,84,0,0,1617,1618,5,69,0,0,1618,1619,5,82,0,0,1619,320,1,0,0,0,1620,1621, + 5,79,0,0,1621,1622,5,85,0,0,1622,1623,5,84,0,0,1623,1624,5,80,0,0,1624, + 1625,5,85,0,0,1625,1626,5,84,0,0,1626,322,1,0,0,0,1627,1628,5,79,0,0,1628, + 1629,5,86,0,0,1629,1630,5,69,0,0,1630,1631,5,82,0,0,1631,324,1,0,0,0,1632, + 1633,5,80,0,0,1633,1634,5,65,0,0,1634,1635,5,82,0,0,1635,1636,5,84,0,0, + 1636,1637,5,73,0,0,1637,1638,5,84,0,0,1638,1639,5,73,0,0,1639,1640,5,79, + 0,0,1640,1641,5,78,0,0,1641,326,1,0,0,0,1642,1643,5,80,0,0,1643,1644,5, + 65,0,0,1644,1645,5,82,0,0,1645,1646,5,84,0,0,1646,1647,5,73,0,0,1647,1648, + 5,84,0,0,1648,1649,5,73,0,0,1649,1650,5,79,0,0,1650,1651,5,78,0,0,1651, + 1652,5,83,0,0,1652,328,1,0,0,0,1653,1654,5,80,0,0,1654,1655,5,65,0,0,1655, + 1656,5,83,0,0,1656,1657,5,84,0,0,1657,330,1,0,0,0,1658,1659,5,80,0,0,1659, + 1660,5,65,0,0,1660,1661,5,84,0,0,1661,1662,5,72,0,0,1662,332,1,0,0,0,1663, + 1664,5,80,0,0,1664,1665,5,65,0,0,1665,1666,5,84,0,0,1666,1667,5,84,0,0, + 1667,1668,5,69,0,0,1668,1669,5,82,0,0,1669,1670,5,78,0,0,1670,334,1,0,0, + 0,1671,1672,5,80,0,0,1672,1673,5,69,0,0,1673,1674,5,82,0,0,1674,336,1,0, + 0,0,1675,1676,5,80,0,0,1676,1677,5,69,0,0,1677,1678,5,82,0,0,1678,1679, + 5,77,0,0,1679,1680,5,85,0,0,1680,1681,5,84,0,0,1681,1682,5,69,0,0,1682, + 338,1,0,0,0,1683,1684,5,80,0,0,1684,1685,5,79,0,0,1685,1686,5,83,0,0,1686, + 1687,5,73,0,0,1687,1688,5,84,0,0,1688,1689,5,73,0,0,1689,1690,5,79,0,0, + 1690,1691,5,78,0,0,1691,340,1,0,0,0,1692,1693,5,80,0,0,1693,1694,5,82,0, + 0,1694,1695,5,69,0,0,1695,1696,5,67,0,0,1696,1697,5,69,0,0,1697,1698,5, + 68,0,0,1698,1699,5,73,0,0,1699,1700,5,78,0,0,1700,1701,5,71,0,0,1701,342, + 1,0,0,0,1702,1703,5,80,0,0,1703,1704,5,82,0,0,1704,1705,5,69,0,0,1705,1706, + 5,67,0,0,1706,1707,5,73,0,0,1707,1708,5,83,0,0,1708,1709,5,73,0,0,1709, + 1710,5,79,0,0,1710,1711,5,78,0,0,1711,344,1,0,0,0,1712,1713,5,80,0,0,1713, + 1714,5,82,0,0,1714,1715,5,69,0,0,1715,1716,5,80,0,0,1716,1717,5,65,0,0, + 1717,1718,5,82,0,0,1718,1719,5,69,0,0,1719,346,1,0,0,0,1720,1721,5,80,0, + 0,1721,1722,5,82,0,0,1722,1723,5,73,0,0,1723,1724,5,86,0,0,1724,1725,5, + 73,0,0,1725,1726,5,76,0,0,1726,1727,5,69,0,0,1727,1728,5,71,0,0,1728,1729, + 5,69,0,0,1729,1730,5,83,0,0,1730,348,1,0,0,0,1731,1732,5,80,0,0,1732,1733, + 5,82,0,0,1733,1734,5,79,0,0,1734,1735,5,80,0,0,1735,1736,5,69,0,0,1736, + 1737,5,82,0,0,1737,1738,5,84,0,0,1738,1739,5,73,0,0,1739,1740,5,69,0,0, + 1740,1741,5,83,0,0,1741,350,1,0,0,0,1742,1743,5,82,0,0,1743,1744,5,65,0, + 0,1744,1745,5,78,0,0,1745,1746,5,71,0,0,1746,1747,5,69,0,0,1747,352,1,0, + 0,0,1748,1749,5,82,0,0,1749,1750,5,69,0,0,1750,1751,5,65,0,0,1751,1752, + 5,68,0,0,1752,354,1,0,0,0,1753,1754,5,82,0,0,1754,1755,5,69,0,0,1755,1756, + 5,67,0,0,1756,1757,5,85,0,0,1757,1758,5,82,0,0,1758,1759,5,83,0,0,1759, + 1760,5,73,0,0,1760,1761,5,86,0,0,1761,1762,5,69,0,0,1762,356,1,0,0,0,1763, + 1764,5,82,0,0,1764,1765,5,69,0,0,1765,1766,5,70,0,0,1766,1767,5,82,0,0, + 1767,1768,5,69,0,0,1768,1769,5,83,0,0,1769,1770,5,72,0,0,1770,358,1,0,0, + 0,1771,1772,5,82,0,0,1772,1773,5,69,0,0,1773,1774,5,78,0,0,1774,1775,5, + 65,0,0,1775,1776,5,77,0,0,1776,1777,5,69,0,0,1777,360,1,0,0,0,1778,1779, + 5,82,0,0,1779,1780,5,69,0,0,1780,1781,5,80,0,0,1781,1782,5,69,0,0,1782, + 1783,5,65,0,0,1783,1784,5,84,0,0,1784,1785,5,65,0,0,1785,1786,5,66,0,0, + 1786,1787,5,76,0,0,1787,1788,5,69,0,0,1788,362,1,0,0,0,1789,1790,5,82,0, + 0,1790,1791,5,69,0,0,1791,1792,5,80,0,0,1792,1793,5,76,0,0,1793,1794,5, + 65,0,0,1794,1795,5,67,0,0,1795,1796,5,69,0,0,1796,364,1,0,0,0,1797,1798, + 5,82,0,0,1798,1799,5,69,0,0,1799,1800,5,83,0,0,1800,1801,5,69,0,0,1801, + 1802,5,84,0,0,1802,366,1,0,0,0,1803,1804,5,82,0,0,1804,1805,5,69,0,0,1805, + 1806,5,83,0,0,1806,1807,5,80,0,0,1807,1808,5,69,0,0,1808,1809,5,67,0,0, + 1809,1810,5,84,0,0,1810,368,1,0,0,0,1811,1812,5,82,0,0,1812,1813,5,69,0, + 0,1813,1814,5,83,0,0,1814,1815,5,84,0,0,1815,1816,5,82,0,0,1816,1817,5, + 73,0,0,1817,1818,5,67,0,0,1818,1819,5,84,0,0,1819,370,1,0,0,0,1820,1821, + 5,82,0,0,1821,1822,5,69,0,0,1822,1823,5,86,0,0,1823,1824,5,79,0,0,1824, + 1825,5,75,0,0,1825,1826,5,69,0,0,1826,372,1,0,0,0,1827,1828,5,82,0,0,1828, + 1829,5,73,0,0,1829,1830,5,71,0,0,1830,1831,5,72,0,0,1831,1832,5,84,0,0, + 1832,374,1,0,0,0,1833,1834,5,82,0,0,1834,1835,5,79,0,0,1835,1836,5,76,0, + 0,1836,1837,5,69,0,0,1837,376,1,0,0,0,1838,1839,5,82,0,0,1839,1840,5,79, + 0,0,1840,1841,5,76,0,0,1841,1842,5,69,0,0,1842,1843,5,83,0,0,1843,378,1, + 0,0,0,1844,1845,5,82,0,0,1845,1846,5,79,0,0,1846,1847,5,76,0,0,1847,1848, + 5,76,0,0,1848,1849,5,66,0,0,1849,1850,5,65,0,0,1850,1851,5,67,0,0,1851, + 1852,5,75,0,0,1852,380,1,0,0,0,1853,1854,5,82,0,0,1854,1855,5,79,0,0,1855, + 1856,5,76,0,0,1856,1857,5,76,0,0,1857,1858,5,85,0,0,1858,1859,5,80,0,0, + 1859,382,1,0,0,0,1860,1861,5,82,0,0,1861,1862,5,79,0,0,1862,1863,5,87,0, + 0,1863,384,1,0,0,0,1864,1865,5,82,0,0,1865,1866,5,79,0,0,1866,1867,5,87, + 0,0,1867,1868,5,83,0,0,1868,386,1,0,0,0,1869,1870,5,82,0,0,1870,1871,5, + 85,0,0,1871,1872,5,78,0,0,1872,1873,5,78,0,0,1873,1874,5,73,0,0,1874,1875, + 5,78,0,0,1875,1876,5,71,0,0,1876,388,1,0,0,0,1877,1878,5,83,0,0,1878,1879, + 5,67,0,0,1879,1880,5,72,0,0,1880,1881,5,69,0,0,1881,1882,5,77,0,0,1882, + 1883,5,65,0,0,1883,390,1,0,0,0,1884,1885,5,83,0,0,1885,1886,5,67,0,0,1886, + 1887,5,72,0,0,1887,1888,5,69,0,0,1888,1889,5,77,0,0,1889,1890,5,65,0,0, + 1890,1891,5,83,0,0,1891,392,1,0,0,0,1892,1893,5,83,0,0,1893,1894,5,69,0, + 0,1894,1895,5,67,0,0,1895,1896,5,79,0,0,1896,1897,5,78,0,0,1897,1898,5, + 68,0,0,1898,394,1,0,0,0,1899,1900,5,83,0,0,1900,1901,5,69,0,0,1901,1902, + 5,67,0,0,1902,1903,5,85,0,0,1903,1904,5,82,0,0,1904,1905,5,73,0,0,1905, + 1906,5,84,0,0,1906,1907,5,89,0,0,1907,396,1,0,0,0,1908,1909,5,83,0,0,1909, + 1910,5,69,0,0,1910,1911,5,69,0,0,1911,1912,5,75,0,0,1912,398,1,0,0,0,1913, + 1914,5,83,0,0,1914,1915,5,69,0,0,1915,1916,5,76,0,0,1916,1917,5,69,0,0, + 1917,1918,5,67,0,0,1918,1919,5,84,0,0,1919,400,1,0,0,0,1920,1921,5,83,0, + 0,1921,1922,5,69,0,0,1922,1923,5,82,0,0,1923,1924,5,73,0,0,1924,1925,5, + 65,0,0,1925,1926,5,76,0,0,1926,1927,5,73,0,0,1927,1928,5,90,0,0,1928,1929, + 5,65,0,0,1929,1930,5,66,0,0,1930,1931,5,76,0,0,1931,1932,5,69,0,0,1932, + 402,1,0,0,0,1933,1934,5,83,0,0,1934,1935,5,69,0,0,1935,1936,5,83,0,0,1936, + 1937,5,83,0,0,1937,1938,5,73,0,0,1938,1939,5,79,0,0,1939,1940,5,78,0,0, + 1940,404,1,0,0,0,1941,1942,5,83,0,0,1942,1943,5,69,0,0,1943,1944,5,84,0, + 0,1944,406,1,0,0,0,1945,1946,5,83,0,0,1946,1947,5,69,0,0,1947,1948,5,84, + 0,0,1948,1949,5,83,0,0,1949,408,1,0,0,0,1950,1951,5,83,0,0,1951,1952,5, + 72,0,0,1952,1953,5,79,0,0,1953,1954,5,87,0,0,1954,410,1,0,0,0,1955,1956, + 5,83,0,0,1956,1957,5,79,0,0,1957,1958,5,77,0,0,1958,1959,5,69,0,0,1959, + 412,1,0,0,0,1960,1961,5,83,0,0,1961,1962,5,84,0,0,1962,1963,5,65,0,0,1963, + 1964,5,82,0,0,1964,1965,5,84,0,0,1965,414,1,0,0,0,1966,1967,5,83,0,0,1967, + 1968,5,84,0,0,1968,1969,5,65,0,0,1969,1970,5,84,0,0,1970,1971,5,83,0,0, + 1971,416,1,0,0,0,1972,1973,5,83,0,0,1973,1974,5,85,0,0,1974,1975,5,66,0, + 0,1975,1976,5,83,0,0,1976,1977,5,69,0,0,1977,1978,5,84,0,0,1978,418,1,0, + 0,0,1979,1980,5,83,0,0,1980,1981,5,85,0,0,1981,1982,5,66,0,0,1982,1983, + 5,83,0,0,1983,1984,5,84,0,0,1984,1985,5,82,0,0,1985,1986,5,73,0,0,1986, + 1987,5,78,0,0,1987,1988,5,71,0,0,1988,420,1,0,0,0,1989,1990,5,83,0,0,1990, + 1991,5,89,0,0,1991,1992,5,83,0,0,1992,1993,5,84,0,0,1993,1994,5,69,0,0, + 1994,1995,5,77,0,0,1995,422,1,0,0,0,1996,1997,5,84,0,0,1997,1998,5,65,0, + 0,1998,1999,5,66,0,0,1999,2000,5,76,0,0,2000,2001,5,69,0,0,2001,424,1,0, + 0,0,2002,2003,5,84,0,0,2003,2004,5,65,0,0,2004,2005,5,66,0,0,2005,2006, + 5,76,0,0,2006,2007,5,69,0,0,2007,2008,5,83,0,0,2008,426,1,0,0,0,2009,2010, + 5,84,0,0,2010,2011,5,65,0,0,2011,2012,5,66,0,0,2012,2013,5,76,0,0,2013, + 2014,5,69,0,0,2014,2015,5,83,0,0,2015,2016,5,65,0,0,2016,2017,5,77,0,0, + 2017,2018,5,80,0,0,2018,2019,5,76,0,0,2019,2020,5,69,0,0,2020,428,1,0,0, + 0,2021,2022,5,84,0,0,2022,2023,5,69,0,0,2023,2024,5,88,0,0,2024,2025,5, + 84,0,0,2025,430,1,0,0,0,2026,2027,5,84,0,0,2027,2028,5,72,0,0,2028,2029, + 5,69,0,0,2029,2030,5,78,0,0,2030,432,1,0,0,0,2031,2032,5,84,0,0,2032,2033, + 5,73,0,0,2033,2034,5,69,0,0,2034,2035,5,83,0,0,2035,434,1,0,0,0,2036,2037, + 5,84,0,0,2037,2038,5,73,0,0,2038,2039,5,77,0,0,2039,2040,5,69,0,0,2040, + 436,1,0,0,0,2041,2042,5,84,0,0,2042,2043,5,73,0,0,2043,2044,5,77,0,0,2044, + 2045,5,69,0,0,2045,2046,5,83,0,0,2046,2047,5,84,0,0,2047,2048,5,65,0,0, + 2048,2049,5,77,0,0,2049,2050,5,80,0,0,2050,438,1,0,0,0,2051,2052,5,84,0, + 0,2052,2053,5,79,0,0,2053,440,1,0,0,0,2054,2055,5,84,0,0,2055,2056,5,82, + 0,0,2056,2057,5,65,0,0,2057,2058,5,78,0,0,2058,2059,5,83,0,0,2059,2060, + 5,65,0,0,2060,2061,5,67,0,0,2061,2062,5,84,0,0,2062,2063,5,73,0,0,2063, + 2064,5,79,0,0,2064,2065,5,78,0,0,2065,442,1,0,0,0,2066,2067,5,84,0,0,2067, + 2068,5,82,0,0,2068,2069,5,85,0,0,2069,2070,5,78,0,0,2070,2071,5,67,0,0, + 2071,2072,5,65,0,0,2072,2073,5,84,0,0,2073,2074,5,69,0,0,2074,444,1,0,0, + 0,2075,2076,5,84,0,0,2076,2077,5,82,0,0,2077,2078,5,85,0,0,2078,2079,5, + 69,0,0,2079,446,1,0,0,0,2080,2081,5,84,0,0,2081,2082,5,82,0,0,2082,2083, + 5,89,0,0,2083,2084,5,95,0,0,2084,2085,5,67,0,0,2085,2086,5,65,0,0,2086, + 2087,5,83,0,0,2087,2088,5,84,0,0,2088,448,1,0,0,0,2089,2090,5,84,0,0,2090, + 2091,5,89,0,0,2091,2092,5,80,0,0,2092,2093,5,69,0,0,2093,450,1,0,0,0,2094, + 2095,5,85,0,0,2095,2096,5,69,0,0,2096,2097,5,83,0,0,2097,2098,5,67,0,0, + 2098,2099,5,65,0,0,2099,2100,5,80,0,0,2100,2101,5,69,0,0,2101,452,1,0,0, + 0,2102,2103,5,85,0,0,2103,2104,5,78,0,0,2104,2105,5,66,0,0,2105,2106,5, + 79,0,0,2106,2107,5,85,0,0,2107,2108,5,78,0,0,2108,2109,5,68,0,0,2109,2110, + 5,69,0,0,2110,2111,5,68,0,0,2111,454,1,0,0,0,2112,2113,5,85,0,0,2113,2114, + 5,78,0,0,2114,2115,5,67,0,0,2115,2116,5,79,0,0,2116,2117,5,77,0,0,2117, + 2118,5,77,0,0,2118,2119,5,73,0,0,2119,2120,5,84,0,0,2120,2121,5,84,0,0, + 2121,2122,5,69,0,0,2122,2123,5,68,0,0,2123,456,1,0,0,0,2124,2125,5,85,0, + 0,2125,2126,5,78,0,0,2126,2127,5,73,0,0,2127,2128,5,79,0,0,2128,2129,5, + 78,0,0,2129,458,1,0,0,0,2130,2131,5,85,0,0,2131,2132,5,78,0,0,2132,2133, + 5,77,0,0,2133,2134,5,65,0,0,2134,2135,5,84,0,0,2135,2136,5,67,0,0,2136, + 2137,5,72,0,0,2137,2138,5,69,0,0,2138,2139,5,68,0,0,2139,460,1,0,0,0,2140, + 2141,5,85,0,0,2141,2142,5,78,0,0,2142,2143,5,78,0,0,2143,2144,5,69,0,0, + 2144,2145,5,83,0,0,2145,2146,5,84,0,0,2146,462,1,0,0,0,2147,2148,5,85,0, + 0,2148,2149,5,80,0,0,2149,2150,5,68,0,0,2150,2151,5,65,0,0,2151,2152,5, + 84,0,0,2152,2153,5,69,0,0,2153,464,1,0,0,0,2154,2155,5,85,0,0,2155,2156, + 5,83,0,0,2156,2157,5,69,0,0,2157,466,1,0,0,0,2158,2159,5,85,0,0,2159,2160, + 5,83,0,0,2160,2161,5,69,0,0,2161,2162,5,82,0,0,2162,468,1,0,0,0,2163,2164, + 5,85,0,0,2164,2165,5,83,0,0,2165,2166,5,73,0,0,2166,2167,5,78,0,0,2167, + 2168,5,71,0,0,2168,470,1,0,0,0,2169,2170,5,86,0,0,2170,2171,5,65,0,0,2171, + 2172,5,76,0,0,2172,2173,5,73,0,0,2173,2174,5,68,0,0,2174,2175,5,65,0,0, + 2175,2176,5,84,0,0,2176,2177,5,69,0,0,2177,472,1,0,0,0,2178,2179,5,86,0, + 0,2179,2180,5,65,0,0,2180,2181,5,76,0,0,2181,2182,5,85,0,0,2182,2183,5, + 69,0,0,2183,2184,5,83,0,0,2184,474,1,0,0,0,2185,2186,5,86,0,0,2186,2187, + 5,69,0,0,2187,2188,5,82,0,0,2188,2189,5,66,0,0,2189,2190,5,79,0,0,2190, + 2191,5,83,0,0,2191,2192,5,69,0,0,2192,476,1,0,0,0,2193,2194,5,86,0,0,2194, + 2195,5,73,0,0,2195,2196,5,69,0,0,2196,2197,5,87,0,0,2197,478,1,0,0,0,2198, + 2199,5,87,0,0,2199,2200,5,72,0,0,2200,2201,5,69,0,0,2201,2202,5,78,0,0, + 2202,480,1,0,0,0,2203,2204,5,87,0,0,2204,2205,5,72,0,0,2205,2206,5,69,0, + 0,2206,2207,5,82,0,0,2207,2208,5,69,0,0,2208,482,1,0,0,0,2209,2210,5,87, + 0,0,2210,2211,5,73,0,0,2211,2212,5,78,0,0,2212,2213,5,68,0,0,2213,2214, + 5,79,0,0,2214,2215,5,87,0,0,2215,484,1,0,0,0,2216,2217,5,87,0,0,2217,2218, + 5,73,0,0,2218,2219,5,84,0,0,2219,2220,5,72,0,0,2220,486,1,0,0,0,2221,2222, + 5,87,0,0,2222,2223,5,73,0,0,2223,2224,5,84,0,0,2224,2225,5,72,0,0,2225, + 2226,5,79,0,0,2226,2227,5,85,0,0,2227,2228,5,84,0,0,2228,488,1,0,0,0,2229, + 2230,5,87,0,0,2230,2231,5,79,0,0,2231,2232,5,82,0,0,2232,2233,5,75,0,0, + 2233,490,1,0,0,0,2234,2235,5,87,0,0,2235,2236,5,82,0,0,2236,2237,5,73,0, + 0,2237,2238,5,84,0,0,2238,2239,5,69,0,0,2239,492,1,0,0,0,2240,2241,5,89, + 0,0,2241,2242,5,69,0,0,2242,2243,5,65,0,0,2243,2244,5,82,0,0,2244,494,1, + 0,0,0,2245,2246,5,90,0,0,2246,2247,5,79,0,0,2247,2248,5,78,0,0,2248,2249, + 5,69,0,0,2249,496,1,0,0,0,2250,2251,5,61,0,0,2251,498,1,0,0,0,2252,2253, + 5,60,0,0,2253,2257,5,62,0,0,2254,2255,5,33,0,0,2255,2257,5,61,0,0,2256, + 2252,1,0,0,0,2256,2254,1,0,0,0,2257,500,1,0,0,0,2258,2259,5,60,0,0,2259, + 502,1,0,0,0,2260,2261,5,60,0,0,2261,2262,5,61,0,0,2262,504,1,0,0,0,2263, + 2264,5,62,0,0,2264,506,1,0,0,0,2265,2266,5,62,0,0,2266,2267,5,61,0,0,2267, + 508,1,0,0,0,2268,2269,5,43,0,0,2269,510,1,0,0,0,2270,2271,5,45,0,0,2271, + 512,1,0,0,0,2272,2273,5,42,0,0,2273,514,1,0,0,0,2274,2275,5,47,0,0,2275, + 516,1,0,0,0,2276,2277,5,37,0,0,2277,518,1,0,0,0,2278,2279,5,124,0,0,2279, + 2280,5,124,0,0,2280,520,1,0,0,0,2281,2282,5,63,0,0,2282,522,1,0,0,0,2283, + 2289,5,39,0,0,2284,2288,8,0,0,0,2285,2286,5,39,0,0,2286,2288,5,39,0,0,2287, + 2284,1,0,0,0,2287,2285,1,0,0,0,2288,2291,1,0,0,0,2289,2287,1,0,0,0,2289, + 2290,1,0,0,0,2290,2292,1,0,0,0,2291,2289,1,0,0,0,2292,2293,5,39,0,0,2293, + 524,1,0,0,0,2294,2295,5,85,0,0,2295,2296,5,38,0,0,2296,2297,5,39,0,0,2297, + 2303,1,0,0,0,2298,2302,8,0,0,0,2299,2300,5,39,0,0,2300,2302,5,39,0,0,2301, + 2298,1,0,0,0,2301,2299,1,0,0,0,2302,2305,1,0,0,0,2303,2301,1,0,0,0,2303, + 2304,1,0,0,0,2304,2306,1,0,0,0,2305,2303,1,0,0,0,2306,2307,5,39,0,0,2307, + 526,1,0,0,0,2308,2309,5,88,0,0,2309,2310,5,39,0,0,2310,2314,1,0,0,0,2311, + 2313,8,0,0,0,2312,2311,1,0,0,0,2313,2316,1,0,0,0,2314,2312,1,0,0,0,2314, + 2315,1,0,0,0,2315,2317,1,0,0,0,2316,2314,1,0,0,0,2317,2318,5,39,0,0,2318, + 528,1,0,0,0,2319,2321,3,547,273,0,2320,2319,1,0,0,0,2321,2322,1,0,0,0,2322, + 2320,1,0,0,0,2322,2323,1,0,0,0,2323,530,1,0,0,0,2324,2326,3,547,273,0,2325, + 2324,1,0,0,0,2326,2327,1,0,0,0,2327,2325,1,0,0,0,2327,2328,1,0,0,0,2328, + 2329,1,0,0,0,2329,2333,5,46,0,0,2330,2332,3,547,273,0,2331,2330,1,0,0,0, + 2332,2335,1,0,0,0,2333,2331,1,0,0,0,2333,2334,1,0,0,0,2334,2343,1,0,0,0, + 2335,2333,1,0,0,0,2336,2338,5,46,0,0,2337,2339,3,547,273,0,2338,2337,1, + 0,0,0,2339,2340,1,0,0,0,2340,2338,1,0,0,0,2340,2341,1,0,0,0,2341,2343,1, + 0,0,0,2342,2325,1,0,0,0,2342,2336,1,0,0,0,2343,532,1,0,0,0,2344,2346,3, + 547,273,0,2345,2344,1,0,0,0,2346,2347,1,0,0,0,2347,2345,1,0,0,0,2347,2348, + 1,0,0,0,2348,2356,1,0,0,0,2349,2353,5,46,0,0,2350,2352,3,547,273,0,2351, + 2350,1,0,0,0,2352,2355,1,0,0,0,2353,2351,1,0,0,0,2353,2354,1,0,0,0,2354, + 2357,1,0,0,0,2355,2353,1,0,0,0,2356,2349,1,0,0,0,2356,2357,1,0,0,0,2357, + 2358,1,0,0,0,2358,2359,3,545,272,0,2359,2369,1,0,0,0,2360,2362,5,46,0,0, + 2361,2363,3,547,273,0,2362,2361,1,0,0,0,2363,2364,1,0,0,0,2364,2362,1,0, + 0,0,2364,2365,1,0,0,0,2365,2366,1,0,0,0,2366,2367,3,545,272,0,2367,2369, + 1,0,0,0,2368,2345,1,0,0,0,2368,2360,1,0,0,0,2369,534,1,0,0,0,2370,2373, + 3,549,274,0,2371,2373,5,95,0,0,2372,2370,1,0,0,0,2372,2371,1,0,0,0,2373, + 2379,1,0,0,0,2374,2378,3,549,274,0,2375,2378,3,547,273,0,2376,2378,5,95, + 0,0,2377,2374,1,0,0,0,2377,2375,1,0,0,0,2377,2376,1,0,0,0,2378,2381,1,0, + 0,0,2379,2377,1,0,0,0,2379,2380,1,0,0,0,2380,536,1,0,0,0,2381,2379,1,0, + 0,0,2382,2386,3,547,273,0,2383,2387,3,549,274,0,2384,2387,3,547,273,0,2385, + 2387,5,95,0,0,2386,2383,1,0,0,0,2386,2384,1,0,0,0,2386,2385,1,0,0,0,2387, + 2388,1,0,0,0,2388,2386,1,0,0,0,2388,2389,1,0,0,0,2389,538,1,0,0,0,2390, + 2396,5,34,0,0,2391,2395,8,1,0,0,2392,2393,5,34,0,0,2393,2395,5,34,0,0,2394, + 2391,1,0,0,0,2394,2392,1,0,0,0,2395,2398,1,0,0,0,2396,2394,1,0,0,0,2396, + 2397,1,0,0,0,2397,2399,1,0,0,0,2398,2396,1,0,0,0,2399,2400,5,34,0,0,2400, + 540,1,0,0,0,2401,2407,5,96,0,0,2402,2406,8,2,0,0,2403,2404,5,96,0,0,2404, + 2406,5,96,0,0,2405,2402,1,0,0,0,2405,2403,1,0,0,0,2406,2409,1,0,0,0,2407, + 2405,1,0,0,0,2407,2408,1,0,0,0,2408,2410,1,0,0,0,2409,2407,1,0,0,0,2410, + 2411,5,96,0,0,2411,542,1,0,0,0,2412,2413,5,59,0,0,2413,544,1,0,0,0,2414, + 2416,5,69,0,0,2415,2417,7,3,0,0,2416,2415,1,0,0,0,2416,2417,1,0,0,0,2417, + 2419,1,0,0,0,2418,2420,3,547,273,0,2419,2418,1,0,0,0,2420,2421,1,0,0,0, + 2421,2419,1,0,0,0,2421,2422,1,0,0,0,2422,546,1,0,0,0,2423,2424,7,4,0,0, + 2424,548,1,0,0,0,2425,2426,7,5,0,0,2426,550,1,0,0,0,2427,2428,5,45,0,0, + 2428,2429,5,45,0,0,2429,2433,1,0,0,0,2430,2432,8,6,0,0,2431,2430,1,0,0, + 0,2432,2435,1,0,0,0,2433,2431,1,0,0,0,2433,2434,1,0,0,0,2434,2437,1,0,0, + 0,2435,2433,1,0,0,0,2436,2438,5,13,0,0,2437,2436,1,0,0,0,2437,2438,1,0, + 0,0,2438,2440,1,0,0,0,2439,2441,5,10,0,0,2440,2439,1,0,0,0,2440,2441,1, + 0,0,0,2441,2442,1,0,0,0,2442,2443,6,275,0,0,2443,552,1,0,0,0,2444,2445, + 5,47,0,0,2445,2446,5,42,0,0,2446,2450,1,0,0,0,2447,2449,9,0,0,0,2448,2447, + 1,0,0,0,2449,2452,1,0,0,0,2450,2451,1,0,0,0,2450,2448,1,0,0,0,2451,2453, + 1,0,0,0,2452,2450,1,0,0,0,2453,2454,5,42,0,0,2454,2455,5,47,0,0,2455,2456, + 1,0,0,0,2456,2457,6,276,0,0,2457,554,1,0,0,0,2458,2460,7,7,0,0,2459,2458, + 1,0,0,0,2460,2461,1,0,0,0,2461,2459,1,0,0,0,2461,2462,1,0,0,0,2462,2463, + 1,0,0,0,2463,2464,6,277,0,0,2464,556,1,0,0,0,2465,2466,9,0,0,0,2466,558, + 1,0,0,0,33,0,2256,2287,2289,2301,2303,2314,2322,2327,2333,2340,2342,2347, + 2353,2356,2364,2368,2372,2377,2379,2386,2388,2394,2396,2405,2407,2416,2421, + 2433,2437,2440,2450,2461,1,0,1,0]; + + private static __ATN: ATN; + public static get _ATN(): ATN { + if (!trinoSqlParserLexer.__ATN) { + trinoSqlParserLexer.__ATN = new ATNDeserializer().deserialize(trinoSqlParserLexer._serializedATN); + } + + return trinoSqlParserLexer.__ATN; + } + + + static DecisionsToDFA = trinoSqlParserLexer._ATN.decisionToState.map( (ds: DecisionState, index: number) => new DFA(ds, index) ); +} \ No newline at end of file diff --git a/src/lib/trinosql/trinoSqlParserListener.ts b/src/lib/trinosql/trinoSqlParserListener.ts new file mode 100644 index 0000000..1ca9dbe --- /dev/null +++ b/src/lib/trinosql/trinoSqlParserListener.ts @@ -0,0 +1,3259 @@ +// Generated from /Users/zhenglin/Documents/parser/dt-sql-parser/src/grammar/trinosql/trinoSqlParser.g4 by ANTLR 4.12.0 + +import {ParseTreeListener} from "antlr4"; + + +import { ProgramContext } from "./trinoSqlParserParser"; +import { StatementsContext } from "./trinoSqlParserParser"; +import { SingleStatementContext } from "./trinoSqlParserParser"; +import { StandaloneExpressionContext } from "./trinoSqlParserParser"; +import { StandalonePathSpecificationContext } from "./trinoSqlParserParser"; +import { StandaloneTypeContext } from "./trinoSqlParserParser"; +import { StandaloneRowPatternContext } from "./trinoSqlParserParser"; +import { StatementDefaultContext } from "./trinoSqlParserParser"; +import { UseContext } from "./trinoSqlParserParser"; +import { CreateSchemaContext } from "./trinoSqlParserParser"; +import { DropSchemaContext } from "./trinoSqlParserParser"; +import { RenameSchemaContext } from "./trinoSqlParserParser"; +import { SetSchemaAuthorizationContext } from "./trinoSqlParserParser"; +import { CreateTableAsSelectContext } from "./trinoSqlParserParser"; +import { CreateTableContext } from "./trinoSqlParserParser"; +import { DropTableContext } from "./trinoSqlParserParser"; +import { InsertIntoContext } from "./trinoSqlParserParser"; +import { DeleteContext } from "./trinoSqlParserParser"; +import { TruncateTableContext } from "./trinoSqlParserParser"; +import { RenameTableContext } from "./trinoSqlParserParser"; +import { CommentTableContext } from "./trinoSqlParserParser"; +import { CommentColumnContext } from "./trinoSqlParserParser"; +import { RenameColumnContext } from "./trinoSqlParserParser"; +import { DropColumnContext } from "./trinoSqlParserParser"; +import { AddColumnContext } from "./trinoSqlParserParser"; +import { SetTableAuthorizationContext } from "./trinoSqlParserParser"; +import { SetTablePropertiesContext } from "./trinoSqlParserParser"; +import { TableExecuteContext } from "./trinoSqlParserParser"; +import { AnalyzeContext } from "./trinoSqlParserParser"; +import { CreateMaterializedViewContext } from "./trinoSqlParserParser"; +import { CreateViewContext } from "./trinoSqlParserParser"; +import { RefreshMaterializedViewContext } from "./trinoSqlParserParser"; +import { DropMaterializedViewContext } from "./trinoSqlParserParser"; +import { RenameMaterializedViewContext } from "./trinoSqlParserParser"; +import { SetMaterializedViewPropertiesContext } from "./trinoSqlParserParser"; +import { DropViewContext } from "./trinoSqlParserParser"; +import { RenameViewContext } from "./trinoSqlParserParser"; +import { SetViewAuthorizationContext } from "./trinoSqlParserParser"; +import { CallContext } from "./trinoSqlParserParser"; +import { CreateRoleContext } from "./trinoSqlParserParser"; +import { DropRoleContext } from "./trinoSqlParserParser"; +import { GrantRolesContext } from "./trinoSqlParserParser"; +import { RevokeRolesContext } from "./trinoSqlParserParser"; +import { SetRoleContext } from "./trinoSqlParserParser"; +import { GrantContext } from "./trinoSqlParserParser"; +import { DenyContext } from "./trinoSqlParserParser"; +import { RevokeContext } from "./trinoSqlParserParser"; +import { ShowGrantsContext } from "./trinoSqlParserParser"; +import { ExplainContext } from "./trinoSqlParserParser"; +import { ShowCreateTableContext } from "./trinoSqlParserParser"; +import { ShowCreateSchemaContext } from "./trinoSqlParserParser"; +import { ShowCreateViewContext } from "./trinoSqlParserParser"; +import { ShowCreateMaterializedViewContext } from "./trinoSqlParserParser"; +import { ShowTablesContext } from "./trinoSqlParserParser"; +import { ShowSchemasContext } from "./trinoSqlParserParser"; +import { ShowCatalogsContext } from "./trinoSqlParserParser"; +import { ShowColumnsContext } from "./trinoSqlParserParser"; +import { ShowStatsContext } from "./trinoSqlParserParser"; +import { ShowStatsForQueryContext } from "./trinoSqlParserParser"; +import { ShowRolesContext } from "./trinoSqlParserParser"; +import { ShowRoleGrantsContext } from "./trinoSqlParserParser"; +import { ShowFunctionsContext } from "./trinoSqlParserParser"; +import { ShowSessionContext } from "./trinoSqlParserParser"; +import { SetSessionContext } from "./trinoSqlParserParser"; +import { ResetSessionContext } from "./trinoSqlParserParser"; +import { StartTransactionContext } from "./trinoSqlParserParser"; +import { CommitContext } from "./trinoSqlParserParser"; +import { RollbackContext } from "./trinoSqlParserParser"; +import { PrepareContext } from "./trinoSqlParserParser"; +import { DeallocateContext } from "./trinoSqlParserParser"; +import { ExecuteContext } from "./trinoSqlParserParser"; +import { DescribeInputContext } from "./trinoSqlParserParser"; +import { DescribeOutputContext } from "./trinoSqlParserParser"; +import { SetPathContext } from "./trinoSqlParserParser"; +import { SetTimeZoneContext } from "./trinoSqlParserParser"; +import { UpdateContext } from "./trinoSqlParserParser"; +import { MergeContext } from "./trinoSqlParserParser"; +import { ShowTableCommentContext } from "./trinoSqlParserParser"; +import { ShowColumnCommentContext } from "./trinoSqlParserParser"; +import { QueryContext } from "./trinoSqlParserParser"; +import { WithContext } from "./trinoSqlParserParser"; +import { TableElementContext } from "./trinoSqlParserParser"; +import { ColumnDefinitionContext } from "./trinoSqlParserParser"; +import { LikeClauseContext } from "./trinoSqlParserParser"; +import { PropertiesContext } from "./trinoSqlParserParser"; +import { PropertyAssignmentsContext } from "./trinoSqlParserParser"; +import { PropertyContext } from "./trinoSqlParserParser"; +import { DefaultPropertyValueContext } from "./trinoSqlParserParser"; +import { NonDefaultPropertyValueContext } from "./trinoSqlParserParser"; +import { QueryNoWithContext } from "./trinoSqlParserParser"; +import { LimitRowCountContext } from "./trinoSqlParserParser"; +import { RowCountContext } from "./trinoSqlParserParser"; +import { QueryTermDefaultContext } from "./trinoSqlParserParser"; +import { SetOperationContext } from "./trinoSqlParserParser"; +import { QueryPrimaryDefaultContext } from "./trinoSqlParserParser"; +import { TableContext } from "./trinoSqlParserParser"; +import { InlineTableContext } from "./trinoSqlParserParser"; +import { SubqueryContext } from "./trinoSqlParserParser"; +import { SortItemContext } from "./trinoSqlParserParser"; +import { QuerySpecificationContext } from "./trinoSqlParserParser"; +import { GroupByContext } from "./trinoSqlParserParser"; +import { SingleGroupingSetContext } from "./trinoSqlParserParser"; +import { RollupContext } from "./trinoSqlParserParser"; +import { CubeContext } from "./trinoSqlParserParser"; +import { MultipleGroupingSetsContext } from "./trinoSqlParserParser"; +import { GroupingSetContext } from "./trinoSqlParserParser"; +import { WindowDefinitionContext } from "./trinoSqlParserParser"; +import { WindowSpecificationContext } from "./trinoSqlParserParser"; +import { NamedQueryContext } from "./trinoSqlParserParser"; +import { SetQuantifierContext } from "./trinoSqlParserParser"; +import { SelectSingleContext } from "./trinoSqlParserParser"; +import { SelectAllContext } from "./trinoSqlParserParser"; +import { RelationDefaultContext } from "./trinoSqlParserParser"; +import { JoinRelationContext } from "./trinoSqlParserParser"; +import { JoinTypeContext } from "./trinoSqlParserParser"; +import { JoinCriteriaContext } from "./trinoSqlParserParser"; +import { SampledRelationContext } from "./trinoSqlParserParser"; +import { SampleTypeContext } from "./trinoSqlParserParser"; +import { PatternRecognitionContext } from "./trinoSqlParserParser"; +import { MeasureDefinitionContext } from "./trinoSqlParserParser"; +import { RowsPerMatchContext } from "./trinoSqlParserParser"; +import { EmptyMatchHandlingContext } from "./trinoSqlParserParser"; +import { SkipToContext } from "./trinoSqlParserParser"; +import { SubsetDefinitionContext } from "./trinoSqlParserParser"; +import { VariableDefinitionContext } from "./trinoSqlParserParser"; +import { AliasedRelationContext } from "./trinoSqlParserParser"; +import { ColumnAliasesContext } from "./trinoSqlParserParser"; +import { TableNameContext } from "./trinoSqlParserParser"; +import { SubqueryRelationContext } from "./trinoSqlParserParser"; +import { UnnestContext } from "./trinoSqlParserParser"; +import { LateralContext } from "./trinoSqlParserParser"; +import { ParenthesizedRelationContext } from "./trinoSqlParserParser"; +import { ExpressionContext } from "./trinoSqlParserParser"; +import { LogicalNotContext } from "./trinoSqlParserParser"; +import { PredicatedContext } from "./trinoSqlParserParser"; +import { LogicalBinaryContext } from "./trinoSqlParserParser"; +import { ComparisonContext } from "./trinoSqlParserParser"; +import { QuantifiedComparisonContext } from "./trinoSqlParserParser"; +import { BetweenContext } from "./trinoSqlParserParser"; +import { InListContext } from "./trinoSqlParserParser"; +import { InSubqueryContext } from "./trinoSqlParserParser"; +import { LikeContext } from "./trinoSqlParserParser"; +import { NullPredicateContext } from "./trinoSqlParserParser"; +import { DistinctFromContext } from "./trinoSqlParserParser"; +import { ValueExpressionDefaultContext } from "./trinoSqlParserParser"; +import { ConcatenationContext } from "./trinoSqlParserParser"; +import { ArithmeticBinaryContext } from "./trinoSqlParserParser"; +import { ArithmeticUnaryContext } from "./trinoSqlParserParser"; +import { AtTimeZoneContext } from "./trinoSqlParserParser"; +import { DereferenceContext } from "./trinoSqlParserParser"; +import { TypeConstructorContext } from "./trinoSqlParserParser"; +import { SpecialDateTimeFunctionContext } from "./trinoSqlParserParser"; +import { SubstringContext } from "./trinoSqlParserParser"; +import { CastContext } from "./trinoSqlParserParser"; +import { LambdaContext } from "./trinoSqlParserParser"; +import { ParenthesizedExpressionContext } from "./trinoSqlParserParser"; +import { ParameterContext } from "./trinoSqlParserParser"; +import { NormalizeContext } from "./trinoSqlParserParser"; +import { IntervalLiteralContext } from "./trinoSqlParserParser"; +import { NumericLiteralContext } from "./trinoSqlParserParser"; +import { BooleanLiteralContext } from "./trinoSqlParserParser"; +import { SimpleCaseContext } from "./trinoSqlParserParser"; +import { ColumnReferenceContext } from "./trinoSqlParserParser"; +import { NullLiteralContext } from "./trinoSqlParserParser"; +import { RowConstructorContext } from "./trinoSqlParserParser"; +import { SubscriptContext } from "./trinoSqlParserParser"; +import { CurrentPathContext } from "./trinoSqlParserParser"; +import { SubqueryExpressionContext } from "./trinoSqlParserParser"; +import { BinaryLiteralContext } from "./trinoSqlParserParser"; +import { CurrentUserContext } from "./trinoSqlParserParser"; +import { MeasureContext } from "./trinoSqlParserParser"; +import { ExtractContext } from "./trinoSqlParserParser"; +import { StringLiteralContext } from "./trinoSqlParserParser"; +import { ArrayConstructorContext } from "./trinoSqlParserParser"; +import { FunctionCallContext } from "./trinoSqlParserParser"; +import { CurrentSchemaContext } from "./trinoSqlParserParser"; +import { ExistsContext } from "./trinoSqlParserParser"; +import { PositionContext } from "./trinoSqlParserParser"; +import { SearchedCaseContext } from "./trinoSqlParserParser"; +import { CurrentCatalogContext } from "./trinoSqlParserParser"; +import { GroupingOperationContext } from "./trinoSqlParserParser"; +import { ProcessingModeContext } from "./trinoSqlParserParser"; +import { NullTreatmentContext } from "./trinoSqlParserParser"; +import { BasicStringLiteralContext } from "./trinoSqlParserParser"; +import { UnicodeStringLiteralContext } from "./trinoSqlParserParser"; +import { TimeZoneIntervalContext } from "./trinoSqlParserParser"; +import { TimeZoneStringContext } from "./trinoSqlParserParser"; +import { ComparisonOperatorContext } from "./trinoSqlParserParser"; +import { ComparisonQuantifierContext } from "./trinoSqlParserParser"; +import { BooleanValueContext } from "./trinoSqlParserParser"; +import { IntervalContext } from "./trinoSqlParserParser"; +import { IntervalFieldContext } from "./trinoSqlParserParser"; +import { NormalFormContext } from "./trinoSqlParserParser"; +import { RowTypeContext } from "./trinoSqlParserParser"; +import { IntervalTypeContext } from "./trinoSqlParserParser"; +import { ArrayTypeContext } from "./trinoSqlParserParser"; +import { DoublePrecisionTypeContext } from "./trinoSqlParserParser"; +import { LegacyArrayTypeContext } from "./trinoSqlParserParser"; +import { GenericTypeContext } from "./trinoSqlParserParser"; +import { DateTimeTypeContext } from "./trinoSqlParserParser"; +import { LegacyMapTypeContext } from "./trinoSqlParserParser"; +import { RowFieldContext } from "./trinoSqlParserParser"; +import { TypeParameterContext } from "./trinoSqlParserParser"; +import { WhenClauseContext } from "./trinoSqlParserParser"; +import { FilterContext } from "./trinoSqlParserParser"; +import { MergeUpdateContext } from "./trinoSqlParserParser"; +import { MergeDeleteContext } from "./trinoSqlParserParser"; +import { MergeInsertContext } from "./trinoSqlParserParser"; +import { OverContext } from "./trinoSqlParserParser"; +import { WindowFrameContext } from "./trinoSqlParserParser"; +import { FrameExtentContext } from "./trinoSqlParserParser"; +import { UnboundedFrameContext } from "./trinoSqlParserParser"; +import { CurrentRowBoundContext } from "./trinoSqlParserParser"; +import { BoundedFrameContext } from "./trinoSqlParserParser"; +import { QuantifiedPrimaryContext } from "./trinoSqlParserParser"; +import { PatternConcatenationContext } from "./trinoSqlParserParser"; +import { PatternAlternationContext } from "./trinoSqlParserParser"; +import { PatternVariableContext } from "./trinoSqlParserParser"; +import { EmptyPatternContext } from "./trinoSqlParserParser"; +import { PatternPermutationContext } from "./trinoSqlParserParser"; +import { GroupedPatternContext } from "./trinoSqlParserParser"; +import { PartitionStartAnchorContext } from "./trinoSqlParserParser"; +import { PartitionEndAnchorContext } from "./trinoSqlParserParser"; +import { ExcludedPatternContext } from "./trinoSqlParserParser"; +import { ZeroOrMoreQuantifierContext } from "./trinoSqlParserParser"; +import { OneOrMoreQuantifierContext } from "./trinoSqlParserParser"; +import { ZeroOrOneQuantifierContext } from "./trinoSqlParserParser"; +import { RangeQuantifierContext } from "./trinoSqlParserParser"; +import { UpdateAssignmentContext } from "./trinoSqlParserParser"; +import { ExplainFormatContext } from "./trinoSqlParserParser"; +import { ExplainTypeContext } from "./trinoSqlParserParser"; +import { IsolationLevelContext } from "./trinoSqlParserParser"; +import { TransactionAccessModeContext } from "./trinoSqlParserParser"; +import { ReadUncommittedContext } from "./trinoSqlParserParser"; +import { ReadCommittedContext } from "./trinoSqlParserParser"; +import { RepeatableReadContext } from "./trinoSqlParserParser"; +import { SerializableContext } from "./trinoSqlParserParser"; +import { PositionalArgumentContext } from "./trinoSqlParserParser"; +import { NamedArgumentContext } from "./trinoSqlParserParser"; +import { QualifiedArgumentContext } from "./trinoSqlParserParser"; +import { UnqualifiedArgumentContext } from "./trinoSqlParserParser"; +import { PathSpecificationContext } from "./trinoSqlParserParser"; +import { PrivilegeContext } from "./trinoSqlParserParser"; +import { QualifiedNameContext } from "./trinoSqlParserParser"; +import { SpecifiedPrincipalContext } from "./trinoSqlParserParser"; +import { CurrentUserGrantorContext } from "./trinoSqlParserParser"; +import { CurrentRoleGrantorContext } from "./trinoSqlParserParser"; +import { UnspecifiedPrincipalContext } from "./trinoSqlParserParser"; +import { UserPrincipalContext } from "./trinoSqlParserParser"; +import { RolePrincipalContext } from "./trinoSqlParserParser"; +import { RolesContext } from "./trinoSqlParserParser"; +import { UnquotedIdentifierContext } from "./trinoSqlParserParser"; +import { QuotedIdentifierContext } from "./trinoSqlParserParser"; +import { BackQuotedIdentifierContext } from "./trinoSqlParserParser"; +import { DigitIdentifierContext } from "./trinoSqlParserParser"; +import { DecimalLiteralContext } from "./trinoSqlParserParser"; +import { DoubleLiteralContext } from "./trinoSqlParserParser"; +import { IntegerLiteralContext } from "./trinoSqlParserParser"; +import { NonReservedContext } from "./trinoSqlParserParser"; + + +/** + * This interface defines a complete listener for a parse tree produced by + * `trinoSqlParserParser`. + */ +export default class trinoSqlParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by `trinoSqlParserParser.program`. + * @param ctx the parse tree + */ + enterProgram?: (ctx: ProgramContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.program`. + * @param ctx the parse tree + */ + exitProgram?: (ctx: ProgramContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.statements`. + * @param ctx the parse tree + */ + enterStatements?: (ctx: StatementsContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.statements`. + * @param ctx the parse tree + */ + exitStatements?: (ctx: StatementsContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.singleStatement`. + * @param ctx the parse tree + */ + enterSingleStatement?: (ctx: SingleStatementContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.singleStatement`. + * @param ctx the parse tree + */ + exitSingleStatement?: (ctx: SingleStatementContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.standaloneExpression`. + * @param ctx the parse tree + */ + enterStandaloneExpression?: (ctx: StandaloneExpressionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.standaloneExpression`. + * @param ctx the parse tree + */ + exitStandaloneExpression?: (ctx: StandaloneExpressionContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.standalonePathSpecification`. + * @param ctx the parse tree + */ + enterStandalonePathSpecification?: (ctx: StandalonePathSpecificationContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.standalonePathSpecification`. + * @param ctx the parse tree + */ + exitStandalonePathSpecification?: (ctx: StandalonePathSpecificationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.standaloneType`. + * @param ctx the parse tree + */ + enterStandaloneType?: (ctx: StandaloneTypeContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.standaloneType`. + * @param ctx the parse tree + */ + exitStandaloneType?: (ctx: StandaloneTypeContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.standaloneRowPattern`. + * @param ctx the parse tree + */ + enterStandaloneRowPattern?: (ctx: StandaloneRowPatternContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.standaloneRowPattern`. + * @param ctx the parse tree + */ + exitStandaloneRowPattern?: (ctx: StandaloneRowPatternContext) => void; + /** + * Enter a parse tree produced by the `statementDefault` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterStatementDefault?: (ctx: StatementDefaultContext) => void; + /** + * Exit a parse tree produced by the `statementDefault` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitStatementDefault?: (ctx: StatementDefaultContext) => void; + /** + * Enter a parse tree produced by the `use` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterUse?: (ctx: UseContext) => void; + /** + * Exit a parse tree produced by the `use` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitUse?: (ctx: UseContext) => void; + /** + * Enter a parse tree produced by the `createSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCreateSchema?: (ctx: CreateSchemaContext) => void; + /** + * Exit a parse tree produced by the `createSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCreateSchema?: (ctx: CreateSchemaContext) => void; + /** + * Enter a parse tree produced by the `dropSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDropSchema?: (ctx: DropSchemaContext) => void; + /** + * Exit a parse tree produced by the `dropSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDropSchema?: (ctx: DropSchemaContext) => void; + /** + * Enter a parse tree produced by the `renameSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRenameSchema?: (ctx: RenameSchemaContext) => void; + /** + * Exit a parse tree produced by the `renameSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRenameSchema?: (ctx: RenameSchemaContext) => void; + /** + * Enter a parse tree produced by the `setSchemaAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetSchemaAuthorization?: (ctx: SetSchemaAuthorizationContext) => void; + /** + * Exit a parse tree produced by the `setSchemaAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetSchemaAuthorization?: (ctx: SetSchemaAuthorizationContext) => void; + /** + * Enter a parse tree produced by the `createTableAsSelect` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCreateTableAsSelect?: (ctx: CreateTableAsSelectContext) => void; + /** + * Exit a parse tree produced by the `createTableAsSelect` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCreateTableAsSelect?: (ctx: CreateTableAsSelectContext) => void; + /** + * Enter a parse tree produced by the `createTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCreateTable?: (ctx: CreateTableContext) => void; + /** + * Exit a parse tree produced by the `createTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCreateTable?: (ctx: CreateTableContext) => void; + /** + * Enter a parse tree produced by the `dropTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDropTable?: (ctx: DropTableContext) => void; + /** + * Exit a parse tree produced by the `dropTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDropTable?: (ctx: DropTableContext) => void; + /** + * Enter a parse tree produced by the `insertInto` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterInsertInto?: (ctx: InsertIntoContext) => void; + /** + * Exit a parse tree produced by the `insertInto` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitInsertInto?: (ctx: InsertIntoContext) => void; + /** + * Enter a parse tree produced by the `delete` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDelete?: (ctx: DeleteContext) => void; + /** + * Exit a parse tree produced by the `delete` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDelete?: (ctx: DeleteContext) => void; + /** + * Enter a parse tree produced by the `truncateTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterTruncateTable?: (ctx: TruncateTableContext) => void; + /** + * Exit a parse tree produced by the `truncateTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitTruncateTable?: (ctx: TruncateTableContext) => void; + /** + * Enter a parse tree produced by the `renameTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRenameTable?: (ctx: RenameTableContext) => void; + /** + * Exit a parse tree produced by the `renameTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRenameTable?: (ctx: RenameTableContext) => void; + /** + * Enter a parse tree produced by the `commentTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCommentTable?: (ctx: CommentTableContext) => void; + /** + * Exit a parse tree produced by the `commentTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCommentTable?: (ctx: CommentTableContext) => void; + /** + * Enter a parse tree produced by the `commentColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCommentColumn?: (ctx: CommentColumnContext) => void; + /** + * Exit a parse tree produced by the `commentColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCommentColumn?: (ctx: CommentColumnContext) => void; + /** + * Enter a parse tree produced by the `renameColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRenameColumn?: (ctx: RenameColumnContext) => void; + /** + * Exit a parse tree produced by the `renameColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRenameColumn?: (ctx: RenameColumnContext) => void; + /** + * Enter a parse tree produced by the `dropColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDropColumn?: (ctx: DropColumnContext) => void; + /** + * Exit a parse tree produced by the `dropColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDropColumn?: (ctx: DropColumnContext) => void; + /** + * Enter a parse tree produced by the `addColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterAddColumn?: (ctx: AddColumnContext) => void; + /** + * Exit a parse tree produced by the `addColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitAddColumn?: (ctx: AddColumnContext) => void; + /** + * Enter a parse tree produced by the `setTableAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetTableAuthorization?: (ctx: SetTableAuthorizationContext) => void; + /** + * Exit a parse tree produced by the `setTableAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetTableAuthorization?: (ctx: SetTableAuthorizationContext) => void; + /** + * Enter a parse tree produced by the `setTableProperties` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetTableProperties?: (ctx: SetTablePropertiesContext) => void; + /** + * Exit a parse tree produced by the `setTableProperties` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetTableProperties?: (ctx: SetTablePropertiesContext) => void; + /** + * Enter a parse tree produced by the `tableExecute` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterTableExecute?: (ctx: TableExecuteContext) => void; + /** + * Exit a parse tree produced by the `tableExecute` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitTableExecute?: (ctx: TableExecuteContext) => void; + /** + * Enter a parse tree produced by the `analyze` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterAnalyze?: (ctx: AnalyzeContext) => void; + /** + * Exit a parse tree produced by the `analyze` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitAnalyze?: (ctx: AnalyzeContext) => void; + /** + * Enter a parse tree produced by the `createMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCreateMaterializedView?: (ctx: CreateMaterializedViewContext) => void; + /** + * Exit a parse tree produced by the `createMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCreateMaterializedView?: (ctx: CreateMaterializedViewContext) => void; + /** + * Enter a parse tree produced by the `createView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCreateView?: (ctx: CreateViewContext) => void; + /** + * Exit a parse tree produced by the `createView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCreateView?: (ctx: CreateViewContext) => void; + /** + * Enter a parse tree produced by the `refreshMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRefreshMaterializedView?: (ctx: RefreshMaterializedViewContext) => void; + /** + * Exit a parse tree produced by the `refreshMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRefreshMaterializedView?: (ctx: RefreshMaterializedViewContext) => void; + /** + * Enter a parse tree produced by the `dropMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDropMaterializedView?: (ctx: DropMaterializedViewContext) => void; + /** + * Exit a parse tree produced by the `dropMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDropMaterializedView?: (ctx: DropMaterializedViewContext) => void; + /** + * Enter a parse tree produced by the `renameMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRenameMaterializedView?: (ctx: RenameMaterializedViewContext) => void; + /** + * Exit a parse tree produced by the `renameMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRenameMaterializedView?: (ctx: RenameMaterializedViewContext) => void; + /** + * Enter a parse tree produced by the `setMaterializedViewProperties` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetMaterializedViewProperties?: (ctx: SetMaterializedViewPropertiesContext) => void; + /** + * Exit a parse tree produced by the `setMaterializedViewProperties` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetMaterializedViewProperties?: (ctx: SetMaterializedViewPropertiesContext) => void; + /** + * Enter a parse tree produced by the `dropView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDropView?: (ctx: DropViewContext) => void; + /** + * Exit a parse tree produced by the `dropView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDropView?: (ctx: DropViewContext) => void; + /** + * Enter a parse tree produced by the `renameView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRenameView?: (ctx: RenameViewContext) => void; + /** + * Exit a parse tree produced by the `renameView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRenameView?: (ctx: RenameViewContext) => void; + /** + * Enter a parse tree produced by the `setViewAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetViewAuthorization?: (ctx: SetViewAuthorizationContext) => void; + /** + * Exit a parse tree produced by the `setViewAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetViewAuthorization?: (ctx: SetViewAuthorizationContext) => void; + /** + * Enter a parse tree produced by the `call` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCall?: (ctx: CallContext) => void; + /** + * Exit a parse tree produced by the `call` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCall?: (ctx: CallContext) => void; + /** + * Enter a parse tree produced by the `createRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCreateRole?: (ctx: CreateRoleContext) => void; + /** + * Exit a parse tree produced by the `createRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCreateRole?: (ctx: CreateRoleContext) => void; + /** + * Enter a parse tree produced by the `dropRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDropRole?: (ctx: DropRoleContext) => void; + /** + * Exit a parse tree produced by the `dropRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDropRole?: (ctx: DropRoleContext) => void; + /** + * Enter a parse tree produced by the `grantRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterGrantRoles?: (ctx: GrantRolesContext) => void; + /** + * Exit a parse tree produced by the `grantRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitGrantRoles?: (ctx: GrantRolesContext) => void; + /** + * Enter a parse tree produced by the `revokeRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRevokeRoles?: (ctx: RevokeRolesContext) => void; + /** + * Exit a parse tree produced by the `revokeRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRevokeRoles?: (ctx: RevokeRolesContext) => void; + /** + * Enter a parse tree produced by the `setRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetRole?: (ctx: SetRoleContext) => void; + /** + * Exit a parse tree produced by the `setRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetRole?: (ctx: SetRoleContext) => void; + /** + * Enter a parse tree produced by the `grant` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterGrant?: (ctx: GrantContext) => void; + /** + * Exit a parse tree produced by the `grant` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitGrant?: (ctx: GrantContext) => void; + /** + * Enter a parse tree produced by the `deny` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDeny?: (ctx: DenyContext) => void; + /** + * Exit a parse tree produced by the `deny` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDeny?: (ctx: DenyContext) => void; + /** + * Enter a parse tree produced by the `revoke` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRevoke?: (ctx: RevokeContext) => void; + /** + * Exit a parse tree produced by the `revoke` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRevoke?: (ctx: RevokeContext) => void; + /** + * Enter a parse tree produced by the `showGrants` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowGrants?: (ctx: ShowGrantsContext) => void; + /** + * Exit a parse tree produced by the `showGrants` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowGrants?: (ctx: ShowGrantsContext) => void; + /** + * Enter a parse tree produced by the `explain` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterExplain?: (ctx: ExplainContext) => void; + /** + * Exit a parse tree produced by the `explain` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitExplain?: (ctx: ExplainContext) => void; + /** + * Enter a parse tree produced by the `showCreateTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowCreateTable?: (ctx: ShowCreateTableContext) => void; + /** + * Exit a parse tree produced by the `showCreateTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowCreateTable?: (ctx: ShowCreateTableContext) => void; + /** + * Enter a parse tree produced by the `showCreateSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowCreateSchema?: (ctx: ShowCreateSchemaContext) => void; + /** + * Exit a parse tree produced by the `showCreateSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowCreateSchema?: (ctx: ShowCreateSchemaContext) => void; + /** + * Enter a parse tree produced by the `showCreateView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowCreateView?: (ctx: ShowCreateViewContext) => void; + /** + * Exit a parse tree produced by the `showCreateView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowCreateView?: (ctx: ShowCreateViewContext) => void; + /** + * Enter a parse tree produced by the `showCreateMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowCreateMaterializedView?: (ctx: ShowCreateMaterializedViewContext) => void; + /** + * Exit a parse tree produced by the `showCreateMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowCreateMaterializedView?: (ctx: ShowCreateMaterializedViewContext) => void; + /** + * Enter a parse tree produced by the `showTables` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowTables?: (ctx: ShowTablesContext) => void; + /** + * Exit a parse tree produced by the `showTables` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowTables?: (ctx: ShowTablesContext) => void; + /** + * Enter a parse tree produced by the `showSchemas` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowSchemas?: (ctx: ShowSchemasContext) => void; + /** + * Exit a parse tree produced by the `showSchemas` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowSchemas?: (ctx: ShowSchemasContext) => void; + /** + * Enter a parse tree produced by the `showCatalogs` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowCatalogs?: (ctx: ShowCatalogsContext) => void; + /** + * Exit a parse tree produced by the `showCatalogs` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowCatalogs?: (ctx: ShowCatalogsContext) => void; + /** + * Enter a parse tree produced by the `showColumns` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowColumns?: (ctx: ShowColumnsContext) => void; + /** + * Exit a parse tree produced by the `showColumns` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowColumns?: (ctx: ShowColumnsContext) => void; + /** + * Enter a parse tree produced by the `showStats` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowStats?: (ctx: ShowStatsContext) => void; + /** + * Exit a parse tree produced by the `showStats` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowStats?: (ctx: ShowStatsContext) => void; + /** + * Enter a parse tree produced by the `showStatsForQuery` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowStatsForQuery?: (ctx: ShowStatsForQueryContext) => void; + /** + * Exit a parse tree produced by the `showStatsForQuery` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowStatsForQuery?: (ctx: ShowStatsForQueryContext) => void; + /** + * Enter a parse tree produced by the `showRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowRoles?: (ctx: ShowRolesContext) => void; + /** + * Exit a parse tree produced by the `showRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowRoles?: (ctx: ShowRolesContext) => void; + /** + * Enter a parse tree produced by the `showRoleGrants` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowRoleGrants?: (ctx: ShowRoleGrantsContext) => void; + /** + * Exit a parse tree produced by the `showRoleGrants` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowRoleGrants?: (ctx: ShowRoleGrantsContext) => void; + /** + * Enter a parse tree produced by the `showFunctions` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowFunctions?: (ctx: ShowFunctionsContext) => void; + /** + * Exit a parse tree produced by the `showFunctions` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowFunctions?: (ctx: ShowFunctionsContext) => void; + /** + * Enter a parse tree produced by the `showSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowSession?: (ctx: ShowSessionContext) => void; + /** + * Exit a parse tree produced by the `showSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowSession?: (ctx: ShowSessionContext) => void; + /** + * Enter a parse tree produced by the `setSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetSession?: (ctx: SetSessionContext) => void; + /** + * Exit a parse tree produced by the `setSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetSession?: (ctx: SetSessionContext) => void; + /** + * Enter a parse tree produced by the `resetSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterResetSession?: (ctx: ResetSessionContext) => void; + /** + * Exit a parse tree produced by the `resetSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitResetSession?: (ctx: ResetSessionContext) => void; + /** + * Enter a parse tree produced by the `startTransaction` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterStartTransaction?: (ctx: StartTransactionContext) => void; + /** + * Exit a parse tree produced by the `startTransaction` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitStartTransaction?: (ctx: StartTransactionContext) => void; + /** + * Enter a parse tree produced by the `commit` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterCommit?: (ctx: CommitContext) => void; + /** + * Exit a parse tree produced by the `commit` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitCommit?: (ctx: CommitContext) => void; + /** + * Enter a parse tree produced by the `rollback` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterRollback?: (ctx: RollbackContext) => void; + /** + * Exit a parse tree produced by the `rollback` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitRollback?: (ctx: RollbackContext) => void; + /** + * Enter a parse tree produced by the `prepare` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterPrepare?: (ctx: PrepareContext) => void; + /** + * Exit a parse tree produced by the `prepare` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitPrepare?: (ctx: PrepareContext) => void; + /** + * Enter a parse tree produced by the `deallocate` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDeallocate?: (ctx: DeallocateContext) => void; + /** + * Exit a parse tree produced by the `deallocate` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDeallocate?: (ctx: DeallocateContext) => void; + /** + * Enter a parse tree produced by the `execute` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterExecute?: (ctx: ExecuteContext) => void; + /** + * Exit a parse tree produced by the `execute` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitExecute?: (ctx: ExecuteContext) => void; + /** + * Enter a parse tree produced by the `describeInput` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDescribeInput?: (ctx: DescribeInputContext) => void; + /** + * Exit a parse tree produced by the `describeInput` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDescribeInput?: (ctx: DescribeInputContext) => void; + /** + * Enter a parse tree produced by the `describeOutput` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterDescribeOutput?: (ctx: DescribeOutputContext) => void; + /** + * Exit a parse tree produced by the `describeOutput` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitDescribeOutput?: (ctx: DescribeOutputContext) => void; + /** + * Enter a parse tree produced by the `setPath` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetPath?: (ctx: SetPathContext) => void; + /** + * Exit a parse tree produced by the `setPath` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetPath?: (ctx: SetPathContext) => void; + /** + * Enter a parse tree produced by the `setTimeZone` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterSetTimeZone?: (ctx: SetTimeZoneContext) => void; + /** + * Exit a parse tree produced by the `setTimeZone` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitSetTimeZone?: (ctx: SetTimeZoneContext) => void; + /** + * Enter a parse tree produced by the `update` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterUpdate?: (ctx: UpdateContext) => void; + /** + * Exit a parse tree produced by the `update` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitUpdate?: (ctx: UpdateContext) => void; + /** + * Enter a parse tree produced by the `merge` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterMerge?: (ctx: MergeContext) => void; + /** + * Exit a parse tree produced by the `merge` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitMerge?: (ctx: MergeContext) => void; + /** + * Enter a parse tree produced by the `showTableComment` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowTableComment?: (ctx: ShowTableCommentContext) => void; + /** + * Exit a parse tree produced by the `showTableComment` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowTableComment?: (ctx: ShowTableCommentContext) => void; + /** + * Enter a parse tree produced by the `showColumnComment` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + enterShowColumnComment?: (ctx: ShowColumnCommentContext) => void; + /** + * Exit a parse tree produced by the `showColumnComment` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + */ + exitShowColumnComment?: (ctx: ShowColumnCommentContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.query`. + * @param ctx the parse tree + */ + enterQuery?: (ctx: QueryContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.query`. + * @param ctx the parse tree + */ + exitQuery?: (ctx: QueryContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.with`. + * @param ctx the parse tree + */ + enterWith?: (ctx: WithContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.with`. + * @param ctx the parse tree + */ + exitWith?: (ctx: WithContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.tableElement`. + * @param ctx the parse tree + */ + enterTableElement?: (ctx: TableElementContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.tableElement`. + * @param ctx the parse tree + */ + exitTableElement?: (ctx: TableElementContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.columnDefinition`. + * @param ctx the parse tree + */ + enterColumnDefinition?: (ctx: ColumnDefinitionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.columnDefinition`. + * @param ctx the parse tree + */ + exitColumnDefinition?: (ctx: ColumnDefinitionContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.likeClause`. + * @param ctx the parse tree + */ + enterLikeClause?: (ctx: LikeClauseContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.likeClause`. + * @param ctx the parse tree + */ + exitLikeClause?: (ctx: LikeClauseContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.properties`. + * @param ctx the parse tree + */ + enterProperties?: (ctx: PropertiesContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.properties`. + * @param ctx the parse tree + */ + exitProperties?: (ctx: PropertiesContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.propertyAssignments`. + * @param ctx the parse tree + */ + enterPropertyAssignments?: (ctx: PropertyAssignmentsContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.propertyAssignments`. + * @param ctx the parse tree + */ + exitPropertyAssignments?: (ctx: PropertyAssignmentsContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.property`. + * @param ctx the parse tree + */ + enterProperty?: (ctx: PropertyContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.property`. + * @param ctx the parse tree + */ + exitProperty?: (ctx: PropertyContext) => void; + /** + * Enter a parse tree produced by the `defaultPropertyValue` + * labeled alternative in `trinoSqlParserParser.propertyValue`. + * @param ctx the parse tree + */ + enterDefaultPropertyValue?: (ctx: DefaultPropertyValueContext) => void; + /** + * Exit a parse tree produced by the `defaultPropertyValue` + * labeled alternative in `trinoSqlParserParser.propertyValue`. + * @param ctx the parse tree + */ + exitDefaultPropertyValue?: (ctx: DefaultPropertyValueContext) => void; + /** + * Enter a parse tree produced by the `nonDefaultPropertyValue` + * labeled alternative in `trinoSqlParserParser.propertyValue`. + * @param ctx the parse tree + */ + enterNonDefaultPropertyValue?: (ctx: NonDefaultPropertyValueContext) => void; + /** + * Exit a parse tree produced by the `nonDefaultPropertyValue` + * labeled alternative in `trinoSqlParserParser.propertyValue`. + * @param ctx the parse tree + */ + exitNonDefaultPropertyValue?: (ctx: NonDefaultPropertyValueContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.queryNoWith`. + * @param ctx the parse tree + */ + enterQueryNoWith?: (ctx: QueryNoWithContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.queryNoWith`. + * @param ctx the parse tree + */ + exitQueryNoWith?: (ctx: QueryNoWithContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.limitRowCount`. + * @param ctx the parse tree + */ + enterLimitRowCount?: (ctx: LimitRowCountContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.limitRowCount`. + * @param ctx the parse tree + */ + exitLimitRowCount?: (ctx: LimitRowCountContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.rowCount`. + * @param ctx the parse tree + */ + enterRowCount?: (ctx: RowCountContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.rowCount`. + * @param ctx the parse tree + */ + exitRowCount?: (ctx: RowCountContext) => void; + /** + * Enter a parse tree produced by the `queryTermDefault` + * labeled alternative in `trinoSqlParserParser.queryTerm`. + * @param ctx the parse tree + */ + enterQueryTermDefault?: (ctx: QueryTermDefaultContext) => void; + /** + * Exit a parse tree produced by the `queryTermDefault` + * labeled alternative in `trinoSqlParserParser.queryTerm`. + * @param ctx the parse tree + */ + exitQueryTermDefault?: (ctx: QueryTermDefaultContext) => void; + /** + * Enter a parse tree produced by the `setOperation` + * labeled alternative in `trinoSqlParserParser.queryTerm`. + * @param ctx the parse tree + */ + enterSetOperation?: (ctx: SetOperationContext) => void; + /** + * Exit a parse tree produced by the `setOperation` + * labeled alternative in `trinoSqlParserParser.queryTerm`. + * @param ctx the parse tree + */ + exitSetOperation?: (ctx: SetOperationContext) => void; + /** + * Enter a parse tree produced by the `queryPrimaryDefault` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + enterQueryPrimaryDefault?: (ctx: QueryPrimaryDefaultContext) => void; + /** + * Exit a parse tree produced by the `queryPrimaryDefault` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + exitQueryPrimaryDefault?: (ctx: QueryPrimaryDefaultContext) => void; + /** + * Enter a parse tree produced by the `table` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + enterTable?: (ctx: TableContext) => void; + /** + * Exit a parse tree produced by the `table` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + exitTable?: (ctx: TableContext) => void; + /** + * Enter a parse tree produced by the `inlineTable` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + enterInlineTable?: (ctx: InlineTableContext) => void; + /** + * Exit a parse tree produced by the `inlineTable` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + exitInlineTable?: (ctx: InlineTableContext) => void; + /** + * Enter a parse tree produced by the `subquery` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + enterSubquery?: (ctx: SubqueryContext) => void; + /** + * Exit a parse tree produced by the `subquery` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + */ + exitSubquery?: (ctx: SubqueryContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.sortItem`. + * @param ctx the parse tree + */ + enterSortItem?: (ctx: SortItemContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.sortItem`. + * @param ctx the parse tree + */ + exitSortItem?: (ctx: SortItemContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.querySpecification`. + * @param ctx the parse tree + */ + enterQuerySpecification?: (ctx: QuerySpecificationContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.querySpecification`. + * @param ctx the parse tree + */ + exitQuerySpecification?: (ctx: QuerySpecificationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.groupBy`. + * @param ctx the parse tree + */ + enterGroupBy?: (ctx: GroupByContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.groupBy`. + * @param ctx the parse tree + */ + exitGroupBy?: (ctx: GroupByContext) => void; + /** + * Enter a parse tree produced by the `singleGroupingSet` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + enterSingleGroupingSet?: (ctx: SingleGroupingSetContext) => void; + /** + * Exit a parse tree produced by the `singleGroupingSet` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + exitSingleGroupingSet?: (ctx: SingleGroupingSetContext) => void; + /** + * Enter a parse tree produced by the `rollup` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + enterRollup?: (ctx: RollupContext) => void; + /** + * Exit a parse tree produced by the `rollup` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + exitRollup?: (ctx: RollupContext) => void; + /** + * Enter a parse tree produced by the `cube` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + enterCube?: (ctx: CubeContext) => void; + /** + * Exit a parse tree produced by the `cube` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + exitCube?: (ctx: CubeContext) => void; + /** + * Enter a parse tree produced by the `multipleGroupingSets` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + enterMultipleGroupingSets?: (ctx: MultipleGroupingSetsContext) => void; + /** + * Exit a parse tree produced by the `multipleGroupingSets` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + */ + exitMultipleGroupingSets?: (ctx: MultipleGroupingSetsContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.groupingSet`. + * @param ctx the parse tree + */ + enterGroupingSet?: (ctx: GroupingSetContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.groupingSet`. + * @param ctx the parse tree + */ + exitGroupingSet?: (ctx: GroupingSetContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.windowDefinition`. + * @param ctx the parse tree + */ + enterWindowDefinition?: (ctx: WindowDefinitionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.windowDefinition`. + * @param ctx the parse tree + */ + exitWindowDefinition?: (ctx: WindowDefinitionContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.windowSpecification`. + * @param ctx the parse tree + */ + enterWindowSpecification?: (ctx: WindowSpecificationContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.windowSpecification`. + * @param ctx the parse tree + */ + exitWindowSpecification?: (ctx: WindowSpecificationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.namedQuery`. + * @param ctx the parse tree + */ + enterNamedQuery?: (ctx: NamedQueryContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.namedQuery`. + * @param ctx the parse tree + */ + exitNamedQuery?: (ctx: NamedQueryContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.setQuantifier`. + * @param ctx the parse tree + */ + enterSetQuantifier?: (ctx: SetQuantifierContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.setQuantifier`. + * @param ctx the parse tree + */ + exitSetQuantifier?: (ctx: SetQuantifierContext) => void; + /** + * Enter a parse tree produced by the `selectSingle` + * labeled alternative in `trinoSqlParserParser.selectItem`. + * @param ctx the parse tree + */ + enterSelectSingle?: (ctx: SelectSingleContext) => void; + /** + * Exit a parse tree produced by the `selectSingle` + * labeled alternative in `trinoSqlParserParser.selectItem`. + * @param ctx the parse tree + */ + exitSelectSingle?: (ctx: SelectSingleContext) => void; + /** + * Enter a parse tree produced by the `selectAll` + * labeled alternative in `trinoSqlParserParser.selectItem`. + * @param ctx the parse tree + */ + enterSelectAll?: (ctx: SelectAllContext) => void; + /** + * Exit a parse tree produced by the `selectAll` + * labeled alternative in `trinoSqlParserParser.selectItem`. + * @param ctx the parse tree + */ + exitSelectAll?: (ctx: SelectAllContext) => void; + /** + * Enter a parse tree produced by the `relationDefault` + * labeled alternative in `trinoSqlParserParser.relation`. + * @param ctx the parse tree + */ + enterRelationDefault?: (ctx: RelationDefaultContext) => void; + /** + * Exit a parse tree produced by the `relationDefault` + * labeled alternative in `trinoSqlParserParser.relation`. + * @param ctx the parse tree + */ + exitRelationDefault?: (ctx: RelationDefaultContext) => void; + /** + * Enter a parse tree produced by the `joinRelation` + * labeled alternative in `trinoSqlParserParser.relation`. + * @param ctx the parse tree + */ + enterJoinRelation?: (ctx: JoinRelationContext) => void; + /** + * Exit a parse tree produced by the `joinRelation` + * labeled alternative in `trinoSqlParserParser.relation`. + * @param ctx the parse tree + */ + exitJoinRelation?: (ctx: JoinRelationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.joinType`. + * @param ctx the parse tree + */ + enterJoinType?: (ctx: JoinTypeContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.joinType`. + * @param ctx the parse tree + */ + exitJoinType?: (ctx: JoinTypeContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.joinCriteria`. + * @param ctx the parse tree + */ + enterJoinCriteria?: (ctx: JoinCriteriaContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.joinCriteria`. + * @param ctx the parse tree + */ + exitJoinCriteria?: (ctx: JoinCriteriaContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.sampledRelation`. + * @param ctx the parse tree + */ + enterSampledRelation?: (ctx: SampledRelationContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.sampledRelation`. + * @param ctx the parse tree + */ + exitSampledRelation?: (ctx: SampledRelationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.sampleType`. + * @param ctx the parse tree + */ + enterSampleType?: (ctx: SampleTypeContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.sampleType`. + * @param ctx the parse tree + */ + exitSampleType?: (ctx: SampleTypeContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.patternRecognition`. + * @param ctx the parse tree + */ + enterPatternRecognition?: (ctx: PatternRecognitionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.patternRecognition`. + * @param ctx the parse tree + */ + exitPatternRecognition?: (ctx: PatternRecognitionContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.measureDefinition`. + * @param ctx the parse tree + */ + enterMeasureDefinition?: (ctx: MeasureDefinitionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.measureDefinition`. + * @param ctx the parse tree + */ + exitMeasureDefinition?: (ctx: MeasureDefinitionContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.rowsPerMatch`. + * @param ctx the parse tree + */ + enterRowsPerMatch?: (ctx: RowsPerMatchContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.rowsPerMatch`. + * @param ctx the parse tree + */ + exitRowsPerMatch?: (ctx: RowsPerMatchContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.emptyMatchHandling`. + * @param ctx the parse tree + */ + enterEmptyMatchHandling?: (ctx: EmptyMatchHandlingContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.emptyMatchHandling`. + * @param ctx the parse tree + */ + exitEmptyMatchHandling?: (ctx: EmptyMatchHandlingContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.skipTo`. + * @param ctx the parse tree + */ + enterSkipTo?: (ctx: SkipToContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.skipTo`. + * @param ctx the parse tree + */ + exitSkipTo?: (ctx: SkipToContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.subsetDefinition`. + * @param ctx the parse tree + */ + enterSubsetDefinition?: (ctx: SubsetDefinitionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.subsetDefinition`. + * @param ctx the parse tree + */ + exitSubsetDefinition?: (ctx: SubsetDefinitionContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.variableDefinition`. + * @param ctx the parse tree + */ + enterVariableDefinition?: (ctx: VariableDefinitionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.variableDefinition`. + * @param ctx the parse tree + */ + exitVariableDefinition?: (ctx: VariableDefinitionContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.aliasedRelation`. + * @param ctx the parse tree + */ + enterAliasedRelation?: (ctx: AliasedRelationContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.aliasedRelation`. + * @param ctx the parse tree + */ + exitAliasedRelation?: (ctx: AliasedRelationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.columnAliases`. + * @param ctx the parse tree + */ + enterColumnAliases?: (ctx: ColumnAliasesContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.columnAliases`. + * @param ctx the parse tree + */ + exitColumnAliases?: (ctx: ColumnAliasesContext) => void; + /** + * Enter a parse tree produced by the `tableName` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + enterTableName?: (ctx: TableNameContext) => void; + /** + * Exit a parse tree produced by the `tableName` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + exitTableName?: (ctx: TableNameContext) => void; + /** + * Enter a parse tree produced by the `subqueryRelation` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + enterSubqueryRelation?: (ctx: SubqueryRelationContext) => void; + /** + * Exit a parse tree produced by the `subqueryRelation` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + exitSubqueryRelation?: (ctx: SubqueryRelationContext) => void; + /** + * Enter a parse tree produced by the `unnest` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + enterUnnest?: (ctx: UnnestContext) => void; + /** + * Exit a parse tree produced by the `unnest` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + exitUnnest?: (ctx: UnnestContext) => void; + /** + * Enter a parse tree produced by the `lateral` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + enterLateral?: (ctx: LateralContext) => void; + /** + * Exit a parse tree produced by the `lateral` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + exitLateral?: (ctx: LateralContext) => void; + /** + * Enter a parse tree produced by the `parenthesizedRelation` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + enterParenthesizedRelation?: (ctx: ParenthesizedRelationContext) => void; + /** + * Exit a parse tree produced by the `parenthesizedRelation` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + */ + exitParenthesizedRelation?: (ctx: ParenthesizedRelationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.expression`. + * @param ctx the parse tree + */ + enterExpression?: (ctx: ExpressionContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.expression`. + * @param ctx the parse tree + */ + exitExpression?: (ctx: ExpressionContext) => void; + /** + * Enter a parse tree produced by the `logicalNot` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + */ + enterLogicalNot?: (ctx: LogicalNotContext) => void; + /** + * Exit a parse tree produced by the `logicalNot` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + */ + exitLogicalNot?: (ctx: LogicalNotContext) => void; + /** + * Enter a parse tree produced by the `predicated` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + */ + enterPredicated?: (ctx: PredicatedContext) => void; + /** + * Exit a parse tree produced by the `predicated` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + */ + exitPredicated?: (ctx: PredicatedContext) => void; + /** + * Enter a parse tree produced by the `logicalBinary` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + */ + enterLogicalBinary?: (ctx: LogicalBinaryContext) => void; + /** + * Exit a parse tree produced by the `logicalBinary` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + */ + exitLogicalBinary?: (ctx: LogicalBinaryContext) => void; + /** + * Enter a parse tree produced by the `comparison` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterComparison?: (ctx: ComparisonContext) => void; + /** + * Exit a parse tree produced by the `comparison` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitComparison?: (ctx: ComparisonContext) => void; + /** + * Enter a parse tree produced by the `quantifiedComparison` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterQuantifiedComparison?: (ctx: QuantifiedComparisonContext) => void; + /** + * Exit a parse tree produced by the `quantifiedComparison` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitQuantifiedComparison?: (ctx: QuantifiedComparisonContext) => void; + /** + * Enter a parse tree produced by the `between` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterBetween?: (ctx: BetweenContext) => void; + /** + * Exit a parse tree produced by the `between` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitBetween?: (ctx: BetweenContext) => void; + /** + * Enter a parse tree produced by the `inList` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterInList?: (ctx: InListContext) => void; + /** + * Exit a parse tree produced by the `inList` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitInList?: (ctx: InListContext) => void; + /** + * Enter a parse tree produced by the `inSubquery` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterInSubquery?: (ctx: InSubqueryContext) => void; + /** + * Exit a parse tree produced by the `inSubquery` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitInSubquery?: (ctx: InSubqueryContext) => void; + /** + * Enter a parse tree produced by the `like` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterLike?: (ctx: LikeContext) => void; + /** + * Exit a parse tree produced by the `like` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitLike?: (ctx: LikeContext) => void; + /** + * Enter a parse tree produced by the `nullPredicate` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterNullPredicate?: (ctx: NullPredicateContext) => void; + /** + * Exit a parse tree produced by the `nullPredicate` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitNullPredicate?: (ctx: NullPredicateContext) => void; + /** + * Enter a parse tree produced by the `distinctFrom` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + enterDistinctFrom?: (ctx: DistinctFromContext) => void; + /** + * Exit a parse tree produced by the `distinctFrom` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + */ + exitDistinctFrom?: (ctx: DistinctFromContext) => void; + /** + * Enter a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + enterValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; + /** + * Exit a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + exitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; + /** + * Enter a parse tree produced by the `concatenation` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + enterConcatenation?: (ctx: ConcatenationContext) => void; + /** + * Exit a parse tree produced by the `concatenation` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + exitConcatenation?: (ctx: ConcatenationContext) => void; + /** + * Enter a parse tree produced by the `arithmeticBinary` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + enterArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; + /** + * Exit a parse tree produced by the `arithmeticBinary` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + exitArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; + /** + * Enter a parse tree produced by the `arithmeticUnary` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + enterArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; + /** + * Exit a parse tree produced by the `arithmeticUnary` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + exitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; + /** + * Enter a parse tree produced by the `atTimeZone` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + enterAtTimeZone?: (ctx: AtTimeZoneContext) => void; + /** + * Exit a parse tree produced by the `atTimeZone` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + */ + exitAtTimeZone?: (ctx: AtTimeZoneContext) => void; + /** + * Enter a parse tree produced by the `dereference` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterDereference?: (ctx: DereferenceContext) => void; + /** + * Exit a parse tree produced by the `dereference` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitDereference?: (ctx: DereferenceContext) => void; + /** + * Enter a parse tree produced by the `typeConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterTypeConstructor?: (ctx: TypeConstructorContext) => void; + /** + * Exit a parse tree produced by the `typeConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitTypeConstructor?: (ctx: TypeConstructorContext) => void; + /** + * Enter a parse tree produced by the `specialDateTimeFunction` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterSpecialDateTimeFunction?: (ctx: SpecialDateTimeFunctionContext) => void; + /** + * Exit a parse tree produced by the `specialDateTimeFunction` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitSpecialDateTimeFunction?: (ctx: SpecialDateTimeFunctionContext) => void; + /** + * Enter a parse tree produced by the `substring` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterSubstring?: (ctx: SubstringContext) => void; + /** + * Exit a parse tree produced by the `substring` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitSubstring?: (ctx: SubstringContext) => void; + /** + * Enter a parse tree produced by the `cast` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterCast?: (ctx: CastContext) => void; + /** + * Exit a parse tree produced by the `cast` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitCast?: (ctx: CastContext) => void; + /** + * Enter a parse tree produced by the `lambda` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterLambda?: (ctx: LambdaContext) => void; + /** + * Exit a parse tree produced by the `lambda` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitLambda?: (ctx: LambdaContext) => void; + /** + * Enter a parse tree produced by the `parenthesizedExpression` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => void; + /** + * Exit a parse tree produced by the `parenthesizedExpression` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => void; + /** + * Enter a parse tree produced by the `parameter` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterParameter?: (ctx: ParameterContext) => void; + /** + * Exit a parse tree produced by the `parameter` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitParameter?: (ctx: ParameterContext) => void; + /** + * Enter a parse tree produced by the `normalize` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterNormalize?: (ctx: NormalizeContext) => void; + /** + * Exit a parse tree produced by the `normalize` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitNormalize?: (ctx: NormalizeContext) => void; + /** + * Enter a parse tree produced by the `intervalLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterIntervalLiteral?: (ctx: IntervalLiteralContext) => void; + /** + * Exit a parse tree produced by the `intervalLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitIntervalLiteral?: (ctx: IntervalLiteralContext) => void; + /** + * Enter a parse tree produced by the `numericLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterNumericLiteral?: (ctx: NumericLiteralContext) => void; + /** + * Exit a parse tree produced by the `numericLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitNumericLiteral?: (ctx: NumericLiteralContext) => void; + /** + * Enter a parse tree produced by the `booleanLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterBooleanLiteral?: (ctx: BooleanLiteralContext) => void; + /** + * Exit a parse tree produced by the `booleanLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitBooleanLiteral?: (ctx: BooleanLiteralContext) => void; + /** + * Enter a parse tree produced by the `simpleCase` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterSimpleCase?: (ctx: SimpleCaseContext) => void; + /** + * Exit a parse tree produced by the `simpleCase` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitSimpleCase?: (ctx: SimpleCaseContext) => void; + /** + * Enter a parse tree produced by the `columnReference` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterColumnReference?: (ctx: ColumnReferenceContext) => void; + /** + * Exit a parse tree produced by the `columnReference` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitColumnReference?: (ctx: ColumnReferenceContext) => void; + /** + * Enter a parse tree produced by the `nullLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterNullLiteral?: (ctx: NullLiteralContext) => void; + /** + * Exit a parse tree produced by the `nullLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitNullLiteral?: (ctx: NullLiteralContext) => void; + /** + * Enter a parse tree produced by the `rowConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterRowConstructor?: (ctx: RowConstructorContext) => void; + /** + * Exit a parse tree produced by the `rowConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitRowConstructor?: (ctx: RowConstructorContext) => void; + /** + * Enter a parse tree produced by the `subscript` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterSubscript?: (ctx: SubscriptContext) => void; + /** + * Exit a parse tree produced by the `subscript` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitSubscript?: (ctx: SubscriptContext) => void; + /** + * Enter a parse tree produced by the `currentPath` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterCurrentPath?: (ctx: CurrentPathContext) => void; + /** + * Exit a parse tree produced by the `currentPath` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitCurrentPath?: (ctx: CurrentPathContext) => void; + /** + * Enter a parse tree produced by the `subqueryExpression` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterSubqueryExpression?: (ctx: SubqueryExpressionContext) => void; + /** + * Exit a parse tree produced by the `subqueryExpression` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitSubqueryExpression?: (ctx: SubqueryExpressionContext) => void; + /** + * Enter a parse tree produced by the `binaryLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterBinaryLiteral?: (ctx: BinaryLiteralContext) => void; + /** + * Exit a parse tree produced by the `binaryLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitBinaryLiteral?: (ctx: BinaryLiteralContext) => void; + /** + * Enter a parse tree produced by the `currentUser` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterCurrentUser?: (ctx: CurrentUserContext) => void; + /** + * Exit a parse tree produced by the `currentUser` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitCurrentUser?: (ctx: CurrentUserContext) => void; + /** + * Enter a parse tree produced by the `measure` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterMeasure?: (ctx: MeasureContext) => void; + /** + * Exit a parse tree produced by the `measure` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitMeasure?: (ctx: MeasureContext) => void; + /** + * Enter a parse tree produced by the `extract` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterExtract?: (ctx: ExtractContext) => void; + /** + * Exit a parse tree produced by the `extract` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitExtract?: (ctx: ExtractContext) => void; + /** + * Enter a parse tree produced by the `stringLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterStringLiteral?: (ctx: StringLiteralContext) => void; + /** + * Exit a parse tree produced by the `stringLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitStringLiteral?: (ctx: StringLiteralContext) => void; + /** + * Enter a parse tree produced by the `arrayConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterArrayConstructor?: (ctx: ArrayConstructorContext) => void; + /** + * Exit a parse tree produced by the `arrayConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitArrayConstructor?: (ctx: ArrayConstructorContext) => void; + /** + * Enter a parse tree produced by the `functionCall` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterFunctionCall?: (ctx: FunctionCallContext) => void; + /** + * Exit a parse tree produced by the `functionCall` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitFunctionCall?: (ctx: FunctionCallContext) => void; + /** + * Enter a parse tree produced by the `currentSchema` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterCurrentSchema?: (ctx: CurrentSchemaContext) => void; + /** + * Exit a parse tree produced by the `currentSchema` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitCurrentSchema?: (ctx: CurrentSchemaContext) => void; + /** + * Enter a parse tree produced by the `exists` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterExists?: (ctx: ExistsContext) => void; + /** + * Exit a parse tree produced by the `exists` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitExists?: (ctx: ExistsContext) => void; + /** + * Enter a parse tree produced by the `position` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterPosition?: (ctx: PositionContext) => void; + /** + * Exit a parse tree produced by the `position` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitPosition?: (ctx: PositionContext) => void; + /** + * Enter a parse tree produced by the `searchedCase` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterSearchedCase?: (ctx: SearchedCaseContext) => void; + /** + * Exit a parse tree produced by the `searchedCase` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitSearchedCase?: (ctx: SearchedCaseContext) => void; + /** + * Enter a parse tree produced by the `currentCatalog` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterCurrentCatalog?: (ctx: CurrentCatalogContext) => void; + /** + * Exit a parse tree produced by the `currentCatalog` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitCurrentCatalog?: (ctx: CurrentCatalogContext) => void; + /** + * Enter a parse tree produced by the `groupingOperation` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + enterGroupingOperation?: (ctx: GroupingOperationContext) => void; + /** + * Exit a parse tree produced by the `groupingOperation` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + */ + exitGroupingOperation?: (ctx: GroupingOperationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.processingMode`. + * @param ctx the parse tree + */ + enterProcessingMode?: (ctx: ProcessingModeContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.processingMode`. + * @param ctx the parse tree + */ + exitProcessingMode?: (ctx: ProcessingModeContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.nullTreatment`. + * @param ctx the parse tree + */ + enterNullTreatment?: (ctx: NullTreatmentContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.nullTreatment`. + * @param ctx the parse tree + */ + exitNullTreatment?: (ctx: NullTreatmentContext) => void; + /** + * Enter a parse tree produced by the `basicStringLiteral` + * labeled alternative in `trinoSqlParserParser.string`. + * @param ctx the parse tree + */ + enterBasicStringLiteral?: (ctx: BasicStringLiteralContext) => void; + /** + * Exit a parse tree produced by the `basicStringLiteral` + * labeled alternative in `trinoSqlParserParser.string`. + * @param ctx the parse tree + */ + exitBasicStringLiteral?: (ctx: BasicStringLiteralContext) => void; + /** + * Enter a parse tree produced by the `unicodeStringLiteral` + * labeled alternative in `trinoSqlParserParser.string`. + * @param ctx the parse tree + */ + enterUnicodeStringLiteral?: (ctx: UnicodeStringLiteralContext) => void; + /** + * Exit a parse tree produced by the `unicodeStringLiteral` + * labeled alternative in `trinoSqlParserParser.string`. + * @param ctx the parse tree + */ + exitUnicodeStringLiteral?: (ctx: UnicodeStringLiteralContext) => void; + /** + * Enter a parse tree produced by the `timeZoneInterval` + * labeled alternative in `trinoSqlParserParser.timeZoneSpecifier`. + * @param ctx the parse tree + */ + enterTimeZoneInterval?: (ctx: TimeZoneIntervalContext) => void; + /** + * Exit a parse tree produced by the `timeZoneInterval` + * labeled alternative in `trinoSqlParserParser.timeZoneSpecifier`. + * @param ctx the parse tree + */ + exitTimeZoneInterval?: (ctx: TimeZoneIntervalContext) => void; + /** + * Enter a parse tree produced by the `timeZoneString` + * labeled alternative in `trinoSqlParserParser.timeZoneSpecifier`. + * @param ctx the parse tree + */ + enterTimeZoneString?: (ctx: TimeZoneStringContext) => void; + /** + * Exit a parse tree produced by the `timeZoneString` + * labeled alternative in `trinoSqlParserParser.timeZoneSpecifier`. + * @param ctx the parse tree + */ + exitTimeZoneString?: (ctx: TimeZoneStringContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.comparisonOperator`. + * @param ctx the parse tree + */ + enterComparisonOperator?: (ctx: ComparisonOperatorContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.comparisonOperator`. + * @param ctx the parse tree + */ + exitComparisonOperator?: (ctx: ComparisonOperatorContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.comparisonQuantifier`. + * @param ctx the parse tree + */ + enterComparisonQuantifier?: (ctx: ComparisonQuantifierContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.comparisonQuantifier`. + * @param ctx the parse tree + */ + exitComparisonQuantifier?: (ctx: ComparisonQuantifierContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.booleanValue`. + * @param ctx the parse tree + */ + enterBooleanValue?: (ctx: BooleanValueContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.booleanValue`. + * @param ctx the parse tree + */ + exitBooleanValue?: (ctx: BooleanValueContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.interval`. + * @param ctx the parse tree + */ + enterInterval?: (ctx: IntervalContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.interval`. + * @param ctx the parse tree + */ + exitInterval?: (ctx: IntervalContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.intervalField`. + * @param ctx the parse tree + */ + enterIntervalField?: (ctx: IntervalFieldContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.intervalField`. + * @param ctx the parse tree + */ + exitIntervalField?: (ctx: IntervalFieldContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.normalForm`. + * @param ctx the parse tree + */ + enterNormalForm?: (ctx: NormalFormContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.normalForm`. + * @param ctx the parse tree + */ + exitNormalForm?: (ctx: NormalFormContext) => void; + /** + * Enter a parse tree produced by the `rowType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterRowType?: (ctx: RowTypeContext) => void; + /** + * Exit a parse tree produced by the `rowType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitRowType?: (ctx: RowTypeContext) => void; + /** + * Enter a parse tree produced by the `intervalType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterIntervalType?: (ctx: IntervalTypeContext) => void; + /** + * Exit a parse tree produced by the `intervalType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitIntervalType?: (ctx: IntervalTypeContext) => void; + /** + * Enter a parse tree produced by the `arrayType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterArrayType?: (ctx: ArrayTypeContext) => void; + /** + * Exit a parse tree produced by the `arrayType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitArrayType?: (ctx: ArrayTypeContext) => void; + /** + * Enter a parse tree produced by the `doublePrecisionType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterDoublePrecisionType?: (ctx: DoublePrecisionTypeContext) => void; + /** + * Exit a parse tree produced by the `doublePrecisionType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitDoublePrecisionType?: (ctx: DoublePrecisionTypeContext) => void; + /** + * Enter a parse tree produced by the `legacyArrayType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterLegacyArrayType?: (ctx: LegacyArrayTypeContext) => void; + /** + * Exit a parse tree produced by the `legacyArrayType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitLegacyArrayType?: (ctx: LegacyArrayTypeContext) => void; + /** + * Enter a parse tree produced by the `genericType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterGenericType?: (ctx: GenericTypeContext) => void; + /** + * Exit a parse tree produced by the `genericType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitGenericType?: (ctx: GenericTypeContext) => void; + /** + * Enter a parse tree produced by the `dateTimeType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterDateTimeType?: (ctx: DateTimeTypeContext) => void; + /** + * Exit a parse tree produced by the `dateTimeType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitDateTimeType?: (ctx: DateTimeTypeContext) => void; + /** + * Enter a parse tree produced by the `legacyMapType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + enterLegacyMapType?: (ctx: LegacyMapTypeContext) => void; + /** + * Exit a parse tree produced by the `legacyMapType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + */ + exitLegacyMapType?: (ctx: LegacyMapTypeContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.rowField`. + * @param ctx the parse tree + */ + enterRowField?: (ctx: RowFieldContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.rowField`. + * @param ctx the parse tree + */ + exitRowField?: (ctx: RowFieldContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.typeParameter`. + * @param ctx the parse tree + */ + enterTypeParameter?: (ctx: TypeParameterContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.typeParameter`. + * @param ctx the parse tree + */ + exitTypeParameter?: (ctx: TypeParameterContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.whenClause`. + * @param ctx the parse tree + */ + enterWhenClause?: (ctx: WhenClauseContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.whenClause`. + * @param ctx the parse tree + */ + exitWhenClause?: (ctx: WhenClauseContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.filter`. + * @param ctx the parse tree + */ + enterFilter?: (ctx: FilterContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.filter`. + * @param ctx the parse tree + */ + exitFilter?: (ctx: FilterContext) => void; + /** + * Enter a parse tree produced by the `mergeUpdate` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + */ + enterMergeUpdate?: (ctx: MergeUpdateContext) => void; + /** + * Exit a parse tree produced by the `mergeUpdate` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + */ + exitMergeUpdate?: (ctx: MergeUpdateContext) => void; + /** + * Enter a parse tree produced by the `mergeDelete` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + */ + enterMergeDelete?: (ctx: MergeDeleteContext) => void; + /** + * Exit a parse tree produced by the `mergeDelete` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + */ + exitMergeDelete?: (ctx: MergeDeleteContext) => void; + /** + * Enter a parse tree produced by the `mergeInsert` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + */ + enterMergeInsert?: (ctx: MergeInsertContext) => void; + /** + * Exit a parse tree produced by the `mergeInsert` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + */ + exitMergeInsert?: (ctx: MergeInsertContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.over`. + * @param ctx the parse tree + */ + enterOver?: (ctx: OverContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.over`. + * @param ctx the parse tree + */ + exitOver?: (ctx: OverContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.windowFrame`. + * @param ctx the parse tree + */ + enterWindowFrame?: (ctx: WindowFrameContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.windowFrame`. + * @param ctx the parse tree + */ + exitWindowFrame?: (ctx: WindowFrameContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.frameExtent`. + * @param ctx the parse tree + */ + enterFrameExtent?: (ctx: FrameExtentContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.frameExtent`. + * @param ctx the parse tree + */ + exitFrameExtent?: (ctx: FrameExtentContext) => void; + /** + * Enter a parse tree produced by the `unboundedFrame` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + */ + enterUnboundedFrame?: (ctx: UnboundedFrameContext) => void; + /** + * Exit a parse tree produced by the `unboundedFrame` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + */ + exitUnboundedFrame?: (ctx: UnboundedFrameContext) => void; + /** + * Enter a parse tree produced by the `currentRowBound` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + */ + enterCurrentRowBound?: (ctx: CurrentRowBoundContext) => void; + /** + * Exit a parse tree produced by the `currentRowBound` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + */ + exitCurrentRowBound?: (ctx: CurrentRowBoundContext) => void; + /** + * Enter a parse tree produced by the `boundedFrame` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + */ + enterBoundedFrame?: (ctx: BoundedFrameContext) => void; + /** + * Exit a parse tree produced by the `boundedFrame` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + */ + exitBoundedFrame?: (ctx: BoundedFrameContext) => void; + /** + * Enter a parse tree produced by the `quantifiedPrimary` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + */ + enterQuantifiedPrimary?: (ctx: QuantifiedPrimaryContext) => void; + /** + * Exit a parse tree produced by the `quantifiedPrimary` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + */ + exitQuantifiedPrimary?: (ctx: QuantifiedPrimaryContext) => void; + /** + * Enter a parse tree produced by the `patternConcatenation` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + */ + enterPatternConcatenation?: (ctx: PatternConcatenationContext) => void; + /** + * Exit a parse tree produced by the `patternConcatenation` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + */ + exitPatternConcatenation?: (ctx: PatternConcatenationContext) => void; + /** + * Enter a parse tree produced by the `patternAlternation` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + */ + enterPatternAlternation?: (ctx: PatternAlternationContext) => void; + /** + * Exit a parse tree produced by the `patternAlternation` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + */ + exitPatternAlternation?: (ctx: PatternAlternationContext) => void; + /** + * Enter a parse tree produced by the `patternVariable` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + enterPatternVariable?: (ctx: PatternVariableContext) => void; + /** + * Exit a parse tree produced by the `patternVariable` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + exitPatternVariable?: (ctx: PatternVariableContext) => void; + /** + * Enter a parse tree produced by the `emptyPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + enterEmptyPattern?: (ctx: EmptyPatternContext) => void; + /** + * Exit a parse tree produced by the `emptyPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + exitEmptyPattern?: (ctx: EmptyPatternContext) => void; + /** + * Enter a parse tree produced by the `patternPermutation` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + enterPatternPermutation?: (ctx: PatternPermutationContext) => void; + /** + * Exit a parse tree produced by the `patternPermutation` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + exitPatternPermutation?: (ctx: PatternPermutationContext) => void; + /** + * Enter a parse tree produced by the `groupedPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + enterGroupedPattern?: (ctx: GroupedPatternContext) => void; + /** + * Exit a parse tree produced by the `groupedPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + exitGroupedPattern?: (ctx: GroupedPatternContext) => void; + /** + * Enter a parse tree produced by the `partitionStartAnchor` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + enterPartitionStartAnchor?: (ctx: PartitionStartAnchorContext) => void; + /** + * Exit a parse tree produced by the `partitionStartAnchor` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + exitPartitionStartAnchor?: (ctx: PartitionStartAnchorContext) => void; + /** + * Enter a parse tree produced by the `partitionEndAnchor` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + enterPartitionEndAnchor?: (ctx: PartitionEndAnchorContext) => void; + /** + * Exit a parse tree produced by the `partitionEndAnchor` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + exitPartitionEndAnchor?: (ctx: PartitionEndAnchorContext) => void; + /** + * Enter a parse tree produced by the `excludedPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + enterExcludedPattern?: (ctx: ExcludedPatternContext) => void; + /** + * Exit a parse tree produced by the `excludedPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + */ + exitExcludedPattern?: (ctx: ExcludedPatternContext) => void; + /** + * Enter a parse tree produced by the `zeroOrMoreQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + enterZeroOrMoreQuantifier?: (ctx: ZeroOrMoreQuantifierContext) => void; + /** + * Exit a parse tree produced by the `zeroOrMoreQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + exitZeroOrMoreQuantifier?: (ctx: ZeroOrMoreQuantifierContext) => void; + /** + * Enter a parse tree produced by the `oneOrMoreQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + enterOneOrMoreQuantifier?: (ctx: OneOrMoreQuantifierContext) => void; + /** + * Exit a parse tree produced by the `oneOrMoreQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + exitOneOrMoreQuantifier?: (ctx: OneOrMoreQuantifierContext) => void; + /** + * Enter a parse tree produced by the `zeroOrOneQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + enterZeroOrOneQuantifier?: (ctx: ZeroOrOneQuantifierContext) => void; + /** + * Exit a parse tree produced by the `zeroOrOneQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + exitZeroOrOneQuantifier?: (ctx: ZeroOrOneQuantifierContext) => void; + /** + * Enter a parse tree produced by the `rangeQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + enterRangeQuantifier?: (ctx: RangeQuantifierContext) => void; + /** + * Exit a parse tree produced by the `rangeQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + */ + exitRangeQuantifier?: (ctx: RangeQuantifierContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.updateAssignment`. + * @param ctx the parse tree + */ + enterUpdateAssignment?: (ctx: UpdateAssignmentContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.updateAssignment`. + * @param ctx the parse tree + */ + exitUpdateAssignment?: (ctx: UpdateAssignmentContext) => void; + /** + * Enter a parse tree produced by the `explainFormat` + * labeled alternative in `trinoSqlParserParser.explainOption`. + * @param ctx the parse tree + */ + enterExplainFormat?: (ctx: ExplainFormatContext) => void; + /** + * Exit a parse tree produced by the `explainFormat` + * labeled alternative in `trinoSqlParserParser.explainOption`. + * @param ctx the parse tree + */ + exitExplainFormat?: (ctx: ExplainFormatContext) => void; + /** + * Enter a parse tree produced by the `explainType` + * labeled alternative in `trinoSqlParserParser.explainOption`. + * @param ctx the parse tree + */ + enterExplainType?: (ctx: ExplainTypeContext) => void; + /** + * Exit a parse tree produced by the `explainType` + * labeled alternative in `trinoSqlParserParser.explainOption`. + * @param ctx the parse tree + */ + exitExplainType?: (ctx: ExplainTypeContext) => void; + /** + * Enter a parse tree produced by the `isolationLevel` + * labeled alternative in `trinoSqlParserParser.transactionMode`. + * @param ctx the parse tree + */ + enterIsolationLevel?: (ctx: IsolationLevelContext) => void; + /** + * Exit a parse tree produced by the `isolationLevel` + * labeled alternative in `trinoSqlParserParser.transactionMode`. + * @param ctx the parse tree + */ + exitIsolationLevel?: (ctx: IsolationLevelContext) => void; + /** + * Enter a parse tree produced by the `transactionAccessMode` + * labeled alternative in `trinoSqlParserParser.transactionMode`. + * @param ctx the parse tree + */ + enterTransactionAccessMode?: (ctx: TransactionAccessModeContext) => void; + /** + * Exit a parse tree produced by the `transactionAccessMode` + * labeled alternative in `trinoSqlParserParser.transactionMode`. + * @param ctx the parse tree + */ + exitTransactionAccessMode?: (ctx: TransactionAccessModeContext) => void; + /** + * Enter a parse tree produced by the `readUncommitted` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + enterReadUncommitted?: (ctx: ReadUncommittedContext) => void; + /** + * Exit a parse tree produced by the `readUncommitted` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + exitReadUncommitted?: (ctx: ReadUncommittedContext) => void; + /** + * Enter a parse tree produced by the `readCommitted` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + enterReadCommitted?: (ctx: ReadCommittedContext) => void; + /** + * Exit a parse tree produced by the `readCommitted` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + exitReadCommitted?: (ctx: ReadCommittedContext) => void; + /** + * Enter a parse tree produced by the `repeatableRead` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + enterRepeatableRead?: (ctx: RepeatableReadContext) => void; + /** + * Exit a parse tree produced by the `repeatableRead` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + exitRepeatableRead?: (ctx: RepeatableReadContext) => void; + /** + * Enter a parse tree produced by the `serializable` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + enterSerializable?: (ctx: SerializableContext) => void; + /** + * Exit a parse tree produced by the `serializable` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + */ + exitSerializable?: (ctx: SerializableContext) => void; + /** + * Enter a parse tree produced by the `positionalArgument` + * labeled alternative in `trinoSqlParserParser.callArgument`. + * @param ctx the parse tree + */ + enterPositionalArgument?: (ctx: PositionalArgumentContext) => void; + /** + * Exit a parse tree produced by the `positionalArgument` + * labeled alternative in `trinoSqlParserParser.callArgument`. + * @param ctx the parse tree + */ + exitPositionalArgument?: (ctx: PositionalArgumentContext) => void; + /** + * Enter a parse tree produced by the `namedArgument` + * labeled alternative in `trinoSqlParserParser.callArgument`. + * @param ctx the parse tree + */ + enterNamedArgument?: (ctx: NamedArgumentContext) => void; + /** + * Exit a parse tree produced by the `namedArgument` + * labeled alternative in `trinoSqlParserParser.callArgument`. + * @param ctx the parse tree + */ + exitNamedArgument?: (ctx: NamedArgumentContext) => void; + /** + * Enter a parse tree produced by the `qualifiedArgument` + * labeled alternative in `trinoSqlParserParser.pathElement`. + * @param ctx the parse tree + */ + enterQualifiedArgument?: (ctx: QualifiedArgumentContext) => void; + /** + * Exit a parse tree produced by the `qualifiedArgument` + * labeled alternative in `trinoSqlParserParser.pathElement`. + * @param ctx the parse tree + */ + exitQualifiedArgument?: (ctx: QualifiedArgumentContext) => void; + /** + * Enter a parse tree produced by the `unqualifiedArgument` + * labeled alternative in `trinoSqlParserParser.pathElement`. + * @param ctx the parse tree + */ + enterUnqualifiedArgument?: (ctx: UnqualifiedArgumentContext) => void; + /** + * Exit a parse tree produced by the `unqualifiedArgument` + * labeled alternative in `trinoSqlParserParser.pathElement`. + * @param ctx the parse tree + */ + exitUnqualifiedArgument?: (ctx: UnqualifiedArgumentContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.pathSpecification`. + * @param ctx the parse tree + */ + enterPathSpecification?: (ctx: PathSpecificationContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.pathSpecification`. + * @param ctx the parse tree + */ + exitPathSpecification?: (ctx: PathSpecificationContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.privilege`. + * @param ctx the parse tree + */ + enterPrivilege?: (ctx: PrivilegeContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.privilege`. + * @param ctx the parse tree + */ + exitPrivilege?: (ctx: PrivilegeContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.qualifiedName`. + * @param ctx the parse tree + */ + enterQualifiedName?: (ctx: QualifiedNameContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.qualifiedName`. + * @param ctx the parse tree + */ + exitQualifiedName?: (ctx: QualifiedNameContext) => void; + /** + * Enter a parse tree produced by the `specifiedPrincipal` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + */ + enterSpecifiedPrincipal?: (ctx: SpecifiedPrincipalContext) => void; + /** + * Exit a parse tree produced by the `specifiedPrincipal` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + */ + exitSpecifiedPrincipal?: (ctx: SpecifiedPrincipalContext) => void; + /** + * Enter a parse tree produced by the `currentUserGrantor` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + */ + enterCurrentUserGrantor?: (ctx: CurrentUserGrantorContext) => void; + /** + * Exit a parse tree produced by the `currentUserGrantor` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + */ + exitCurrentUserGrantor?: (ctx: CurrentUserGrantorContext) => void; + /** + * Enter a parse tree produced by the `currentRoleGrantor` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + */ + enterCurrentRoleGrantor?: (ctx: CurrentRoleGrantorContext) => void; + /** + * Exit a parse tree produced by the `currentRoleGrantor` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + */ + exitCurrentRoleGrantor?: (ctx: CurrentRoleGrantorContext) => void; + /** + * Enter a parse tree produced by the `unspecifiedPrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + */ + enterUnspecifiedPrincipal?: (ctx: UnspecifiedPrincipalContext) => void; + /** + * Exit a parse tree produced by the `unspecifiedPrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + */ + exitUnspecifiedPrincipal?: (ctx: UnspecifiedPrincipalContext) => void; + /** + * Enter a parse tree produced by the `userPrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + */ + enterUserPrincipal?: (ctx: UserPrincipalContext) => void; + /** + * Exit a parse tree produced by the `userPrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + */ + exitUserPrincipal?: (ctx: UserPrincipalContext) => void; + /** + * Enter a parse tree produced by the `rolePrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + */ + enterRolePrincipal?: (ctx: RolePrincipalContext) => void; + /** + * Exit a parse tree produced by the `rolePrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + */ + exitRolePrincipal?: (ctx: RolePrincipalContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.roles`. + * @param ctx the parse tree + */ + enterRoles?: (ctx: RolesContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.roles`. + * @param ctx the parse tree + */ + exitRoles?: (ctx: RolesContext) => void; + /** + * Enter a parse tree produced by the `unquotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + enterUnquotedIdentifier?: (ctx: UnquotedIdentifierContext) => void; + /** + * Exit a parse tree produced by the `unquotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + exitUnquotedIdentifier?: (ctx: UnquotedIdentifierContext) => void; + /** + * Enter a parse tree produced by the `quotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + enterQuotedIdentifier?: (ctx: QuotedIdentifierContext) => void; + /** + * Exit a parse tree produced by the `quotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + exitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => void; + /** + * Enter a parse tree produced by the `backQuotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + enterBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => void; + /** + * Exit a parse tree produced by the `backQuotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + exitBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => void; + /** + * Enter a parse tree produced by the `digitIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + enterDigitIdentifier?: (ctx: DigitIdentifierContext) => void; + /** + * Exit a parse tree produced by the `digitIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + */ + exitDigitIdentifier?: (ctx: DigitIdentifierContext) => void; + /** + * Enter a parse tree produced by the `decimalLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + */ + enterDecimalLiteral?: (ctx: DecimalLiteralContext) => void; + /** + * Exit a parse tree produced by the `decimalLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + */ + exitDecimalLiteral?: (ctx: DecimalLiteralContext) => void; + /** + * Enter a parse tree produced by the `doubleLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + */ + enterDoubleLiteral?: (ctx: DoubleLiteralContext) => void; + /** + * Exit a parse tree produced by the `doubleLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + */ + exitDoubleLiteral?: (ctx: DoubleLiteralContext) => void; + /** + * Enter a parse tree produced by the `integerLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + */ + enterIntegerLiteral?: (ctx: IntegerLiteralContext) => void; + /** + * Exit a parse tree produced by the `integerLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + */ + exitIntegerLiteral?: (ctx: IntegerLiteralContext) => void; + /** + * Enter a parse tree produced by `trinoSqlParserParser.nonReserved`. + * @param ctx the parse tree + */ + enterNonReserved?: (ctx: NonReservedContext) => void; + /** + * Exit a parse tree produced by `trinoSqlParserParser.nonReserved`. + * @param ctx the parse tree + */ + exitNonReserved?: (ctx: NonReservedContext) => void; +} + diff --git a/src/lib/trinosql/trinoSqlParserParser.ts b/src/lib/trinosql/trinoSqlParserParser.ts new file mode 100644 index 0000000..c2451ff --- /dev/null +++ b/src/lib/trinosql/trinoSqlParserParser.ts @@ -0,0 +1,23211 @@ +// Generated from /Users/zhenglin/Documents/parser/dt-sql-parser/src/grammar/trinosql/trinoSqlParser.g4 by ANTLR 4.12.0 +// noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols + +import { + ATN, + ATNDeserializer, DecisionState, DFA, FailedPredicateException, + RecognitionException, NoViableAltException, BailErrorStrategy, + Parser, ParserATNSimulator, + RuleContext, ParserRuleContext, PredictionMode, PredictionContextCache, + TerminalNode, RuleNode, + Token, TokenStream, + Interval, IntervalSet +} from 'antlr4'; +import trinoSqlParserListener from "./trinoSqlParserListener.js"; +import trinoSqlParserVisitor from "./trinoSqlParserVisitor.js"; + +// for running tests with parameters, TODO: discuss strategy for typed parameters in CI +// eslint-disable-next-line no-unused-vars +type int = number; + +export default class trinoSqlParserParser extends Parser { + public static readonly T__0 = 1; + public static readonly T__1 = 2; + public static readonly T__2 = 3; + public static readonly T__3 = 4; + public static readonly T__4 = 5; + public static readonly T__5 = 6; + public static readonly T__6 = 7; + public static readonly T__7 = 8; + public static readonly T__8 = 9; + public static readonly T__9 = 10; + public static readonly T__10 = 11; + public static readonly T__11 = 12; + public static readonly T__12 = 13; + public static readonly T__13 = 14; + public static readonly T__14 = 15; + public static readonly T__15 = 16; + public static readonly ADD = 17; + public static readonly ADMIN = 18; + public static readonly AFTER = 19; + public static readonly ALL = 20; + public static readonly ALTER = 21; + public static readonly ANALYZE = 22; + public static readonly AND = 23; + public static readonly ANY = 24; + public static readonly ARRAY = 25; + public static readonly AS = 26; + public static readonly ASC = 27; + public static readonly AT = 28; + public static readonly AUTHORIZATION = 29; + public static readonly BERNOULLI = 30; + public static readonly BETWEEN = 31; + public static readonly BY = 32; + public static readonly CALL = 33; + public static readonly CASCADE = 34; + public static readonly CASE = 35; + public static readonly CAST = 36; + public static readonly CATALOGS = 37; + public static readonly COLUMN = 38; + public static readonly COLUMNS = 39; + public static readonly COMMENT = 40; + public static readonly COMMIT = 41; + public static readonly COMMITTED = 42; + public static readonly CONSTRAINT = 43; + public static readonly CREATE = 44; + public static readonly CROSS = 45; + public static readonly CUBE = 46; + public static readonly CURRENT = 47; + public static readonly CURRENT_CATALOG = 48; + public static readonly CURRENT_DATE = 49; + public static readonly CURRENT_PATH = 50; + public static readonly CURRENT_ROLE = 51; + public static readonly CURRENT_SCHEMA = 52; + public static readonly CURRENT_TIME = 53; + public static readonly CURRENT_TIMESTAMP = 54; + public static readonly CURRENT_USER = 55; + public static readonly DATA = 56; + public static readonly DATE = 57; + public static readonly DAY = 58; + public static readonly DEFAULT = 59; + public static readonly DEALLOCATE = 60; + public static readonly DEFINER = 61; + public static readonly DELETE = 62; + public static readonly DESC = 63; + public static readonly DESCRIBE = 64; + public static readonly DEFINE = 65; + public static readonly DISTINCT = 66; + public static readonly DISTRIBUTED = 67; + public static readonly DOUBLE = 68; + public static readonly DROP = 69; + public static readonly ELSE = 70; + public static readonly EMPTY = 71; + public static readonly END = 72; + public static readonly ESCAPE = 73; + public static readonly EXCEPT = 74; + public static readonly EXCLUDING = 75; + public static readonly EXECUTE = 76; + public static readonly EXISTS = 77; + public static readonly EXPLAIN = 78; + public static readonly EXTRACT = 79; + public static readonly FALSE = 80; + public static readonly FETCH = 81; + public static readonly FILTER = 82; + public static readonly FINAL = 83; + public static readonly FIRST = 84; + public static readonly FOLLOWING = 85; + public static readonly FOR = 86; + public static readonly FORMAT = 87; + public static readonly FROM = 88; + public static readonly FULL = 89; + public static readonly FUNCTIONS = 90; + public static readonly GRANT = 91; + public static readonly GRANTED = 92; + public static readonly GRANTS = 93; + public static readonly DENY = 94; + public static readonly GRAPHVIZ = 95; + public static readonly GROUP = 96; + public static readonly GROUPING = 97; + public static readonly GROUPS = 98; + public static readonly HAVING = 99; + public static readonly HOUR = 100; + public static readonly IF = 101; + public static readonly IGNORE = 102; + public static readonly IN = 103; + public static readonly INCLUDING = 104; + public static readonly INITIAL = 105; + public static readonly INNER = 106; + public static readonly INPUT = 107; + public static readonly INSERT = 108; + public static readonly INTERSECT = 109; + public static readonly INTERVAL = 110; + public static readonly INTO = 111; + public static readonly INVOKER = 112; + public static readonly IO = 113; + public static readonly IS = 114; + public static readonly ISOLATION = 115; + public static readonly JOIN = 116; + public static readonly JSON = 117; + public static readonly LAST = 118; + public static readonly LATERAL = 119; + public static readonly LEFT = 120; + public static readonly LEVEL = 121; + public static readonly LIKE = 122; + public static readonly LIMIT = 123; + public static readonly LOCAL = 124; + public static readonly LOCALTIME = 125; + public static readonly LOCALTIMESTAMP = 126; + public static readonly LOGICAL = 127; + public static readonly MAP = 128; + public static readonly MATCH = 129; + public static readonly MATCHED = 130; + public static readonly MATCHES = 131; + public static readonly MATCH_RECOGNIZE = 132; + public static readonly MATERIALIZED = 133; + public static readonly MEASURES = 134; + public static readonly MERGE = 135; + public static readonly MINUTE = 136; + public static readonly MONTH = 137; + public static readonly NATURAL = 138; + public static readonly NEXT = 139; + public static readonly NFC = 140; + public static readonly NFD = 141; + public static readonly NFKC = 142; + public static readonly NFKD = 143; + public static readonly NO = 144; + public static readonly NONE = 145; + public static readonly NORMALIZE = 146; + public static readonly NOT = 147; + public static readonly NULL = 148; + public static readonly NULLIF = 149; + public static readonly NULLS = 150; + public static readonly OFFSET = 151; + public static readonly OMIT = 152; + public static readonly ON = 153; + public static readonly ONE = 154; + public static readonly ONLY = 155; + public static readonly OPTION = 156; + public static readonly OR = 157; + public static readonly ORDER = 158; + public static readonly ORDINALITY = 159; + public static readonly OUTER = 160; + public static readonly OUTPUT = 161; + public static readonly OVER = 162; + public static readonly PARTITION = 163; + public static readonly PARTITIONS = 164; + public static readonly PAST = 165; + public static readonly PATH = 166; + public static readonly PATTERN = 167; + public static readonly PER = 168; + public static readonly PERMUTE = 169; + public static readonly POSITION = 170; + public static readonly PRECEDING = 171; + public static readonly PRECISION = 172; + public static readonly PREPARE = 173; + public static readonly PRIVILEGES = 174; + public static readonly PROPERTIES = 175; + public static readonly RANGE = 176; + public static readonly READ = 177; + public static readonly RECURSIVE = 178; + public static readonly REFRESH = 179; + public static readonly RENAME = 180; + public static readonly REPEATABLE = 181; + public static readonly REPLACE = 182; + public static readonly RESET = 183; + public static readonly RESPECT = 184; + public static readonly RESTRICT = 185; + public static readonly REVOKE = 186; + public static readonly RIGHT = 187; + public static readonly ROLE = 188; + public static readonly ROLES = 189; + public static readonly ROLLBACK = 190; + public static readonly ROLLUP = 191; + public static readonly ROW = 192; + public static readonly ROWS = 193; + public static readonly RUNNING = 194; + public static readonly SCHEMA = 195; + public static readonly SCHEMAS = 196; + public static readonly SECOND = 197; + public static readonly SECURITY = 198; + public static readonly SEEK = 199; + public static readonly SELECT = 200; + public static readonly SERIALIZABLE = 201; + public static readonly SESSION = 202; + public static readonly SET = 203; + public static readonly SETS = 204; + public static readonly SHOW = 205; + public static readonly SOME = 206; + public static readonly START = 207; + public static readonly STATS = 208; + public static readonly SUBSET = 209; + public static readonly SUBSTRING = 210; + public static readonly SYSTEM = 211; + public static readonly TABLE = 212; + public static readonly TABLES = 213; + public static readonly TABLESAMPLE = 214; + public static readonly TEXT = 215; + public static readonly THEN = 216; + public static readonly TIES = 217; + public static readonly TIME = 218; + public static readonly TIMESTAMP = 219; + public static readonly TO = 220; + public static readonly TRANSACTION = 221; + public static readonly TRUNCATE = 222; + public static readonly TRUE = 223; + public static readonly TRY_CAST = 224; + public static readonly TYPE = 225; + public static readonly UESCAPE = 226; + public static readonly UNBOUNDED = 227; + public static readonly UNCOMMITTED = 228; + public static readonly UNION = 229; + public static readonly UNMATCHED = 230; + public static readonly UNNEST = 231; + public static readonly UPDATE = 232; + public static readonly USE = 233; + public static readonly USER = 234; + public static readonly USING = 235; + public static readonly VALIDATE = 236; + public static readonly VALUES = 237; + public static readonly VERBOSE = 238; + public static readonly VIEW = 239; + public static readonly WHEN = 240; + public static readonly WHERE = 241; + public static readonly WINDOW = 242; + public static readonly WITH = 243; + public static readonly WITHOUT = 244; + public static readonly WORK = 245; + public static readonly WRITE = 246; + public static readonly YEAR = 247; + public static readonly ZONE = 248; + public static readonly EQ = 249; + public static readonly NEQ = 250; + public static readonly LT = 251; + public static readonly LTE = 252; + public static readonly GT = 253; + public static readonly GTE = 254; + public static readonly PLUS = 255; + public static readonly MINUS = 256; + public static readonly ASTERISK = 257; + public static readonly SLASH = 258; + public static readonly PERCENT = 259; + public static readonly CONCAT = 260; + public static readonly QUESTION_MARK = 261; + public static readonly STRING = 262; + public static readonly UNICODE_STRING = 263; + public static readonly BINARY_LITERAL = 264; + public static readonly INTEGER_VALUE = 265; + public static readonly DECIMAL_VALUE = 266; + public static readonly DOUBLE_VALUE = 267; + public static readonly IDENTIFIER = 268; + public static readonly DIGIT_IDENTIFIER = 269; + public static readonly QUOTED_IDENTIFIER = 270; + public static readonly BACKQUOTED_IDENTIFIER = 271; + public static readonly SEMICOLON = 272; + public static readonly SIMPLE_COMMENT = 273; + public static readonly BRACKETED_COMMENT = 274; + public static readonly WS = 275; + public static readonly UNRECOGNIZED = 276; + public static readonly DELIMITER = 277; + public static readonly EOF = Token.EOF; + public static readonly RULE_program = 0; + public static readonly RULE_statements = 1; + public static readonly RULE_singleStatement = 2; + public static readonly RULE_standaloneExpression = 3; + public static readonly RULE_standalonePathSpecification = 4; + public static readonly RULE_standaloneType = 5; + public static readonly RULE_standaloneRowPattern = 6; + public static readonly RULE_statement = 7; + public static readonly RULE_query = 8; + public static readonly RULE_with = 9; + public static readonly RULE_tableElement = 10; + public static readonly RULE_columnDefinition = 11; + public static readonly RULE_likeClause = 12; + public static readonly RULE_properties = 13; + public static readonly RULE_propertyAssignments = 14; + public static readonly RULE_property = 15; + public static readonly RULE_propertyValue = 16; + public static readonly RULE_queryNoWith = 17; + public static readonly RULE_limitRowCount = 18; + public static readonly RULE_rowCount = 19; + public static readonly RULE_queryTerm = 20; + public static readonly RULE_queryPrimary = 21; + public static readonly RULE_sortItem = 22; + public static readonly RULE_querySpecification = 23; + public static readonly RULE_groupBy = 24; + public static readonly RULE_groupingElement = 25; + public static readonly RULE_groupingSet = 26; + public static readonly RULE_windowDefinition = 27; + public static readonly RULE_windowSpecification = 28; + public static readonly RULE_namedQuery = 29; + public static readonly RULE_setQuantifier = 30; + public static readonly RULE_selectItem = 31; + public static readonly RULE_relation = 32; + public static readonly RULE_joinType = 33; + public static readonly RULE_joinCriteria = 34; + public static readonly RULE_sampledRelation = 35; + public static readonly RULE_sampleType = 36; + public static readonly RULE_patternRecognition = 37; + public static readonly RULE_measureDefinition = 38; + public static readonly RULE_rowsPerMatch = 39; + public static readonly RULE_emptyMatchHandling = 40; + public static readonly RULE_skipTo = 41; + public static readonly RULE_subsetDefinition = 42; + public static readonly RULE_variableDefinition = 43; + public static readonly RULE_aliasedRelation = 44; + public static readonly RULE_columnAliases = 45; + public static readonly RULE_relationPrimary = 46; + public static readonly RULE_expression = 47; + public static readonly RULE_booleanExpression = 48; + public static readonly RULE_predicate = 49; + public static readonly RULE_valueExpression = 50; + public static readonly RULE_primaryExpression = 51; + public static readonly RULE_processingMode = 52; + public static readonly RULE_nullTreatment = 53; + public static readonly RULE_string = 54; + public static readonly RULE_timeZoneSpecifier = 55; + public static readonly RULE_comparisonOperator = 56; + public static readonly RULE_comparisonQuantifier = 57; + public static readonly RULE_booleanValue = 58; + public static readonly RULE_interval = 59; + public static readonly RULE_intervalField = 60; + public static readonly RULE_normalForm = 61; + public static readonly RULE_type = 62; + public static readonly RULE_rowField = 63; + public static readonly RULE_typeParameter = 64; + public static readonly RULE_whenClause = 65; + public static readonly RULE_filter = 66; + public static readonly RULE_mergeCase = 67; + public static readonly RULE_over = 68; + public static readonly RULE_windowFrame = 69; + public static readonly RULE_frameExtent = 70; + public static readonly RULE_frameBound = 71; + public static readonly RULE_rowPattern = 72; + public static readonly RULE_patternPrimary = 73; + public static readonly RULE_patternQuantifier = 74; + public static readonly RULE_updateAssignment = 75; + public static readonly RULE_explainOption = 76; + public static readonly RULE_transactionMode = 77; + public static readonly RULE_levelOfIsolation = 78; + public static readonly RULE_callArgument = 79; + public static readonly RULE_pathElement = 80; + public static readonly RULE_pathSpecification = 81; + public static readonly RULE_privilege = 82; + public static readonly RULE_qualifiedName = 83; + public static readonly RULE_grantor = 84; + public static readonly RULE_principal = 85; + public static readonly RULE_roles = 86; + public static readonly RULE_identifier = 87; + public static readonly RULE_number = 88; + public static readonly RULE_nonReserved = 89; + public static readonly literalNames: (string | null)[] = [ null, "'.'", + "'('", "')'", + "','", "'SKIP'", + "'->'", "'['", + "']'", "'|'", + "'^'", "'$'", + "'{-'", "'-}'", + "'{'", "'}'", + "'=>'", "'ADD'", + "'ADMIN'", "'AFTER'", + "'ALL'", "'ALTER'", + "'ANALYZE'", + "'AND'", "'ANY'", + "'ARRAY'", "'AS'", + "'ASC'", "'AT'", + "'AUTHORIZATION'", + "'BERNOULLI'", + "'BETWEEN'", + "'BY'", "'CALL'", + "'CASCADE'", + "'CASE'", "'CAST'", + "'CATALOGS'", + "'COLUMN'", + "'COLUMNS'", + "'COMMENT'", + "'COMMIT'", + "'COMMITTED'", + "'CONSTRAINT'", + "'CREATE'", + "'CROSS'", "'CUBE'", + "'CURRENT'", + "'CURRENT_CATALOG'", + "'CURRENT_DATE'", + "'CURRENT_PATH'", + "'CURRENT_ROLE'", + "'CURRENT_SCHEMA'", + "'CURRENT_TIME'", + "'CURRENT_TIMESTAMP'", + "'CURRENT_USER'", + "'DATA'", "'DATE'", + "'DAY'", "'DEFAULT'", + "'DEALLOCATE'", + "'DEFINER'", + "'DELETE'", + "'DESC'", "'DESCRIBE'", + "'DEFINE'", + "'DISTINCT'", + "'DISTRIBUTED'", + "'DOUBLE'", + "'DROP'", "'ELSE'", + "'EMPTY'", "'END'", + "'ESCAPE'", + "'EXCEPT'", + "'EXCLUDING'", + "'EXECUTE'", + "'EXISTS'", + "'EXPLAIN'", + "'EXTRACT'", + "'FALSE'", "'FETCH'", + "'FILTER'", + "'FINAL'", "'FIRST'", + "'FOLLOWING'", + "'FOR'", "'FORMAT'", + "'FROM'", "'FULL'", + "'FUNCTIONS'", + "'GRANT'", "'GRANTED'", + "'GRANTS'", + "'DENY'", "'GRAPHVIZ'", + "'GROUP'", "'GROUPING'", + "'GROUPS'", + "'HAVING'", + "'HOUR'", "'IF'", + "'IGNORE'", + "'IN'", "'INCLUDING'", + "'INITIAL'", + "'INNER'", "'INPUT'", + "'INSERT'", + "'INTERSECT'", + "'INTERVAL'", + "'INTO'", "'INVOKER'", + "'IO'", "'IS'", + "'ISOLATION'", + "'JOIN'", "'JSON'", + "'LAST'", "'LATERAL'", + "'LEFT'", "'LEVEL'", + "'LIKE'", "'LIMIT'", + "'LOCAL'", "'LOCALTIME'", + "'LOCALTIMESTAMP'", + "'LOGICAL'", + "'MAP'", "'MATCH'", + "'MATCHED'", + "'MATCHES'", + "'MATCH_RECOGNIZE'", + "'MATERIALIZED'", + "'MEASURES'", + "'MERGE'", "'MINUTE'", + "'MONTH'", "'NATURAL'", + "'NEXT'", "'NFC'", + "'NFD'", "'NFKC'", + "'NFKD'", "'NO'", + "'NONE'", "'NORMALIZE'", + "'NOT'", "'NULL'", + "'NULLIF'", + "'NULLS'", "'OFFSET'", + "'OMIT'", "'ON'", + "'ONE'", "'ONLY'", + "'OPTION'", + "'OR'", "'ORDER'", + "'ORDINALITY'", + "'OUTER'", "'OUTPUT'", + "'OVER'", "'PARTITION'", + "'PARTITIONS'", + "'PAST'", "'PATH'", + "'PATTERN'", + "'PER'", "'PERMUTE'", + "'POSITION'", + "'PRECEDING'", + "'PRECISION'", + "'PREPARE'", + "'PRIVILEGES'", + "'PROPERTIES'", + "'RANGE'", "'READ'", + "'RECURSIVE'", + "'REFRESH'", + "'RENAME'", + "'REPEATABLE'", + "'REPLACE'", + "'RESET'", "'RESPECT'", + "'RESTRICT'", + "'REVOKE'", + "'RIGHT'", "'ROLE'", + "'ROLES'", "'ROLLBACK'", + "'ROLLUP'", + "'ROW'", "'ROWS'", + "'RUNNING'", + "'SCHEMA'", + "'SCHEMAS'", + "'SECOND'", + "'SECURITY'", + "'SEEK'", "'SELECT'", + "'SERIALIZABLE'", + "'SESSION'", + "'SET'", "'SETS'", + "'SHOW'", "'SOME'", + "'START'", "'STATS'", + "'SUBSET'", + "'SUBSTRING'", + "'SYSTEM'", + "'TABLE'", "'TABLES'", + "'TABLESAMPLE'", + "'TEXT'", "'THEN'", + "'TIES'", "'TIME'", + "'TIMESTAMP'", + "'TO'", "'TRANSACTION'", + "'TRUNCATE'", + "'TRUE'", "'TRY_CAST'", + "'TYPE'", "'UESCAPE'", + "'UNBOUNDED'", + "'UNCOMMITTED'", + "'UNION'", "'UNMATCHED'", + "'UNNEST'", + "'UPDATE'", + "'USE'", "'USER'", + "'USING'", "'VALIDATE'", + "'VALUES'", + "'VERBOSE'", + "'VIEW'", "'WHEN'", + "'WHERE'", "'WINDOW'", + "'WITH'", "'WITHOUT'", + "'WORK'", "'WRITE'", + "'YEAR'", "'ZONE'", + "'='", null, + "'<'", "'<='", + "'>'", "'>='", + "'+'", "'-'", + "'*'", "'/'", + "'%'", "'||'", + "'?'", null, + null, null, + null, null, + null, null, + null, null, + null, "';'" ]; + public static readonly symbolicNames: (string | null)[] = [ null, null, + null, null, + null, null, + null, null, + null, null, + null, null, + null, null, + null, null, + null, "ADD", + "ADMIN", "AFTER", + "ALL", "ALTER", + "ANALYZE", + "AND", "ANY", + "ARRAY", "AS", + "ASC", "AT", + "AUTHORIZATION", + "BERNOULLI", + "BETWEEN", + "BY", "CALL", + "CASCADE", + "CASE", "CAST", + "CATALOGS", + "COLUMN", "COLUMNS", + "COMMENT", + "COMMIT", "COMMITTED", + "CONSTRAINT", + "CREATE", "CROSS", + "CUBE", "CURRENT", + "CURRENT_CATALOG", + "CURRENT_DATE", + "CURRENT_PATH", + "CURRENT_ROLE", + "CURRENT_SCHEMA", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "DATA", "DATE", + "DAY", "DEFAULT", + "DEALLOCATE", + "DEFINER", + "DELETE", "DESC", + "DESCRIBE", + "DEFINE", "DISTINCT", + "DISTRIBUTED", + "DOUBLE", "DROP", + "ELSE", "EMPTY", + "END", "ESCAPE", + "EXCEPT", "EXCLUDING", + "EXECUTE", + "EXISTS", "EXPLAIN", + "EXTRACT", + "FALSE", "FETCH", + "FILTER", "FINAL", + "FIRST", "FOLLOWING", + "FOR", "FORMAT", + "FROM", "FULL", + "FUNCTIONS", + "GRANT", "GRANTED", + "GRANTS", "DENY", + "GRAPHVIZ", + "GROUP", "GROUPING", + "GROUPS", "HAVING", + "HOUR", "IF", + "IGNORE", "IN", + "INCLUDING", + "INITIAL", + "INNER", "INPUT", + "INSERT", "INTERSECT", + "INTERVAL", + "INTO", "INVOKER", + "IO", "IS", + "ISOLATION", + "JOIN", "JSON", + "LAST", "LATERAL", + "LEFT", "LEVEL", + "LIKE", "LIMIT", + "LOCAL", "LOCALTIME", + "LOCALTIMESTAMP", + "LOGICAL", + "MAP", "MATCH", + "MATCHED", + "MATCHES", + "MATCH_RECOGNIZE", + "MATERIALIZED", + "MEASURES", + "MERGE", "MINUTE", + "MONTH", "NATURAL", + "NEXT", "NFC", + "NFD", "NFKC", + "NFKD", "NO", + "NONE", "NORMALIZE", + "NOT", "NULL", + "NULLIF", "NULLS", + "OFFSET", "OMIT", + "ON", "ONE", + "ONLY", "OPTION", + "OR", "ORDER", + "ORDINALITY", + "OUTER", "OUTPUT", + "OVER", "PARTITION", + "PARTITIONS", + "PAST", "PATH", + "PATTERN", + "PER", "PERMUTE", + "POSITION", + "PRECEDING", + "PRECISION", + "PREPARE", + "PRIVILEGES", + "PROPERTIES", + "RANGE", "READ", + "RECURSIVE", + "REFRESH", + "RENAME", "REPEATABLE", + "REPLACE", + "RESET", "RESPECT", + "RESTRICT", + "REVOKE", "RIGHT", + "ROLE", "ROLES", + "ROLLBACK", + "ROLLUP", "ROW", + "ROWS", "RUNNING", + "SCHEMA", "SCHEMAS", + "SECOND", "SECURITY", + "SEEK", "SELECT", + "SERIALIZABLE", + "SESSION", + "SET", "SETS", + "SHOW", "SOME", + "START", "STATS", + "SUBSET", "SUBSTRING", + "SYSTEM", "TABLE", + "TABLES", "TABLESAMPLE", + "TEXT", "THEN", + "TIES", "TIME", + "TIMESTAMP", + "TO", "TRANSACTION", + "TRUNCATE", + "TRUE", "TRY_CAST", + "TYPE", "UESCAPE", + "UNBOUNDED", + "UNCOMMITTED", + "UNION", "UNMATCHED", + "UNNEST", "UPDATE", + "USE", "USER", + "USING", "VALIDATE", + "VALUES", "VERBOSE", + "VIEW", "WHEN", + "WHERE", "WINDOW", + "WITH", "WITHOUT", + "WORK", "WRITE", + "YEAR", "ZONE", + "EQ", "NEQ", + "LT", "LTE", + "GT", "GTE", + "PLUS", "MINUS", + "ASTERISK", + "SLASH", "PERCENT", + "CONCAT", "QUESTION_MARK", + "STRING", "UNICODE_STRING", + "BINARY_LITERAL", + "INTEGER_VALUE", + "DECIMAL_VALUE", + "DOUBLE_VALUE", + "IDENTIFIER", + "DIGIT_IDENTIFIER", + "QUOTED_IDENTIFIER", + "BACKQUOTED_IDENTIFIER", + "SEMICOLON", + "SIMPLE_COMMENT", + "BRACKETED_COMMENT", + "WS", "UNRECOGNIZED", + "DELIMITER" ]; + // tslint:disable:no-trailing-whitespace + public static readonly ruleNames: string[] = [ + "program", "statements", "singleStatement", "standaloneExpression", "standalonePathSpecification", + "standaloneType", "standaloneRowPattern", "statement", "query", "with", + "tableElement", "columnDefinition", "likeClause", "properties", "propertyAssignments", + "property", "propertyValue", "queryNoWith", "limitRowCount", "rowCount", + "queryTerm", "queryPrimary", "sortItem", "querySpecification", "groupBy", + "groupingElement", "groupingSet", "windowDefinition", "windowSpecification", + "namedQuery", "setQuantifier", "selectItem", "relation", "joinType", "joinCriteria", + "sampledRelation", "sampleType", "patternRecognition", "measureDefinition", + "rowsPerMatch", "emptyMatchHandling", "skipTo", "subsetDefinition", "variableDefinition", + "aliasedRelation", "columnAliases", "relationPrimary", "expression", "booleanExpression", + "predicate", "valueExpression", "primaryExpression", "processingMode", + "nullTreatment", "string", "timeZoneSpecifier", "comparisonOperator", + "comparisonQuantifier", "booleanValue", "interval", "intervalField", "normalForm", + "type", "rowField", "typeParameter", "whenClause", "filter", "mergeCase", + "over", "windowFrame", "frameExtent", "frameBound", "rowPattern", "patternPrimary", + "patternQuantifier", "updateAssignment", "explainOption", "transactionMode", + "levelOfIsolation", "callArgument", "pathElement", "pathSpecification", + "privilege", "qualifiedName", "grantor", "principal", "roles", "identifier", + "number", "nonReserved", + ]; + public get grammarFileName(): string { return "trinoSqlParser.g4"; } + public get literalNames(): (string | null)[] { return trinoSqlParserParser.literalNames; } + public get symbolicNames(): (string | null)[] { return trinoSqlParserParser.symbolicNames; } + public get ruleNames(): string[] { return trinoSqlParserParser.ruleNames; } + public get serializedATN(): number[] { return trinoSqlParserParser._serializedATN; } + + protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { + return new FailedPredicateException(this, predicate, message); + } + + constructor(input: TokenStream) { + super(input); + this._interp = new ParserATNSimulator(this, trinoSqlParserParser._ATN, trinoSqlParserParser.DecisionsToDFA, new PredictionContextCache()); + } + // @RuleVersion(0) + public program(): ProgramContext { + let localctx: ProgramContext = new ProgramContext(this, this._ctx, this.state); + this.enterRule(localctx, 0, trinoSqlParserParser.RULE_program); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 183; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2071862276) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 4294691839) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120219741) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252347835) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153985535) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286578687) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237903277) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + { + this.state = 180; + this.statements(); + } + } + this.state = 185; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 186; + this.match(trinoSqlParserParser.EOF); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public statements(): StatementsContext { + let localctx: StatementsContext = new StatementsContext(this, this._ctx, this.state); + this.enterRule(localctx, 2, trinoSqlParserParser.RULE_statements); + try { + this.state = 193; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 1, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 188; + this.singleStatement(); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 189; + this.standaloneExpression(); + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + this.state = 190; + this.standalonePathSpecification(); + } + break; + case 4: + this.enterOuterAlt(localctx, 4); + { + this.state = 191; + this.standaloneType(); + } + break; + case 5: + this.enterOuterAlt(localctx, 5); + { + this.state = 192; + this.standaloneRowPattern(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public singleStatement(): SingleStatementContext { + let localctx: SingleStatementContext = new SingleStatementContext(this, this._ctx, this.state); + this.enterRule(localctx, 4, trinoSqlParserParser.RULE_singleStatement); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 195; + this.statement(); + this.state = 197; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===272) { + { + this.state = 196; + this.match(trinoSqlParserParser.SEMICOLON); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public standaloneExpression(): StandaloneExpressionContext { + let localctx: StandaloneExpressionContext = new StandaloneExpressionContext(this, this._ctx, this.state); + this.enterRule(localctx, 6, trinoSqlParserParser.RULE_standaloneExpression); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 199; + this.expression(); + this.state = 201; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===272) { + { + this.state = 200; + this.match(trinoSqlParserParser.SEMICOLON); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public standalonePathSpecification(): StandalonePathSpecificationContext { + let localctx: StandalonePathSpecificationContext = new StandalonePathSpecificationContext(this, this._ctx, this.state); + this.enterRule(localctx, 8, trinoSqlParserParser.RULE_standalonePathSpecification); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 203; + this.pathSpecification(); + this.state = 205; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===272) { + { + this.state = 204; + this.match(trinoSqlParserParser.SEMICOLON); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public standaloneType(): StandaloneTypeContext { + let localctx: StandaloneTypeContext = new StandaloneTypeContext(this, this._ctx, this.state); + this.enterRule(localctx, 10, trinoSqlParserParser.RULE_standaloneType); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 207; + this.type_(0); + this.state = 209; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===272) { + { + this.state = 208; + this.match(trinoSqlParserParser.SEMICOLON); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public standaloneRowPattern(): StandaloneRowPatternContext { + let localctx: StandaloneRowPatternContext = new StandaloneRowPatternContext(this, this._ctx, this.state); + this.enterRule(localctx, 12, trinoSqlParserParser.RULE_standaloneRowPattern); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 211; + this.rowPattern(0); + this.state = 213; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===272) { + { + this.state = 212; + this.match(trinoSqlParserParser.SEMICOLON); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public statement(): StatementContext { + let localctx: StatementContext = new StatementContext(this, this._ctx, this.state); + this.enterRule(localctx, 14, trinoSqlParserParser.RULE_statement); + let _la: number; + try { + this.state = 985; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 111, this._ctx) ) { + case 1: + localctx = new StatementDefaultContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 215; + this.query(); + } + break; + case 2: + localctx = new UseContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 216; + this.match(trinoSqlParserParser.USE); + this.state = 217; + (localctx as UseContext)._schema = this.identifier(); + } + break; + case 3: + localctx = new UseContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 218; + this.match(trinoSqlParserParser.USE); + this.state = 219; + (localctx as UseContext)._catalog = this.identifier(); + this.state = 220; + this.match(trinoSqlParserParser.T__0); + this.state = 221; + (localctx as UseContext)._schema = this.identifier(); + } + break; + case 4: + localctx = new CreateSchemaContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 223; + this.match(trinoSqlParserParser.CREATE); + this.state = 224; + this.match(trinoSqlParserParser.SCHEMA); + this.state = 228; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 7, this._ctx) ) { + case 1: + { + this.state = 225; + this.match(trinoSqlParserParser.IF); + this.state = 226; + this.match(trinoSqlParserParser.NOT); + this.state = 227; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 230; + this.qualifiedName(); + this.state = 233; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 8, this._ctx) ) { + case 1: + { + this.state = 231; + this.match(trinoSqlParserParser.AUTHORIZATION); + this.state = 232; + this.principal(); + } + break; + } + this.state = 237; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 9, this._ctx) ) { + case 1: + { + this.state = 235; + this.match(trinoSqlParserParser.WITH); + this.state = 236; + this.properties(); + } + break; + } + } + break; + case 5: + localctx = new DropSchemaContext(this, localctx); + this.enterOuterAlt(localctx, 5); + { + this.state = 239; + this.match(trinoSqlParserParser.DROP); + this.state = 240; + this.match(trinoSqlParserParser.SCHEMA); + this.state = 243; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 10, this._ctx) ) { + case 1: + { + this.state = 241; + this.match(trinoSqlParserParser.IF); + this.state = 242; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 245; + this.qualifiedName(); + this.state = 247; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 11, this._ctx) ) { + case 1: + { + this.state = 246; + _la = this._input.LA(1); + if(!(_la===34 || _la===185)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + } + break; + case 6: + localctx = new RenameSchemaContext(this, localctx); + this.enterOuterAlt(localctx, 6); + { + this.state = 249; + this.match(trinoSqlParserParser.ALTER); + this.state = 250; + this.match(trinoSqlParserParser.SCHEMA); + this.state = 251; + this.qualifiedName(); + this.state = 252; + this.match(trinoSqlParserParser.RENAME); + this.state = 253; + this.match(trinoSqlParserParser.TO); + this.state = 254; + this.identifier(); + } + break; + case 7: + localctx = new SetSchemaAuthorizationContext(this, localctx); + this.enterOuterAlt(localctx, 7); + { + this.state = 256; + this.match(trinoSqlParserParser.ALTER); + this.state = 257; + this.match(trinoSqlParserParser.SCHEMA); + this.state = 258; + this.qualifiedName(); + this.state = 259; + this.match(trinoSqlParserParser.SET); + this.state = 260; + this.match(trinoSqlParserParser.AUTHORIZATION); + this.state = 261; + this.principal(); + } + break; + case 8: + localctx = new CreateTableAsSelectContext(this, localctx); + this.enterOuterAlt(localctx, 8); + { + this.state = 263; + this.match(trinoSqlParserParser.CREATE); + this.state = 264; + this.match(trinoSqlParserParser.TABLE); + this.state = 268; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 12, this._ctx) ) { + case 1: + { + this.state = 265; + this.match(trinoSqlParserParser.IF); + this.state = 266; + this.match(trinoSqlParserParser.NOT); + this.state = 267; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 270; + this.qualifiedName(); + this.state = 272; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===2) { + { + this.state = 271; + this.columnAliases(); + } + } + + this.state = 276; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===40) { + { + this.state = 274; + this.match(trinoSqlParserParser.COMMENT); + this.state = 275; + this.string_(); + } + } + + this.state = 280; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===243) { + { + this.state = 278; + this.match(trinoSqlParserParser.WITH); + this.state = 279; + this.properties(); + } + } + + this.state = 282; + this.match(trinoSqlParserParser.AS); + this.state = 288; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 16, this._ctx) ) { + case 1: + { + this.state = 283; + this.query(); + } + break; + case 2: + { + this.state = 284; + this.match(trinoSqlParserParser.T__1); + this.state = 285; + this.query(); + this.state = 286; + this.match(trinoSqlParserParser.T__2); + } + break; + } + this.state = 295; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 18, this._ctx) ) { + case 1: + { + this.state = 290; + this.match(trinoSqlParserParser.WITH); + this.state = 292; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===144) { + { + this.state = 291; + this.match(trinoSqlParserParser.NO); + } + } + + this.state = 294; + this.match(trinoSqlParserParser.DATA); + } + break; + } + } + break; + case 9: + localctx = new CreateTableContext(this, localctx); + this.enterOuterAlt(localctx, 9); + { + this.state = 297; + this.match(trinoSqlParserParser.CREATE); + this.state = 298; + this.match(trinoSqlParserParser.TABLE); + this.state = 302; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 19, this._ctx) ) { + case 1: + { + this.state = 299; + this.match(trinoSqlParserParser.IF); + this.state = 300; + this.match(trinoSqlParserParser.NOT); + this.state = 301; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 304; + this.qualifiedName(); + this.state = 305; + this.match(trinoSqlParserParser.T__1); + this.state = 306; + this.tableElement(); + this.state = 311; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 307; + this.match(trinoSqlParserParser.T__3); + this.state = 308; + this.tableElement(); + } + } + this.state = 313; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 314; + this.match(trinoSqlParserParser.T__2); + this.state = 317; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 21, this._ctx) ) { + case 1: + { + this.state = 315; + this.match(trinoSqlParserParser.COMMENT); + this.state = 316; + this.string_(); + } + break; + } + this.state = 321; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 22, this._ctx) ) { + case 1: + { + this.state = 319; + this.match(trinoSqlParserParser.WITH); + this.state = 320; + this.properties(); + } + break; + } + } + break; + case 10: + localctx = new DropTableContext(this, localctx); + this.enterOuterAlt(localctx, 10); + { + this.state = 323; + this.match(trinoSqlParserParser.DROP); + this.state = 324; + this.match(trinoSqlParserParser.TABLE); + this.state = 327; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 23, this._ctx) ) { + case 1: + { + this.state = 325; + this.match(trinoSqlParserParser.IF); + this.state = 326; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 329; + this.qualifiedName(); + } + break; + case 11: + localctx = new InsertIntoContext(this, localctx); + this.enterOuterAlt(localctx, 11); + { + this.state = 330; + this.match(trinoSqlParserParser.INSERT); + this.state = 331; + this.match(trinoSqlParserParser.INTO); + this.state = 332; + this.qualifiedName(); + this.state = 334; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 24, this._ctx) ) { + case 1: + { + this.state = 333; + this.columnAliases(); + } + break; + } + this.state = 336; + this.query(); + } + break; + case 12: + localctx = new DeleteContext(this, localctx); + this.enterOuterAlt(localctx, 12); + { + this.state = 338; + this.match(trinoSqlParserParser.DELETE); + this.state = 339; + this.match(trinoSqlParserParser.FROM); + this.state = 340; + this.qualifiedName(); + this.state = 343; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===241) { + { + this.state = 341; + this.match(trinoSqlParserParser.WHERE); + this.state = 342; + this.booleanExpression(0); + } + } + + } + break; + case 13: + localctx = new TruncateTableContext(this, localctx); + this.enterOuterAlt(localctx, 13); + { + this.state = 345; + this.match(trinoSqlParserParser.TRUNCATE); + this.state = 346; + this.match(trinoSqlParserParser.TABLE); + this.state = 347; + this.qualifiedName(); + } + break; + case 14: + localctx = new RenameTableContext(this, localctx); + this.enterOuterAlt(localctx, 14); + { + this.state = 348; + this.match(trinoSqlParserParser.ALTER); + this.state = 349; + this.match(trinoSqlParserParser.TABLE); + this.state = 352; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 26, this._ctx) ) { + case 1: + { + this.state = 350; + this.match(trinoSqlParserParser.IF); + this.state = 351; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 354; + (localctx as RenameTableContext)._from_ = this.qualifiedName(); + this.state = 355; + this.match(trinoSqlParserParser.RENAME); + this.state = 356; + this.match(trinoSqlParserParser.TO); + this.state = 357; + (localctx as RenameTableContext)._to = this.qualifiedName(); + } + break; + case 15: + localctx = new CommentTableContext(this, localctx); + this.enterOuterAlt(localctx, 15); + { + this.state = 359; + this.match(trinoSqlParserParser.COMMENT); + this.state = 360; + this.match(trinoSqlParserParser.ON); + this.state = 361; + this.match(trinoSqlParserParser.TABLE); + this.state = 362; + this.qualifiedName(); + this.state = 363; + this.match(trinoSqlParserParser.IS); + this.state = 366; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 262: + case 263: + { + this.state = 364; + this.string_(); + } + break; + case 148: + { + this.state = 365; + this.match(trinoSqlParserParser.NULL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 16: + localctx = new CommentColumnContext(this, localctx); + this.enterOuterAlt(localctx, 16); + { + this.state = 368; + this.match(trinoSqlParserParser.COMMENT); + this.state = 369; + this.match(trinoSqlParserParser.ON); + this.state = 370; + this.match(trinoSqlParserParser.COLUMN); + this.state = 371; + this.qualifiedName(); + this.state = 372; + this.match(trinoSqlParserParser.IS); + this.state = 375; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 262: + case 263: + { + this.state = 373; + this.string_(); + } + break; + case 148: + { + this.state = 374; + this.match(trinoSqlParserParser.NULL); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 17: + localctx = new RenameColumnContext(this, localctx); + this.enterOuterAlt(localctx, 17); + { + this.state = 377; + this.match(trinoSqlParserParser.ALTER); + this.state = 378; + this.match(trinoSqlParserParser.TABLE); + this.state = 381; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 29, this._ctx) ) { + case 1: + { + this.state = 379; + this.match(trinoSqlParserParser.IF); + this.state = 380; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 383; + (localctx as RenameColumnContext)._tableName = this.qualifiedName(); + this.state = 384; + this.match(trinoSqlParserParser.RENAME); + this.state = 385; + this.match(trinoSqlParserParser.COLUMN); + this.state = 388; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 30, this._ctx) ) { + case 1: + { + this.state = 386; + this.match(trinoSqlParserParser.IF); + this.state = 387; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 390; + (localctx as RenameColumnContext)._from_ = this.identifier(); + this.state = 391; + this.match(trinoSqlParserParser.TO); + this.state = 392; + (localctx as RenameColumnContext)._to = this.identifier(); + } + break; + case 18: + localctx = new DropColumnContext(this, localctx); + this.enterOuterAlt(localctx, 18); + { + this.state = 394; + this.match(trinoSqlParserParser.ALTER); + this.state = 395; + this.match(trinoSqlParserParser.TABLE); + this.state = 398; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 31, this._ctx) ) { + case 1: + { + this.state = 396; + this.match(trinoSqlParserParser.IF); + this.state = 397; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 400; + (localctx as DropColumnContext)._tableName = this.qualifiedName(); + this.state = 401; + this.match(trinoSqlParserParser.DROP); + this.state = 402; + this.match(trinoSqlParserParser.COLUMN); + this.state = 405; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 32, this._ctx) ) { + case 1: + { + this.state = 403; + this.match(trinoSqlParserParser.IF); + this.state = 404; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 407; + (localctx as DropColumnContext)._column = this.qualifiedName(); + } + break; + case 19: + localctx = new AddColumnContext(this, localctx); + this.enterOuterAlt(localctx, 19); + { + this.state = 409; + this.match(trinoSqlParserParser.ALTER); + this.state = 410; + this.match(trinoSqlParserParser.TABLE); + this.state = 413; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 33, this._ctx) ) { + case 1: + { + this.state = 411; + this.match(trinoSqlParserParser.IF); + this.state = 412; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 415; + (localctx as AddColumnContext)._tableName = this.qualifiedName(); + this.state = 416; + this.match(trinoSqlParserParser.ADD); + this.state = 417; + this.match(trinoSqlParserParser.COLUMN); + this.state = 421; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 34, this._ctx) ) { + case 1: + { + this.state = 418; + this.match(trinoSqlParserParser.IF); + this.state = 419; + this.match(trinoSqlParserParser.NOT); + this.state = 420; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 423; + (localctx as AddColumnContext)._column = this.columnDefinition(); + } + break; + case 20: + localctx = new SetTableAuthorizationContext(this, localctx); + this.enterOuterAlt(localctx, 20); + { + this.state = 425; + this.match(trinoSqlParserParser.ALTER); + this.state = 426; + this.match(trinoSqlParserParser.TABLE); + this.state = 427; + (localctx as SetTableAuthorizationContext)._tableName = this.qualifiedName(); + this.state = 428; + this.match(trinoSqlParserParser.SET); + this.state = 429; + this.match(trinoSqlParserParser.AUTHORIZATION); + this.state = 430; + this.principal(); + } + break; + case 21: + localctx = new SetTablePropertiesContext(this, localctx); + this.enterOuterAlt(localctx, 21); + { + this.state = 432; + this.match(trinoSqlParserParser.ALTER); + this.state = 433; + this.match(trinoSqlParserParser.TABLE); + this.state = 434; + (localctx as SetTablePropertiesContext)._tableName = this.qualifiedName(); + this.state = 435; + this.match(trinoSqlParserParser.SET); + this.state = 436; + this.match(trinoSqlParserParser.PROPERTIES); + this.state = 437; + this.propertyAssignments(); + } + break; + case 22: + localctx = new TableExecuteContext(this, localctx); + this.enterOuterAlt(localctx, 22); + { + this.state = 439; + this.match(trinoSqlParserParser.ALTER); + this.state = 440; + this.match(trinoSqlParserParser.TABLE); + this.state = 441; + (localctx as TableExecuteContext)._tableName = this.qualifiedName(); + this.state = 442; + this.match(trinoSqlParserParser.EXECUTE); + this.state = 443; + (localctx as TableExecuteContext)._procedureName = this.identifier(); + this.state = 456; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 37, this._ctx) ) { + case 1: + { + this.state = 444; + this.match(trinoSqlParserParser.T__1); + this.state = 453; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2069757956) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1476117503) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120217677) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252345787) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153981439) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286054271) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237637037) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + this.state = 445; + this.callArgument(); + this.state = 450; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 446; + this.match(trinoSqlParserParser.T__3); + this.state = 447; + this.callArgument(); + } + } + this.state = 452; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 455; + this.match(trinoSqlParserParser.T__2); + } + break; + } + this.state = 460; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===241) { + { + this.state = 458; + this.match(trinoSqlParserParser.WHERE); + this.state = 459; + (localctx as TableExecuteContext)._where = this.booleanExpression(0); + } + } + + } + break; + case 23: + localctx = new AnalyzeContext(this, localctx); + this.enterOuterAlt(localctx, 23); + { + this.state = 462; + this.match(trinoSqlParserParser.ANALYZE); + this.state = 463; + this.qualifiedName(); + this.state = 466; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 39, this._ctx) ) { + case 1: + { + this.state = 464; + this.match(trinoSqlParserParser.WITH); + this.state = 465; + this.properties(); + } + break; + } + } + break; + case 24: + localctx = new CreateMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 24); + { + this.state = 468; + this.match(trinoSqlParserParser.CREATE); + this.state = 471; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===157) { + { + this.state = 469; + this.match(trinoSqlParserParser.OR); + this.state = 470; + this.match(trinoSqlParserParser.REPLACE); + } + } + + this.state = 473; + this.match(trinoSqlParserParser.MATERIALIZED); + this.state = 474; + this.match(trinoSqlParserParser.VIEW); + this.state = 478; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 41, this._ctx) ) { + case 1: + { + this.state = 475; + this.match(trinoSqlParserParser.IF); + this.state = 476; + this.match(trinoSqlParserParser.NOT); + this.state = 477; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 480; + this.qualifiedName(); + this.state = 483; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===40) { + { + this.state = 481; + this.match(trinoSqlParserParser.COMMENT); + this.state = 482; + this.string_(); + } + } + + this.state = 487; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===243) { + { + this.state = 485; + this.match(trinoSqlParserParser.WITH); + this.state = 486; + this.properties(); + } + } + + this.state = 489; + this.match(trinoSqlParserParser.AS); + this.state = 490; + this.query(); + } + break; + case 25: + localctx = new CreateViewContext(this, localctx); + this.enterOuterAlt(localctx, 25); + { + this.state = 492; + this.match(trinoSqlParserParser.CREATE); + this.state = 495; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===157) { + { + this.state = 493; + this.match(trinoSqlParserParser.OR); + this.state = 494; + this.match(trinoSqlParserParser.REPLACE); + } + } + + this.state = 497; + this.match(trinoSqlParserParser.VIEW); + this.state = 498; + this.qualifiedName(); + this.state = 501; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===40) { + { + this.state = 499; + this.match(trinoSqlParserParser.COMMENT); + this.state = 500; + this.string_(); + } + } + + this.state = 505; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===198) { + { + this.state = 503; + this.match(trinoSqlParserParser.SECURITY); + this.state = 504; + _la = this._input.LA(1); + if(!(_la===61 || _la===112)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 507; + this.match(trinoSqlParserParser.AS); + this.state = 508; + this.query(); + } + break; + case 26: + localctx = new RefreshMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 26); + { + this.state = 510; + this.match(trinoSqlParserParser.REFRESH); + this.state = 511; + this.match(trinoSqlParserParser.MATERIALIZED); + this.state = 512; + this.match(trinoSqlParserParser.VIEW); + this.state = 513; + this.qualifiedName(); + } + break; + case 27: + localctx = new DropMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 27); + { + this.state = 514; + this.match(trinoSqlParserParser.DROP); + this.state = 515; + this.match(trinoSqlParserParser.MATERIALIZED); + this.state = 516; + this.match(trinoSqlParserParser.VIEW); + this.state = 519; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 47, this._ctx) ) { + case 1: + { + this.state = 517; + this.match(trinoSqlParserParser.IF); + this.state = 518; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 521; + this.qualifiedName(); + } + break; + case 28: + localctx = new RenameMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 28); + { + this.state = 522; + this.match(trinoSqlParserParser.ALTER); + this.state = 523; + this.match(trinoSqlParserParser.MATERIALIZED); + this.state = 524; + this.match(trinoSqlParserParser.VIEW); + this.state = 527; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 48, this._ctx) ) { + case 1: + { + this.state = 525; + this.match(trinoSqlParserParser.IF); + this.state = 526; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 529; + (localctx as RenameMaterializedViewContext)._from_ = this.qualifiedName(); + this.state = 530; + this.match(trinoSqlParserParser.RENAME); + this.state = 531; + this.match(trinoSqlParserParser.TO); + this.state = 532; + (localctx as RenameMaterializedViewContext)._to = this.qualifiedName(); + } + break; + case 29: + localctx = new SetMaterializedViewPropertiesContext(this, localctx); + this.enterOuterAlt(localctx, 29); + { + this.state = 534; + this.match(trinoSqlParserParser.ALTER); + this.state = 535; + this.match(trinoSqlParserParser.MATERIALIZED); + this.state = 536; + this.match(trinoSqlParserParser.VIEW); + this.state = 537; + this.qualifiedName(); + this.state = 538; + this.match(trinoSqlParserParser.SET); + this.state = 539; + this.match(trinoSqlParserParser.PROPERTIES); + this.state = 540; + this.propertyAssignments(); + } + break; + case 30: + localctx = new DropViewContext(this, localctx); + this.enterOuterAlt(localctx, 30); + { + this.state = 542; + this.match(trinoSqlParserParser.DROP); + this.state = 543; + this.match(trinoSqlParserParser.VIEW); + this.state = 546; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 49, this._ctx) ) { + case 1: + { + this.state = 544; + this.match(trinoSqlParserParser.IF); + this.state = 545; + this.match(trinoSqlParserParser.EXISTS); + } + break; + } + this.state = 548; + this.qualifiedName(); + } + break; + case 31: + localctx = new RenameViewContext(this, localctx); + this.enterOuterAlt(localctx, 31); + { + this.state = 549; + this.match(trinoSqlParserParser.ALTER); + this.state = 550; + this.match(trinoSqlParserParser.VIEW); + this.state = 551; + (localctx as RenameViewContext)._from_ = this.qualifiedName(); + this.state = 552; + this.match(trinoSqlParserParser.RENAME); + this.state = 553; + this.match(trinoSqlParserParser.TO); + this.state = 554; + (localctx as RenameViewContext)._to = this.qualifiedName(); + } + break; + case 32: + localctx = new SetViewAuthorizationContext(this, localctx); + this.enterOuterAlt(localctx, 32); + { + this.state = 556; + this.match(trinoSqlParserParser.ALTER); + this.state = 557; + this.match(trinoSqlParserParser.VIEW); + this.state = 558; + (localctx as SetViewAuthorizationContext)._from_ = this.qualifiedName(); + this.state = 559; + this.match(trinoSqlParserParser.SET); + this.state = 560; + this.match(trinoSqlParserParser.AUTHORIZATION); + this.state = 561; + this.principal(); + } + break; + case 33: + localctx = new CallContext(this, localctx); + this.enterOuterAlt(localctx, 33); + { + this.state = 563; + this.match(trinoSqlParserParser.CALL); + this.state = 564; + this.qualifiedName(); + this.state = 565; + this.match(trinoSqlParserParser.T__1); + this.state = 574; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2069757956) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1476117503) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120217677) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252345787) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153981439) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286054271) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237637037) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + this.state = 566; + this.callArgument(); + this.state = 571; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 567; + this.match(trinoSqlParserParser.T__3); + this.state = 568; + this.callArgument(); + } + } + this.state = 573; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 576; + this.match(trinoSqlParserParser.T__2); + } + break; + case 34: + localctx = new CreateRoleContext(this, localctx); + this.enterOuterAlt(localctx, 34); + { + this.state = 578; + this.match(trinoSqlParserParser.CREATE); + this.state = 579; + this.match(trinoSqlParserParser.ROLE); + this.state = 580; + (localctx as CreateRoleContext)._name = this.identifier(); + this.state = 584; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 52, this._ctx) ) { + case 1: + { + this.state = 581; + this.match(trinoSqlParserParser.WITH); + this.state = 582; + this.match(trinoSqlParserParser.ADMIN); + this.state = 583; + this.grantor(); + } + break; + } + this.state = 588; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===103) { + { + this.state = 586; + this.match(trinoSqlParserParser.IN); + this.state = 587; + (localctx as CreateRoleContext)._catalog = this.identifier(); + } + } + + } + break; + case 35: + localctx = new DropRoleContext(this, localctx); + this.enterOuterAlt(localctx, 35); + { + this.state = 590; + this.match(trinoSqlParserParser.DROP); + this.state = 591; + this.match(trinoSqlParserParser.ROLE); + this.state = 592; + (localctx as DropRoleContext)._name = this.identifier(); + } + break; + case 36: + localctx = new GrantRolesContext(this, localctx); + this.enterOuterAlt(localctx, 36); + { + this.state = 593; + this.match(trinoSqlParserParser.GRANT); + this.state = 594; + this.roles(); + this.state = 595; + this.match(trinoSqlParserParser.TO); + this.state = 596; + this.principal(); + this.state = 601; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 597; + this.match(trinoSqlParserParser.T__3); + this.state = 598; + this.principal(); + } + } + this.state = 603; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 607; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 55, this._ctx) ) { + case 1: + { + this.state = 604; + this.match(trinoSqlParserParser.WITH); + this.state = 605; + this.match(trinoSqlParserParser.ADMIN); + this.state = 606; + this.match(trinoSqlParserParser.OPTION); + } + break; + } + this.state = 612; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 56, this._ctx) ) { + case 1: + { + this.state = 609; + this.match(trinoSqlParserParser.GRANTED); + this.state = 610; + this.match(trinoSqlParserParser.BY); + this.state = 611; + this.grantor(); + } + break; + } + this.state = 616; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===103) { + { + this.state = 614; + this.match(trinoSqlParserParser.IN); + this.state = 615; + (localctx as GrantRolesContext)._catalog = this.identifier(); + } + } + + } + break; + case 37: + localctx = new RevokeRolesContext(this, localctx); + this.enterOuterAlt(localctx, 37); + { + this.state = 618; + this.match(trinoSqlParserParser.REVOKE); + this.state = 622; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 58, this._ctx) ) { + case 1: + { + this.state = 619; + this.match(trinoSqlParserParser.ADMIN); + this.state = 620; + this.match(trinoSqlParserParser.OPTION); + this.state = 621; + this.match(trinoSqlParserParser.FOR); + } + break; + } + this.state = 624; + this.roles(); + this.state = 625; + this.match(trinoSqlParserParser.FROM); + this.state = 626; + this.principal(); + this.state = 631; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 627; + this.match(trinoSqlParserParser.T__3); + this.state = 628; + this.principal(); + } + } + this.state = 633; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 637; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 60, this._ctx) ) { + case 1: + { + this.state = 634; + this.match(trinoSqlParserParser.GRANTED); + this.state = 635; + this.match(trinoSqlParserParser.BY); + this.state = 636; + this.grantor(); + } + break; + } + this.state = 641; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===103) { + { + this.state = 639; + this.match(trinoSqlParserParser.IN); + this.state = 640; + (localctx as RevokeRolesContext)._catalog = this.identifier(); + } + } + + } + break; + case 38: + localctx = new SetRoleContext(this, localctx); + this.enterOuterAlt(localctx, 38); + { + this.state = 643; + this.match(trinoSqlParserParser.SET); + this.state = 644; + this.match(trinoSqlParserParser.ROLE); + this.state = 648; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 62, this._ctx) ) { + case 1: + { + this.state = 645; + this.match(trinoSqlParserParser.ALL); + } + break; + case 2: + { + this.state = 646; + this.match(trinoSqlParserParser.NONE); + } + break; + case 3: + { + this.state = 647; + (localctx as SetRoleContext)._role = this.identifier(); + } + break; + } + this.state = 652; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===103) { + { + this.state = 650; + this.match(trinoSqlParserParser.IN); + this.state = 651; + (localctx as SetRoleContext)._catalog = this.identifier(); + } + } + + } + break; + case 39: + localctx = new GrantContext(this, localctx); + this.enterOuterAlt(localctx, 39); + { + this.state = 654; + this.match(trinoSqlParserParser.GRANT); + this.state = 665; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 62: + case 108: + case 200: + case 232: + { + this.state = 655; + this.privilege(); + this.state = 660; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 656; + this.match(trinoSqlParserParser.T__3); + this.state = 657; + this.privilege(); + } + } + this.state = 662; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case 20: + { + this.state = 663; + this.match(trinoSqlParserParser.ALL); + this.state = 664; + this.match(trinoSqlParserParser.PRIVILEGES); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 667; + this.match(trinoSqlParserParser.ON); + this.state = 669; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 66, this._ctx) ) { + case 1: + { + this.state = 668; + _la = this._input.LA(1); + if(!(_la===195 || _la===212)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 671; + this.qualifiedName(); + this.state = 672; + this.match(trinoSqlParserParser.TO); + this.state = 673; + (localctx as GrantContext)._grantee = this.principal(); + this.state = 677; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 67, this._ctx) ) { + case 1: + { + this.state = 674; + this.match(trinoSqlParserParser.WITH); + this.state = 675; + this.match(trinoSqlParserParser.GRANT); + this.state = 676; + this.match(trinoSqlParserParser.OPTION); + } + break; + } + } + break; + case 40: + localctx = new DenyContext(this, localctx); + this.enterOuterAlt(localctx, 40); + { + this.state = 679; + this.match(trinoSqlParserParser.DENY); + this.state = 690; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 62: + case 108: + case 200: + case 232: + { + this.state = 680; + this.privilege(); + this.state = 685; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 681; + this.match(trinoSqlParserParser.T__3); + this.state = 682; + this.privilege(); + } + } + this.state = 687; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case 20: + { + this.state = 688; + this.match(trinoSqlParserParser.ALL); + this.state = 689; + this.match(trinoSqlParserParser.PRIVILEGES); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 692; + this.match(trinoSqlParserParser.ON); + this.state = 694; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 70, this._ctx) ) { + case 1: + { + this.state = 693; + _la = this._input.LA(1); + if(!(_la===195 || _la===212)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 696; + this.qualifiedName(); + this.state = 697; + this.match(trinoSqlParserParser.TO); + this.state = 698; + (localctx as DenyContext)._grantee = this.principal(); + } + break; + case 41: + localctx = new RevokeContext(this, localctx); + this.enterOuterAlt(localctx, 41); + { + this.state = 700; + this.match(trinoSqlParserParser.REVOKE); + this.state = 704; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===91) { + { + this.state = 701; + this.match(trinoSqlParserParser.GRANT); + this.state = 702; + this.match(trinoSqlParserParser.OPTION); + this.state = 703; + this.match(trinoSqlParserParser.FOR); + } + } + + this.state = 716; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 62: + case 108: + case 200: + case 232: + { + this.state = 706; + this.privilege(); + this.state = 711; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 707; + this.match(trinoSqlParserParser.T__3); + this.state = 708; + this.privilege(); + } + } + this.state = 713; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case 20: + { + this.state = 714; + this.match(trinoSqlParserParser.ALL); + this.state = 715; + this.match(trinoSqlParserParser.PRIVILEGES); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 718; + this.match(trinoSqlParserParser.ON); + this.state = 720; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 74, this._ctx) ) { + case 1: + { + this.state = 719; + _la = this._input.LA(1); + if(!(_la===195 || _la===212)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 722; + this.qualifiedName(); + this.state = 723; + this.match(trinoSqlParserParser.FROM); + this.state = 724; + (localctx as RevokeContext)._grantee = this.principal(); + } + break; + case 42: + localctx = new ShowGrantsContext(this, localctx); + this.enterOuterAlt(localctx, 42); + { + this.state = 726; + this.match(trinoSqlParserParser.SHOW); + this.state = 727; + this.match(trinoSqlParserParser.GRANTS); + this.state = 733; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===153) { + { + this.state = 728; + this.match(trinoSqlParserParser.ON); + this.state = 730; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===212) { + { + this.state = 729; + this.match(trinoSqlParserParser.TABLE); + } + } + + this.state = 732; + this.qualifiedName(); + } + } + + } + break; + case 43: + localctx = new ExplainContext(this, localctx); + this.enterOuterAlt(localctx, 43); + { + this.state = 735; + this.match(trinoSqlParserParser.EXPLAIN); + this.state = 737; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 77, this._ctx) ) { + case 1: + { + this.state = 736; + this.match(trinoSqlParserParser.ANALYZE); + } + break; + } + this.state = 740; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===238) { + { + this.state = 739; + this.match(trinoSqlParserParser.VERBOSE); + } + } + + this.state = 753; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 80, this._ctx) ) { + case 1: + { + this.state = 742; + this.match(trinoSqlParserParser.T__1); + this.state = 743; + this.explainOption(); + this.state = 748; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 744; + this.match(trinoSqlParserParser.T__3); + this.state = 745; + this.explainOption(); + } + } + this.state = 750; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 751; + this.match(trinoSqlParserParser.T__2); + } + break; + } + this.state = 755; + this.statement(); + } + break; + case 44: + localctx = new ShowCreateTableContext(this, localctx); + this.enterOuterAlt(localctx, 44); + { + this.state = 756; + this.match(trinoSqlParserParser.SHOW); + this.state = 757; + this.match(trinoSqlParserParser.CREATE); + this.state = 758; + this.match(trinoSqlParserParser.TABLE); + this.state = 759; + this.qualifiedName(); + } + break; + case 45: + localctx = new ShowCreateSchemaContext(this, localctx); + this.enterOuterAlt(localctx, 45); + { + this.state = 760; + this.match(trinoSqlParserParser.SHOW); + this.state = 761; + this.match(trinoSqlParserParser.CREATE); + this.state = 762; + this.match(trinoSqlParserParser.SCHEMA); + this.state = 763; + this.qualifiedName(); + } + break; + case 46: + localctx = new ShowCreateViewContext(this, localctx); + this.enterOuterAlt(localctx, 46); + { + this.state = 764; + this.match(trinoSqlParserParser.SHOW); + this.state = 765; + this.match(trinoSqlParserParser.CREATE); + this.state = 766; + this.match(trinoSqlParserParser.VIEW); + this.state = 767; + this.qualifiedName(); + } + break; + case 47: + localctx = new ShowCreateMaterializedViewContext(this, localctx); + this.enterOuterAlt(localctx, 47); + { + this.state = 768; + this.match(trinoSqlParserParser.SHOW); + this.state = 769; + this.match(trinoSqlParserParser.CREATE); + this.state = 770; + this.match(trinoSqlParserParser.MATERIALIZED); + this.state = 771; + this.match(trinoSqlParserParser.VIEW); + this.state = 772; + this.qualifiedName(); + } + break; + case 48: + localctx = new ShowTablesContext(this, localctx); + this.enterOuterAlt(localctx, 48); + { + this.state = 773; + this.match(trinoSqlParserParser.SHOW); + this.state = 774; + this.match(trinoSqlParserParser.TABLES); + this.state = 777; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===88 || _la===103) { + { + this.state = 775; + _la = this._input.LA(1); + if(!(_la===88 || _la===103)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 776; + this.qualifiedName(); + } + } + + this.state = 785; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===122) { + { + this.state = 779; + this.match(trinoSqlParserParser.LIKE); + this.state = 780; + (localctx as ShowTablesContext)._pattern = this.string_(); + this.state = 783; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===73) { + { + this.state = 781; + this.match(trinoSqlParserParser.ESCAPE); + this.state = 782; + (localctx as ShowTablesContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 49: + localctx = new ShowSchemasContext(this, localctx); + this.enterOuterAlt(localctx, 49); + { + this.state = 787; + this.match(trinoSqlParserParser.SHOW); + this.state = 788; + this.match(trinoSqlParserParser.SCHEMAS); + this.state = 791; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===88 || _la===103) { + { + this.state = 789; + _la = this._input.LA(1); + if(!(_la===88 || _la===103)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 790; + this.identifier(); + } + } + + this.state = 799; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===122) { + { + this.state = 793; + this.match(trinoSqlParserParser.LIKE); + this.state = 794; + (localctx as ShowSchemasContext)._pattern = this.string_(); + this.state = 797; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===73) { + { + this.state = 795; + this.match(trinoSqlParserParser.ESCAPE); + this.state = 796; + (localctx as ShowSchemasContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 50: + localctx = new ShowCatalogsContext(this, localctx); + this.enterOuterAlt(localctx, 50); + { + this.state = 801; + this.match(trinoSqlParserParser.SHOW); + this.state = 802; + this.match(trinoSqlParserParser.CATALOGS); + this.state = 809; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===122) { + { + this.state = 803; + this.match(trinoSqlParserParser.LIKE); + this.state = 804; + (localctx as ShowCatalogsContext)._pattern = this.string_(); + this.state = 807; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===73) { + { + this.state = 805; + this.match(trinoSqlParserParser.ESCAPE); + this.state = 806; + (localctx as ShowCatalogsContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 51: + localctx = new ShowColumnsContext(this, localctx); + this.enterOuterAlt(localctx, 51); + { + this.state = 811; + this.match(trinoSqlParserParser.SHOW); + this.state = 812; + this.match(trinoSqlParserParser.COLUMNS); + this.state = 813; + _la = this._input.LA(1); + if(!(_la===88 || _la===103)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 815; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 89, this._ctx) ) { + case 1: + { + this.state = 814; + this.qualifiedName(); + } + break; + } + this.state = 823; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===122) { + { + this.state = 817; + this.match(trinoSqlParserParser.LIKE); + this.state = 818; + (localctx as ShowColumnsContext)._pattern = this.string_(); + this.state = 821; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===73) { + { + this.state = 819; + this.match(trinoSqlParserParser.ESCAPE); + this.state = 820; + (localctx as ShowColumnsContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 52: + localctx = new ShowStatsContext(this, localctx); + this.enterOuterAlt(localctx, 52); + { + this.state = 825; + this.match(trinoSqlParserParser.SHOW); + this.state = 826; + this.match(trinoSqlParserParser.STATS); + this.state = 827; + this.match(trinoSqlParserParser.FOR); + this.state = 828; + this.qualifiedName(); + } + break; + case 53: + localctx = new ShowStatsForQueryContext(this, localctx); + this.enterOuterAlt(localctx, 53); + { + this.state = 829; + this.match(trinoSqlParserParser.SHOW); + this.state = 830; + this.match(trinoSqlParserParser.STATS); + this.state = 831; + this.match(trinoSqlParserParser.FOR); + this.state = 832; + this.match(trinoSqlParserParser.T__1); + this.state = 833; + this.query(); + this.state = 834; + this.match(trinoSqlParserParser.T__2); + } + break; + case 54: + localctx = new ShowRolesContext(this, localctx); + this.enterOuterAlt(localctx, 54); + { + this.state = 836; + this.match(trinoSqlParserParser.SHOW); + this.state = 838; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===47) { + { + this.state = 837; + this.match(trinoSqlParserParser.CURRENT); + } + } + + this.state = 840; + this.match(trinoSqlParserParser.ROLES); + this.state = 843; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===88 || _la===103) { + { + this.state = 841; + _la = this._input.LA(1); + if(!(_la===88 || _la===103)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 842; + this.identifier(); + } + } + + } + break; + case 55: + localctx = new ShowRoleGrantsContext(this, localctx); + this.enterOuterAlt(localctx, 55); + { + this.state = 845; + this.match(trinoSqlParserParser.SHOW); + this.state = 846; + this.match(trinoSqlParserParser.ROLE); + this.state = 847; + this.match(trinoSqlParserParser.GRANTS); + this.state = 850; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===88 || _la===103) { + { + this.state = 848; + _la = this._input.LA(1); + if(!(_la===88 || _la===103)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 849; + this.identifier(); + } + } + + } + break; + case 56: + localctx = new ShowColumnsContext(this, localctx); + this.enterOuterAlt(localctx, 56); + { + this.state = 852; + this.match(trinoSqlParserParser.DESCRIBE); + this.state = 853; + this.qualifiedName(); + } + break; + case 57: + localctx = new ShowColumnsContext(this, localctx); + this.enterOuterAlt(localctx, 57); + { + this.state = 854; + this.match(trinoSqlParserParser.DESC); + this.state = 855; + this.qualifiedName(); + } + break; + case 58: + localctx = new ShowFunctionsContext(this, localctx); + this.enterOuterAlt(localctx, 58); + { + this.state = 856; + this.match(trinoSqlParserParser.SHOW); + this.state = 857; + this.match(trinoSqlParserParser.FUNCTIONS); + this.state = 864; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===122) { + { + this.state = 858; + this.match(trinoSqlParserParser.LIKE); + this.state = 859; + (localctx as ShowFunctionsContext)._pattern = this.string_(); + this.state = 862; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===73) { + { + this.state = 860; + this.match(trinoSqlParserParser.ESCAPE); + this.state = 861; + (localctx as ShowFunctionsContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 59: + localctx = new ShowSessionContext(this, localctx); + this.enterOuterAlt(localctx, 59); + { + this.state = 866; + this.match(trinoSqlParserParser.SHOW); + this.state = 867; + this.match(trinoSqlParserParser.SESSION); + this.state = 874; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===122) { + { + this.state = 868; + this.match(trinoSqlParserParser.LIKE); + this.state = 869; + (localctx as ShowSessionContext)._pattern = this.string_(); + this.state = 872; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===73) { + { + this.state = 870; + this.match(trinoSqlParserParser.ESCAPE); + this.state = 871; + (localctx as ShowSessionContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 60: + localctx = new SetSessionContext(this, localctx); + this.enterOuterAlt(localctx, 60); + { + this.state = 876; + this.match(trinoSqlParserParser.SET); + this.state = 877; + this.match(trinoSqlParserParser.SESSION); + this.state = 878; + this.qualifiedName(); + this.state = 879; + this.match(trinoSqlParserParser.EQ); + this.state = 880; + this.expression(); + } + break; + case 61: + localctx = new ResetSessionContext(this, localctx); + this.enterOuterAlt(localctx, 61); + { + this.state = 882; + this.match(trinoSqlParserParser.RESET); + this.state = 883; + this.match(trinoSqlParserParser.SESSION); + this.state = 884; + this.qualifiedName(); + } + break; + case 62: + localctx = new StartTransactionContext(this, localctx); + this.enterOuterAlt(localctx, 62); + { + this.state = 885; + this.match(trinoSqlParserParser.START); + this.state = 886; + this.match(trinoSqlParserParser.TRANSACTION); + this.state = 895; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 100, this._ctx) ) { + case 1: + { + this.state = 887; + this.transactionMode(); + this.state = 892; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 888; + this.match(trinoSqlParserParser.T__3); + this.state = 889; + this.transactionMode(); + } + } + this.state = 894; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + } + } + break; + case 63: + localctx = new CommitContext(this, localctx); + this.enterOuterAlt(localctx, 63); + { + this.state = 897; + this.match(trinoSqlParserParser.COMMIT); + this.state = 899; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 101, this._ctx) ) { + case 1: + { + this.state = 898; + this.match(trinoSqlParserParser.WORK); + } + break; + } + } + break; + case 64: + localctx = new RollbackContext(this, localctx); + this.enterOuterAlt(localctx, 64); + { + this.state = 901; + this.match(trinoSqlParserParser.ROLLBACK); + this.state = 903; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 102, this._ctx) ) { + case 1: + { + this.state = 902; + this.match(trinoSqlParserParser.WORK); + } + break; + } + } + break; + case 65: + localctx = new PrepareContext(this, localctx); + this.enterOuterAlt(localctx, 65); + { + this.state = 905; + this.match(trinoSqlParserParser.PREPARE); + this.state = 906; + this.identifier(); + this.state = 907; + this.match(trinoSqlParserParser.FROM); + this.state = 908; + this.statement(); + } + break; + case 66: + localctx = new DeallocateContext(this, localctx); + this.enterOuterAlt(localctx, 66); + { + this.state = 910; + this.match(trinoSqlParserParser.DEALLOCATE); + this.state = 911; + this.match(trinoSqlParserParser.PREPARE); + this.state = 912; + this.identifier(); + } + break; + case 67: + localctx = new ExecuteContext(this, localctx); + this.enterOuterAlt(localctx, 67); + { + this.state = 913; + this.match(trinoSqlParserParser.EXECUTE); + this.state = 914; + this.identifier(); + this.state = 924; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===235) { + { + this.state = 915; + this.match(trinoSqlParserParser.USING); + this.state = 916; + this.expression(); + this.state = 921; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 917; + this.match(trinoSqlParserParser.T__3); + this.state = 918; + this.expression(); + } + } + this.state = 923; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + } + break; + case 68: + localctx = new DescribeInputContext(this, localctx); + this.enterOuterAlt(localctx, 68); + { + this.state = 926; + this.match(trinoSqlParserParser.DESCRIBE); + this.state = 927; + this.match(trinoSqlParserParser.INPUT); + this.state = 928; + this.identifier(); + } + break; + case 69: + localctx = new DescribeOutputContext(this, localctx); + this.enterOuterAlt(localctx, 69); + { + this.state = 929; + this.match(trinoSqlParserParser.DESCRIBE); + this.state = 930; + this.match(trinoSqlParserParser.OUTPUT); + this.state = 931; + this.identifier(); + } + break; + case 70: + localctx = new SetPathContext(this, localctx); + this.enterOuterAlt(localctx, 70); + { + this.state = 932; + this.match(trinoSqlParserParser.SET); + this.state = 933; + this.match(trinoSqlParserParser.PATH); + this.state = 934; + this.pathSpecification(); + } + break; + case 71: + localctx = new SetTimeZoneContext(this, localctx); + this.enterOuterAlt(localctx, 71); + { + this.state = 935; + this.match(trinoSqlParserParser.SET); + this.state = 936; + this.match(trinoSqlParserParser.TIME); + this.state = 937; + this.match(trinoSqlParserParser.ZONE); + this.state = 940; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 105, this._ctx) ) { + case 1: + { + this.state = 938; + this.match(trinoSqlParserParser.LOCAL); + } + break; + case 2: + { + this.state = 939; + this.expression(); + } + break; + } + } + break; + case 72: + localctx = new UpdateContext(this, localctx); + this.enterOuterAlt(localctx, 72); + { + this.state = 942; + this.match(trinoSqlParserParser.UPDATE); + this.state = 943; + this.qualifiedName(); + this.state = 944; + this.match(trinoSqlParserParser.SET); + this.state = 945; + this.updateAssignment(); + this.state = 950; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 946; + this.match(trinoSqlParserParser.T__3); + this.state = 947; + this.updateAssignment(); + } + } + this.state = 952; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 955; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===241) { + { + this.state = 953; + this.match(trinoSqlParserParser.WHERE); + this.state = 954; + (localctx as UpdateContext)._where = this.booleanExpression(0); + } + } + + } + break; + case 73: + localctx = new MergeContext(this, localctx); + this.enterOuterAlt(localctx, 73); + { + this.state = 957; + this.match(trinoSqlParserParser.MERGE); + this.state = 958; + this.match(trinoSqlParserParser.INTO); + this.state = 959; + this.qualifiedName(); + this.state = 964; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 17)) & ~0x1F) === 0 && ((1 << (_la - 17)) & 1140015023) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & 3192429231) !== 0) || ((((_la - 90)) & ~0x1F) === 0 && ((1 << (_la - 90)) & 3134381375) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 3162472435) !== 0) || ((((_la - 155)) & ~0x1F) === 0 && ((1 << (_la - 155)) & 4286316499) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4009750519) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 525170103) !== 0) || ((((_la - 268)) & ~0x1F) === 0 && ((1 << (_la - 268)) & 15) !== 0)) { + { + this.state = 961; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===26) { + { + this.state = 960; + this.match(trinoSqlParserParser.AS); + } + } + + this.state = 963; + this.identifier(); + } + } + + this.state = 966; + this.match(trinoSqlParserParser.USING); + this.state = 967; + this.relation(0); + this.state = 968; + this.match(trinoSqlParserParser.ON); + this.state = 969; + this.expression(); + this.state = 971; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 970; + this.mergeCase(); + } + } + this.state = 973; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la===240); + } + break; + case 74: + localctx = new ShowTableCommentContext(this, localctx); + this.enterOuterAlt(localctx, 74); + { + this.state = 975; + this.match(trinoSqlParserParser.SHOW); + this.state = 976; + this.match(trinoSqlParserParser.COMMENT); + this.state = 977; + this.match(trinoSqlParserParser.ON); + this.state = 978; + this.match(trinoSqlParserParser.TABLE); + this.state = 979; + this.qualifiedName(); + } + break; + case 75: + localctx = new ShowColumnCommentContext(this, localctx); + this.enterOuterAlt(localctx, 75); + { + this.state = 980; + this.match(trinoSqlParserParser.SHOW); + this.state = 981; + this.match(trinoSqlParserParser.COMMENT); + this.state = 982; + this.match(trinoSqlParserParser.ON); + this.state = 983; + this.match(trinoSqlParserParser.COLUMN); + this.state = 984; + this.qualifiedName(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public query(): QueryContext { + let localctx: QueryContext = new QueryContext(this, this._ctx, this.state); + this.enterRule(localctx, 16, trinoSqlParserParser.RULE_query); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 988; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===243) { + { + this.state = 987; + this.with_(); + } + } + + this.state = 990; + this.queryNoWith(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public with_(): WithContext { + let localctx: WithContext = new WithContext(this, this._ctx, this.state); + this.enterRule(localctx, 18, trinoSqlParserParser.RULE_with); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 992; + this.match(trinoSqlParserParser.WITH); + this.state = 994; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===178) { + { + this.state = 993; + this.match(trinoSqlParserParser.RECURSIVE); + } + } + + this.state = 996; + this.namedQuery(); + this.state = 1001; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 997; + this.match(trinoSqlParserParser.T__3); + this.state = 998; + this.namedQuery(); + } + } + this.state = 1003; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public tableElement(): TableElementContext { + let localctx: TableElementContext = new TableElementContext(this, this._ctx, this.state); + this.enterRule(localctx, 20, trinoSqlParserParser.RULE_tableElement); + try { + this.state = 1006; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 17: + case 18: + case 19: + case 20: + case 22: + case 24: + case 25: + case 27: + case 28: + case 29: + case 30: + case 33: + case 34: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 47: + case 56: + case 57: + case 58: + case 59: + case 61: + case 63: + case 65: + case 67: + case 68: + case 71: + case 75: + case 78: + case 81: + case 82: + case 83: + case 84: + case 85: + case 87: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 98: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 110: + case 112: + case 113: + case 115: + case 117: + case 118: + case 119: + case 121: + case 123: + case 124: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 149: + case 150: + case 151: + case 152: + case 154: + case 155: + case 156: + case 159: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 174: + case 175: + case 176: + case 177: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 224: + case 225: + case 227: + case 228: + case 230: + case 232: + case 233: + case 234: + case 236: + case 238: + case 239: + case 242: + case 244: + case 245: + case 246: + case 247: + case 248: + case 268: + case 269: + case 270: + case 271: + this.enterOuterAlt(localctx, 1); + { + this.state = 1004; + this.columnDefinition(); + } + break; + case 122: + this.enterOuterAlt(localctx, 2); + { + this.state = 1005; + this.likeClause(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public columnDefinition(): ColumnDefinitionContext { + let localctx: ColumnDefinitionContext = new ColumnDefinitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 22, trinoSqlParserParser.RULE_columnDefinition); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1008; + this.identifier(); + this.state = 1009; + this.type_(0); + this.state = 1012; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 116, this._ctx) ) { + case 1: + { + this.state = 1010; + this.match(trinoSqlParserParser.NOT); + this.state = 1011; + this.match(trinoSqlParserParser.NULL); + } + break; + } + this.state = 1016; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 117, this._ctx) ) { + case 1: + { + this.state = 1014; + this.match(trinoSqlParserParser.COMMENT); + this.state = 1015; + this.string_(); + } + break; + } + this.state = 1020; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 118, this._ctx) ) { + case 1: + { + this.state = 1018; + this.match(trinoSqlParserParser.WITH); + this.state = 1019; + this.properties(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public likeClause(): LikeClauseContext { + let localctx: LikeClauseContext = new LikeClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 24, trinoSqlParserParser.RULE_likeClause); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1022; + this.match(trinoSqlParserParser.LIKE); + this.state = 1023; + this.qualifiedName(); + this.state = 1026; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===75 || _la===104) { + { + this.state = 1024; + localctx._optionType = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===75 || _la===104)) { + localctx._optionType = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1025; + this.match(trinoSqlParserParser.PROPERTIES); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public properties(): PropertiesContext { + let localctx: PropertiesContext = new PropertiesContext(this, this._ctx, this.state); + this.enterRule(localctx, 26, trinoSqlParserParser.RULE_properties); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1028; + this.match(trinoSqlParserParser.T__1); + this.state = 1029; + this.propertyAssignments(); + this.state = 1030; + this.match(trinoSqlParserParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public propertyAssignments(): PropertyAssignmentsContext { + let localctx: PropertyAssignmentsContext = new PropertyAssignmentsContext(this, this._ctx, this.state); + this.enterRule(localctx, 28, trinoSqlParserParser.RULE_propertyAssignments); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1032; + this.property(); + this.state = 1037; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1033; + this.match(trinoSqlParserParser.T__3); + this.state = 1034; + this.property(); + } + } + this.state = 1039; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public property(): PropertyContext { + let localctx: PropertyContext = new PropertyContext(this, this._ctx, this.state); + this.enterRule(localctx, 30, trinoSqlParserParser.RULE_property); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1040; + this.identifier(); + this.state = 1041; + this.match(trinoSqlParserParser.EQ); + this.state = 1042; + this.propertyValue(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public propertyValue(): PropertyValueContext { + let localctx: PropertyValueContext = new PropertyValueContext(this, this._ctx, this.state); + this.enterRule(localctx, 32, trinoSqlParserParser.RULE_propertyValue); + try { + this.state = 1046; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 121, this._ctx) ) { + case 1: + localctx = new DefaultPropertyValueContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1044; + this.match(trinoSqlParserParser.DEFAULT); + } + break; + case 2: + localctx = new NonDefaultPropertyValueContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1045; + this.expression(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public queryNoWith(): QueryNoWithContext { + let localctx: QueryNoWithContext = new QueryNoWithContext(this, this._ctx, this.state); + this.enterRule(localctx, 34, trinoSqlParserParser.RULE_queryNoWith); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1048; + this.queryTerm(0); + this.state = 1059; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===158) { + { + this.state = 1049; + this.match(trinoSqlParserParser.ORDER); + this.state = 1050; + this.match(trinoSqlParserParser.BY); + this.state = 1051; + this.sortItem(); + this.state = 1056; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1052; + this.match(trinoSqlParserParser.T__3); + this.state = 1053; + this.sortItem(); + } + } + this.state = 1058; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1066; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 125, this._ctx) ) { + case 1: + { + this.state = 1061; + this.match(trinoSqlParserParser.OFFSET); + this.state = 1062; + localctx._offset = this.rowCount(); + this.state = 1064; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 124, this._ctx) ) { + case 1: + { + this.state = 1063; + _la = this._input.LA(1); + if(!(_la===192 || _la===193)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + } + break; + } + this.state = 1081; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 128, this._ctx) ) { + case 1: + { + { + this.state = 1068; + this.match(trinoSqlParserParser.LIMIT); + this.state = 1069; + localctx._limit = this.limitRowCount(); + } + } + break; + case 2: + { + { + this.state = 1070; + this.match(trinoSqlParserParser.FETCH); + this.state = 1071; + _la = this._input.LA(1); + if(!(_la===84 || _la===139)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1073; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===261 || _la===265) { + { + this.state = 1072; + localctx._fetchFirst = this.rowCount(); + } + } + + this.state = 1075; + _la = this._input.LA(1); + if(!(_la===192 || _la===193)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1079; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 155: + { + this.state = 1076; + this.match(trinoSqlParserParser.ONLY); + } + break; + case 243: + { + this.state = 1077; + this.match(trinoSqlParserParser.WITH); + this.state = 1078; + this.match(trinoSqlParserParser.TIES); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public limitRowCount(): LimitRowCountContext { + let localctx: LimitRowCountContext = new LimitRowCountContext(this, this._ctx, this.state); + this.enterRule(localctx, 36, trinoSqlParserParser.RULE_limitRowCount); + try { + this.state = 1085; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 20: + this.enterOuterAlt(localctx, 1); + { + this.state = 1083; + this.match(trinoSqlParserParser.ALL); + } + break; + case 261: + case 265: + this.enterOuterAlt(localctx, 2); + { + this.state = 1084; + this.rowCount(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public rowCount(): RowCountContext { + let localctx: RowCountContext = new RowCountContext(this, this._ctx, this.state); + this.enterRule(localctx, 38, trinoSqlParserParser.RULE_rowCount); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1087; + _la = this._input.LA(1); + if(!(_la===261 || _la===265)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + + public queryTerm(): QueryTermContext; + public queryTerm(_p: number): QueryTermContext; + // @RuleVersion(0) + public queryTerm(_p?: number): QueryTermContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let localctx: QueryTermContext = new QueryTermContext(this, this._ctx, _parentState); + let _prevctx: QueryTermContext = localctx; + let _startState: number = 40; + this.enterRecursionRule(localctx, 40, trinoSqlParserParser.RULE_queryTerm, _p); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + { + localctx = new QueryTermDefaultContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + + this.state = 1090; + this.queryPrimary(); + } + this._ctx.stop = this._input.LT(-1); + this.state = 1106; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 133, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = localctx; + { + this.state = 1104; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 132, this._ctx) ) { + case 1: + { + localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState)); + (localctx as SetOperationContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_queryTerm); + this.state = 1092; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 1093; + (localctx as SetOperationContext)._operator = this.match(trinoSqlParserParser.INTERSECT); + this.state = 1095; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===20 || _la===66) { + { + this.state = 1094; + this.setQuantifier(); + } + } + + this.state = 1097; + (localctx as SetOperationContext)._right = this.queryTerm(3); + } + break; + case 2: + { + localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState)); + (localctx as SetOperationContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_queryTerm); + this.state = 1098; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 1099; + (localctx as SetOperationContext)._operator = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===74 || _la===229)) { + (localctx as SetOperationContext)._operator = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1101; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===20 || _la===66) { + { + this.state = 1100; + this.setQuantifier(); + } + } + + this.state = 1103; + (localctx as SetOperationContext)._right = this.queryTerm(2); + } + break; + } + } + } + this.state = 1108; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 133, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return localctx; + } + // @RuleVersion(0) + public queryPrimary(): QueryPrimaryContext { + let localctx: QueryPrimaryContext = new QueryPrimaryContext(this, this._ctx, this.state); + this.enterRule(localctx, 42, trinoSqlParserParser.RULE_queryPrimary); + try { + let _alt: number; + this.state = 1125; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 200: + localctx = new QueryPrimaryDefaultContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1109; + this.querySpecification(); + } + break; + case 212: + localctx = new TableContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1110; + this.match(trinoSqlParserParser.TABLE); + this.state = 1111; + this.qualifiedName(); + } + break; + case 237: + localctx = new InlineTableContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 1112; + this.match(trinoSqlParserParser.VALUES); + this.state = 1113; + this.expression(); + this.state = 1118; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 134, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1114; + this.match(trinoSqlParserParser.T__3); + this.state = 1115; + this.expression(); + } + } + } + this.state = 1120; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 134, this._ctx); + } + } + break; + case 2: + localctx = new SubqueryContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 1121; + this.match(trinoSqlParserParser.T__1); + this.state = 1122; + this.queryNoWith(); + this.state = 1123; + this.match(trinoSqlParserParser.T__2); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public sortItem(): SortItemContext { + let localctx: SortItemContext = new SortItemContext(this, this._ctx, this.state); + this.enterRule(localctx, 44, trinoSqlParserParser.RULE_sortItem); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1127; + this.expression(); + this.state = 1129; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 136, this._ctx) ) { + case 1: + { + this.state = 1128; + localctx._ordering = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===27 || _la===63)) { + localctx._ordering = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 1133; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 137, this._ctx) ) { + case 1: + { + this.state = 1131; + this.match(trinoSqlParserParser.NULLS); + this.state = 1132; + localctx._nullOrdering = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===84 || _la===118)) { + localctx._nullOrdering = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public querySpecification(): QuerySpecificationContext { + let localctx: QuerySpecificationContext = new QuerySpecificationContext(this, this._ctx, this.state); + this.enterRule(localctx, 46, trinoSqlParserParser.RULE_querySpecification); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 1135; + this.match(trinoSqlParserParser.SELECT); + this.state = 1137; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 138, this._ctx) ) { + case 1: + { + this.state = 1136; + this.setQuantifier(); + } + break; + } + this.state = 1139; + this.selectItem(); + this.state = 1144; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 139, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1140; + this.match(trinoSqlParserParser.T__3); + this.state = 1141; + this.selectItem(); + } + } + } + this.state = 1146; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 139, this._ctx); + } + this.state = 1156; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 141, this._ctx) ) { + case 1: + { + this.state = 1147; + this.match(trinoSqlParserParser.FROM); + this.state = 1148; + this.relation(0); + this.state = 1153; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 140, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1149; + this.match(trinoSqlParserParser.T__3); + this.state = 1150; + this.relation(0); + } + } + } + this.state = 1155; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 140, this._ctx); + } + } + break; + } + this.state = 1160; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 142, this._ctx) ) { + case 1: + { + this.state = 1158; + this.match(trinoSqlParserParser.WHERE); + this.state = 1159; + localctx._where = this.booleanExpression(0); + } + break; + } + this.state = 1165; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 143, this._ctx) ) { + case 1: + { + this.state = 1162; + this.match(trinoSqlParserParser.GROUP); + this.state = 1163; + this.match(trinoSqlParserParser.BY); + this.state = 1164; + this.groupBy(); + } + break; + } + this.state = 1169; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 144, this._ctx) ) { + case 1: + { + this.state = 1167; + this.match(trinoSqlParserParser.HAVING); + this.state = 1168; + localctx._having = this.booleanExpression(0); + } + break; + } + this.state = 1180; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 146, this._ctx) ) { + case 1: + { + this.state = 1171; + this.match(trinoSqlParserParser.WINDOW); + this.state = 1172; + this.windowDefinition(); + this.state = 1177; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 145, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1173; + this.match(trinoSqlParserParser.T__3); + this.state = 1174; + this.windowDefinition(); + } + } + } + this.state = 1179; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 145, this._ctx); + } + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public groupBy(): GroupByContext { + let localctx: GroupByContext = new GroupByContext(this, this._ctx, this.state); + this.enterRule(localctx, 48, trinoSqlParserParser.RULE_groupBy); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 1183; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 147, this._ctx) ) { + case 1: + { + this.state = 1182; + this.setQuantifier(); + } + break; + } + this.state = 1185; + this.groupingElement(); + this.state = 1190; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1186; + this.match(trinoSqlParserParser.T__3); + this.state = 1187; + this.groupingElement(); + } + } + } + this.state = 1192; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public groupingElement(): GroupingElementContext { + let localctx: GroupingElementContext = new GroupingElementContext(this, this._ctx, this.state); + this.enterRule(localctx, 50, trinoSqlParserParser.RULE_groupingElement); + let _la: number; + try { + this.state = 1233; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 154, this._ctx) ) { + case 1: + localctx = new SingleGroupingSetContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1193; + this.groupingSet(); + } + break; + case 2: + localctx = new RollupContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1194; + this.match(trinoSqlParserParser.ROLLUP); + this.state = 1195; + this.match(trinoSqlParserParser.T__1); + this.state = 1204; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2069757956) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1476117503) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120217677) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252345787) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153981439) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286054271) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237637037) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + this.state = 1196; + this.expression(); + this.state = 1201; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1197; + this.match(trinoSqlParserParser.T__3); + this.state = 1198; + this.expression(); + } + } + this.state = 1203; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1206; + this.match(trinoSqlParserParser.T__2); + } + break; + case 3: + localctx = new CubeContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 1207; + this.match(trinoSqlParserParser.CUBE); + this.state = 1208; + this.match(trinoSqlParserParser.T__1); + this.state = 1217; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2069757956) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1476117503) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120217677) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252345787) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153981439) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286054271) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237637037) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + this.state = 1209; + this.expression(); + this.state = 1214; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1210; + this.match(trinoSqlParserParser.T__3); + this.state = 1211; + this.expression(); + } + } + this.state = 1216; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1219; + this.match(trinoSqlParserParser.T__2); + } + break; + case 4: + localctx = new MultipleGroupingSetsContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 1220; + this.match(trinoSqlParserParser.GROUPING); + this.state = 1221; + this.match(trinoSqlParserParser.SETS); + this.state = 1222; + this.match(trinoSqlParserParser.T__1); + this.state = 1223; + this.groupingSet(); + this.state = 1228; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1224; + this.match(trinoSqlParserParser.T__3); + this.state = 1225; + this.groupingSet(); + } + } + this.state = 1230; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1231; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public groupingSet(): GroupingSetContext { + let localctx: GroupingSetContext = new GroupingSetContext(this, this._ctx, this.state); + this.enterRule(localctx, 52, trinoSqlParserParser.RULE_groupingSet); + let _la: number; + try { + this.state = 1248; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 157, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 1235; + this.match(trinoSqlParserParser.T__1); + this.state = 1244; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2069757956) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1476117503) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120217677) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252345787) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153981439) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286054271) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237637037) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + this.state = 1236; + this.expression(); + this.state = 1241; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1237; + this.match(trinoSqlParserParser.T__3); + this.state = 1238; + this.expression(); + } + } + this.state = 1243; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1246; + this.match(trinoSqlParserParser.T__2); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1247; + this.expression(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windowDefinition(): WindowDefinitionContext { + let localctx: WindowDefinitionContext = new WindowDefinitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 54, trinoSqlParserParser.RULE_windowDefinition); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1250; + localctx._name = this.identifier(); + this.state = 1251; + this.match(trinoSqlParserParser.AS); + this.state = 1252; + this.match(trinoSqlParserParser.T__1); + this.state = 1253; + this.windowSpecification(); + this.state = 1254; + this.match(trinoSqlParserParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windowSpecification(): WindowSpecificationContext { + let localctx: WindowSpecificationContext = new WindowSpecificationContext(this, this._ctx, this.state); + this.enterRule(localctx, 56, trinoSqlParserParser.RULE_windowSpecification); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1257; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 158, this._ctx) ) { + case 1: + { + this.state = 1256; + localctx._existingWindowName = this.identifier(); + } + break; + } + this.state = 1269; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===163) { + { + this.state = 1259; + this.match(trinoSqlParserParser.PARTITION); + this.state = 1260; + this.match(trinoSqlParserParser.BY); + this.state = 1261; + localctx._expression = this.expression(); + localctx._partition.push(localctx._expression); + this.state = 1266; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1262; + this.match(trinoSqlParserParser.T__3); + this.state = 1263; + localctx._expression = this.expression(); + localctx._partition.push(localctx._expression); + } + } + this.state = 1268; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1281; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===158) { + { + this.state = 1271; + this.match(trinoSqlParserParser.ORDER); + this.state = 1272; + this.match(trinoSqlParserParser.BY); + this.state = 1273; + this.sortItem(); + this.state = 1278; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1274; + this.match(trinoSqlParserParser.T__3); + this.state = 1275; + this.sortItem(); + } + } + this.state = 1280; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1284; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===98 || _la===134 || _la===176 || _la===193) { + { + this.state = 1283; + this.windowFrame(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public namedQuery(): NamedQueryContext { + let localctx: NamedQueryContext = new NamedQueryContext(this, this._ctx, this.state); + this.enterRule(localctx, 58, trinoSqlParserParser.RULE_namedQuery); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1286; + localctx._name = this.identifier(); + this.state = 1288; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===2) { + { + this.state = 1287; + this.columnAliases(); + } + } + + this.state = 1290; + this.match(trinoSqlParserParser.AS); + this.state = 1291; + this.match(trinoSqlParserParser.T__1); + this.state = 1292; + this.query(); + this.state = 1293; + this.match(trinoSqlParserParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public setQuantifier(): SetQuantifierContext { + let localctx: SetQuantifierContext = new SetQuantifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 60, trinoSqlParserParser.RULE_setQuantifier); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1295; + _la = this._input.LA(1); + if(!(_la===20 || _la===66)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public selectItem(): SelectItemContext { + let localctx: SelectItemContext = new SelectItemContext(this, this._ctx, this.state); + this.enterRule(localctx, 62, trinoSqlParserParser.RULE_selectItem); + let _la: number; + try { + this.state = 1312; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 168, this._ctx) ) { + case 1: + localctx = new SelectSingleContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1297; + this.expression(); + this.state = 1302; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 166, this._ctx) ) { + case 1: + { + this.state = 1299; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===26) { + { + this.state = 1298; + this.match(trinoSqlParserParser.AS); + } + } + + this.state = 1301; + this.identifier(); + } + break; + } + } + break; + case 2: + localctx = new SelectAllContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1304; + this.primaryExpression(0); + this.state = 1305; + this.match(trinoSqlParserParser.T__0); + this.state = 1306; + this.match(trinoSqlParserParser.ASTERISK); + this.state = 1309; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 167, this._ctx) ) { + case 1: + { + this.state = 1307; + this.match(trinoSqlParserParser.AS); + this.state = 1308; + this.columnAliases(); + } + break; + } + } + break; + case 3: + localctx = new SelectAllContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 1311; + this.match(trinoSqlParserParser.ASTERISK); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + + public relation(): RelationContext; + public relation(_p: number): RelationContext; + // @RuleVersion(0) + public relation(_p?: number): RelationContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let localctx: RelationContext = new RelationContext(this, this._ctx, _parentState); + let _prevctx: RelationContext = localctx; + let _startState: number = 64; + this.enterRecursionRule(localctx, 64, trinoSqlParserParser.RULE_relation, _p); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + { + localctx = new RelationDefaultContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + + this.state = 1315; + this.sampledRelation(); + } + this._ctx.stop = this._input.LT(-1); + this.state = 1335; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 170, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = localctx; + { + { + localctx = new JoinRelationContext(this, new RelationContext(this, _parentctx, _parentState)); + (localctx as JoinRelationContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_relation); + this.state = 1317; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 1331; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 45: + { + this.state = 1318; + this.match(trinoSqlParserParser.CROSS); + this.state = 1319; + this.match(trinoSqlParserParser.JOIN); + this.state = 1320; + (localctx as JoinRelationContext)._right = this.sampledRelation(); + } + break; + case 89: + case 106: + case 116: + case 120: + case 187: + { + this.state = 1321; + this.joinType(); + this.state = 1322; + this.match(trinoSqlParserParser.JOIN); + this.state = 1323; + (localctx as JoinRelationContext)._rightRelation = this.relation(0); + this.state = 1324; + this.joinCriteria(); + } + break; + case 138: + { + this.state = 1326; + this.match(trinoSqlParserParser.NATURAL); + this.state = 1327; + this.joinType(); + this.state = 1328; + this.match(trinoSqlParserParser.JOIN); + this.state = 1329; + (localctx as JoinRelationContext)._right = this.sampledRelation(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + } + this.state = 1337; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 170, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return localctx; + } + // @RuleVersion(0) + public joinType(): JoinTypeContext { + let localctx: JoinTypeContext = new JoinTypeContext(this, this._ctx, this.state); + this.enterRule(localctx, 66, trinoSqlParserParser.RULE_joinType); + let _la: number; + try { + this.state = 1353; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 106: + case 116: + this.enterOuterAlt(localctx, 1); + { + this.state = 1339; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===106) { + { + this.state = 1338; + this.match(trinoSqlParserParser.INNER); + } + } + + } + break; + case 120: + this.enterOuterAlt(localctx, 2); + { + this.state = 1341; + this.match(trinoSqlParserParser.LEFT); + this.state = 1343; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===160) { + { + this.state = 1342; + this.match(trinoSqlParserParser.OUTER); + } + } + + } + break; + case 187: + this.enterOuterAlt(localctx, 3); + { + this.state = 1345; + this.match(trinoSqlParserParser.RIGHT); + this.state = 1347; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===160) { + { + this.state = 1346; + this.match(trinoSqlParserParser.OUTER); + } + } + + } + break; + case 89: + this.enterOuterAlt(localctx, 4); + { + this.state = 1349; + this.match(trinoSqlParserParser.FULL); + this.state = 1351; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===160) { + { + this.state = 1350; + this.match(trinoSqlParserParser.OUTER); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public joinCriteria(): JoinCriteriaContext { + let localctx: JoinCriteriaContext = new JoinCriteriaContext(this, this._ctx, this.state); + this.enterRule(localctx, 68, trinoSqlParserParser.RULE_joinCriteria); + let _la: number; + try { + this.state = 1369; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 153: + this.enterOuterAlt(localctx, 1); + { + this.state = 1355; + this.match(trinoSqlParserParser.ON); + this.state = 1356; + this.booleanExpression(0); + } + break; + case 235: + this.enterOuterAlt(localctx, 2); + { + this.state = 1357; + this.match(trinoSqlParserParser.USING); + this.state = 1358; + this.match(trinoSqlParserParser.T__1); + this.state = 1359; + this.identifier(); + this.state = 1364; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1360; + this.match(trinoSqlParserParser.T__3); + this.state = 1361; + this.identifier(); + } + } + this.state = 1366; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1367; + this.match(trinoSqlParserParser.T__2); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public sampledRelation(): SampledRelationContext { + let localctx: SampledRelationContext = new SampledRelationContext(this, this._ctx, this.state); + this.enterRule(localctx, 70, trinoSqlParserParser.RULE_sampledRelation); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1371; + this.patternRecognition(); + this.state = 1378; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 178, this._ctx) ) { + case 1: + { + this.state = 1372; + this.match(trinoSqlParserParser.TABLESAMPLE); + this.state = 1373; + this.sampleType(); + this.state = 1374; + this.match(trinoSqlParserParser.T__1); + this.state = 1375; + localctx._percentage = this.expression(); + this.state = 1376; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public sampleType(): SampleTypeContext { + let localctx: SampleTypeContext = new SampleTypeContext(this, this._ctx, this.state); + this.enterRule(localctx, 72, trinoSqlParserParser.RULE_sampleType); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1380; + _la = this._input.LA(1); + if(!(_la===30 || _la===211)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public patternRecognition(): PatternRecognitionContext { + let localctx: PatternRecognitionContext = new PatternRecognitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 74, trinoSqlParserParser.RULE_patternRecognition); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1382; + this.aliasedRelation(); + this.state = 1465; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 194, this._ctx) ) { + case 1: + { + this.state = 1383; + this.match(trinoSqlParserParser.MATCH_RECOGNIZE); + this.state = 1384; + this.match(trinoSqlParserParser.T__1); + this.state = 1395; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===163) { + { + this.state = 1385; + this.match(trinoSqlParserParser.PARTITION); + this.state = 1386; + this.match(trinoSqlParserParser.BY); + this.state = 1387; + localctx._expression = this.expression(); + localctx._partition.push(localctx._expression); + this.state = 1392; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1388; + this.match(trinoSqlParserParser.T__3); + this.state = 1389; + localctx._expression = this.expression(); + localctx._partition.push(localctx._expression); + } + } + this.state = 1394; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1407; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===158) { + { + this.state = 1397; + this.match(trinoSqlParserParser.ORDER); + this.state = 1398; + this.match(trinoSqlParserParser.BY); + this.state = 1399; + this.sortItem(); + this.state = 1404; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1400; + this.match(trinoSqlParserParser.T__3); + this.state = 1401; + this.sortItem(); + } + } + this.state = 1406; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1418; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===134) { + { + this.state = 1409; + this.match(trinoSqlParserParser.MEASURES); + this.state = 1410; + this.measureDefinition(); + this.state = 1415; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1411; + this.match(trinoSqlParserParser.T__3); + this.state = 1412; + this.measureDefinition(); + } + } + this.state = 1417; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1421; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===20 || _la===154) { + { + this.state = 1420; + this.rowsPerMatch(); + } + } + + this.state = 1426; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===19) { + { + this.state = 1423; + this.match(trinoSqlParserParser.AFTER); + this.state = 1424; + this.match(trinoSqlParserParser.MATCH); + this.state = 1425; + this.skipTo(); + } + } + + this.state = 1429; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===105 || _la===199) { + { + this.state = 1428; + _la = this._input.LA(1); + if(!(_la===105 || _la===199)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1431; + this.match(trinoSqlParserParser.PATTERN); + this.state = 1432; + this.match(trinoSqlParserParser.T__1); + this.state = 1433; + this.rowPattern(0); + this.state = 1434; + this.match(trinoSqlParserParser.T__2); + this.state = 1444; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===209) { + { + this.state = 1435; + this.match(trinoSqlParserParser.SUBSET); + this.state = 1436; + this.subsetDefinition(); + this.state = 1441; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1437; + this.match(trinoSqlParserParser.T__3); + this.state = 1438; + this.subsetDefinition(); + } + } + this.state = 1443; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1446; + this.match(trinoSqlParserParser.DEFINE); + this.state = 1447; + this.variableDefinition(); + this.state = 1452; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1448; + this.match(trinoSqlParserParser.T__3); + this.state = 1449; + this.variableDefinition(); + } + } + this.state = 1454; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1455; + this.match(trinoSqlParserParser.T__2); + this.state = 1463; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 193, this._ctx) ) { + case 1: + { + this.state = 1457; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===26) { + { + this.state = 1456; + this.match(trinoSqlParserParser.AS); + } + } + + this.state = 1459; + this.identifier(); + this.state = 1461; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 192, this._ctx) ) { + case 1: + { + this.state = 1460; + this.columnAliases(); + } + break; + } + } + break; + } + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public measureDefinition(): MeasureDefinitionContext { + let localctx: MeasureDefinitionContext = new MeasureDefinitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 76, trinoSqlParserParser.RULE_measureDefinition); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1467; + this.expression(); + this.state = 1468; + this.match(trinoSqlParserParser.AS); + this.state = 1469; + this.identifier(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public rowsPerMatch(): RowsPerMatchContext { + let localctx: RowsPerMatchContext = new RowsPerMatchContext(this, this._ctx, this.state); + this.enterRule(localctx, 78, trinoSqlParserParser.RULE_rowsPerMatch); + let _la: number; + try { + this.state = 1482; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 154: + this.enterOuterAlt(localctx, 1); + { + this.state = 1471; + this.match(trinoSqlParserParser.ONE); + this.state = 1472; + this.match(trinoSqlParserParser.ROW); + this.state = 1473; + this.match(trinoSqlParserParser.PER); + this.state = 1474; + this.match(trinoSqlParserParser.MATCH); + } + break; + case 20: + this.enterOuterAlt(localctx, 2); + { + this.state = 1475; + this.match(trinoSqlParserParser.ALL); + this.state = 1476; + this.match(trinoSqlParserParser.ROWS); + this.state = 1477; + this.match(trinoSqlParserParser.PER); + this.state = 1478; + this.match(trinoSqlParserParser.MATCH); + this.state = 1480; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===152 || _la===205 || _la===243) { + { + this.state = 1479; + this.emptyMatchHandling(); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public emptyMatchHandling(): EmptyMatchHandlingContext { + let localctx: EmptyMatchHandlingContext = new EmptyMatchHandlingContext(this, this._ctx, this.state); + this.enterRule(localctx, 80, trinoSqlParserParser.RULE_emptyMatchHandling); + try { + this.state = 1493; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 205: + this.enterOuterAlt(localctx, 1); + { + this.state = 1484; + this.match(trinoSqlParserParser.SHOW); + this.state = 1485; + this.match(trinoSqlParserParser.EMPTY); + this.state = 1486; + this.match(trinoSqlParserParser.MATCHES); + } + break; + case 152: + this.enterOuterAlt(localctx, 2); + { + this.state = 1487; + this.match(trinoSqlParserParser.OMIT); + this.state = 1488; + this.match(trinoSqlParserParser.EMPTY); + this.state = 1489; + this.match(trinoSqlParserParser.MATCHES); + } + break; + case 243: + this.enterOuterAlt(localctx, 3); + { + this.state = 1490; + this.match(trinoSqlParserParser.WITH); + this.state = 1491; + this.match(trinoSqlParserParser.UNMATCHED); + this.state = 1492; + this.match(trinoSqlParserParser.ROWS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public skipTo(): SkipToContext { + let localctx: SkipToContext = new SkipToContext(this, this._ctx, this.state); + this.enterRule(localctx, 82, trinoSqlParserParser.RULE_skipTo); + try { + this.state = 1514; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 198, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 1495; + this.match(trinoSqlParserParser.T__4); + this.state = 1496; + this.match(trinoSqlParserParser.TO); + this.state = 1497; + this.match(trinoSqlParserParser.NEXT); + this.state = 1498; + this.match(trinoSqlParserParser.ROW); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1499; + this.match(trinoSqlParserParser.T__4); + this.state = 1500; + this.match(trinoSqlParserParser.PAST); + this.state = 1501; + this.match(trinoSqlParserParser.LAST); + this.state = 1502; + this.match(trinoSqlParserParser.ROW); + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + this.state = 1503; + this.match(trinoSqlParserParser.T__4); + this.state = 1504; + this.match(trinoSqlParserParser.TO); + this.state = 1505; + this.match(trinoSqlParserParser.FIRST); + this.state = 1506; + this.identifier(); + } + break; + case 4: + this.enterOuterAlt(localctx, 4); + { + this.state = 1507; + this.match(trinoSqlParserParser.T__4); + this.state = 1508; + this.match(trinoSqlParserParser.TO); + this.state = 1509; + this.match(trinoSqlParserParser.LAST); + this.state = 1510; + this.identifier(); + } + break; + case 5: + this.enterOuterAlt(localctx, 5); + { + this.state = 1511; + this.match(trinoSqlParserParser.T__4); + this.state = 1512; + this.match(trinoSqlParserParser.TO); + this.state = 1513; + this.identifier(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public subsetDefinition(): SubsetDefinitionContext { + let localctx: SubsetDefinitionContext = new SubsetDefinitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 84, trinoSqlParserParser.RULE_subsetDefinition); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1516; + localctx._name = this.identifier(); + this.state = 1517; + this.match(trinoSqlParserParser.EQ); + this.state = 1518; + this.match(trinoSqlParserParser.T__1); + this.state = 1519; + localctx._identifier = this.identifier(); + localctx._union.push(localctx._identifier); + this.state = 1524; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1520; + this.match(trinoSqlParserParser.T__3); + this.state = 1521; + localctx._identifier = this.identifier(); + localctx._union.push(localctx._identifier); + } + } + this.state = 1526; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1527; + this.match(trinoSqlParserParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public variableDefinition(): VariableDefinitionContext { + let localctx: VariableDefinitionContext = new VariableDefinitionContext(this, this._ctx, this.state); + this.enterRule(localctx, 86, trinoSqlParserParser.RULE_variableDefinition); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1529; + this.identifier(); + this.state = 1530; + this.match(trinoSqlParserParser.AS); + this.state = 1531; + this.expression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public aliasedRelation(): AliasedRelationContext { + let localctx: AliasedRelationContext = new AliasedRelationContext(this, this._ctx, this.state); + this.enterRule(localctx, 88, trinoSqlParserParser.RULE_aliasedRelation); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1533; + this.relationPrimary(); + this.state = 1541; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 202, this._ctx) ) { + case 1: + { + this.state = 1535; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===26) { + { + this.state = 1534; + this.match(trinoSqlParserParser.AS); + } + } + + this.state = 1537; + this.identifier(); + this.state = 1539; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 201, this._ctx) ) { + case 1: + { + this.state = 1538; + this.columnAliases(); + } + break; + } + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public columnAliases(): ColumnAliasesContext { + let localctx: ColumnAliasesContext = new ColumnAliasesContext(this, this._ctx, this.state); + this.enterRule(localctx, 90, trinoSqlParserParser.RULE_columnAliases); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1543; + this.match(trinoSqlParserParser.T__1); + this.state = 1544; + this.identifier(); + this.state = 1549; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1545; + this.match(trinoSqlParserParser.T__3); + this.state = 1546; + this.identifier(); + } + } + this.state = 1551; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1552; + this.match(trinoSqlParserParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public relationPrimary(): RelationPrimaryContext { + let localctx: RelationPrimaryContext = new RelationPrimaryContext(this, this._ctx, this.state); + this.enterRule(localctx, 92, trinoSqlParserParser.RULE_relationPrimary); + let _la: number; + try { + this.state = 1583; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 206, this._ctx) ) { + case 1: + localctx = new TableNameContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1554; + this.qualifiedName(); + } + break; + case 2: + localctx = new SubqueryRelationContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1555; + this.match(trinoSqlParserParser.T__1); + this.state = 1556; + this.query(); + this.state = 1557; + this.match(trinoSqlParserParser.T__2); + } + break; + case 3: + localctx = new UnnestContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 1559; + this.match(trinoSqlParserParser.UNNEST); + this.state = 1560; + this.match(trinoSqlParserParser.T__1); + this.state = 1561; + this.expression(); + this.state = 1566; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1562; + this.match(trinoSqlParserParser.T__3); + this.state = 1563; + this.expression(); + } + } + this.state = 1568; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1569; + this.match(trinoSqlParserParser.T__2); + this.state = 1572; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 205, this._ctx) ) { + case 1: + { + this.state = 1570; + this.match(trinoSqlParserParser.WITH); + this.state = 1571; + this.match(trinoSqlParserParser.ORDINALITY); + } + break; + } + } + break; + case 4: + localctx = new LateralContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 1574; + this.match(trinoSqlParserParser.LATERAL); + this.state = 1575; + this.match(trinoSqlParserParser.T__1); + this.state = 1576; + this.query(); + this.state = 1577; + this.match(trinoSqlParserParser.T__2); + } + break; + case 5: + localctx = new ParenthesizedRelationContext(this, localctx); + this.enterOuterAlt(localctx, 5); + { + this.state = 1579; + this.match(trinoSqlParserParser.T__1); + this.state = 1580; + this.relation(0); + this.state = 1581; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public expression(): ExpressionContext { + let localctx: ExpressionContext = new ExpressionContext(this, this._ctx, this.state); + this.enterRule(localctx, 94, trinoSqlParserParser.RULE_expression); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1585; + this.booleanExpression(0); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + + public booleanExpression(): BooleanExpressionContext; + public booleanExpression(_p: number): BooleanExpressionContext; + // @RuleVersion(0) + public booleanExpression(_p?: number): BooleanExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let localctx: BooleanExpressionContext = new BooleanExpressionContext(this, this._ctx, _parentState); + let _prevctx: BooleanExpressionContext = localctx; + let _startState: number = 96; + this.enterRecursionRule(localctx, 96, trinoSqlParserParser.RULE_booleanExpression, _p); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 1594; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 2: + case 17: + case 18: + case 19: + case 20: + case 22: + case 24: + case 25: + case 27: + case 28: + case 29: + case 30: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 47: + case 48: + case 49: + case 50: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 58: + case 59: + case 61: + case 63: + case 65: + case 67: + case 68: + case 71: + case 75: + case 77: + case 78: + case 79: + case 80: + case 81: + case 82: + case 83: + case 84: + case 85: + case 87: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 97: + case 98: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 110: + case 112: + case 113: + case 115: + case 117: + case 118: + case 119: + case 121: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 146: + case 148: + case 149: + case 150: + case 151: + case 152: + case 154: + case 155: + case 156: + case 159: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 174: + case 175: + case 176: + case 177: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 223: + case 224: + case 225: + case 227: + case 228: + case 230: + case 232: + case 233: + case 234: + case 236: + case 238: + case 239: + case 242: + case 244: + case 245: + case 246: + case 247: + case 248: + case 255: + case 256: + case 261: + case 262: + case 263: + case 264: + case 265: + case 266: + case 267: + case 268: + case 269: + case 270: + case 271: + { + localctx = new PredicatedContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + + this.state = 1588; + (localctx as PredicatedContext)._valueExpression = this.valueExpression(0); + this.state = 1590; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 207, this._ctx) ) { + case 1: + { + this.state = 1589; + this.predicate((localctx as PredicatedContext)._valueExpression); + } + break; + } + } + break; + case 147: + { + localctx = new LogicalNotContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1592; + this.match(trinoSqlParserParser.NOT); + this.state = 1593; + this.booleanExpression(3); + } + break; + default: + throw new NoViableAltException(this); + } + this._ctx.stop = this._input.LT(-1); + this.state = 1604; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 210, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = localctx; + { + this.state = 1602; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 209, this._ctx) ) { + case 1: + { + localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); + (localctx as LogicalBinaryContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_booleanExpression); + this.state = 1596; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 1597; + (localctx as LogicalBinaryContext)._operator = this.match(trinoSqlParserParser.AND); + this.state = 1598; + (localctx as LogicalBinaryContext)._right = this.booleanExpression(3); + } + break; + case 2: + { + localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); + (localctx as LogicalBinaryContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_booleanExpression); + this.state = 1599; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 1600; + (localctx as LogicalBinaryContext)._operator = this.match(trinoSqlParserParser.OR); + this.state = 1601; + (localctx as LogicalBinaryContext)._right = this.booleanExpression(2); + } + break; + } + } + } + this.state = 1606; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 210, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return localctx; + } + // @RuleVersion(0) + public predicate(value: ParserRuleContext): PredicateContext { + let localctx: PredicateContext = new PredicateContext(this, this._ctx, this.state, value); + this.enterRule(localctx, 98, trinoSqlParserParser.RULE_predicate); + let _la: number; + try { + this.state = 1668; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 219, this._ctx) ) { + case 1: + localctx = new ComparisonContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1607; + this.comparisonOperator(); + this.state = 1608; + (localctx as ComparisonContext)._right = this.valueExpression(0); + } + break; + case 2: + localctx = new QuantifiedComparisonContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1610; + this.comparisonOperator(); + this.state = 1611; + this.comparisonQuantifier(); + this.state = 1612; + this.match(trinoSqlParserParser.T__1); + this.state = 1613; + this.query(); + this.state = 1614; + this.match(trinoSqlParserParser.T__2); + } + break; + case 3: + localctx = new BetweenContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 1617; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===147) { + { + this.state = 1616; + this.match(trinoSqlParserParser.NOT); + } + } + + this.state = 1619; + this.match(trinoSqlParserParser.BETWEEN); + this.state = 1620; + (localctx as BetweenContext)._lower = this.valueExpression(0); + this.state = 1621; + this.match(trinoSqlParserParser.AND); + this.state = 1622; + (localctx as BetweenContext)._upper = this.valueExpression(0); + } + break; + case 4: + localctx = new InListContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 1625; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===147) { + { + this.state = 1624; + this.match(trinoSqlParserParser.NOT); + } + } + + this.state = 1627; + this.match(trinoSqlParserParser.IN); + this.state = 1628; + this.match(trinoSqlParserParser.T__1); + this.state = 1629; + this.expression(); + this.state = 1634; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1630; + this.match(trinoSqlParserParser.T__3); + this.state = 1631; + this.expression(); + } + } + this.state = 1636; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1637; + this.match(trinoSqlParserParser.T__2); + } + break; + case 5: + localctx = new InSubqueryContext(this, localctx); + this.enterOuterAlt(localctx, 5); + { + this.state = 1640; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===147) { + { + this.state = 1639; + this.match(trinoSqlParserParser.NOT); + } + } + + this.state = 1642; + this.match(trinoSqlParserParser.IN); + this.state = 1643; + this.match(trinoSqlParserParser.T__1); + this.state = 1644; + this.query(); + this.state = 1645; + this.match(trinoSqlParserParser.T__2); + } + break; + case 6: + localctx = new LikeContext(this, localctx); + this.enterOuterAlt(localctx, 6); + { + this.state = 1648; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===147) { + { + this.state = 1647; + this.match(trinoSqlParserParser.NOT); + } + } + + this.state = 1650; + this.match(trinoSqlParserParser.LIKE); + this.state = 1651; + (localctx as LikeContext)._pattern = this.valueExpression(0); + this.state = 1654; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 216, this._ctx) ) { + case 1: + { + this.state = 1652; + this.match(trinoSqlParserParser.ESCAPE); + this.state = 1653; + (localctx as LikeContext)._escape = this.valueExpression(0); + } + break; + } + } + break; + case 7: + localctx = new NullPredicateContext(this, localctx); + this.enterOuterAlt(localctx, 7); + { + this.state = 1656; + this.match(trinoSqlParserParser.IS); + this.state = 1658; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===147) { + { + this.state = 1657; + this.match(trinoSqlParserParser.NOT); + } + } + + this.state = 1660; + this.match(trinoSqlParserParser.NULL); + } + break; + case 8: + localctx = new DistinctFromContext(this, localctx); + this.enterOuterAlt(localctx, 8); + { + this.state = 1661; + this.match(trinoSqlParserParser.IS); + this.state = 1663; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===147) { + { + this.state = 1662; + this.match(trinoSqlParserParser.NOT); + } + } + + this.state = 1665; + this.match(trinoSqlParserParser.DISTINCT); + this.state = 1666; + this.match(trinoSqlParserParser.FROM); + this.state = 1667; + (localctx as DistinctFromContext)._right = this.valueExpression(0); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + + public valueExpression(): ValueExpressionContext; + public valueExpression(_p: number): ValueExpressionContext; + // @RuleVersion(0) + public valueExpression(_p?: number): ValueExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let localctx: ValueExpressionContext = new ValueExpressionContext(this, this._ctx, _parentState); + let _prevctx: ValueExpressionContext = localctx; + let _startState: number = 100; + this.enterRecursionRule(localctx, 100, trinoSqlParserParser.RULE_valueExpression, _p); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 1674; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 220, this._ctx) ) { + case 1: + { + localctx = new ValueExpressionDefaultContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + + this.state = 1671; + this.primaryExpression(0); + } + break; + case 2: + { + localctx = new ArithmeticUnaryContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1672; + (localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===255 || _la===256)) { + (localctx as ArithmeticUnaryContext)._operator = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1673; + this.valueExpression(4); + } + break; + } + this._ctx.stop = this._input.LT(-1); + this.state = 1690; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 222, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = localctx; + { + this.state = 1688; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 221, this._ctx) ) { + case 1: + { + localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); + (localctx as ArithmeticBinaryContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_valueExpression); + this.state = 1676; + if (!(this.precpred(this._ctx, 3))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 1677; + (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); + _la = this._input.LA(1); + if(!(((((_la - 257)) & ~0x1F) === 0 && ((1 << (_la - 257)) & 7) !== 0))) { + (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1678; + (localctx as ArithmeticBinaryContext)._right = this.valueExpression(4); + } + break; + case 2: + { + localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); + (localctx as ArithmeticBinaryContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_valueExpression); + this.state = 1679; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 1680; + (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===255 || _la===256)) { + (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1681; + (localctx as ArithmeticBinaryContext)._right = this.valueExpression(3); + } + break; + case 3: + { + localctx = new ConcatenationContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); + (localctx as ConcatenationContext)._left = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_valueExpression); + this.state = 1682; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 1683; + this.match(trinoSqlParserParser.CONCAT); + this.state = 1684; + (localctx as ConcatenationContext)._right = this.valueExpression(2); + } + break; + case 4: + { + localctx = new AtTimeZoneContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_valueExpression); + this.state = 1685; + if (!(this.precpred(this._ctx, 5))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 1686; + this.match(trinoSqlParserParser.AT); + this.state = 1687; + this.timeZoneSpecifier(); + } + break; + } + } + } + this.state = 1692; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 222, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return localctx; + } + + public primaryExpression(): PrimaryExpressionContext; + public primaryExpression(_p: number): PrimaryExpressionContext; + // @RuleVersion(0) + public primaryExpression(_p?: number): PrimaryExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this, this._ctx, _parentState); + let _prevctx: PrimaryExpressionContext = localctx; + let _startState: number = 102; + this.enterRecursionRule(localctx, 102, trinoSqlParserParser.RULE_primaryExpression, _p); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 1942; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 252, this._ctx) ) { + case 1: + { + localctx = new NullLiteralContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + + this.state = 1694; + this.match(trinoSqlParserParser.NULL); + } + break; + case 2: + { + localctx = new IntervalLiteralContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1695; + this.interval(); + } + break; + case 3: + { + localctx = new TypeConstructorContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1696; + this.identifier(); + this.state = 1697; + this.string_(); + } + break; + case 4: + { + localctx = new TypeConstructorContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1699; + this.match(trinoSqlParserParser.DOUBLE); + this.state = 1700; + this.match(trinoSqlParserParser.PRECISION); + this.state = 1701; + this.string_(); + } + break; + case 5: + { + localctx = new NumericLiteralContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1702; + this.number_(); + } + break; + case 6: + { + localctx = new BooleanLiteralContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1703; + this.booleanValue(); + } + break; + case 7: + { + localctx = new StringLiteralContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1704; + this.string_(); + } + break; + case 8: + { + localctx = new BinaryLiteralContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1705; + this.match(trinoSqlParserParser.BINARY_LITERAL); + } + break; + case 9: + { + localctx = new ParameterContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1706; + this.match(trinoSqlParserParser.QUESTION_MARK); + } + break; + case 10: + { + localctx = new PositionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1707; + this.match(trinoSqlParserParser.POSITION); + this.state = 1708; + this.match(trinoSqlParserParser.T__1); + this.state = 1709; + this.valueExpression(0); + this.state = 1710; + this.match(trinoSqlParserParser.IN); + this.state = 1711; + this.valueExpression(0); + this.state = 1712; + this.match(trinoSqlParserParser.T__2); + } + break; + case 11: + { + localctx = new RowConstructorContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1714; + this.match(trinoSqlParserParser.T__1); + this.state = 1715; + this.expression(); + this.state = 1718; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 1716; + this.match(trinoSqlParserParser.T__3); + this.state = 1717; + this.expression(); + } + } + this.state = 1720; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la===4); + this.state = 1722; + this.match(trinoSqlParserParser.T__2); + } + break; + case 12: + { + localctx = new RowConstructorContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1724; + this.match(trinoSqlParserParser.ROW); + this.state = 1725; + this.match(trinoSqlParserParser.T__1); + this.state = 1726; + this.expression(); + this.state = 1731; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1727; + this.match(trinoSqlParserParser.T__3); + this.state = 1728; + this.expression(); + } + } + this.state = 1733; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1734; + this.match(trinoSqlParserParser.T__2); + } + break; + case 13: + { + localctx = new FunctionCallContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1736; + this.qualifiedName(); + this.state = 1737; + this.match(trinoSqlParserParser.T__1); + this.state = 1738; + this.match(trinoSqlParserParser.ASTERISK); + this.state = 1739; + this.match(trinoSqlParserParser.T__2); + this.state = 1741; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 225, this._ctx) ) { + case 1: + { + this.state = 1740; + this.filter(); + } + break; + } + this.state = 1744; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 226, this._ctx) ) { + case 1: + { + this.state = 1743; + this.over(); + } + break; + } + } + break; + case 14: + { + localctx = new FunctionCallContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1747; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 227, this._ctx) ) { + case 1: + { + this.state = 1746; + this.processingMode(); + } + break; + } + this.state = 1749; + this.qualifiedName(); + this.state = 1750; + this.match(trinoSqlParserParser.T__1); + this.state = 1762; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2069757956) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1476117503) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120217679) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252345787) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153981439) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286054271) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237637037) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + this.state = 1752; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 228, this._ctx) ) { + case 1: + { + this.state = 1751; + this.setQuantifier(); + } + break; + } + this.state = 1754; + this.expression(); + this.state = 1759; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1755; + this.match(trinoSqlParserParser.T__3); + this.state = 1756; + this.expression(); + } + } + this.state = 1761; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1774; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===158) { + { + this.state = 1764; + this.match(trinoSqlParserParser.ORDER); + this.state = 1765; + this.match(trinoSqlParserParser.BY); + this.state = 1766; + this.sortItem(); + this.state = 1771; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1767; + this.match(trinoSqlParserParser.T__3); + this.state = 1768; + this.sortItem(); + } + } + this.state = 1773; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1776; + this.match(trinoSqlParserParser.T__2); + this.state = 1778; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 233, this._ctx) ) { + case 1: + { + this.state = 1777; + this.filter(); + } + break; + } + this.state = 1784; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 235, this._ctx) ) { + case 1: + { + this.state = 1781; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===102 || _la===184) { + { + this.state = 1780; + this.nullTreatment(); + } + } + + this.state = 1783; + this.over(); + } + break; + } + } + break; + case 15: + { + localctx = new MeasureContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1786; + this.identifier(); + this.state = 1787; + this.over(); + } + break; + case 16: + { + localctx = new LambdaContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1789; + this.identifier(); + this.state = 1790; + this.match(trinoSqlParserParser.T__5); + this.state = 1791; + this.expression(); + } + break; + case 17: + { + localctx = new LambdaContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1793; + this.match(trinoSqlParserParser.T__1); + this.state = 1802; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 17)) & ~0x1F) === 0 && ((1 << (_la - 17)) & 1140014511) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & 3192429231) !== 0) || ((((_la - 90)) & ~0x1F) === 0 && ((1 << (_la - 90)) & 3134381375) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 3162472435) !== 0) || ((((_la - 155)) & ~0x1F) === 0 && ((1 << (_la - 155)) & 4286316499) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4009750519) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 525170103) !== 0) || ((((_la - 268)) & ~0x1F) === 0 && ((1 << (_la - 268)) & 15) !== 0)) { + { + this.state = 1794; + this.identifier(); + this.state = 1799; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1795; + this.match(trinoSqlParserParser.T__3); + this.state = 1796; + this.identifier(); + } + } + this.state = 1801; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1804; + this.match(trinoSqlParserParser.T__2); + this.state = 1805; + this.match(trinoSqlParserParser.T__5); + this.state = 1806; + this.expression(); + } + break; + case 18: + { + localctx = new SubqueryExpressionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1807; + this.match(trinoSqlParserParser.T__1); + this.state = 1808; + this.query(); + this.state = 1809; + this.match(trinoSqlParserParser.T__2); + } + break; + case 19: + { + localctx = new ExistsContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1811; + this.match(trinoSqlParserParser.EXISTS); + this.state = 1812; + this.match(trinoSqlParserParser.T__1); + this.state = 1813; + this.query(); + this.state = 1814; + this.match(trinoSqlParserParser.T__2); + } + break; + case 20: + { + localctx = new SimpleCaseContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1816; + this.match(trinoSqlParserParser.CASE); + this.state = 1817; + (localctx as SimpleCaseContext)._operand = this.expression(); + this.state = 1819; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 1818; + this.whenClause(); + } + } + this.state = 1821; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la===240); + this.state = 1825; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===70) { + { + this.state = 1823; + this.match(trinoSqlParserParser.ELSE); + this.state = 1824; + (localctx as SimpleCaseContext)._elseExpression = this.expression(); + } + } + + this.state = 1827; + this.match(trinoSqlParserParser.END); + } + break; + case 21: + { + localctx = new SearchedCaseContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1829; + this.match(trinoSqlParserParser.CASE); + this.state = 1831; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 1830; + this.whenClause(); + } + } + this.state = 1833; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la===240); + this.state = 1837; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===70) { + { + this.state = 1835; + this.match(trinoSqlParserParser.ELSE); + this.state = 1836; + (localctx as SearchedCaseContext)._elseExpression = this.expression(); + } + } + + this.state = 1839; + this.match(trinoSqlParserParser.END); + } + break; + case 22: + { + localctx = new CastContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1841; + this.match(trinoSqlParserParser.CAST); + this.state = 1842; + this.match(trinoSqlParserParser.T__1); + this.state = 1843; + this.expression(); + this.state = 1844; + this.match(trinoSqlParserParser.AS); + this.state = 1845; + this.type_(0); + this.state = 1846; + this.match(trinoSqlParserParser.T__2); + } + break; + case 23: + { + localctx = new CastContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1848; + this.match(trinoSqlParserParser.TRY_CAST); + this.state = 1849; + this.match(trinoSqlParserParser.T__1); + this.state = 1850; + this.expression(); + this.state = 1851; + this.match(trinoSqlParserParser.AS); + this.state = 1852; + this.type_(0); + this.state = 1853; + this.match(trinoSqlParserParser.T__2); + } + break; + case 24: + { + localctx = new ArrayConstructorContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1855; + this.match(trinoSqlParserParser.ARRAY); + this.state = 1856; + this.match(trinoSqlParserParser.T__6); + this.state = 1865; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 2069757956) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 1476117503) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 2120217677) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & 4252345787) !== 0) || ((((_la - 129)) & ~0x1F) === 0 && ((1 << (_la - 129)) & 1325399551) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 3153981439) !== 0) || ((((_la - 193)) & ~0x1F) === 0 && ((1 << (_la - 193)) & 4286054271) !== 0) || ((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 3237637037) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 2047) !== 0)) { + { + this.state = 1857; + this.expression(); + this.state = 1862; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1858; + this.match(trinoSqlParserParser.T__3); + this.state = 1859; + this.expression(); + } + } + this.state = 1864; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1867; + this.match(trinoSqlParserParser.T__7); + } + break; + case 25: + { + localctx = new ColumnReferenceContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1868; + this.identifier(); + } + break; + case 26: + { + localctx = new SpecialDateTimeFunctionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1869; + (localctx as SpecialDateTimeFunctionContext)._name = this.match(trinoSqlParserParser.CURRENT_DATE); + } + break; + case 27: + { + localctx = new SpecialDateTimeFunctionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1870; + (localctx as SpecialDateTimeFunctionContext)._name = this.match(trinoSqlParserParser.CURRENT_TIME); + this.state = 1874; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 244, this._ctx) ) { + case 1: + { + this.state = 1871; + this.match(trinoSqlParserParser.T__1); + this.state = 1872; + (localctx as SpecialDateTimeFunctionContext)._precision = this.match(trinoSqlParserParser.INTEGER_VALUE); + this.state = 1873; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + break; + case 28: + { + localctx = new SpecialDateTimeFunctionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1876; + (localctx as SpecialDateTimeFunctionContext)._name = this.match(trinoSqlParserParser.CURRENT_TIMESTAMP); + this.state = 1880; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 245, this._ctx) ) { + case 1: + { + this.state = 1877; + this.match(trinoSqlParserParser.T__1); + this.state = 1878; + (localctx as SpecialDateTimeFunctionContext)._precision = this.match(trinoSqlParserParser.INTEGER_VALUE); + this.state = 1879; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + break; + case 29: + { + localctx = new SpecialDateTimeFunctionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1882; + (localctx as SpecialDateTimeFunctionContext)._name = this.match(trinoSqlParserParser.LOCALTIME); + this.state = 1886; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 246, this._ctx) ) { + case 1: + { + this.state = 1883; + this.match(trinoSqlParserParser.T__1); + this.state = 1884; + (localctx as SpecialDateTimeFunctionContext)._precision = this.match(trinoSqlParserParser.INTEGER_VALUE); + this.state = 1885; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + break; + case 30: + { + localctx = new SpecialDateTimeFunctionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1888; + (localctx as SpecialDateTimeFunctionContext)._name = this.match(trinoSqlParserParser.LOCALTIMESTAMP); + this.state = 1892; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 247, this._ctx) ) { + case 1: + { + this.state = 1889; + this.match(trinoSqlParserParser.T__1); + this.state = 1890; + (localctx as SpecialDateTimeFunctionContext)._precision = this.match(trinoSqlParserParser.INTEGER_VALUE); + this.state = 1891; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + break; + case 31: + { + localctx = new CurrentUserContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1894; + (localctx as CurrentUserContext)._name = this.match(trinoSqlParserParser.CURRENT_USER); + } + break; + case 32: + { + localctx = new CurrentCatalogContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1895; + (localctx as CurrentCatalogContext)._name = this.match(trinoSqlParserParser.CURRENT_CATALOG); + } + break; + case 33: + { + localctx = new CurrentSchemaContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1896; + (localctx as CurrentSchemaContext)._name = this.match(trinoSqlParserParser.CURRENT_SCHEMA); + } + break; + case 34: + { + localctx = new CurrentPathContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1897; + (localctx as CurrentPathContext)._name = this.match(trinoSqlParserParser.CURRENT_PATH); + } + break; + case 35: + { + localctx = new SubstringContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1898; + this.match(trinoSqlParserParser.SUBSTRING); + this.state = 1899; + this.match(trinoSqlParserParser.T__1); + this.state = 1900; + this.valueExpression(0); + this.state = 1901; + this.match(trinoSqlParserParser.FROM); + this.state = 1902; + this.valueExpression(0); + this.state = 1905; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===86) { + { + this.state = 1903; + this.match(trinoSqlParserParser.FOR); + this.state = 1904; + this.valueExpression(0); + } + } + + this.state = 1907; + this.match(trinoSqlParserParser.T__2); + } + break; + case 36: + { + localctx = new NormalizeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1909; + this.match(trinoSqlParserParser.NORMALIZE); + this.state = 1910; + this.match(trinoSqlParserParser.T__1); + this.state = 1911; + this.valueExpression(0); + this.state = 1914; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===4) { + { + this.state = 1912; + this.match(trinoSqlParserParser.T__3); + this.state = 1913; + this.normalForm(); + } + } + + this.state = 1916; + this.match(trinoSqlParserParser.T__2); + } + break; + case 37: + { + localctx = new ExtractContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1918; + this.match(trinoSqlParserParser.EXTRACT); + this.state = 1919; + this.match(trinoSqlParserParser.T__1); + this.state = 1920; + this.identifier(); + this.state = 1921; + this.match(trinoSqlParserParser.FROM); + this.state = 1922; + this.valueExpression(0); + this.state = 1923; + this.match(trinoSqlParserParser.T__2); + } + break; + case 38: + { + localctx = new ParenthesizedExpressionContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1925; + this.match(trinoSqlParserParser.T__1); + this.state = 1926; + this.expression(); + this.state = 1927; + this.match(trinoSqlParserParser.T__2); + } + break; + case 39: + { + localctx = new GroupingOperationContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 1929; + this.match(trinoSqlParserParser.GROUPING); + this.state = 1930; + this.match(trinoSqlParserParser.T__1); + this.state = 1939; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 17)) & ~0x1F) === 0 && ((1 << (_la - 17)) & 1140014511) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & 3192429231) !== 0) || ((((_la - 90)) & ~0x1F) === 0 && ((1 << (_la - 90)) & 3134381375) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 3162472435) !== 0) || ((((_la - 155)) & ~0x1F) === 0 && ((1 << (_la - 155)) & 4286316499) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4009750519) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 525170103) !== 0) || ((((_la - 268)) & ~0x1F) === 0 && ((1 << (_la - 268)) & 15) !== 0)) { + { + this.state = 1931; + this.qualifiedName(); + this.state = 1936; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 1932; + this.match(trinoSqlParserParser.T__3); + this.state = 1933; + this.qualifiedName(); + } + } + this.state = 1938; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 1941; + this.match(trinoSqlParserParser.T__2); + } + break; + } + this._ctx.stop = this._input.LT(-1); + this.state = 1954; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 254, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = localctx; + { + this.state = 1952; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 253, this._ctx) ) { + case 1: + { + localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); + (localctx as SubscriptContext)._value = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_primaryExpression); + this.state = 1944; + if (!(this.precpred(this._ctx, 17))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 17)"); + } + this.state = 1945; + this.match(trinoSqlParserParser.T__6); + this.state = 1946; + (localctx as SubscriptContext)._index = this.valueExpression(0); + this.state = 1947; + this.match(trinoSqlParserParser.T__7); + } + break; + case 2: + { + localctx = new DereferenceContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); + (localctx as DereferenceContext)._base = _prevctx; + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_primaryExpression); + this.state = 1949; + if (!(this.precpred(this._ctx, 15))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 15)"); + } + this.state = 1950; + this.match(trinoSqlParserParser.T__0); + this.state = 1951; + (localctx as DereferenceContext)._fieldName = this.identifier(); + } + break; + } + } + } + this.state = 1956; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 254, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return localctx; + } + // @RuleVersion(0) + public processingMode(): ProcessingModeContext { + let localctx: ProcessingModeContext = new ProcessingModeContext(this, this._ctx, this.state); + this.enterRule(localctx, 104, trinoSqlParserParser.RULE_processingMode); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1957; + _la = this._input.LA(1); + if(!(_la===83 || _la===194)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public nullTreatment(): NullTreatmentContext { + let localctx: NullTreatmentContext = new NullTreatmentContext(this, this._ctx, this.state); + this.enterRule(localctx, 106, trinoSqlParserParser.RULE_nullTreatment); + try { + this.state = 1963; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 102: + this.enterOuterAlt(localctx, 1); + { + this.state = 1959; + this.match(trinoSqlParserParser.IGNORE); + this.state = 1960; + this.match(trinoSqlParserParser.NULLS); + } + break; + case 184: + this.enterOuterAlt(localctx, 2); + { + this.state = 1961; + this.match(trinoSqlParserParser.RESPECT); + this.state = 1962; + this.match(trinoSqlParserParser.NULLS); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public string_(): StringContext { + let localctx: StringContext = new StringContext(this, this._ctx, this.state); + this.enterRule(localctx, 108, trinoSqlParserParser.RULE_string); + try { + this.state = 1971; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 262: + localctx = new BasicStringLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1965; + this.match(trinoSqlParserParser.STRING); + } + break; + case 263: + localctx = new UnicodeStringLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1966; + this.match(trinoSqlParserParser.UNICODE_STRING); + this.state = 1969; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 256, this._ctx) ) { + case 1: + { + this.state = 1967; + this.match(trinoSqlParserParser.UESCAPE); + this.state = 1968; + this.match(trinoSqlParserParser.STRING); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public timeZoneSpecifier(): TimeZoneSpecifierContext { + let localctx: TimeZoneSpecifierContext = new TimeZoneSpecifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 110, trinoSqlParserParser.RULE_timeZoneSpecifier); + try { + this.state = 1979; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 258, this._ctx) ) { + case 1: + localctx = new TimeZoneIntervalContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 1973; + this.match(trinoSqlParserParser.TIME); + this.state = 1974; + this.match(trinoSqlParserParser.ZONE); + this.state = 1975; + this.interval(); + } + break; + case 2: + localctx = new TimeZoneStringContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 1976; + this.match(trinoSqlParserParser.TIME); + this.state = 1977; + this.match(trinoSqlParserParser.ZONE); + this.state = 1978; + this.string_(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public comparisonOperator(): ComparisonOperatorContext { + let localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this, this._ctx, this.state); + this.enterRule(localctx, 112, trinoSqlParserParser.RULE_comparisonOperator); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1981; + _la = this._input.LA(1); + if(!(((((_la - 249)) & ~0x1F) === 0 && ((1 << (_la - 249)) & 63) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public comparisonQuantifier(): ComparisonQuantifierContext { + let localctx: ComparisonQuantifierContext = new ComparisonQuantifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 114, trinoSqlParserParser.RULE_comparisonQuantifier); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1983; + _la = this._input.LA(1); + if(!(_la===20 || _la===24 || _la===206)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public booleanValue(): BooleanValueContext { + let localctx: BooleanValueContext = new BooleanValueContext(this, this._ctx, this.state); + this.enterRule(localctx, 116, trinoSqlParserParser.RULE_booleanValue); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1985; + _la = this._input.LA(1); + if(!(_la===80 || _la===223)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public interval(): IntervalContext { + let localctx: IntervalContext = new IntervalContext(this, this._ctx, this.state); + this.enterRule(localctx, 118, trinoSqlParserParser.RULE_interval); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1987; + this.match(trinoSqlParserParser.INTERVAL); + this.state = 1989; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===255 || _la===256) { + { + this.state = 1988; + localctx._sign = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===255 || _la===256)) { + localctx._sign = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1991; + this.string_(); + this.state = 1992; + localctx._from_ = this.intervalField(); + this.state = 1995; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 260, this._ctx) ) { + case 1: + { + this.state = 1993; + this.match(trinoSqlParserParser.TO); + this.state = 1994; + localctx._to = this.intervalField(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public intervalField(): IntervalFieldContext { + let localctx: IntervalFieldContext = new IntervalFieldContext(this, this._ctx, this.state); + this.enterRule(localctx, 120, trinoSqlParserParser.RULE_intervalField); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1997; + _la = this._input.LA(1); + if(!(_la===58 || _la===100 || _la===136 || _la===137 || _la===197 || _la===247)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public normalForm(): NormalFormContext { + let localctx: NormalFormContext = new NormalFormContext(this, this._ctx, this.state); + this.enterRule(localctx, 122, trinoSqlParserParser.RULE_normalForm); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 1999; + _la = this._input.LA(1); + if(!(((((_la - 140)) & ~0x1F) === 0 && ((1 << (_la - 140)) & 15) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + + public type_(): TypeContext; + public type_(_p: number): TypeContext; + // @RuleVersion(0) + public type_(_p?: number): TypeContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let localctx: TypeContext = new TypeContext(this, this._ctx, _parentState); + let _prevctx: TypeContext = localctx; + let _startState: number = 124; + this.enterRecursionRule(localctx, 124, trinoSqlParserParser.RULE_type, _p); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 2092; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 271, this._ctx) ) { + case 1: + { + localctx = new RowTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + + this.state = 2002; + this.match(trinoSqlParserParser.ROW); + this.state = 2003; + this.match(trinoSqlParserParser.T__1); + this.state = 2004; + this.rowField(); + this.state = 2009; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2005; + this.match(trinoSqlParserParser.T__3); + this.state = 2006; + this.rowField(); + } + } + this.state = 2011; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2012; + this.match(trinoSqlParserParser.T__2); + } + break; + case 2: + { + localctx = new IntervalTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2014; + this.match(trinoSqlParserParser.INTERVAL); + this.state = 2015; + (localctx as IntervalTypeContext)._from_ = this.intervalField(); + this.state = 2018; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 262, this._ctx) ) { + case 1: + { + this.state = 2016; + this.match(trinoSqlParserParser.TO); + this.state = 2017; + (localctx as IntervalTypeContext)._to = this.intervalField(); + } + break; + } + } + break; + case 3: + { + localctx = new DateTimeTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2020; + (localctx as DateTimeTypeContext)._base = this.match(trinoSqlParserParser.TIMESTAMP); + this.state = 2025; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 263, this._ctx) ) { + case 1: + { + this.state = 2021; + this.match(trinoSqlParserParser.T__1); + this.state = 2022; + (localctx as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2023; + this.match(trinoSqlParserParser.T__2); + } + break; + } + this.state = 2030; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 264, this._ctx) ) { + case 1: + { + this.state = 2027; + this.match(trinoSqlParserParser.WITHOUT); + this.state = 2028; + this.match(trinoSqlParserParser.TIME); + this.state = 2029; + this.match(trinoSqlParserParser.ZONE); + } + break; + } + } + break; + case 4: + { + localctx = new DateTimeTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2032; + (localctx as DateTimeTypeContext)._base = this.match(trinoSqlParserParser.TIMESTAMP); + this.state = 2037; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===2) { + { + this.state = 2033; + this.match(trinoSqlParserParser.T__1); + this.state = 2034; + (localctx as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2035; + this.match(trinoSqlParserParser.T__2); + } + } + + this.state = 2039; + this.match(trinoSqlParserParser.WITH); + this.state = 2040; + this.match(trinoSqlParserParser.TIME); + this.state = 2041; + this.match(trinoSqlParserParser.ZONE); + } + break; + case 5: + { + localctx = new DateTimeTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2042; + (localctx as DateTimeTypeContext)._base = this.match(trinoSqlParserParser.TIME); + this.state = 2047; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 266, this._ctx) ) { + case 1: + { + this.state = 2043; + this.match(trinoSqlParserParser.T__1); + this.state = 2044; + (localctx as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2045; + this.match(trinoSqlParserParser.T__2); + } + break; + } + this.state = 2052; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 267, this._ctx) ) { + case 1: + { + this.state = 2049; + this.match(trinoSqlParserParser.WITHOUT); + this.state = 2050; + this.match(trinoSqlParserParser.TIME); + this.state = 2051; + this.match(trinoSqlParserParser.ZONE); + } + break; + } + } + break; + case 6: + { + localctx = new DateTimeTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2054; + (localctx as DateTimeTypeContext)._base = this.match(trinoSqlParserParser.TIME); + this.state = 2059; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===2) { + { + this.state = 2055; + this.match(trinoSqlParserParser.T__1); + this.state = 2056; + (localctx as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2057; + this.match(trinoSqlParserParser.T__2); + } + } + + this.state = 2061; + this.match(trinoSqlParserParser.WITH); + this.state = 2062; + this.match(trinoSqlParserParser.TIME); + this.state = 2063; + this.match(trinoSqlParserParser.ZONE); + } + break; + case 7: + { + localctx = new DoublePrecisionTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2064; + this.match(trinoSqlParserParser.DOUBLE); + this.state = 2065; + this.match(trinoSqlParserParser.PRECISION); + } + break; + case 8: + { + localctx = new LegacyArrayTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2066; + this.match(trinoSqlParserParser.ARRAY); + this.state = 2067; + this.match(trinoSqlParserParser.LT); + this.state = 2068; + this.type_(0); + this.state = 2069; + this.match(trinoSqlParserParser.GT); + } + break; + case 9: + { + localctx = new LegacyMapTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2071; + this.match(trinoSqlParserParser.MAP); + this.state = 2072; + this.match(trinoSqlParserParser.LT); + this.state = 2073; + (localctx as LegacyMapTypeContext)._keyType = this.type_(0); + this.state = 2074; + this.match(trinoSqlParserParser.T__3); + this.state = 2075; + (localctx as LegacyMapTypeContext)._valueType = this.type_(0); + this.state = 2076; + this.match(trinoSqlParserParser.GT); + } + break; + case 10: + { + localctx = new GenericTypeContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + this.state = 2078; + this.identifier(); + this.state = 2090; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 270, this._ctx) ) { + case 1: + { + this.state = 2079; + this.match(trinoSqlParserParser.T__1); + this.state = 2080; + this.typeParameter(); + this.state = 2085; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2081; + this.match(trinoSqlParserParser.T__3); + this.state = 2082; + this.typeParameter(); + } + } + this.state = 2087; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2088; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + break; + } + this._ctx.stop = this._input.LT(-1); + this.state = 2103; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 273, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = localctx; + { + { + localctx = new ArrayTypeContext(this, new TypeContext(this, _parentctx, _parentState)); + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_type); + this.state = 2094; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 2095; + this.match(trinoSqlParserParser.ARRAY); + this.state = 2099; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 272, this._ctx) ) { + case 1: + { + this.state = 2096; + this.match(trinoSqlParserParser.T__6); + this.state = 2097; + this.match(trinoSqlParserParser.INTEGER_VALUE); + this.state = 2098; + this.match(trinoSqlParserParser.T__7); + } + break; + } + } + } + } + this.state = 2105; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 273, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return localctx; + } + // @RuleVersion(0) + public rowField(): RowFieldContext { + let localctx: RowFieldContext = new RowFieldContext(this, this._ctx, this.state); + this.enterRule(localctx, 126, trinoSqlParserParser.RULE_rowField); + try { + this.state = 2110; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 274, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 2106; + this.type_(0); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 2107; + this.identifier(); + this.state = 2108; + this.type_(0); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public typeParameter(): TypeParameterContext { + let localctx: TypeParameterContext = new TypeParameterContext(this, this._ctx, this.state); + this.enterRule(localctx, 128, trinoSqlParserParser.RULE_typeParameter); + try { + this.state = 2114; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 265: + this.enterOuterAlt(localctx, 1); + { + this.state = 2112; + this.match(trinoSqlParserParser.INTEGER_VALUE); + } + break; + case 17: + case 18: + case 19: + case 20: + case 22: + case 24: + case 25: + case 27: + case 28: + case 29: + case 30: + case 33: + case 34: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 47: + case 56: + case 57: + case 58: + case 59: + case 61: + case 63: + case 65: + case 67: + case 68: + case 71: + case 75: + case 78: + case 81: + case 82: + case 83: + case 84: + case 85: + case 87: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 98: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 110: + case 112: + case 113: + case 115: + case 117: + case 118: + case 119: + case 121: + case 123: + case 124: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 149: + case 150: + case 151: + case 152: + case 154: + case 155: + case 156: + case 159: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 174: + case 175: + case 176: + case 177: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 224: + case 225: + case 227: + case 228: + case 230: + case 232: + case 233: + case 234: + case 236: + case 238: + case 239: + case 242: + case 244: + case 245: + case 246: + case 247: + case 248: + case 268: + case 269: + case 270: + case 271: + this.enterOuterAlt(localctx, 2); + { + this.state = 2113; + this.type_(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public whenClause(): WhenClauseContext { + let localctx: WhenClauseContext = new WhenClauseContext(this, this._ctx, this.state); + this.enterRule(localctx, 130, trinoSqlParserParser.RULE_whenClause); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2116; + this.match(trinoSqlParserParser.WHEN); + this.state = 2117; + localctx._condition = this.expression(); + this.state = 2118; + this.match(trinoSqlParserParser.THEN); + this.state = 2119; + localctx._result = this.expression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public filter(): FilterContext { + let localctx: FilterContext = new FilterContext(this, this._ctx, this.state); + this.enterRule(localctx, 132, trinoSqlParserParser.RULE_filter); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2121; + this.match(trinoSqlParserParser.FILTER); + this.state = 2122; + this.match(trinoSqlParserParser.T__1); + this.state = 2123; + this.match(trinoSqlParserParser.WHERE); + this.state = 2124; + this.booleanExpression(0); + this.state = 2125; + this.match(trinoSqlParserParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public mergeCase(): MergeCaseContext { + let localctx: MergeCaseContext = new MergeCaseContext(this, this._ctx, this.state); + this.enterRule(localctx, 134, trinoSqlParserParser.RULE_mergeCase); + let _la: number; + try { + this.state = 2191; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 283, this._ctx) ) { + case 1: + localctx = new MergeUpdateContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2127; + this.match(trinoSqlParserParser.WHEN); + this.state = 2128; + this.match(trinoSqlParserParser.MATCHED); + this.state = 2131; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===23) { + { + this.state = 2129; + this.match(trinoSqlParserParser.AND); + this.state = 2130; + (localctx as MergeUpdateContext)._condition = this.expression(); + } + } + + this.state = 2133; + this.match(trinoSqlParserParser.THEN); + this.state = 2134; + this.match(trinoSqlParserParser.UPDATE); + this.state = 2135; + this.match(trinoSqlParserParser.SET); + this.state = 2136; + (localctx as MergeUpdateContext)._identifier = this.identifier(); + (localctx as MergeUpdateContext)._targets.push((localctx as MergeUpdateContext)._identifier); + this.state = 2137; + this.match(trinoSqlParserParser.EQ); + this.state = 2138; + (localctx as MergeUpdateContext)._expression = this.expression(); + (localctx as MergeUpdateContext)._values.push((localctx as MergeUpdateContext)._expression); + this.state = 2146; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2139; + this.match(trinoSqlParserParser.T__3); + this.state = 2140; + (localctx as MergeUpdateContext)._identifier = this.identifier(); + (localctx as MergeUpdateContext)._targets.push((localctx as MergeUpdateContext)._identifier); + this.state = 2141; + this.match(trinoSqlParserParser.EQ); + this.state = 2142; + (localctx as MergeUpdateContext)._expression = this.expression(); + (localctx as MergeUpdateContext)._values.push((localctx as MergeUpdateContext)._expression); + } + } + this.state = 2148; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case 2: + localctx = new MergeDeleteContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2149; + this.match(trinoSqlParserParser.WHEN); + this.state = 2150; + this.match(trinoSqlParserParser.MATCHED); + this.state = 2153; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===23) { + { + this.state = 2151; + this.match(trinoSqlParserParser.AND); + this.state = 2152; + (localctx as MergeDeleteContext)._condition = this.expression(); + } + } + + this.state = 2155; + this.match(trinoSqlParserParser.THEN); + this.state = 2156; + this.match(trinoSqlParserParser.DELETE); + } + break; + case 3: + localctx = new MergeInsertContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2157; + this.match(trinoSqlParserParser.WHEN); + this.state = 2158; + this.match(trinoSqlParserParser.NOT); + this.state = 2159; + this.match(trinoSqlParserParser.MATCHED); + this.state = 2162; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===23) { + { + this.state = 2160; + this.match(trinoSqlParserParser.AND); + this.state = 2161; + (localctx as MergeInsertContext)._condition = this.expression(); + } + } + + this.state = 2164; + this.match(trinoSqlParserParser.THEN); + this.state = 2165; + this.match(trinoSqlParserParser.INSERT); + this.state = 2177; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===2) { + { + this.state = 2166; + this.match(trinoSqlParserParser.T__1); + this.state = 2167; + (localctx as MergeInsertContext)._identifier = this.identifier(); + (localctx as MergeInsertContext)._targets.push((localctx as MergeInsertContext)._identifier); + this.state = 2172; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2168; + this.match(trinoSqlParserParser.T__3); + this.state = 2169; + (localctx as MergeInsertContext)._identifier = this.identifier(); + (localctx as MergeInsertContext)._targets.push((localctx as MergeInsertContext)._identifier); + } + } + this.state = 2174; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2175; + this.match(trinoSqlParserParser.T__2); + } + } + + this.state = 2179; + this.match(trinoSqlParserParser.VALUES); + this.state = 2180; + this.match(trinoSqlParserParser.T__1); + this.state = 2181; + (localctx as MergeInsertContext)._expression = this.expression(); + (localctx as MergeInsertContext)._values.push((localctx as MergeInsertContext)._expression); + this.state = 2186; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2182; + this.match(trinoSqlParserParser.T__3); + this.state = 2183; + (localctx as MergeInsertContext)._expression = this.expression(); + (localctx as MergeInsertContext)._values.push((localctx as MergeInsertContext)._expression); + } + } + this.state = 2188; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2189; + this.match(trinoSqlParserParser.T__2); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public over(): OverContext { + let localctx: OverContext = new OverContext(this, this._ctx, this.state); + this.enterRule(localctx, 136, trinoSqlParserParser.RULE_over); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2193; + this.match(trinoSqlParserParser.OVER); + this.state = 2199; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 17: + case 18: + case 19: + case 20: + case 22: + case 24: + case 25: + case 27: + case 28: + case 29: + case 30: + case 33: + case 34: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 47: + case 56: + case 57: + case 58: + case 59: + case 61: + case 63: + case 65: + case 67: + case 68: + case 71: + case 75: + case 78: + case 81: + case 82: + case 83: + case 84: + case 85: + case 87: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 98: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 110: + case 112: + case 113: + case 115: + case 117: + case 118: + case 119: + case 121: + case 123: + case 124: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 149: + case 150: + case 151: + case 152: + case 154: + case 155: + case 156: + case 159: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 174: + case 175: + case 176: + case 177: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 224: + case 225: + case 227: + case 228: + case 230: + case 232: + case 233: + case 234: + case 236: + case 238: + case 239: + case 242: + case 244: + case 245: + case 246: + case 247: + case 248: + case 268: + case 269: + case 270: + case 271: + { + this.state = 2194; + localctx._windowName = this.identifier(); + } + break; + case 2: + { + this.state = 2195; + this.match(trinoSqlParserParser.T__1); + this.state = 2196; + this.windowSpecification(); + this.state = 2197; + this.match(trinoSqlParserParser.T__2); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public windowFrame(): WindowFrameContext { + let localctx: WindowFrameContext = new WindowFrameContext(this, this._ctx, this.state); + this.enterRule(localctx, 138, trinoSqlParserParser.RULE_windowFrame); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2210; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===134) { + { + this.state = 2201; + this.match(trinoSqlParserParser.MEASURES); + this.state = 2202; + this.measureDefinition(); + this.state = 2207; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2203; + this.match(trinoSqlParserParser.T__3); + this.state = 2204; + this.measureDefinition(); + } + } + this.state = 2209; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 2212; + this.frameExtent(); + this.state = 2216; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===19) { + { + this.state = 2213; + this.match(trinoSqlParserParser.AFTER); + this.state = 2214; + this.match(trinoSqlParserParser.MATCH); + this.state = 2215; + this.skipTo(); + } + } + + this.state = 2219; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===105 || _la===199) { + { + this.state = 2218; + _la = this._input.LA(1); + if(!(_la===105 || _la===199)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 2226; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===167) { + { + this.state = 2221; + this.match(trinoSqlParserParser.PATTERN); + this.state = 2222; + this.match(trinoSqlParserParser.T__1); + this.state = 2223; + this.rowPattern(0); + this.state = 2224; + this.match(trinoSqlParserParser.T__2); + } + } + + this.state = 2237; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===209) { + { + this.state = 2228; + this.match(trinoSqlParserParser.SUBSET); + this.state = 2229; + this.subsetDefinition(); + this.state = 2234; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2230; + this.match(trinoSqlParserParser.T__3); + this.state = 2231; + this.subsetDefinition(); + } + } + this.state = 2236; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 2248; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===65) { + { + this.state = 2239; + this.match(trinoSqlParserParser.DEFINE); + this.state = 2240; + this.variableDefinition(); + this.state = 2245; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2241; + this.match(trinoSqlParserParser.T__3); + this.state = 2242; + this.variableDefinition(); + } + } + this.state = 2247; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public frameExtent(): FrameExtentContext { + let localctx: FrameExtentContext = new FrameExtentContext(this, this._ctx, this.state); + this.enterRule(localctx, 140, trinoSqlParserParser.RULE_frameExtent); + try { + this.state = 2274; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 294, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 2250; + localctx._frameType = this.match(trinoSqlParserParser.RANGE); + this.state = 2251; + localctx._start = this.frameBound(); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 2252; + localctx._frameType = this.match(trinoSqlParserParser.ROWS); + this.state = 2253; + localctx._start = this.frameBound(); + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + this.state = 2254; + localctx._frameType = this.match(trinoSqlParserParser.GROUPS); + this.state = 2255; + localctx._start = this.frameBound(); + } + break; + case 4: + this.enterOuterAlt(localctx, 4); + { + this.state = 2256; + localctx._frameType = this.match(trinoSqlParserParser.RANGE); + this.state = 2257; + this.match(trinoSqlParserParser.BETWEEN); + this.state = 2258; + localctx._start = this.frameBound(); + this.state = 2259; + this.match(trinoSqlParserParser.AND); + this.state = 2260; + localctx._end = this.frameBound(); + } + break; + case 5: + this.enterOuterAlt(localctx, 5); + { + this.state = 2262; + localctx._frameType = this.match(trinoSqlParserParser.ROWS); + this.state = 2263; + this.match(trinoSqlParserParser.BETWEEN); + this.state = 2264; + localctx._start = this.frameBound(); + this.state = 2265; + this.match(trinoSqlParserParser.AND); + this.state = 2266; + localctx._end = this.frameBound(); + } + break; + case 6: + this.enterOuterAlt(localctx, 6); + { + this.state = 2268; + localctx._frameType = this.match(trinoSqlParserParser.GROUPS); + this.state = 2269; + this.match(trinoSqlParserParser.BETWEEN); + this.state = 2270; + localctx._start = this.frameBound(); + this.state = 2271; + this.match(trinoSqlParserParser.AND); + this.state = 2272; + localctx._end = this.frameBound(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public frameBound(): FrameBoundContext { + let localctx: FrameBoundContext = new FrameBoundContext(this, this._ctx, this.state); + this.enterRule(localctx, 142, trinoSqlParserParser.RULE_frameBound); + let _la: number; + try { + this.state = 2285; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 295, this._ctx) ) { + case 1: + localctx = new UnboundedFrameContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2276; + this.match(trinoSqlParserParser.UNBOUNDED); + this.state = 2277; + (localctx as UnboundedFrameContext)._boundType = this.match(trinoSqlParserParser.PRECEDING); + } + break; + case 2: + localctx = new UnboundedFrameContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2278; + this.match(trinoSqlParserParser.UNBOUNDED); + this.state = 2279; + (localctx as UnboundedFrameContext)._boundType = this.match(trinoSqlParserParser.FOLLOWING); + } + break; + case 3: + localctx = new CurrentRowBoundContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2280; + this.match(trinoSqlParserParser.CURRENT); + this.state = 2281; + this.match(trinoSqlParserParser.ROW); + } + break; + case 4: + localctx = new BoundedFrameContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 2282; + this.expression(); + this.state = 2283; + (localctx as BoundedFrameContext)._boundType = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===85 || _la===171)) { + (localctx as BoundedFrameContext)._boundType = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + + public rowPattern(): RowPatternContext; + public rowPattern(_p: number): RowPatternContext; + // @RuleVersion(0) + public rowPattern(_p?: number): RowPatternContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let localctx: RowPatternContext = new RowPatternContext(this, this._ctx, _parentState); + let _prevctx: RowPatternContext = localctx; + let _startState: number = 144; + this.enterRecursionRule(localctx, 144, trinoSqlParserParser.RULE_rowPattern, _p); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + { + localctx = new QuantifiedPrimaryContext(this, localctx); + this._ctx = localctx; + _prevctx = localctx; + + this.state = 2288; + this.patternPrimary(); + this.state = 2290; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 296, this._ctx) ) { + case 1: + { + this.state = 2289; + this.patternQuantifier(); + } + break; + } + } + this._ctx.stop = this._input.LT(-1); + this.state = 2299; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 298, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = localctx; + { + this.state = 2297; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 297, this._ctx) ) { + case 1: + { + localctx = new PatternConcatenationContext(this, new RowPatternContext(this, _parentctx, _parentState)); + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_rowPattern); + this.state = 2292; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 2293; + this.rowPattern(3); + } + break; + case 2: + { + localctx = new PatternAlternationContext(this, new RowPatternContext(this, _parentctx, _parentState)); + this.pushNewRecursionContext(localctx, _startState, trinoSqlParserParser.RULE_rowPattern); + this.state = 2294; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 2295; + this.match(trinoSqlParserParser.T__8); + this.state = 2296; + this.rowPattern(2); + } + break; + } + } + } + this.state = 2301; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 298, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return localctx; + } + // @RuleVersion(0) + public patternPrimary(): PatternPrimaryContext { + let localctx: PatternPrimaryContext = new PatternPrimaryContext(this, this._ctx, this.state); + this.enterRule(localctx, 146, trinoSqlParserParser.RULE_patternPrimary); + let _la: number; + try { + this.state = 2327; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 300, this._ctx) ) { + case 1: + localctx = new PatternVariableContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2302; + this.identifier(); + } + break; + case 2: + localctx = new EmptyPatternContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2303; + this.match(trinoSqlParserParser.T__1); + this.state = 2304; + this.match(trinoSqlParserParser.T__2); + } + break; + case 3: + localctx = new PatternPermutationContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2305; + this.match(trinoSqlParserParser.PERMUTE); + this.state = 2306; + this.match(trinoSqlParserParser.T__1); + this.state = 2307; + this.rowPattern(0); + this.state = 2312; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2308; + this.match(trinoSqlParserParser.T__3); + this.state = 2309; + this.rowPattern(0); + } + } + this.state = 2314; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2315; + this.match(trinoSqlParserParser.T__2); + } + break; + case 4: + localctx = new GroupedPatternContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 2317; + this.match(trinoSqlParserParser.T__1); + this.state = 2318; + this.rowPattern(0); + this.state = 2319; + this.match(trinoSqlParserParser.T__2); + } + break; + case 5: + localctx = new PartitionStartAnchorContext(this, localctx); + this.enterOuterAlt(localctx, 5); + { + this.state = 2321; + this.match(trinoSqlParserParser.T__9); + } + break; + case 6: + localctx = new PartitionEndAnchorContext(this, localctx); + this.enterOuterAlt(localctx, 6); + { + this.state = 2322; + this.match(trinoSqlParserParser.T__10); + } + break; + case 7: + localctx = new ExcludedPatternContext(this, localctx); + this.enterOuterAlt(localctx, 7); + { + this.state = 2323; + this.match(trinoSqlParserParser.T__11); + this.state = 2324; + this.rowPattern(0); + this.state = 2325; + this.match(trinoSqlParserParser.T__12); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public patternQuantifier(): PatternQuantifierContext { + let localctx: PatternQuantifierContext = new PatternQuantifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 148, trinoSqlParserParser.RULE_patternQuantifier); + let _la: number; + try { + this.state = 2359; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 308, this._ctx) ) { + case 1: + localctx = new ZeroOrMoreQuantifierContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2329; + this.match(trinoSqlParserParser.ASTERISK); + this.state = 2331; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 301, this._ctx) ) { + case 1: + { + this.state = 2330; + (localctx as ZeroOrMoreQuantifierContext)._reluctant = this.match(trinoSqlParserParser.QUESTION_MARK); + } + break; + } + } + break; + case 2: + localctx = new OneOrMoreQuantifierContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2333; + this.match(trinoSqlParserParser.PLUS); + this.state = 2335; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 302, this._ctx) ) { + case 1: + { + this.state = 2334; + (localctx as OneOrMoreQuantifierContext)._reluctant = this.match(trinoSqlParserParser.QUESTION_MARK); + } + break; + } + } + break; + case 3: + localctx = new ZeroOrOneQuantifierContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2337; + this.match(trinoSqlParserParser.QUESTION_MARK); + this.state = 2339; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 303, this._ctx) ) { + case 1: + { + this.state = 2338; + (localctx as ZeroOrOneQuantifierContext)._reluctant = this.match(trinoSqlParserParser.QUESTION_MARK); + } + break; + } + } + break; + case 4: + localctx = new RangeQuantifierContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 2341; + this.match(trinoSqlParserParser.T__13); + this.state = 2342; + (localctx as RangeQuantifierContext)._exactly = this.match(trinoSqlParserParser.INTEGER_VALUE); + this.state = 2343; + this.match(trinoSqlParserParser.T__14); + this.state = 2345; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 304, this._ctx) ) { + case 1: + { + this.state = 2344; + (localctx as RangeQuantifierContext)._reluctant = this.match(trinoSqlParserParser.QUESTION_MARK); + } + break; + } + } + break; + case 5: + localctx = new RangeQuantifierContext(this, localctx); + this.enterOuterAlt(localctx, 5); + { + this.state = 2347; + this.match(trinoSqlParserParser.T__13); + this.state = 2349; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===265) { + { + this.state = 2348; + (localctx as RangeQuantifierContext)._atLeast = this.match(trinoSqlParserParser.INTEGER_VALUE); + } + } + + this.state = 2351; + this.match(trinoSqlParserParser.T__3); + this.state = 2353; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===265) { + { + this.state = 2352; + (localctx as RangeQuantifierContext)._atMost = this.match(trinoSqlParserParser.INTEGER_VALUE); + } + } + + this.state = 2355; + this.match(trinoSqlParserParser.T__14); + this.state = 2357; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 307, this._ctx) ) { + case 1: + { + this.state = 2356; + (localctx as RangeQuantifierContext)._reluctant = this.match(trinoSqlParserParser.QUESTION_MARK); + } + break; + } + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public updateAssignment(): UpdateAssignmentContext { + let localctx: UpdateAssignmentContext = new UpdateAssignmentContext(this, this._ctx, this.state); + this.enterRule(localctx, 150, trinoSqlParserParser.RULE_updateAssignment); + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2361; + this.identifier(); + this.state = 2362; + this.match(trinoSqlParserParser.EQ); + this.state = 2363; + this.expression(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public explainOption(): ExplainOptionContext { + let localctx: ExplainOptionContext = new ExplainOptionContext(this, this._ctx, this.state); + this.enterRule(localctx, 152, trinoSqlParserParser.RULE_explainOption); + let _la: number; + try { + this.state = 2369; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 87: + localctx = new ExplainFormatContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2365; + this.match(trinoSqlParserParser.FORMAT); + this.state = 2366; + (localctx as ExplainFormatContext)._value = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===95 || _la===117 || _la===215)) { + (localctx as ExplainFormatContext)._value = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + case 225: + localctx = new ExplainTypeContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2367; + this.match(trinoSqlParserParser.TYPE); + this.state = 2368; + (localctx as ExplainTypeContext)._value = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===67 || _la===113 || _la===127 || _la===236)) { + (localctx as ExplainTypeContext)._value = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public transactionMode(): TransactionModeContext { + let localctx: TransactionModeContext = new TransactionModeContext(this, this._ctx, this.state); + this.enterRule(localctx, 154, trinoSqlParserParser.RULE_transactionMode); + let _la: number; + try { + this.state = 2376; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 115: + localctx = new IsolationLevelContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2371; + this.match(trinoSqlParserParser.ISOLATION); + this.state = 2372; + this.match(trinoSqlParserParser.LEVEL); + this.state = 2373; + this.levelOfIsolation(); + } + break; + case 177: + localctx = new TransactionAccessModeContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2374; + this.match(trinoSqlParserParser.READ); + this.state = 2375; + (localctx as TransactionAccessModeContext)._accessMode = this._input.LT(1); + _la = this._input.LA(1); + if(!(_la===155 || _la===246)) { + (localctx as TransactionAccessModeContext)._accessMode = this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public levelOfIsolation(): LevelOfIsolationContext { + let localctx: LevelOfIsolationContext = new LevelOfIsolationContext(this, this._ctx, this.state); + this.enterRule(localctx, 156, trinoSqlParserParser.RULE_levelOfIsolation); + try { + this.state = 2385; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 311, this._ctx) ) { + case 1: + localctx = new ReadUncommittedContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2378; + this.match(trinoSqlParserParser.READ); + this.state = 2379; + this.match(trinoSqlParserParser.UNCOMMITTED); + } + break; + case 2: + localctx = new ReadCommittedContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2380; + this.match(trinoSqlParserParser.READ); + this.state = 2381; + this.match(trinoSqlParserParser.COMMITTED); + } + break; + case 3: + localctx = new RepeatableReadContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2382; + this.match(trinoSqlParserParser.REPEATABLE); + this.state = 2383; + this.match(trinoSqlParserParser.READ); + } + break; + case 4: + localctx = new SerializableContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 2384; + this.match(trinoSqlParserParser.SERIALIZABLE); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public callArgument(): CallArgumentContext { + let localctx: CallArgumentContext = new CallArgumentContext(this, this._ctx, this.state); + this.enterRule(localctx, 158, trinoSqlParserParser.RULE_callArgument); + try { + this.state = 2392; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 312, this._ctx) ) { + case 1: + localctx = new PositionalArgumentContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2387; + this.expression(); + } + break; + case 2: + localctx = new NamedArgumentContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2388; + this.identifier(); + this.state = 2389; + this.match(trinoSqlParserParser.T__15); + this.state = 2390; + this.expression(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public pathElement(): PathElementContext { + let localctx: PathElementContext = new PathElementContext(this, this._ctx, this.state); + this.enterRule(localctx, 160, trinoSqlParserParser.RULE_pathElement); + try { + this.state = 2399; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 313, this._ctx) ) { + case 1: + localctx = new QualifiedArgumentContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2394; + this.identifier(); + this.state = 2395; + this.match(trinoSqlParserParser.T__0); + this.state = 2396; + this.identifier(); + } + break; + case 2: + localctx = new UnqualifiedArgumentContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2398; + this.identifier(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public pathSpecification(): PathSpecificationContext { + let localctx: PathSpecificationContext = new PathSpecificationContext(this, this._ctx, this.state); + this.enterRule(localctx, 162, trinoSqlParserParser.RULE_pathSpecification); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2401; + this.pathElement(); + this.state = 2406; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2402; + this.match(trinoSqlParserParser.T__3); + this.state = 2403; + this.pathElement(); + } + } + this.state = 2408; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public privilege(): PrivilegeContext { + let localctx: PrivilegeContext = new PrivilegeContext(this, this._ctx, this.state); + this.enterRule(localctx, 164, trinoSqlParserParser.RULE_privilege); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2409; + _la = this._input.LA(1); + if(!(_la===62 || _la===108 || _la===200 || _la===232)) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public qualifiedName(): QualifiedNameContext { + let localctx: QualifiedNameContext = new QualifiedNameContext(this, this._ctx, this.state); + this.enterRule(localctx, 166, trinoSqlParserParser.RULE_qualifiedName); + try { + let _alt: number; + this.enterOuterAlt(localctx, 1); + { + this.state = 2411; + this.identifier(); + this.state = 2416; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 315, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 2412; + this.match(trinoSqlParserParser.T__0); + this.state = 2413; + this.identifier(); + } + } + } + this.state = 2418; + this._errHandler.sync(this); + _alt = this._interp.adaptivePredict(this._input, 315, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public grantor(): GrantorContext { + let localctx: GrantorContext = new GrantorContext(this, this._ctx, this.state); + this.enterRule(localctx, 168, trinoSqlParserParser.RULE_grantor); + try { + this.state = 2422; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 17: + case 18: + case 19: + case 20: + case 22: + case 24: + case 25: + case 27: + case 28: + case 29: + case 30: + case 33: + case 34: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 47: + case 56: + case 57: + case 58: + case 59: + case 61: + case 63: + case 65: + case 67: + case 68: + case 71: + case 75: + case 78: + case 81: + case 82: + case 83: + case 84: + case 85: + case 87: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 98: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 110: + case 112: + case 113: + case 115: + case 117: + case 118: + case 119: + case 121: + case 123: + case 124: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 149: + case 150: + case 151: + case 152: + case 154: + case 155: + case 156: + case 159: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 174: + case 175: + case 176: + case 177: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 224: + case 225: + case 227: + case 228: + case 230: + case 232: + case 233: + case 234: + case 236: + case 238: + case 239: + case 242: + case 244: + case 245: + case 246: + case 247: + case 248: + case 268: + case 269: + case 270: + case 271: + localctx = new SpecifiedPrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2419; + this.principal(); + } + break; + case 55: + localctx = new CurrentUserGrantorContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2420; + this.match(trinoSqlParserParser.CURRENT_USER); + } + break; + case 51: + localctx = new CurrentRoleGrantorContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2421; + this.match(trinoSqlParserParser.CURRENT_ROLE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public principal(): PrincipalContext { + let localctx: PrincipalContext = new PrincipalContext(this, this._ctx, this.state); + this.enterRule(localctx, 170, trinoSqlParserParser.RULE_principal); + try { + this.state = 2429; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 317, this._ctx) ) { + case 1: + localctx = new UnspecifiedPrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2424; + this.identifier(); + } + break; + case 2: + localctx = new UserPrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2425; + this.match(trinoSqlParserParser.USER); + this.state = 2426; + this.identifier(); + } + break; + case 3: + localctx = new RolePrincipalContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2427; + this.match(trinoSqlParserParser.ROLE); + this.state = 2428; + this.identifier(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public roles(): RolesContext { + let localctx: RolesContext = new RolesContext(this, this._ctx, this.state); + this.enterRule(localctx, 172, trinoSqlParserParser.RULE_roles); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2431; + this.identifier(); + this.state = 2436; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la===4) { + { + { + this.state = 2432; + this.match(trinoSqlParserParser.T__3); + this.state = 2433; + this.identifier(); + } + } + this.state = 2438; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public identifier(): IdentifierContext { + let localctx: IdentifierContext = new IdentifierContext(this, this._ctx, this.state); + this.enterRule(localctx, 174, trinoSqlParserParser.RULE_identifier); + try { + this.state = 2444; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 268: + localctx = new UnquotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2439; + this.match(trinoSqlParserParser.IDENTIFIER); + } + break; + case 270: + localctx = new QuotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2440; + this.match(trinoSqlParserParser.QUOTED_IDENTIFIER); + } + break; + case 17: + case 18: + case 19: + case 20: + case 22: + case 24: + case 25: + case 27: + case 28: + case 29: + case 30: + case 33: + case 34: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 47: + case 56: + case 57: + case 58: + case 59: + case 61: + case 63: + case 65: + case 67: + case 68: + case 71: + case 75: + case 78: + case 81: + case 82: + case 83: + case 84: + case 85: + case 87: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 98: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 110: + case 112: + case 113: + case 115: + case 117: + case 118: + case 119: + case 121: + case 123: + case 124: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 149: + case 150: + case 151: + case 152: + case 154: + case 155: + case 156: + case 159: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 174: + case 175: + case 176: + case 177: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 188: + case 189: + case 190: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 213: + case 214: + case 215: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 224: + case 225: + case 227: + case 228: + case 230: + case 232: + case 233: + case 234: + case 236: + case 238: + case 239: + case 242: + case 244: + case 245: + case 246: + case 247: + case 248: + localctx = new UnquotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2441; + this.nonReserved(); + } + break; + case 271: + localctx = new BackQuotedIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 4); + { + this.state = 2442; + this.match(trinoSqlParserParser.BACKQUOTED_IDENTIFIER); + } + break; + case 269: + localctx = new DigitIdentifierContext(this, localctx); + this.enterOuterAlt(localctx, 5); + { + this.state = 2443; + this.match(trinoSqlParserParser.DIGIT_IDENTIFIER); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public number_(): NumberContext { + let localctx: NumberContext = new NumberContext(this, this._ctx, this.state); + this.enterRule(localctx, 176, trinoSqlParserParser.RULE_number); + let _la: number; + try { + this.state = 2458; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 323, this._ctx) ) { + case 1: + localctx = new DecimalLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 2447; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===256) { + { + this.state = 2446; + this.match(trinoSqlParserParser.MINUS); + } + } + + this.state = 2449; + this.match(trinoSqlParserParser.DECIMAL_VALUE); + } + break; + case 2: + localctx = new DoubleLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 2451; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===256) { + { + this.state = 2450; + this.match(trinoSqlParserParser.MINUS); + } + } + + this.state = 2453; + this.match(trinoSqlParserParser.DOUBLE_VALUE); + } + break; + case 3: + localctx = new IntegerLiteralContext(this, localctx); + this.enterOuterAlt(localctx, 3); + { + this.state = 2455; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===256) { + { + this.state = 2454; + this.match(trinoSqlParserParser.MINUS); + } + } + + this.state = 2457; + this.match(trinoSqlParserParser.INTEGER_VALUE); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) + public nonReserved(): NonReservedContext { + let localctx: NonReservedContext = new NonReservedContext(this, this._ctx, this.state); + this.enterRule(localctx, 178, trinoSqlParserParser.RULE_nonReserved); + let _la: number; + try { + this.enterOuterAlt(localctx, 1); + { + this.state = 2460; + _la = this._input.LA(1); + if(!(((((_la - 17)) & ~0x1F) === 0 && ((1 << (_la - 17)) & 1140014511) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & 3192429231) !== 0) || ((((_la - 90)) & ~0x1F) === 0 && ((1 << (_la - 90)) & 3134381375) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 3162472435) !== 0) || ((((_la - 155)) & ~0x1F) === 0 && ((1 << (_la - 155)) & 4286316499) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4009750519) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 525170103) !== 0))) { + this._errHandler.recoverInline(this); + } + else { + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + + public sempred(localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 20: + return this.queryTerm_sempred(localctx as QueryTermContext, predIndex); + case 32: + return this.relation_sempred(localctx as RelationContext, predIndex); + case 48: + return this.booleanExpression_sempred(localctx as BooleanExpressionContext, predIndex); + case 50: + return this.valueExpression_sempred(localctx as ValueExpressionContext, predIndex); + case 51: + return this.primaryExpression_sempred(localctx as PrimaryExpressionContext, predIndex); + case 62: + return this.type_sempred(localctx as TypeContext, predIndex); + case 72: + return this.rowPattern_sempred(localctx as RowPatternContext, predIndex); + } + return true; + } + private queryTerm_sempred(localctx: QueryTermContext, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.precpred(this._ctx, 2); + case 1: + return this.precpred(this._ctx, 1); + } + return true; + } + private relation_sempred(localctx: RelationContext, predIndex: number): boolean { + switch (predIndex) { + case 2: + return this.precpred(this._ctx, 2); + } + return true; + } + private booleanExpression_sempred(localctx: BooleanExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 3: + return this.precpred(this._ctx, 2); + case 4: + return this.precpred(this._ctx, 1); + } + return true; + } + private valueExpression_sempred(localctx: ValueExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 5: + return this.precpred(this._ctx, 3); + case 6: + return this.precpred(this._ctx, 2); + case 7: + return this.precpred(this._ctx, 1); + case 8: + return this.precpred(this._ctx, 5); + } + return true; + } + private primaryExpression_sempred(localctx: PrimaryExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 9: + return this.precpred(this._ctx, 17); + case 10: + return this.precpred(this._ctx, 15); + } + return true; + } + private type_sempred(localctx: TypeContext, predIndex: number): boolean { + switch (predIndex) { + case 11: + return this.precpred(this._ctx, 2); + } + return true; + } + private rowPattern_sempred(localctx: RowPatternContext, predIndex: number): boolean { + switch (predIndex) { + case 12: + return this.precpred(this._ctx, 2); + case 13: + return this.precpred(this._ctx, 1); + } + return true; + } + + public static readonly _serializedATN: number[] = [4,1,277,2463,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,1,0,5,0,182,8,0,10,0,12,0,185,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,3,1,194, + 8,1,1,2,1,2,3,2,198,8,2,1,3,1,3,3,3,202,8,3,1,4,1,4,3,4,206,8,4,1,5,1,5, + 3,5,210,8,5,1,6,1,6,3,6,214,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,1,7,1,7,3,7,229,8,7,1,7,1,7,1,7,3,7,234,8,7,1,7,1,7,3,7,238,8,7,1,7, + 1,7,1,7,1,7,3,7,244,8,7,1,7,1,7,3,7,248,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,269,8,7,1,7,1,7,3,7, + 273,8,7,1,7,1,7,3,7,277,8,7,1,7,1,7,3,7,281,8,7,1,7,1,7,1,7,1,7,1,7,1,7, + 3,7,289,8,7,1,7,1,7,3,7,293,8,7,1,7,3,7,296,8,7,1,7,1,7,1,7,1,7,1,7,3,7, + 303,8,7,1,7,1,7,1,7,1,7,1,7,5,7,310,8,7,10,7,12,7,313,9,7,1,7,1,7,1,7,3, + 7,318,8,7,1,7,1,7,3,7,322,8,7,1,7,1,7,1,7,1,7,3,7,328,8,7,1,7,1,7,1,7,1, + 7,1,7,3,7,335,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,344,8,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,3,7,353,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,3,7,367,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,376,8,7,1,7,1,7,1,7,1,7,3, + 7,382,8,7,1,7,1,7,1,7,1,7,1,7,3,7,389,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,3,7,399,8,7,1,7,1,7,1,7,1,7,1,7,3,7,406,8,7,1,7,1,7,1,7,1,7,1,7,1,7,3, + 7,414,8,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,422,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,5,7,449,8,7,10,7,12,7,452,9,7,3,7,454,8,7,1,7,3,7,457,8,7,1,7,1,7,3,7, + 461,8,7,1,7,1,7,1,7,1,7,3,7,467,8,7,1,7,1,7,1,7,3,7,472,8,7,1,7,1,7,1,7, + 1,7,1,7,3,7,479,8,7,1,7,1,7,1,7,3,7,484,8,7,1,7,1,7,3,7,488,8,7,1,7,1,7, + 1,7,1,7,1,7,1,7,3,7,496,8,7,1,7,1,7,1,7,1,7,3,7,502,8,7,1,7,1,7,3,7,506, + 8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,520,8,7,1,7,1,7, + 1,7,1,7,1,7,1,7,3,7,528,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,1,7,1,7,1,7,1,7,1,7,3,7,547,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,5,7,570,8,7,10,7,12,7,573, + 9,7,3,7,575,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,585,8,7,1,7,1,7,3,7, + 589,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,5,7,600,8,7,10,7,12,7,603,9, + 7,1,7,1,7,1,7,3,7,608,8,7,1,7,1,7,1,7,3,7,613,8,7,1,7,1,7,3,7,617,8,7,1, + 7,1,7,1,7,1,7,3,7,623,8,7,1,7,1,7,1,7,1,7,1,7,5,7,630,8,7,10,7,12,7,633, + 9,7,1,7,1,7,1,7,3,7,638,8,7,1,7,1,7,3,7,642,8,7,1,7,1,7,1,7,1,7,1,7,3,7, + 649,8,7,1,7,1,7,3,7,653,8,7,1,7,1,7,1,7,1,7,5,7,659,8,7,10,7,12,7,662,9, + 7,1,7,1,7,3,7,666,8,7,1,7,1,7,3,7,670,8,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,678, + 8,7,1,7,1,7,1,7,1,7,5,7,684,8,7,10,7,12,7,687,9,7,1,7,1,7,3,7,691,8,7,1, + 7,1,7,3,7,695,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,705,8,7,1,7,1,7,1, + 7,5,7,710,8,7,10,7,12,7,713,9,7,1,7,1,7,3,7,717,8,7,1,7,1,7,3,7,721,8,7, + 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,731,8,7,1,7,3,7,734,8,7,1,7,1,7,3,7, + 738,8,7,1,7,3,7,741,8,7,1,7,1,7,1,7,1,7,5,7,747,8,7,10,7,12,7,750,9,7,1, + 7,1,7,3,7,754,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,778,8,7,1,7,1,7,1,7,1,7,3,7,784,8, + 7,3,7,786,8,7,1,7,1,7,1,7,1,7,3,7,792,8,7,1,7,1,7,1,7,1,7,3,7,798,8,7,3, + 7,800,8,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,808,8,7,3,7,810,8,7,1,7,1,7,1,7,1, + 7,3,7,816,8,7,1,7,1,7,1,7,1,7,3,7,822,8,7,3,7,824,8,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,839,8,7,1,7,1,7,1,7,3,7,844,8,7,1, + 7,1,7,1,7,1,7,1,7,3,7,851,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3, + 7,863,8,7,3,7,865,8,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,873,8,7,3,7,875,8,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,5,7,891,8,7,10,7, + 12,7,894,9,7,3,7,896,8,7,1,7,1,7,3,7,900,8,7,1,7,1,7,3,7,904,8,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,5,7,920,8,7,10,7,12,7, + 923,9,7,3,7,925,8,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,3,7,941,8,7,1,7,1,7,1,7,1,7,1,7,1,7,5,7,949,8,7,10,7,12,7,952,9,7,1, + 7,1,7,3,7,956,8,7,1,7,1,7,1,7,1,7,3,7,962,8,7,1,7,3,7,965,8,7,1,7,1,7,1, + 7,1,7,1,7,4,7,972,8,7,11,7,12,7,973,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,3,7,986,8,7,1,8,3,8,989,8,8,1,8,1,8,1,9,1,9,3,9,995,8,9,1,9,1,9,1,9, + 5,9,1000,8,9,10,9,12,9,1003,9,9,1,10,1,10,3,10,1007,8,10,1,11,1,11,1,11, + 1,11,3,11,1013,8,11,1,11,1,11,3,11,1017,8,11,1,11,1,11,3,11,1021,8,11,1, + 12,1,12,1,12,1,12,3,12,1027,8,12,1,13,1,13,1,13,1,13,1,14,1,14,1,14,5,14, + 1036,8,14,10,14,12,14,1039,9,14,1,15,1,15,1,15,1,15,1,16,1,16,3,16,1047, + 8,16,1,17,1,17,1,17,1,17,1,17,1,17,5,17,1055,8,17,10,17,12,17,1058,9,17, + 3,17,1060,8,17,1,17,1,17,1,17,3,17,1065,8,17,3,17,1067,8,17,1,17,1,17,1, + 17,1,17,1,17,3,17,1074,8,17,1,17,1,17,1,17,1,17,3,17,1080,8,17,3,17,1082, + 8,17,1,18,1,18,3,18,1086,8,18,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,3, + 20,1096,8,20,1,20,1,20,1,20,1,20,3,20,1102,8,20,1,20,5,20,1105,8,20,10, + 20,12,20,1108,9,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,5,21,1117,8,21,10, + 21,12,21,1120,9,21,1,21,1,21,1,21,1,21,3,21,1126,8,21,1,22,1,22,3,22,1130, + 8,22,1,22,1,22,3,22,1134,8,22,1,23,1,23,3,23,1138,8,23,1,23,1,23,1,23,5, + 23,1143,8,23,10,23,12,23,1146,9,23,1,23,1,23,1,23,1,23,5,23,1152,8,23,10, + 23,12,23,1155,9,23,3,23,1157,8,23,1,23,1,23,3,23,1161,8,23,1,23,1,23,1, + 23,3,23,1166,8,23,1,23,1,23,3,23,1170,8,23,1,23,1,23,1,23,1,23,5,23,1176, + 8,23,10,23,12,23,1179,9,23,3,23,1181,8,23,1,24,3,24,1184,8,24,1,24,1,24, + 1,24,5,24,1189,8,24,10,24,12,24,1192,9,24,1,25,1,25,1,25,1,25,1,25,1,25, + 5,25,1200,8,25,10,25,12,25,1203,9,25,3,25,1205,8,25,1,25,1,25,1,25,1,25, + 1,25,1,25,5,25,1213,8,25,10,25,12,25,1216,9,25,3,25,1218,8,25,1,25,1,25, + 1,25,1,25,1,25,1,25,1,25,5,25,1227,8,25,10,25,12,25,1230,9,25,1,25,1,25, + 3,25,1234,8,25,1,26,1,26,1,26,1,26,5,26,1240,8,26,10,26,12,26,1243,9,26, + 3,26,1245,8,26,1,26,1,26,3,26,1249,8,26,1,27,1,27,1,27,1,27,1,27,1,27,1, + 28,3,28,1258,8,28,1,28,1,28,1,28,1,28,1,28,5,28,1265,8,28,10,28,12,28,1268, + 9,28,3,28,1270,8,28,1,28,1,28,1,28,1,28,1,28,5,28,1277,8,28,10,28,12,28, + 1280,9,28,3,28,1282,8,28,1,28,3,28,1285,8,28,1,29,1,29,3,29,1289,8,29,1, + 29,1,29,1,29,1,29,1,29,1,30,1,30,1,31,1,31,3,31,1300,8,31,1,31,3,31,1303, + 8,31,1,31,1,31,1,31,1,31,1,31,3,31,1310,8,31,1,31,3,31,1313,8,31,1,32,1, + 32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32, + 1,32,3,32,1332,8,32,5,32,1334,8,32,10,32,12,32,1337,9,32,1,33,3,33,1340, + 8,33,1,33,1,33,3,33,1344,8,33,1,33,1,33,3,33,1348,8,33,1,33,1,33,3,33,1352, + 8,33,3,33,1354,8,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,5,34,1363,8,34,10, + 34,12,34,1366,9,34,1,34,1,34,3,34,1370,8,34,1,35,1,35,1,35,1,35,1,35,1, + 35,1,35,3,35,1379,8,35,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 5,37,1391,8,37,10,37,12,37,1394,9,37,3,37,1396,8,37,1,37,1,37,1,37,1,37, + 1,37,5,37,1403,8,37,10,37,12,37,1406,9,37,3,37,1408,8,37,1,37,1,37,1,37, + 1,37,5,37,1414,8,37,10,37,12,37,1417,9,37,3,37,1419,8,37,1,37,3,37,1422, + 8,37,1,37,1,37,1,37,3,37,1427,8,37,1,37,3,37,1430,8,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,5,37,1440,8,37,10,37,12,37,1443,9,37,3,37,1445,8, + 37,1,37,1,37,1,37,1,37,5,37,1451,8,37,10,37,12,37,1454,9,37,1,37,1,37,3, + 37,1458,8,37,1,37,1,37,3,37,1462,8,37,3,37,1464,8,37,3,37,1466,8,37,1,38, + 1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39,1481,8, + 39,3,39,1483,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,3,40,1494, + 8,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1, + 41,1,41,1,41,1,41,1,41,1,41,3,41,1515,8,41,1,42,1,42,1,42,1,42,1,42,1,42, + 5,42,1523,8,42,10,42,12,42,1526,9,42,1,42,1,42,1,43,1,43,1,43,1,43,1,44, + 1,44,3,44,1536,8,44,1,44,1,44,3,44,1540,8,44,3,44,1542,8,44,1,45,1,45,1, + 45,1,45,5,45,1548,8,45,10,45,12,45,1551,9,45,1,45,1,45,1,46,1,46,1,46,1, + 46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1565,8,46,10,46,12,46,1568,9,46,1, + 46,1,46,1,46,3,46,1573,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46, + 3,46,1584,8,46,1,47,1,47,1,48,1,48,1,48,3,48,1591,8,48,1,48,1,48,3,48,1595, + 8,48,1,48,1,48,1,48,1,48,1,48,1,48,5,48,1603,8,48,10,48,12,48,1606,9,48, + 1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,3,49,1618,8,49,1,49,1, + 49,1,49,1,49,1,49,1,49,3,49,1626,8,49,1,49,1,49,1,49,1,49,1,49,5,49,1633, + 8,49,10,49,12,49,1636,9,49,1,49,1,49,1,49,3,49,1641,8,49,1,49,1,49,1,49, + 1,49,1,49,1,49,3,49,1649,8,49,1,49,1,49,1,49,1,49,3,49,1655,8,49,1,49,1, + 49,3,49,1659,8,49,1,49,1,49,1,49,3,49,1664,8,49,1,49,1,49,1,49,3,49,1669, + 8,49,1,50,1,50,1,50,1,50,3,50,1675,8,50,1,50,1,50,1,50,1,50,1,50,1,50,1, + 50,1,50,1,50,1,50,1,50,1,50,5,50,1689,8,50,10,50,12,50,1692,9,50,1,51,1, + 51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51, + 1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,4,51,1719,8,51,11,51,12,51, + 1720,1,51,1,51,1,51,1,51,1,51,1,51,1,51,5,51,1730,8,51,10,51,12,51,1733, + 9,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,1742,8,51,1,51,3,51,1745,8, + 51,1,51,3,51,1748,8,51,1,51,1,51,1,51,3,51,1753,8,51,1,51,1,51,1,51,5,51, + 1758,8,51,10,51,12,51,1761,9,51,3,51,1763,8,51,1,51,1,51,1,51,1,51,1,51, + 5,51,1770,8,51,10,51,12,51,1773,9,51,3,51,1775,8,51,1,51,1,51,3,51,1779, + 8,51,1,51,3,51,1782,8,51,1,51,3,51,1785,8,51,1,51,1,51,1,51,1,51,1,51,1, + 51,1,51,1,51,1,51,1,51,1,51,5,51,1798,8,51,10,51,12,51,1801,9,51,3,51,1803, + 8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1, + 51,1,51,4,51,1820,8,51,11,51,12,51,1821,1,51,1,51,3,51,1826,8,51,1,51,1, + 51,1,51,1,51,4,51,1832,8,51,11,51,12,51,1833,1,51,1,51,3,51,1838,8,51,1, + 51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51, + 1,51,1,51,1,51,1,51,1,51,1,51,5,51,1861,8,51,10,51,12,51,1864,9,51,3,51, + 1866,8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,1875,8,51,1,51,1,51,1, + 51,1,51,3,51,1881,8,51,1,51,1,51,1,51,1,51,3,51,1887,8,51,1,51,1,51,1,51, + 1,51,3,51,1893,8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1, + 51,3,51,1906,8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,1915,8,51,1,51, + 1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1, + 51,1,51,1,51,5,51,1935,8,51,10,51,12,51,1938,9,51,3,51,1940,8,51,1,51,3, + 51,1943,8,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,5,51,1953,8,51,10, + 51,12,51,1956,9,51,1,52,1,52,1,53,1,53,1,53,1,53,3,53,1964,8,53,1,54,1, + 54,1,54,1,54,3,54,1970,8,54,3,54,1972,8,54,1,55,1,55,1,55,1,55,1,55,1,55, + 3,55,1980,8,55,1,56,1,56,1,57,1,57,1,58,1,58,1,59,1,59,3,59,1990,8,59,1, + 59,1,59,1,59,1,59,3,59,1996,8,59,1,60,1,60,1,61,1,61,1,62,1,62,1,62,1,62, + 1,62,1,62,5,62,2008,8,62,10,62,12,62,2011,9,62,1,62,1,62,1,62,1,62,1,62, + 1,62,3,62,2019,8,62,1,62,1,62,1,62,1,62,1,62,3,62,2026,8,62,1,62,1,62,1, + 62,3,62,2031,8,62,1,62,1,62,1,62,1,62,1,62,3,62,2038,8,62,1,62,1,62,1,62, + 1,62,1,62,1,62,1,62,1,62,3,62,2048,8,62,1,62,1,62,1,62,3,62,2053,8,62,1, + 62,1,62,1,62,1,62,1,62,3,62,2060,8,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62, + 1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1, + 62,5,62,2084,8,62,10,62,12,62,2087,9,62,1,62,1,62,3,62,2091,8,62,3,62,2093, + 8,62,1,62,1,62,1,62,1,62,1,62,3,62,2100,8,62,5,62,2102,8,62,10,62,12,62, + 2105,9,62,1,63,1,63,1,63,1,63,3,63,2111,8,63,1,64,1,64,3,64,2115,8,64,1, + 65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67, + 3,67,2132,8,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,5, + 67,2145,8,67,10,67,12,67,2148,9,67,1,67,1,67,1,67,1,67,3,67,2154,8,67,1, + 67,1,67,1,67,1,67,1,67,1,67,1,67,3,67,2163,8,67,1,67,1,67,1,67,1,67,1,67, + 1,67,5,67,2171,8,67,10,67,12,67,2174,9,67,1,67,1,67,3,67,2178,8,67,1,67, + 1,67,1,67,1,67,1,67,5,67,2185,8,67,10,67,12,67,2188,9,67,1,67,1,67,3,67, + 2192,8,67,1,68,1,68,1,68,1,68,1,68,1,68,3,68,2200,8,68,1,69,1,69,1,69,1, + 69,5,69,2206,8,69,10,69,12,69,2209,9,69,3,69,2211,8,69,1,69,1,69,1,69,1, + 69,3,69,2217,8,69,1,69,3,69,2220,8,69,1,69,1,69,1,69,1,69,1,69,3,69,2227, + 8,69,1,69,1,69,1,69,1,69,5,69,2233,8,69,10,69,12,69,2236,9,69,3,69,2238, + 8,69,1,69,1,69,1,69,1,69,5,69,2244,8,69,10,69,12,69,2247,9,69,3,69,2249, + 8,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1, + 70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,2275,8,70,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,2286,8,71,1,72,1,72,1,72,3, + 72,2291,8,72,1,72,1,72,1,72,1,72,1,72,5,72,2298,8,72,10,72,12,72,2301,9, + 72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,5,73,2311,8,73,10,73,12,73,2314, + 9,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,3,73,2328, + 8,73,1,74,1,74,3,74,2332,8,74,1,74,1,74,3,74,2336,8,74,1,74,1,74,3,74,2340, + 8,74,1,74,1,74,1,74,1,74,3,74,2346,8,74,1,74,1,74,3,74,2350,8,74,1,74,1, + 74,3,74,2354,8,74,1,74,1,74,3,74,2358,8,74,3,74,2360,8,74,1,75,1,75,1,75, + 1,75,1,76,1,76,1,76,1,76,3,76,2370,8,76,1,77,1,77,1,77,1,77,1,77,3,77,2377, + 8,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,3,78,2386,8,78,1,79,1,79,1,79,1, + 79,1,79,3,79,2393,8,79,1,80,1,80,1,80,1,80,1,80,3,80,2400,8,80,1,81,1,81, + 1,81,5,81,2405,8,81,10,81,12,81,2408,9,81,1,82,1,82,1,83,1,83,1,83,5,83, + 2415,8,83,10,83,12,83,2418,9,83,1,84,1,84,1,84,3,84,2423,8,84,1,85,1,85, + 1,85,1,85,1,85,3,85,2430,8,85,1,86,1,86,1,86,5,86,2435,8,86,10,86,12,86, + 2438,9,86,1,87,1,87,1,87,1,87,1,87,3,87,2445,8,87,1,88,3,88,2448,8,88,1, + 88,1,88,3,88,2452,8,88,1,88,1,88,3,88,2456,8,88,1,88,3,88,2459,8,88,1,89, + 1,89,1,89,0,7,40,64,96,100,102,124,144,90,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,0,28,2,0,34,34, + 185,185,2,0,61,61,112,112,2,0,195,195,212,212,2,0,88,88,103,103,2,0,75, + 75,104,104,1,0,192,193,2,0,84,84,139,139,2,0,261,261,265,265,2,0,74,74, + 229,229,2,0,27,27,63,63,2,0,84,84,118,118,2,0,20,20,66,66,2,0,30,30,211, + 211,2,0,105,105,199,199,1,0,255,256,1,0,257,259,2,0,83,83,194,194,1,0,249, + 254,3,0,20,20,24,24,206,206,2,0,80,80,223,223,5,0,58,58,100,100,136,137, + 197,197,247,247,1,0,140,143,2,0,85,85,171,171,3,0,95,95,117,117,215,215, + 4,0,67,67,113,113,127,127,236,236,2,0,155,155,246,246,4,0,62,62,108,108, + 200,200,232,232,49,0,17,20,22,22,24,25,27,30,33,34,37,42,47,47,56,59,61, + 61,63,63,65,65,67,68,71,71,75,75,78,78,81,85,87,87,90,95,98,98,100,102, + 104,105,107,107,110,110,112,113,115,115,117,119,121,121,123,124,127,137, + 139,145,149,152,154,156,159,159,161,172,174,177,179,186,188,190,192,199, + 201,211,213,215,217,222,224,225,227,228,230,230,232,234,236,236,238,239, + 242,242,244,248,2865,0,183,1,0,0,0,2,193,1,0,0,0,4,195,1,0,0,0,6,199,1, + 0,0,0,8,203,1,0,0,0,10,207,1,0,0,0,12,211,1,0,0,0,14,985,1,0,0,0,16,988, + 1,0,0,0,18,992,1,0,0,0,20,1006,1,0,0,0,22,1008,1,0,0,0,24,1022,1,0,0,0, + 26,1028,1,0,0,0,28,1032,1,0,0,0,30,1040,1,0,0,0,32,1046,1,0,0,0,34,1048, + 1,0,0,0,36,1085,1,0,0,0,38,1087,1,0,0,0,40,1089,1,0,0,0,42,1125,1,0,0,0, + 44,1127,1,0,0,0,46,1135,1,0,0,0,48,1183,1,0,0,0,50,1233,1,0,0,0,52,1248, + 1,0,0,0,54,1250,1,0,0,0,56,1257,1,0,0,0,58,1286,1,0,0,0,60,1295,1,0,0,0, + 62,1312,1,0,0,0,64,1314,1,0,0,0,66,1353,1,0,0,0,68,1369,1,0,0,0,70,1371, + 1,0,0,0,72,1380,1,0,0,0,74,1382,1,0,0,0,76,1467,1,0,0,0,78,1482,1,0,0,0, + 80,1493,1,0,0,0,82,1514,1,0,0,0,84,1516,1,0,0,0,86,1529,1,0,0,0,88,1533, + 1,0,0,0,90,1543,1,0,0,0,92,1583,1,0,0,0,94,1585,1,0,0,0,96,1594,1,0,0,0, + 98,1668,1,0,0,0,100,1674,1,0,0,0,102,1942,1,0,0,0,104,1957,1,0,0,0,106, + 1963,1,0,0,0,108,1971,1,0,0,0,110,1979,1,0,0,0,112,1981,1,0,0,0,114,1983, + 1,0,0,0,116,1985,1,0,0,0,118,1987,1,0,0,0,120,1997,1,0,0,0,122,1999,1,0, + 0,0,124,2092,1,0,0,0,126,2110,1,0,0,0,128,2114,1,0,0,0,130,2116,1,0,0,0, + 132,2121,1,0,0,0,134,2191,1,0,0,0,136,2193,1,0,0,0,138,2210,1,0,0,0,140, + 2274,1,0,0,0,142,2285,1,0,0,0,144,2287,1,0,0,0,146,2327,1,0,0,0,148,2359, + 1,0,0,0,150,2361,1,0,0,0,152,2369,1,0,0,0,154,2376,1,0,0,0,156,2385,1,0, + 0,0,158,2392,1,0,0,0,160,2399,1,0,0,0,162,2401,1,0,0,0,164,2409,1,0,0,0, + 166,2411,1,0,0,0,168,2422,1,0,0,0,170,2429,1,0,0,0,172,2431,1,0,0,0,174, + 2444,1,0,0,0,176,2458,1,0,0,0,178,2460,1,0,0,0,180,182,3,2,1,0,181,180, + 1,0,0,0,182,185,1,0,0,0,183,181,1,0,0,0,183,184,1,0,0,0,184,186,1,0,0,0, + 185,183,1,0,0,0,186,187,5,0,0,1,187,1,1,0,0,0,188,194,3,4,2,0,189,194,3, + 6,3,0,190,194,3,8,4,0,191,194,3,10,5,0,192,194,3,12,6,0,193,188,1,0,0,0, + 193,189,1,0,0,0,193,190,1,0,0,0,193,191,1,0,0,0,193,192,1,0,0,0,194,3,1, + 0,0,0,195,197,3,14,7,0,196,198,5,272,0,0,197,196,1,0,0,0,197,198,1,0,0, + 0,198,5,1,0,0,0,199,201,3,94,47,0,200,202,5,272,0,0,201,200,1,0,0,0,201, + 202,1,0,0,0,202,7,1,0,0,0,203,205,3,162,81,0,204,206,5,272,0,0,205,204, + 1,0,0,0,205,206,1,0,0,0,206,9,1,0,0,0,207,209,3,124,62,0,208,210,5,272, + 0,0,209,208,1,0,0,0,209,210,1,0,0,0,210,11,1,0,0,0,211,213,3,144,72,0,212, + 214,5,272,0,0,213,212,1,0,0,0,213,214,1,0,0,0,214,13,1,0,0,0,215,986,3, + 16,8,0,216,217,5,233,0,0,217,986,3,174,87,0,218,219,5,233,0,0,219,220,3, + 174,87,0,220,221,5,1,0,0,221,222,3,174,87,0,222,986,1,0,0,0,223,224,5,44, + 0,0,224,228,5,195,0,0,225,226,5,101,0,0,226,227,5,147,0,0,227,229,5,77, + 0,0,228,225,1,0,0,0,228,229,1,0,0,0,229,230,1,0,0,0,230,233,3,166,83,0, + 231,232,5,29,0,0,232,234,3,170,85,0,233,231,1,0,0,0,233,234,1,0,0,0,234, + 237,1,0,0,0,235,236,5,243,0,0,236,238,3,26,13,0,237,235,1,0,0,0,237,238, + 1,0,0,0,238,986,1,0,0,0,239,240,5,69,0,0,240,243,5,195,0,0,241,242,5,101, + 0,0,242,244,5,77,0,0,243,241,1,0,0,0,243,244,1,0,0,0,244,245,1,0,0,0,245, + 247,3,166,83,0,246,248,7,0,0,0,247,246,1,0,0,0,247,248,1,0,0,0,248,986, + 1,0,0,0,249,250,5,21,0,0,250,251,5,195,0,0,251,252,3,166,83,0,252,253,5, + 180,0,0,253,254,5,220,0,0,254,255,3,174,87,0,255,986,1,0,0,0,256,257,5, + 21,0,0,257,258,5,195,0,0,258,259,3,166,83,0,259,260,5,203,0,0,260,261,5, + 29,0,0,261,262,3,170,85,0,262,986,1,0,0,0,263,264,5,44,0,0,264,268,5,212, + 0,0,265,266,5,101,0,0,266,267,5,147,0,0,267,269,5,77,0,0,268,265,1,0,0, + 0,268,269,1,0,0,0,269,270,1,0,0,0,270,272,3,166,83,0,271,273,3,90,45,0, + 272,271,1,0,0,0,272,273,1,0,0,0,273,276,1,0,0,0,274,275,5,40,0,0,275,277, + 3,108,54,0,276,274,1,0,0,0,276,277,1,0,0,0,277,280,1,0,0,0,278,279,5,243, + 0,0,279,281,3,26,13,0,280,278,1,0,0,0,280,281,1,0,0,0,281,282,1,0,0,0,282, + 288,5,26,0,0,283,289,3,16,8,0,284,285,5,2,0,0,285,286,3,16,8,0,286,287, + 5,3,0,0,287,289,1,0,0,0,288,283,1,0,0,0,288,284,1,0,0,0,289,295,1,0,0,0, + 290,292,5,243,0,0,291,293,5,144,0,0,292,291,1,0,0,0,292,293,1,0,0,0,293, + 294,1,0,0,0,294,296,5,56,0,0,295,290,1,0,0,0,295,296,1,0,0,0,296,986,1, + 0,0,0,297,298,5,44,0,0,298,302,5,212,0,0,299,300,5,101,0,0,300,301,5,147, + 0,0,301,303,5,77,0,0,302,299,1,0,0,0,302,303,1,0,0,0,303,304,1,0,0,0,304, + 305,3,166,83,0,305,306,5,2,0,0,306,311,3,20,10,0,307,308,5,4,0,0,308,310, + 3,20,10,0,309,307,1,0,0,0,310,313,1,0,0,0,311,309,1,0,0,0,311,312,1,0,0, + 0,312,314,1,0,0,0,313,311,1,0,0,0,314,317,5,3,0,0,315,316,5,40,0,0,316, + 318,3,108,54,0,317,315,1,0,0,0,317,318,1,0,0,0,318,321,1,0,0,0,319,320, + 5,243,0,0,320,322,3,26,13,0,321,319,1,0,0,0,321,322,1,0,0,0,322,986,1,0, + 0,0,323,324,5,69,0,0,324,327,5,212,0,0,325,326,5,101,0,0,326,328,5,77,0, + 0,327,325,1,0,0,0,327,328,1,0,0,0,328,329,1,0,0,0,329,986,3,166,83,0,330, + 331,5,108,0,0,331,332,5,111,0,0,332,334,3,166,83,0,333,335,3,90,45,0,334, + 333,1,0,0,0,334,335,1,0,0,0,335,336,1,0,0,0,336,337,3,16,8,0,337,986,1, + 0,0,0,338,339,5,62,0,0,339,340,5,88,0,0,340,343,3,166,83,0,341,342,5,241, + 0,0,342,344,3,96,48,0,343,341,1,0,0,0,343,344,1,0,0,0,344,986,1,0,0,0,345, + 346,5,222,0,0,346,347,5,212,0,0,347,986,3,166,83,0,348,349,5,21,0,0,349, + 352,5,212,0,0,350,351,5,101,0,0,351,353,5,77,0,0,352,350,1,0,0,0,352,353, + 1,0,0,0,353,354,1,0,0,0,354,355,3,166,83,0,355,356,5,180,0,0,356,357,5, + 220,0,0,357,358,3,166,83,0,358,986,1,0,0,0,359,360,5,40,0,0,360,361,5,153, + 0,0,361,362,5,212,0,0,362,363,3,166,83,0,363,366,5,114,0,0,364,367,3,108, + 54,0,365,367,5,148,0,0,366,364,1,0,0,0,366,365,1,0,0,0,367,986,1,0,0,0, + 368,369,5,40,0,0,369,370,5,153,0,0,370,371,5,38,0,0,371,372,3,166,83,0, + 372,375,5,114,0,0,373,376,3,108,54,0,374,376,5,148,0,0,375,373,1,0,0,0, + 375,374,1,0,0,0,376,986,1,0,0,0,377,378,5,21,0,0,378,381,5,212,0,0,379, + 380,5,101,0,0,380,382,5,77,0,0,381,379,1,0,0,0,381,382,1,0,0,0,382,383, + 1,0,0,0,383,384,3,166,83,0,384,385,5,180,0,0,385,388,5,38,0,0,386,387,5, + 101,0,0,387,389,5,77,0,0,388,386,1,0,0,0,388,389,1,0,0,0,389,390,1,0,0, + 0,390,391,3,174,87,0,391,392,5,220,0,0,392,393,3,174,87,0,393,986,1,0,0, + 0,394,395,5,21,0,0,395,398,5,212,0,0,396,397,5,101,0,0,397,399,5,77,0,0, + 398,396,1,0,0,0,398,399,1,0,0,0,399,400,1,0,0,0,400,401,3,166,83,0,401, + 402,5,69,0,0,402,405,5,38,0,0,403,404,5,101,0,0,404,406,5,77,0,0,405,403, + 1,0,0,0,405,406,1,0,0,0,406,407,1,0,0,0,407,408,3,166,83,0,408,986,1,0, + 0,0,409,410,5,21,0,0,410,413,5,212,0,0,411,412,5,101,0,0,412,414,5,77,0, + 0,413,411,1,0,0,0,413,414,1,0,0,0,414,415,1,0,0,0,415,416,3,166,83,0,416, + 417,5,17,0,0,417,421,5,38,0,0,418,419,5,101,0,0,419,420,5,147,0,0,420,422, + 5,77,0,0,421,418,1,0,0,0,421,422,1,0,0,0,422,423,1,0,0,0,423,424,3,22,11, + 0,424,986,1,0,0,0,425,426,5,21,0,0,426,427,5,212,0,0,427,428,3,166,83,0, + 428,429,5,203,0,0,429,430,5,29,0,0,430,431,3,170,85,0,431,986,1,0,0,0,432, + 433,5,21,0,0,433,434,5,212,0,0,434,435,3,166,83,0,435,436,5,203,0,0,436, + 437,5,175,0,0,437,438,3,28,14,0,438,986,1,0,0,0,439,440,5,21,0,0,440,441, + 5,212,0,0,441,442,3,166,83,0,442,443,5,76,0,0,443,456,3,174,87,0,444,453, + 5,2,0,0,445,450,3,158,79,0,446,447,5,4,0,0,447,449,3,158,79,0,448,446,1, + 0,0,0,449,452,1,0,0,0,450,448,1,0,0,0,450,451,1,0,0,0,451,454,1,0,0,0,452, + 450,1,0,0,0,453,445,1,0,0,0,453,454,1,0,0,0,454,455,1,0,0,0,455,457,5,3, + 0,0,456,444,1,0,0,0,456,457,1,0,0,0,457,460,1,0,0,0,458,459,5,241,0,0,459, + 461,3,96,48,0,460,458,1,0,0,0,460,461,1,0,0,0,461,986,1,0,0,0,462,463,5, + 22,0,0,463,466,3,166,83,0,464,465,5,243,0,0,465,467,3,26,13,0,466,464,1, + 0,0,0,466,467,1,0,0,0,467,986,1,0,0,0,468,471,5,44,0,0,469,470,5,157,0, + 0,470,472,5,182,0,0,471,469,1,0,0,0,471,472,1,0,0,0,472,473,1,0,0,0,473, + 474,5,133,0,0,474,478,5,239,0,0,475,476,5,101,0,0,476,477,5,147,0,0,477, + 479,5,77,0,0,478,475,1,0,0,0,478,479,1,0,0,0,479,480,1,0,0,0,480,483,3, + 166,83,0,481,482,5,40,0,0,482,484,3,108,54,0,483,481,1,0,0,0,483,484,1, + 0,0,0,484,487,1,0,0,0,485,486,5,243,0,0,486,488,3,26,13,0,487,485,1,0,0, + 0,487,488,1,0,0,0,488,489,1,0,0,0,489,490,5,26,0,0,490,491,3,16,8,0,491, + 986,1,0,0,0,492,495,5,44,0,0,493,494,5,157,0,0,494,496,5,182,0,0,495,493, + 1,0,0,0,495,496,1,0,0,0,496,497,1,0,0,0,497,498,5,239,0,0,498,501,3,166, + 83,0,499,500,5,40,0,0,500,502,3,108,54,0,501,499,1,0,0,0,501,502,1,0,0, + 0,502,505,1,0,0,0,503,504,5,198,0,0,504,506,7,1,0,0,505,503,1,0,0,0,505, + 506,1,0,0,0,506,507,1,0,0,0,507,508,5,26,0,0,508,509,3,16,8,0,509,986,1, + 0,0,0,510,511,5,179,0,0,511,512,5,133,0,0,512,513,5,239,0,0,513,986,3,166, + 83,0,514,515,5,69,0,0,515,516,5,133,0,0,516,519,5,239,0,0,517,518,5,101, + 0,0,518,520,5,77,0,0,519,517,1,0,0,0,519,520,1,0,0,0,520,521,1,0,0,0,521, + 986,3,166,83,0,522,523,5,21,0,0,523,524,5,133,0,0,524,527,5,239,0,0,525, + 526,5,101,0,0,526,528,5,77,0,0,527,525,1,0,0,0,527,528,1,0,0,0,528,529, + 1,0,0,0,529,530,3,166,83,0,530,531,5,180,0,0,531,532,5,220,0,0,532,533, + 3,166,83,0,533,986,1,0,0,0,534,535,5,21,0,0,535,536,5,133,0,0,536,537,5, + 239,0,0,537,538,3,166,83,0,538,539,5,203,0,0,539,540,5,175,0,0,540,541, + 3,28,14,0,541,986,1,0,0,0,542,543,5,69,0,0,543,546,5,239,0,0,544,545,5, + 101,0,0,545,547,5,77,0,0,546,544,1,0,0,0,546,547,1,0,0,0,547,548,1,0,0, + 0,548,986,3,166,83,0,549,550,5,21,0,0,550,551,5,239,0,0,551,552,3,166,83, + 0,552,553,5,180,0,0,553,554,5,220,0,0,554,555,3,166,83,0,555,986,1,0,0, + 0,556,557,5,21,0,0,557,558,5,239,0,0,558,559,3,166,83,0,559,560,5,203,0, + 0,560,561,5,29,0,0,561,562,3,170,85,0,562,986,1,0,0,0,563,564,5,33,0,0, + 564,565,3,166,83,0,565,574,5,2,0,0,566,571,3,158,79,0,567,568,5,4,0,0,568, + 570,3,158,79,0,569,567,1,0,0,0,570,573,1,0,0,0,571,569,1,0,0,0,571,572, + 1,0,0,0,572,575,1,0,0,0,573,571,1,0,0,0,574,566,1,0,0,0,574,575,1,0,0,0, + 575,576,1,0,0,0,576,577,5,3,0,0,577,986,1,0,0,0,578,579,5,44,0,0,579,580, + 5,188,0,0,580,584,3,174,87,0,581,582,5,243,0,0,582,583,5,18,0,0,583,585, + 3,168,84,0,584,581,1,0,0,0,584,585,1,0,0,0,585,588,1,0,0,0,586,587,5,103, + 0,0,587,589,3,174,87,0,588,586,1,0,0,0,588,589,1,0,0,0,589,986,1,0,0,0, + 590,591,5,69,0,0,591,592,5,188,0,0,592,986,3,174,87,0,593,594,5,91,0,0, + 594,595,3,172,86,0,595,596,5,220,0,0,596,601,3,170,85,0,597,598,5,4,0,0, + 598,600,3,170,85,0,599,597,1,0,0,0,600,603,1,0,0,0,601,599,1,0,0,0,601, + 602,1,0,0,0,602,607,1,0,0,0,603,601,1,0,0,0,604,605,5,243,0,0,605,606,5, + 18,0,0,606,608,5,156,0,0,607,604,1,0,0,0,607,608,1,0,0,0,608,612,1,0,0, + 0,609,610,5,92,0,0,610,611,5,32,0,0,611,613,3,168,84,0,612,609,1,0,0,0, + 612,613,1,0,0,0,613,616,1,0,0,0,614,615,5,103,0,0,615,617,3,174,87,0,616, + 614,1,0,0,0,616,617,1,0,0,0,617,986,1,0,0,0,618,622,5,186,0,0,619,620,5, + 18,0,0,620,621,5,156,0,0,621,623,5,86,0,0,622,619,1,0,0,0,622,623,1,0,0, + 0,623,624,1,0,0,0,624,625,3,172,86,0,625,626,5,88,0,0,626,631,3,170,85, + 0,627,628,5,4,0,0,628,630,3,170,85,0,629,627,1,0,0,0,630,633,1,0,0,0,631, + 629,1,0,0,0,631,632,1,0,0,0,632,637,1,0,0,0,633,631,1,0,0,0,634,635,5,92, + 0,0,635,636,5,32,0,0,636,638,3,168,84,0,637,634,1,0,0,0,637,638,1,0,0,0, + 638,641,1,0,0,0,639,640,5,103,0,0,640,642,3,174,87,0,641,639,1,0,0,0,641, + 642,1,0,0,0,642,986,1,0,0,0,643,644,5,203,0,0,644,648,5,188,0,0,645,649, + 5,20,0,0,646,649,5,145,0,0,647,649,3,174,87,0,648,645,1,0,0,0,648,646,1, + 0,0,0,648,647,1,0,0,0,649,652,1,0,0,0,650,651,5,103,0,0,651,653,3,174,87, + 0,652,650,1,0,0,0,652,653,1,0,0,0,653,986,1,0,0,0,654,665,5,91,0,0,655, + 660,3,164,82,0,656,657,5,4,0,0,657,659,3,164,82,0,658,656,1,0,0,0,659,662, + 1,0,0,0,660,658,1,0,0,0,660,661,1,0,0,0,661,666,1,0,0,0,662,660,1,0,0,0, + 663,664,5,20,0,0,664,666,5,174,0,0,665,655,1,0,0,0,665,663,1,0,0,0,666, + 667,1,0,0,0,667,669,5,153,0,0,668,670,7,2,0,0,669,668,1,0,0,0,669,670,1, + 0,0,0,670,671,1,0,0,0,671,672,3,166,83,0,672,673,5,220,0,0,673,677,3,170, + 85,0,674,675,5,243,0,0,675,676,5,91,0,0,676,678,5,156,0,0,677,674,1,0,0, + 0,677,678,1,0,0,0,678,986,1,0,0,0,679,690,5,94,0,0,680,685,3,164,82,0,681, + 682,5,4,0,0,682,684,3,164,82,0,683,681,1,0,0,0,684,687,1,0,0,0,685,683, + 1,0,0,0,685,686,1,0,0,0,686,691,1,0,0,0,687,685,1,0,0,0,688,689,5,20,0, + 0,689,691,5,174,0,0,690,680,1,0,0,0,690,688,1,0,0,0,691,692,1,0,0,0,692, + 694,5,153,0,0,693,695,7,2,0,0,694,693,1,0,0,0,694,695,1,0,0,0,695,696,1, + 0,0,0,696,697,3,166,83,0,697,698,5,220,0,0,698,699,3,170,85,0,699,986,1, + 0,0,0,700,704,5,186,0,0,701,702,5,91,0,0,702,703,5,156,0,0,703,705,5,86, + 0,0,704,701,1,0,0,0,704,705,1,0,0,0,705,716,1,0,0,0,706,711,3,164,82,0, + 707,708,5,4,0,0,708,710,3,164,82,0,709,707,1,0,0,0,710,713,1,0,0,0,711, + 709,1,0,0,0,711,712,1,0,0,0,712,717,1,0,0,0,713,711,1,0,0,0,714,715,5,20, + 0,0,715,717,5,174,0,0,716,706,1,0,0,0,716,714,1,0,0,0,717,718,1,0,0,0,718, + 720,5,153,0,0,719,721,7,2,0,0,720,719,1,0,0,0,720,721,1,0,0,0,721,722,1, + 0,0,0,722,723,3,166,83,0,723,724,5,88,0,0,724,725,3,170,85,0,725,986,1, + 0,0,0,726,727,5,205,0,0,727,733,5,93,0,0,728,730,5,153,0,0,729,731,5,212, + 0,0,730,729,1,0,0,0,730,731,1,0,0,0,731,732,1,0,0,0,732,734,3,166,83,0, + 733,728,1,0,0,0,733,734,1,0,0,0,734,986,1,0,0,0,735,737,5,78,0,0,736,738, + 5,22,0,0,737,736,1,0,0,0,737,738,1,0,0,0,738,740,1,0,0,0,739,741,5,238, + 0,0,740,739,1,0,0,0,740,741,1,0,0,0,741,753,1,0,0,0,742,743,5,2,0,0,743, + 748,3,152,76,0,744,745,5,4,0,0,745,747,3,152,76,0,746,744,1,0,0,0,747,750, + 1,0,0,0,748,746,1,0,0,0,748,749,1,0,0,0,749,751,1,0,0,0,750,748,1,0,0,0, + 751,752,5,3,0,0,752,754,1,0,0,0,753,742,1,0,0,0,753,754,1,0,0,0,754,755, + 1,0,0,0,755,986,3,14,7,0,756,757,5,205,0,0,757,758,5,44,0,0,758,759,5,212, + 0,0,759,986,3,166,83,0,760,761,5,205,0,0,761,762,5,44,0,0,762,763,5,195, + 0,0,763,986,3,166,83,0,764,765,5,205,0,0,765,766,5,44,0,0,766,767,5,239, + 0,0,767,986,3,166,83,0,768,769,5,205,0,0,769,770,5,44,0,0,770,771,5,133, + 0,0,771,772,5,239,0,0,772,986,3,166,83,0,773,774,5,205,0,0,774,777,5,213, + 0,0,775,776,7,3,0,0,776,778,3,166,83,0,777,775,1,0,0,0,777,778,1,0,0,0, + 778,785,1,0,0,0,779,780,5,122,0,0,780,783,3,108,54,0,781,782,5,73,0,0,782, + 784,3,108,54,0,783,781,1,0,0,0,783,784,1,0,0,0,784,786,1,0,0,0,785,779, + 1,0,0,0,785,786,1,0,0,0,786,986,1,0,0,0,787,788,5,205,0,0,788,791,5,196, + 0,0,789,790,7,3,0,0,790,792,3,174,87,0,791,789,1,0,0,0,791,792,1,0,0,0, + 792,799,1,0,0,0,793,794,5,122,0,0,794,797,3,108,54,0,795,796,5,73,0,0,796, + 798,3,108,54,0,797,795,1,0,0,0,797,798,1,0,0,0,798,800,1,0,0,0,799,793, + 1,0,0,0,799,800,1,0,0,0,800,986,1,0,0,0,801,802,5,205,0,0,802,809,5,37, + 0,0,803,804,5,122,0,0,804,807,3,108,54,0,805,806,5,73,0,0,806,808,3,108, + 54,0,807,805,1,0,0,0,807,808,1,0,0,0,808,810,1,0,0,0,809,803,1,0,0,0,809, + 810,1,0,0,0,810,986,1,0,0,0,811,812,5,205,0,0,812,813,5,39,0,0,813,815, + 7,3,0,0,814,816,3,166,83,0,815,814,1,0,0,0,815,816,1,0,0,0,816,823,1,0, + 0,0,817,818,5,122,0,0,818,821,3,108,54,0,819,820,5,73,0,0,820,822,3,108, + 54,0,821,819,1,0,0,0,821,822,1,0,0,0,822,824,1,0,0,0,823,817,1,0,0,0,823, + 824,1,0,0,0,824,986,1,0,0,0,825,826,5,205,0,0,826,827,5,208,0,0,827,828, + 5,86,0,0,828,986,3,166,83,0,829,830,5,205,0,0,830,831,5,208,0,0,831,832, + 5,86,0,0,832,833,5,2,0,0,833,834,3,16,8,0,834,835,5,3,0,0,835,986,1,0,0, + 0,836,838,5,205,0,0,837,839,5,47,0,0,838,837,1,0,0,0,838,839,1,0,0,0,839, + 840,1,0,0,0,840,843,5,189,0,0,841,842,7,3,0,0,842,844,3,174,87,0,843,841, + 1,0,0,0,843,844,1,0,0,0,844,986,1,0,0,0,845,846,5,205,0,0,846,847,5,188, + 0,0,847,850,5,93,0,0,848,849,7,3,0,0,849,851,3,174,87,0,850,848,1,0,0,0, + 850,851,1,0,0,0,851,986,1,0,0,0,852,853,5,64,0,0,853,986,3,166,83,0,854, + 855,5,63,0,0,855,986,3,166,83,0,856,857,5,205,0,0,857,864,5,90,0,0,858, + 859,5,122,0,0,859,862,3,108,54,0,860,861,5,73,0,0,861,863,3,108,54,0,862, + 860,1,0,0,0,862,863,1,0,0,0,863,865,1,0,0,0,864,858,1,0,0,0,864,865,1,0, + 0,0,865,986,1,0,0,0,866,867,5,205,0,0,867,874,5,202,0,0,868,869,5,122,0, + 0,869,872,3,108,54,0,870,871,5,73,0,0,871,873,3,108,54,0,872,870,1,0,0, + 0,872,873,1,0,0,0,873,875,1,0,0,0,874,868,1,0,0,0,874,875,1,0,0,0,875,986, + 1,0,0,0,876,877,5,203,0,0,877,878,5,202,0,0,878,879,3,166,83,0,879,880, + 5,249,0,0,880,881,3,94,47,0,881,986,1,0,0,0,882,883,5,183,0,0,883,884,5, + 202,0,0,884,986,3,166,83,0,885,886,5,207,0,0,886,895,5,221,0,0,887,892, + 3,154,77,0,888,889,5,4,0,0,889,891,3,154,77,0,890,888,1,0,0,0,891,894,1, + 0,0,0,892,890,1,0,0,0,892,893,1,0,0,0,893,896,1,0,0,0,894,892,1,0,0,0,895, + 887,1,0,0,0,895,896,1,0,0,0,896,986,1,0,0,0,897,899,5,41,0,0,898,900,5, + 245,0,0,899,898,1,0,0,0,899,900,1,0,0,0,900,986,1,0,0,0,901,903,5,190,0, + 0,902,904,5,245,0,0,903,902,1,0,0,0,903,904,1,0,0,0,904,986,1,0,0,0,905, + 906,5,173,0,0,906,907,3,174,87,0,907,908,5,88,0,0,908,909,3,14,7,0,909, + 986,1,0,0,0,910,911,5,60,0,0,911,912,5,173,0,0,912,986,3,174,87,0,913,914, + 5,76,0,0,914,924,3,174,87,0,915,916,5,235,0,0,916,921,3,94,47,0,917,918, + 5,4,0,0,918,920,3,94,47,0,919,917,1,0,0,0,920,923,1,0,0,0,921,919,1,0,0, + 0,921,922,1,0,0,0,922,925,1,0,0,0,923,921,1,0,0,0,924,915,1,0,0,0,924,925, + 1,0,0,0,925,986,1,0,0,0,926,927,5,64,0,0,927,928,5,107,0,0,928,986,3,174, + 87,0,929,930,5,64,0,0,930,931,5,161,0,0,931,986,3,174,87,0,932,933,5,203, + 0,0,933,934,5,166,0,0,934,986,3,162,81,0,935,936,5,203,0,0,936,937,5,218, + 0,0,937,940,5,248,0,0,938,941,5,124,0,0,939,941,3,94,47,0,940,938,1,0,0, + 0,940,939,1,0,0,0,941,986,1,0,0,0,942,943,5,232,0,0,943,944,3,166,83,0, + 944,945,5,203,0,0,945,950,3,150,75,0,946,947,5,4,0,0,947,949,3,150,75,0, + 948,946,1,0,0,0,949,952,1,0,0,0,950,948,1,0,0,0,950,951,1,0,0,0,951,955, + 1,0,0,0,952,950,1,0,0,0,953,954,5,241,0,0,954,956,3,96,48,0,955,953,1,0, + 0,0,955,956,1,0,0,0,956,986,1,0,0,0,957,958,5,135,0,0,958,959,5,111,0,0, + 959,964,3,166,83,0,960,962,5,26,0,0,961,960,1,0,0,0,961,962,1,0,0,0,962, + 963,1,0,0,0,963,965,3,174,87,0,964,961,1,0,0,0,964,965,1,0,0,0,965,966, + 1,0,0,0,966,967,5,235,0,0,967,968,3,64,32,0,968,969,5,153,0,0,969,971,3, + 94,47,0,970,972,3,134,67,0,971,970,1,0,0,0,972,973,1,0,0,0,973,971,1,0, + 0,0,973,974,1,0,0,0,974,986,1,0,0,0,975,976,5,205,0,0,976,977,5,40,0,0, + 977,978,5,153,0,0,978,979,5,212,0,0,979,986,3,166,83,0,980,981,5,205,0, + 0,981,982,5,40,0,0,982,983,5,153,0,0,983,984,5,38,0,0,984,986,3,166,83, + 0,985,215,1,0,0,0,985,216,1,0,0,0,985,218,1,0,0,0,985,223,1,0,0,0,985,239, + 1,0,0,0,985,249,1,0,0,0,985,256,1,0,0,0,985,263,1,0,0,0,985,297,1,0,0,0, + 985,323,1,0,0,0,985,330,1,0,0,0,985,338,1,0,0,0,985,345,1,0,0,0,985,348, + 1,0,0,0,985,359,1,0,0,0,985,368,1,0,0,0,985,377,1,0,0,0,985,394,1,0,0,0, + 985,409,1,0,0,0,985,425,1,0,0,0,985,432,1,0,0,0,985,439,1,0,0,0,985,462, + 1,0,0,0,985,468,1,0,0,0,985,492,1,0,0,0,985,510,1,0,0,0,985,514,1,0,0,0, + 985,522,1,0,0,0,985,534,1,0,0,0,985,542,1,0,0,0,985,549,1,0,0,0,985,556, + 1,0,0,0,985,563,1,0,0,0,985,578,1,0,0,0,985,590,1,0,0,0,985,593,1,0,0,0, + 985,618,1,0,0,0,985,643,1,0,0,0,985,654,1,0,0,0,985,679,1,0,0,0,985,700, + 1,0,0,0,985,726,1,0,0,0,985,735,1,0,0,0,985,756,1,0,0,0,985,760,1,0,0,0, + 985,764,1,0,0,0,985,768,1,0,0,0,985,773,1,0,0,0,985,787,1,0,0,0,985,801, + 1,0,0,0,985,811,1,0,0,0,985,825,1,0,0,0,985,829,1,0,0,0,985,836,1,0,0,0, + 985,845,1,0,0,0,985,852,1,0,0,0,985,854,1,0,0,0,985,856,1,0,0,0,985,866, + 1,0,0,0,985,876,1,0,0,0,985,882,1,0,0,0,985,885,1,0,0,0,985,897,1,0,0,0, + 985,901,1,0,0,0,985,905,1,0,0,0,985,910,1,0,0,0,985,913,1,0,0,0,985,926, + 1,0,0,0,985,929,1,0,0,0,985,932,1,0,0,0,985,935,1,0,0,0,985,942,1,0,0,0, + 985,957,1,0,0,0,985,975,1,0,0,0,985,980,1,0,0,0,986,15,1,0,0,0,987,989, + 3,18,9,0,988,987,1,0,0,0,988,989,1,0,0,0,989,990,1,0,0,0,990,991,3,34,17, + 0,991,17,1,0,0,0,992,994,5,243,0,0,993,995,5,178,0,0,994,993,1,0,0,0,994, + 995,1,0,0,0,995,996,1,0,0,0,996,1001,3,58,29,0,997,998,5,4,0,0,998,1000, + 3,58,29,0,999,997,1,0,0,0,1000,1003,1,0,0,0,1001,999,1,0,0,0,1001,1002, + 1,0,0,0,1002,19,1,0,0,0,1003,1001,1,0,0,0,1004,1007,3,22,11,0,1005,1007, + 3,24,12,0,1006,1004,1,0,0,0,1006,1005,1,0,0,0,1007,21,1,0,0,0,1008,1009, + 3,174,87,0,1009,1012,3,124,62,0,1010,1011,5,147,0,0,1011,1013,5,148,0,0, + 1012,1010,1,0,0,0,1012,1013,1,0,0,0,1013,1016,1,0,0,0,1014,1015,5,40,0, + 0,1015,1017,3,108,54,0,1016,1014,1,0,0,0,1016,1017,1,0,0,0,1017,1020,1, + 0,0,0,1018,1019,5,243,0,0,1019,1021,3,26,13,0,1020,1018,1,0,0,0,1020,1021, + 1,0,0,0,1021,23,1,0,0,0,1022,1023,5,122,0,0,1023,1026,3,166,83,0,1024,1025, + 7,4,0,0,1025,1027,5,175,0,0,1026,1024,1,0,0,0,1026,1027,1,0,0,0,1027,25, + 1,0,0,0,1028,1029,5,2,0,0,1029,1030,3,28,14,0,1030,1031,5,3,0,0,1031,27, + 1,0,0,0,1032,1037,3,30,15,0,1033,1034,5,4,0,0,1034,1036,3,30,15,0,1035, + 1033,1,0,0,0,1036,1039,1,0,0,0,1037,1035,1,0,0,0,1037,1038,1,0,0,0,1038, + 29,1,0,0,0,1039,1037,1,0,0,0,1040,1041,3,174,87,0,1041,1042,5,249,0,0,1042, + 1043,3,32,16,0,1043,31,1,0,0,0,1044,1047,5,59,0,0,1045,1047,3,94,47,0,1046, + 1044,1,0,0,0,1046,1045,1,0,0,0,1047,33,1,0,0,0,1048,1059,3,40,20,0,1049, + 1050,5,158,0,0,1050,1051,5,32,0,0,1051,1056,3,44,22,0,1052,1053,5,4,0,0, + 1053,1055,3,44,22,0,1054,1052,1,0,0,0,1055,1058,1,0,0,0,1056,1054,1,0,0, + 0,1056,1057,1,0,0,0,1057,1060,1,0,0,0,1058,1056,1,0,0,0,1059,1049,1,0,0, + 0,1059,1060,1,0,0,0,1060,1066,1,0,0,0,1061,1062,5,151,0,0,1062,1064,3,38, + 19,0,1063,1065,7,5,0,0,1064,1063,1,0,0,0,1064,1065,1,0,0,0,1065,1067,1, + 0,0,0,1066,1061,1,0,0,0,1066,1067,1,0,0,0,1067,1081,1,0,0,0,1068,1069,5, + 123,0,0,1069,1082,3,36,18,0,1070,1071,5,81,0,0,1071,1073,7,6,0,0,1072,1074, + 3,38,19,0,1073,1072,1,0,0,0,1073,1074,1,0,0,0,1074,1075,1,0,0,0,1075,1079, + 7,5,0,0,1076,1080,5,155,0,0,1077,1078,5,243,0,0,1078,1080,5,217,0,0,1079, + 1076,1,0,0,0,1079,1077,1,0,0,0,1080,1082,1,0,0,0,1081,1068,1,0,0,0,1081, + 1070,1,0,0,0,1081,1082,1,0,0,0,1082,35,1,0,0,0,1083,1086,5,20,0,0,1084, + 1086,3,38,19,0,1085,1083,1,0,0,0,1085,1084,1,0,0,0,1086,37,1,0,0,0,1087, + 1088,7,7,0,0,1088,39,1,0,0,0,1089,1090,6,20,-1,0,1090,1091,3,42,21,0,1091, + 1106,1,0,0,0,1092,1093,10,2,0,0,1093,1095,5,109,0,0,1094,1096,3,60,30,0, + 1095,1094,1,0,0,0,1095,1096,1,0,0,0,1096,1097,1,0,0,0,1097,1105,3,40,20, + 3,1098,1099,10,1,0,0,1099,1101,7,8,0,0,1100,1102,3,60,30,0,1101,1100,1, + 0,0,0,1101,1102,1,0,0,0,1102,1103,1,0,0,0,1103,1105,3,40,20,2,1104,1092, + 1,0,0,0,1104,1098,1,0,0,0,1105,1108,1,0,0,0,1106,1104,1,0,0,0,1106,1107, + 1,0,0,0,1107,41,1,0,0,0,1108,1106,1,0,0,0,1109,1126,3,46,23,0,1110,1111, + 5,212,0,0,1111,1126,3,166,83,0,1112,1113,5,237,0,0,1113,1118,3,94,47,0, + 1114,1115,5,4,0,0,1115,1117,3,94,47,0,1116,1114,1,0,0,0,1117,1120,1,0,0, + 0,1118,1116,1,0,0,0,1118,1119,1,0,0,0,1119,1126,1,0,0,0,1120,1118,1,0,0, + 0,1121,1122,5,2,0,0,1122,1123,3,34,17,0,1123,1124,5,3,0,0,1124,1126,1,0, + 0,0,1125,1109,1,0,0,0,1125,1110,1,0,0,0,1125,1112,1,0,0,0,1125,1121,1,0, + 0,0,1126,43,1,0,0,0,1127,1129,3,94,47,0,1128,1130,7,9,0,0,1129,1128,1,0, + 0,0,1129,1130,1,0,0,0,1130,1133,1,0,0,0,1131,1132,5,150,0,0,1132,1134,7, + 10,0,0,1133,1131,1,0,0,0,1133,1134,1,0,0,0,1134,45,1,0,0,0,1135,1137,5, + 200,0,0,1136,1138,3,60,30,0,1137,1136,1,0,0,0,1137,1138,1,0,0,0,1138,1139, + 1,0,0,0,1139,1144,3,62,31,0,1140,1141,5,4,0,0,1141,1143,3,62,31,0,1142, + 1140,1,0,0,0,1143,1146,1,0,0,0,1144,1142,1,0,0,0,1144,1145,1,0,0,0,1145, + 1156,1,0,0,0,1146,1144,1,0,0,0,1147,1148,5,88,0,0,1148,1153,3,64,32,0,1149, + 1150,5,4,0,0,1150,1152,3,64,32,0,1151,1149,1,0,0,0,1152,1155,1,0,0,0,1153, + 1151,1,0,0,0,1153,1154,1,0,0,0,1154,1157,1,0,0,0,1155,1153,1,0,0,0,1156, + 1147,1,0,0,0,1156,1157,1,0,0,0,1157,1160,1,0,0,0,1158,1159,5,241,0,0,1159, + 1161,3,96,48,0,1160,1158,1,0,0,0,1160,1161,1,0,0,0,1161,1165,1,0,0,0,1162, + 1163,5,96,0,0,1163,1164,5,32,0,0,1164,1166,3,48,24,0,1165,1162,1,0,0,0, + 1165,1166,1,0,0,0,1166,1169,1,0,0,0,1167,1168,5,99,0,0,1168,1170,3,96,48, + 0,1169,1167,1,0,0,0,1169,1170,1,0,0,0,1170,1180,1,0,0,0,1171,1172,5,242, + 0,0,1172,1177,3,54,27,0,1173,1174,5,4,0,0,1174,1176,3,54,27,0,1175,1173, + 1,0,0,0,1176,1179,1,0,0,0,1177,1175,1,0,0,0,1177,1178,1,0,0,0,1178,1181, + 1,0,0,0,1179,1177,1,0,0,0,1180,1171,1,0,0,0,1180,1181,1,0,0,0,1181,47,1, + 0,0,0,1182,1184,3,60,30,0,1183,1182,1,0,0,0,1183,1184,1,0,0,0,1184,1185, + 1,0,0,0,1185,1190,3,50,25,0,1186,1187,5,4,0,0,1187,1189,3,50,25,0,1188, + 1186,1,0,0,0,1189,1192,1,0,0,0,1190,1188,1,0,0,0,1190,1191,1,0,0,0,1191, + 49,1,0,0,0,1192,1190,1,0,0,0,1193,1234,3,52,26,0,1194,1195,5,191,0,0,1195, + 1204,5,2,0,0,1196,1201,3,94,47,0,1197,1198,5,4,0,0,1198,1200,3,94,47,0, + 1199,1197,1,0,0,0,1200,1203,1,0,0,0,1201,1199,1,0,0,0,1201,1202,1,0,0,0, + 1202,1205,1,0,0,0,1203,1201,1,0,0,0,1204,1196,1,0,0,0,1204,1205,1,0,0,0, + 1205,1206,1,0,0,0,1206,1234,5,3,0,0,1207,1208,5,46,0,0,1208,1217,5,2,0, + 0,1209,1214,3,94,47,0,1210,1211,5,4,0,0,1211,1213,3,94,47,0,1212,1210,1, + 0,0,0,1213,1216,1,0,0,0,1214,1212,1,0,0,0,1214,1215,1,0,0,0,1215,1218,1, + 0,0,0,1216,1214,1,0,0,0,1217,1209,1,0,0,0,1217,1218,1,0,0,0,1218,1219,1, + 0,0,0,1219,1234,5,3,0,0,1220,1221,5,97,0,0,1221,1222,5,204,0,0,1222,1223, + 5,2,0,0,1223,1228,3,52,26,0,1224,1225,5,4,0,0,1225,1227,3,52,26,0,1226, + 1224,1,0,0,0,1227,1230,1,0,0,0,1228,1226,1,0,0,0,1228,1229,1,0,0,0,1229, + 1231,1,0,0,0,1230,1228,1,0,0,0,1231,1232,5,3,0,0,1232,1234,1,0,0,0,1233, + 1193,1,0,0,0,1233,1194,1,0,0,0,1233,1207,1,0,0,0,1233,1220,1,0,0,0,1234, + 51,1,0,0,0,1235,1244,5,2,0,0,1236,1241,3,94,47,0,1237,1238,5,4,0,0,1238, + 1240,3,94,47,0,1239,1237,1,0,0,0,1240,1243,1,0,0,0,1241,1239,1,0,0,0,1241, + 1242,1,0,0,0,1242,1245,1,0,0,0,1243,1241,1,0,0,0,1244,1236,1,0,0,0,1244, + 1245,1,0,0,0,1245,1246,1,0,0,0,1246,1249,5,3,0,0,1247,1249,3,94,47,0,1248, + 1235,1,0,0,0,1248,1247,1,0,0,0,1249,53,1,0,0,0,1250,1251,3,174,87,0,1251, + 1252,5,26,0,0,1252,1253,5,2,0,0,1253,1254,3,56,28,0,1254,1255,5,3,0,0,1255, + 55,1,0,0,0,1256,1258,3,174,87,0,1257,1256,1,0,0,0,1257,1258,1,0,0,0,1258, + 1269,1,0,0,0,1259,1260,5,163,0,0,1260,1261,5,32,0,0,1261,1266,3,94,47,0, + 1262,1263,5,4,0,0,1263,1265,3,94,47,0,1264,1262,1,0,0,0,1265,1268,1,0,0, + 0,1266,1264,1,0,0,0,1266,1267,1,0,0,0,1267,1270,1,0,0,0,1268,1266,1,0,0, + 0,1269,1259,1,0,0,0,1269,1270,1,0,0,0,1270,1281,1,0,0,0,1271,1272,5,158, + 0,0,1272,1273,5,32,0,0,1273,1278,3,44,22,0,1274,1275,5,4,0,0,1275,1277, + 3,44,22,0,1276,1274,1,0,0,0,1277,1280,1,0,0,0,1278,1276,1,0,0,0,1278,1279, + 1,0,0,0,1279,1282,1,0,0,0,1280,1278,1,0,0,0,1281,1271,1,0,0,0,1281,1282, + 1,0,0,0,1282,1284,1,0,0,0,1283,1285,3,138,69,0,1284,1283,1,0,0,0,1284,1285, + 1,0,0,0,1285,57,1,0,0,0,1286,1288,3,174,87,0,1287,1289,3,90,45,0,1288,1287, + 1,0,0,0,1288,1289,1,0,0,0,1289,1290,1,0,0,0,1290,1291,5,26,0,0,1291,1292, + 5,2,0,0,1292,1293,3,16,8,0,1293,1294,5,3,0,0,1294,59,1,0,0,0,1295,1296, + 7,11,0,0,1296,61,1,0,0,0,1297,1302,3,94,47,0,1298,1300,5,26,0,0,1299,1298, + 1,0,0,0,1299,1300,1,0,0,0,1300,1301,1,0,0,0,1301,1303,3,174,87,0,1302,1299, + 1,0,0,0,1302,1303,1,0,0,0,1303,1313,1,0,0,0,1304,1305,3,102,51,0,1305,1306, + 5,1,0,0,1306,1309,5,257,0,0,1307,1308,5,26,0,0,1308,1310,3,90,45,0,1309, + 1307,1,0,0,0,1309,1310,1,0,0,0,1310,1313,1,0,0,0,1311,1313,5,257,0,0,1312, + 1297,1,0,0,0,1312,1304,1,0,0,0,1312,1311,1,0,0,0,1313,63,1,0,0,0,1314,1315, + 6,32,-1,0,1315,1316,3,70,35,0,1316,1335,1,0,0,0,1317,1331,10,2,0,0,1318, + 1319,5,45,0,0,1319,1320,5,116,0,0,1320,1332,3,70,35,0,1321,1322,3,66,33, + 0,1322,1323,5,116,0,0,1323,1324,3,64,32,0,1324,1325,3,68,34,0,1325,1332, + 1,0,0,0,1326,1327,5,138,0,0,1327,1328,3,66,33,0,1328,1329,5,116,0,0,1329, + 1330,3,70,35,0,1330,1332,1,0,0,0,1331,1318,1,0,0,0,1331,1321,1,0,0,0,1331, + 1326,1,0,0,0,1332,1334,1,0,0,0,1333,1317,1,0,0,0,1334,1337,1,0,0,0,1335, + 1333,1,0,0,0,1335,1336,1,0,0,0,1336,65,1,0,0,0,1337,1335,1,0,0,0,1338,1340, + 5,106,0,0,1339,1338,1,0,0,0,1339,1340,1,0,0,0,1340,1354,1,0,0,0,1341,1343, + 5,120,0,0,1342,1344,5,160,0,0,1343,1342,1,0,0,0,1343,1344,1,0,0,0,1344, + 1354,1,0,0,0,1345,1347,5,187,0,0,1346,1348,5,160,0,0,1347,1346,1,0,0,0, + 1347,1348,1,0,0,0,1348,1354,1,0,0,0,1349,1351,5,89,0,0,1350,1352,5,160, + 0,0,1351,1350,1,0,0,0,1351,1352,1,0,0,0,1352,1354,1,0,0,0,1353,1339,1,0, + 0,0,1353,1341,1,0,0,0,1353,1345,1,0,0,0,1353,1349,1,0,0,0,1354,67,1,0,0, + 0,1355,1356,5,153,0,0,1356,1370,3,96,48,0,1357,1358,5,235,0,0,1358,1359, + 5,2,0,0,1359,1364,3,174,87,0,1360,1361,5,4,0,0,1361,1363,3,174,87,0,1362, + 1360,1,0,0,0,1363,1366,1,0,0,0,1364,1362,1,0,0,0,1364,1365,1,0,0,0,1365, + 1367,1,0,0,0,1366,1364,1,0,0,0,1367,1368,5,3,0,0,1368,1370,1,0,0,0,1369, + 1355,1,0,0,0,1369,1357,1,0,0,0,1370,69,1,0,0,0,1371,1378,3,74,37,0,1372, + 1373,5,214,0,0,1373,1374,3,72,36,0,1374,1375,5,2,0,0,1375,1376,3,94,47, + 0,1376,1377,5,3,0,0,1377,1379,1,0,0,0,1378,1372,1,0,0,0,1378,1379,1,0,0, + 0,1379,71,1,0,0,0,1380,1381,7,12,0,0,1381,73,1,0,0,0,1382,1465,3,88,44, + 0,1383,1384,5,132,0,0,1384,1395,5,2,0,0,1385,1386,5,163,0,0,1386,1387,5, + 32,0,0,1387,1392,3,94,47,0,1388,1389,5,4,0,0,1389,1391,3,94,47,0,1390,1388, + 1,0,0,0,1391,1394,1,0,0,0,1392,1390,1,0,0,0,1392,1393,1,0,0,0,1393,1396, + 1,0,0,0,1394,1392,1,0,0,0,1395,1385,1,0,0,0,1395,1396,1,0,0,0,1396,1407, + 1,0,0,0,1397,1398,5,158,0,0,1398,1399,5,32,0,0,1399,1404,3,44,22,0,1400, + 1401,5,4,0,0,1401,1403,3,44,22,0,1402,1400,1,0,0,0,1403,1406,1,0,0,0,1404, + 1402,1,0,0,0,1404,1405,1,0,0,0,1405,1408,1,0,0,0,1406,1404,1,0,0,0,1407, + 1397,1,0,0,0,1407,1408,1,0,0,0,1408,1418,1,0,0,0,1409,1410,5,134,0,0,1410, + 1415,3,76,38,0,1411,1412,5,4,0,0,1412,1414,3,76,38,0,1413,1411,1,0,0,0, + 1414,1417,1,0,0,0,1415,1413,1,0,0,0,1415,1416,1,0,0,0,1416,1419,1,0,0,0, + 1417,1415,1,0,0,0,1418,1409,1,0,0,0,1418,1419,1,0,0,0,1419,1421,1,0,0,0, + 1420,1422,3,78,39,0,1421,1420,1,0,0,0,1421,1422,1,0,0,0,1422,1426,1,0,0, + 0,1423,1424,5,19,0,0,1424,1425,5,129,0,0,1425,1427,3,82,41,0,1426,1423, + 1,0,0,0,1426,1427,1,0,0,0,1427,1429,1,0,0,0,1428,1430,7,13,0,0,1429,1428, + 1,0,0,0,1429,1430,1,0,0,0,1430,1431,1,0,0,0,1431,1432,5,167,0,0,1432,1433, + 5,2,0,0,1433,1434,3,144,72,0,1434,1444,5,3,0,0,1435,1436,5,209,0,0,1436, + 1441,3,84,42,0,1437,1438,5,4,0,0,1438,1440,3,84,42,0,1439,1437,1,0,0,0, + 1440,1443,1,0,0,0,1441,1439,1,0,0,0,1441,1442,1,0,0,0,1442,1445,1,0,0,0, + 1443,1441,1,0,0,0,1444,1435,1,0,0,0,1444,1445,1,0,0,0,1445,1446,1,0,0,0, + 1446,1447,5,65,0,0,1447,1452,3,86,43,0,1448,1449,5,4,0,0,1449,1451,3,86, + 43,0,1450,1448,1,0,0,0,1451,1454,1,0,0,0,1452,1450,1,0,0,0,1452,1453,1, + 0,0,0,1453,1455,1,0,0,0,1454,1452,1,0,0,0,1455,1463,5,3,0,0,1456,1458,5, + 26,0,0,1457,1456,1,0,0,0,1457,1458,1,0,0,0,1458,1459,1,0,0,0,1459,1461, + 3,174,87,0,1460,1462,3,90,45,0,1461,1460,1,0,0,0,1461,1462,1,0,0,0,1462, + 1464,1,0,0,0,1463,1457,1,0,0,0,1463,1464,1,0,0,0,1464,1466,1,0,0,0,1465, + 1383,1,0,0,0,1465,1466,1,0,0,0,1466,75,1,0,0,0,1467,1468,3,94,47,0,1468, + 1469,5,26,0,0,1469,1470,3,174,87,0,1470,77,1,0,0,0,1471,1472,5,154,0,0, + 1472,1473,5,192,0,0,1473,1474,5,168,0,0,1474,1483,5,129,0,0,1475,1476,5, + 20,0,0,1476,1477,5,193,0,0,1477,1478,5,168,0,0,1478,1480,5,129,0,0,1479, + 1481,3,80,40,0,1480,1479,1,0,0,0,1480,1481,1,0,0,0,1481,1483,1,0,0,0,1482, + 1471,1,0,0,0,1482,1475,1,0,0,0,1483,79,1,0,0,0,1484,1485,5,205,0,0,1485, + 1486,5,71,0,0,1486,1494,5,131,0,0,1487,1488,5,152,0,0,1488,1489,5,71,0, + 0,1489,1494,5,131,0,0,1490,1491,5,243,0,0,1491,1492,5,230,0,0,1492,1494, + 5,193,0,0,1493,1484,1,0,0,0,1493,1487,1,0,0,0,1493,1490,1,0,0,0,1494,81, + 1,0,0,0,1495,1496,5,5,0,0,1496,1497,5,220,0,0,1497,1498,5,139,0,0,1498, + 1515,5,192,0,0,1499,1500,5,5,0,0,1500,1501,5,165,0,0,1501,1502,5,118,0, + 0,1502,1515,5,192,0,0,1503,1504,5,5,0,0,1504,1505,5,220,0,0,1505,1506,5, + 84,0,0,1506,1515,3,174,87,0,1507,1508,5,5,0,0,1508,1509,5,220,0,0,1509, + 1510,5,118,0,0,1510,1515,3,174,87,0,1511,1512,5,5,0,0,1512,1513,5,220,0, + 0,1513,1515,3,174,87,0,1514,1495,1,0,0,0,1514,1499,1,0,0,0,1514,1503,1, + 0,0,0,1514,1507,1,0,0,0,1514,1511,1,0,0,0,1515,83,1,0,0,0,1516,1517,3,174, + 87,0,1517,1518,5,249,0,0,1518,1519,5,2,0,0,1519,1524,3,174,87,0,1520,1521, + 5,4,0,0,1521,1523,3,174,87,0,1522,1520,1,0,0,0,1523,1526,1,0,0,0,1524,1522, + 1,0,0,0,1524,1525,1,0,0,0,1525,1527,1,0,0,0,1526,1524,1,0,0,0,1527,1528, + 5,3,0,0,1528,85,1,0,0,0,1529,1530,3,174,87,0,1530,1531,5,26,0,0,1531,1532, + 3,94,47,0,1532,87,1,0,0,0,1533,1541,3,92,46,0,1534,1536,5,26,0,0,1535,1534, + 1,0,0,0,1535,1536,1,0,0,0,1536,1537,1,0,0,0,1537,1539,3,174,87,0,1538,1540, + 3,90,45,0,1539,1538,1,0,0,0,1539,1540,1,0,0,0,1540,1542,1,0,0,0,1541,1535, + 1,0,0,0,1541,1542,1,0,0,0,1542,89,1,0,0,0,1543,1544,5,2,0,0,1544,1549,3, + 174,87,0,1545,1546,5,4,0,0,1546,1548,3,174,87,0,1547,1545,1,0,0,0,1548, + 1551,1,0,0,0,1549,1547,1,0,0,0,1549,1550,1,0,0,0,1550,1552,1,0,0,0,1551, + 1549,1,0,0,0,1552,1553,5,3,0,0,1553,91,1,0,0,0,1554,1584,3,166,83,0,1555, + 1556,5,2,0,0,1556,1557,3,16,8,0,1557,1558,5,3,0,0,1558,1584,1,0,0,0,1559, + 1560,5,231,0,0,1560,1561,5,2,0,0,1561,1566,3,94,47,0,1562,1563,5,4,0,0, + 1563,1565,3,94,47,0,1564,1562,1,0,0,0,1565,1568,1,0,0,0,1566,1564,1,0,0, + 0,1566,1567,1,0,0,0,1567,1569,1,0,0,0,1568,1566,1,0,0,0,1569,1572,5,3,0, + 0,1570,1571,5,243,0,0,1571,1573,5,159,0,0,1572,1570,1,0,0,0,1572,1573,1, + 0,0,0,1573,1584,1,0,0,0,1574,1575,5,119,0,0,1575,1576,5,2,0,0,1576,1577, + 3,16,8,0,1577,1578,5,3,0,0,1578,1584,1,0,0,0,1579,1580,5,2,0,0,1580,1581, + 3,64,32,0,1581,1582,5,3,0,0,1582,1584,1,0,0,0,1583,1554,1,0,0,0,1583,1555, + 1,0,0,0,1583,1559,1,0,0,0,1583,1574,1,0,0,0,1583,1579,1,0,0,0,1584,93,1, + 0,0,0,1585,1586,3,96,48,0,1586,95,1,0,0,0,1587,1588,6,48,-1,0,1588,1590, + 3,100,50,0,1589,1591,3,98,49,0,1590,1589,1,0,0,0,1590,1591,1,0,0,0,1591, + 1595,1,0,0,0,1592,1593,5,147,0,0,1593,1595,3,96,48,3,1594,1587,1,0,0,0, + 1594,1592,1,0,0,0,1595,1604,1,0,0,0,1596,1597,10,2,0,0,1597,1598,5,23,0, + 0,1598,1603,3,96,48,3,1599,1600,10,1,0,0,1600,1601,5,157,0,0,1601,1603, + 3,96,48,2,1602,1596,1,0,0,0,1602,1599,1,0,0,0,1603,1606,1,0,0,0,1604,1602, + 1,0,0,0,1604,1605,1,0,0,0,1605,97,1,0,0,0,1606,1604,1,0,0,0,1607,1608,3, + 112,56,0,1608,1609,3,100,50,0,1609,1669,1,0,0,0,1610,1611,3,112,56,0,1611, + 1612,3,114,57,0,1612,1613,5,2,0,0,1613,1614,3,16,8,0,1614,1615,5,3,0,0, + 1615,1669,1,0,0,0,1616,1618,5,147,0,0,1617,1616,1,0,0,0,1617,1618,1,0,0, + 0,1618,1619,1,0,0,0,1619,1620,5,31,0,0,1620,1621,3,100,50,0,1621,1622,5, + 23,0,0,1622,1623,3,100,50,0,1623,1669,1,0,0,0,1624,1626,5,147,0,0,1625, + 1624,1,0,0,0,1625,1626,1,0,0,0,1626,1627,1,0,0,0,1627,1628,5,103,0,0,1628, + 1629,5,2,0,0,1629,1634,3,94,47,0,1630,1631,5,4,0,0,1631,1633,3,94,47,0, + 1632,1630,1,0,0,0,1633,1636,1,0,0,0,1634,1632,1,0,0,0,1634,1635,1,0,0,0, + 1635,1637,1,0,0,0,1636,1634,1,0,0,0,1637,1638,5,3,0,0,1638,1669,1,0,0,0, + 1639,1641,5,147,0,0,1640,1639,1,0,0,0,1640,1641,1,0,0,0,1641,1642,1,0,0, + 0,1642,1643,5,103,0,0,1643,1644,5,2,0,0,1644,1645,3,16,8,0,1645,1646,5, + 3,0,0,1646,1669,1,0,0,0,1647,1649,5,147,0,0,1648,1647,1,0,0,0,1648,1649, + 1,0,0,0,1649,1650,1,0,0,0,1650,1651,5,122,0,0,1651,1654,3,100,50,0,1652, + 1653,5,73,0,0,1653,1655,3,100,50,0,1654,1652,1,0,0,0,1654,1655,1,0,0,0, + 1655,1669,1,0,0,0,1656,1658,5,114,0,0,1657,1659,5,147,0,0,1658,1657,1,0, + 0,0,1658,1659,1,0,0,0,1659,1660,1,0,0,0,1660,1669,5,148,0,0,1661,1663,5, + 114,0,0,1662,1664,5,147,0,0,1663,1662,1,0,0,0,1663,1664,1,0,0,0,1664,1665, + 1,0,0,0,1665,1666,5,66,0,0,1666,1667,5,88,0,0,1667,1669,3,100,50,0,1668, + 1607,1,0,0,0,1668,1610,1,0,0,0,1668,1617,1,0,0,0,1668,1625,1,0,0,0,1668, + 1640,1,0,0,0,1668,1648,1,0,0,0,1668,1656,1,0,0,0,1668,1661,1,0,0,0,1669, + 99,1,0,0,0,1670,1671,6,50,-1,0,1671,1675,3,102,51,0,1672,1673,7,14,0,0, + 1673,1675,3,100,50,4,1674,1670,1,0,0,0,1674,1672,1,0,0,0,1675,1690,1,0, + 0,0,1676,1677,10,3,0,0,1677,1678,7,15,0,0,1678,1689,3,100,50,4,1679,1680, + 10,2,0,0,1680,1681,7,14,0,0,1681,1689,3,100,50,3,1682,1683,10,1,0,0,1683, + 1684,5,260,0,0,1684,1689,3,100,50,2,1685,1686,10,5,0,0,1686,1687,5,28,0, + 0,1687,1689,3,110,55,0,1688,1676,1,0,0,0,1688,1679,1,0,0,0,1688,1682,1, + 0,0,0,1688,1685,1,0,0,0,1689,1692,1,0,0,0,1690,1688,1,0,0,0,1690,1691,1, + 0,0,0,1691,101,1,0,0,0,1692,1690,1,0,0,0,1693,1694,6,51,-1,0,1694,1943, + 5,148,0,0,1695,1943,3,118,59,0,1696,1697,3,174,87,0,1697,1698,3,108,54, + 0,1698,1943,1,0,0,0,1699,1700,5,68,0,0,1700,1701,5,172,0,0,1701,1943,3, + 108,54,0,1702,1943,3,176,88,0,1703,1943,3,116,58,0,1704,1943,3,108,54,0, + 1705,1943,5,264,0,0,1706,1943,5,261,0,0,1707,1708,5,170,0,0,1708,1709,5, + 2,0,0,1709,1710,3,100,50,0,1710,1711,5,103,0,0,1711,1712,3,100,50,0,1712, + 1713,5,3,0,0,1713,1943,1,0,0,0,1714,1715,5,2,0,0,1715,1718,3,94,47,0,1716, + 1717,5,4,0,0,1717,1719,3,94,47,0,1718,1716,1,0,0,0,1719,1720,1,0,0,0,1720, + 1718,1,0,0,0,1720,1721,1,0,0,0,1721,1722,1,0,0,0,1722,1723,5,3,0,0,1723, + 1943,1,0,0,0,1724,1725,5,192,0,0,1725,1726,5,2,0,0,1726,1731,3,94,47,0, + 1727,1728,5,4,0,0,1728,1730,3,94,47,0,1729,1727,1,0,0,0,1730,1733,1,0,0, + 0,1731,1729,1,0,0,0,1731,1732,1,0,0,0,1732,1734,1,0,0,0,1733,1731,1,0,0, + 0,1734,1735,5,3,0,0,1735,1943,1,0,0,0,1736,1737,3,166,83,0,1737,1738,5, + 2,0,0,1738,1739,5,257,0,0,1739,1741,5,3,0,0,1740,1742,3,132,66,0,1741,1740, + 1,0,0,0,1741,1742,1,0,0,0,1742,1744,1,0,0,0,1743,1745,3,136,68,0,1744,1743, + 1,0,0,0,1744,1745,1,0,0,0,1745,1943,1,0,0,0,1746,1748,3,104,52,0,1747,1746, + 1,0,0,0,1747,1748,1,0,0,0,1748,1749,1,0,0,0,1749,1750,3,166,83,0,1750,1762, + 5,2,0,0,1751,1753,3,60,30,0,1752,1751,1,0,0,0,1752,1753,1,0,0,0,1753,1754, + 1,0,0,0,1754,1759,3,94,47,0,1755,1756,5,4,0,0,1756,1758,3,94,47,0,1757, + 1755,1,0,0,0,1758,1761,1,0,0,0,1759,1757,1,0,0,0,1759,1760,1,0,0,0,1760, + 1763,1,0,0,0,1761,1759,1,0,0,0,1762,1752,1,0,0,0,1762,1763,1,0,0,0,1763, + 1774,1,0,0,0,1764,1765,5,158,0,0,1765,1766,5,32,0,0,1766,1771,3,44,22,0, + 1767,1768,5,4,0,0,1768,1770,3,44,22,0,1769,1767,1,0,0,0,1770,1773,1,0,0, + 0,1771,1769,1,0,0,0,1771,1772,1,0,0,0,1772,1775,1,0,0,0,1773,1771,1,0,0, + 0,1774,1764,1,0,0,0,1774,1775,1,0,0,0,1775,1776,1,0,0,0,1776,1778,5,3,0, + 0,1777,1779,3,132,66,0,1778,1777,1,0,0,0,1778,1779,1,0,0,0,1779,1784,1, + 0,0,0,1780,1782,3,106,53,0,1781,1780,1,0,0,0,1781,1782,1,0,0,0,1782,1783, + 1,0,0,0,1783,1785,3,136,68,0,1784,1781,1,0,0,0,1784,1785,1,0,0,0,1785,1943, + 1,0,0,0,1786,1787,3,174,87,0,1787,1788,3,136,68,0,1788,1943,1,0,0,0,1789, + 1790,3,174,87,0,1790,1791,5,6,0,0,1791,1792,3,94,47,0,1792,1943,1,0,0,0, + 1793,1802,5,2,0,0,1794,1799,3,174,87,0,1795,1796,5,4,0,0,1796,1798,3,174, + 87,0,1797,1795,1,0,0,0,1798,1801,1,0,0,0,1799,1797,1,0,0,0,1799,1800,1, + 0,0,0,1800,1803,1,0,0,0,1801,1799,1,0,0,0,1802,1794,1,0,0,0,1802,1803,1, + 0,0,0,1803,1804,1,0,0,0,1804,1805,5,3,0,0,1805,1806,5,6,0,0,1806,1943,3, + 94,47,0,1807,1808,5,2,0,0,1808,1809,3,16,8,0,1809,1810,5,3,0,0,1810,1943, + 1,0,0,0,1811,1812,5,77,0,0,1812,1813,5,2,0,0,1813,1814,3,16,8,0,1814,1815, + 5,3,0,0,1815,1943,1,0,0,0,1816,1817,5,35,0,0,1817,1819,3,94,47,0,1818,1820, + 3,130,65,0,1819,1818,1,0,0,0,1820,1821,1,0,0,0,1821,1819,1,0,0,0,1821,1822, + 1,0,0,0,1822,1825,1,0,0,0,1823,1824,5,70,0,0,1824,1826,3,94,47,0,1825,1823, + 1,0,0,0,1825,1826,1,0,0,0,1826,1827,1,0,0,0,1827,1828,5,72,0,0,1828,1943, + 1,0,0,0,1829,1831,5,35,0,0,1830,1832,3,130,65,0,1831,1830,1,0,0,0,1832, + 1833,1,0,0,0,1833,1831,1,0,0,0,1833,1834,1,0,0,0,1834,1837,1,0,0,0,1835, + 1836,5,70,0,0,1836,1838,3,94,47,0,1837,1835,1,0,0,0,1837,1838,1,0,0,0,1838, + 1839,1,0,0,0,1839,1840,5,72,0,0,1840,1943,1,0,0,0,1841,1842,5,36,0,0,1842, + 1843,5,2,0,0,1843,1844,3,94,47,0,1844,1845,5,26,0,0,1845,1846,3,124,62, + 0,1846,1847,5,3,0,0,1847,1943,1,0,0,0,1848,1849,5,224,0,0,1849,1850,5,2, + 0,0,1850,1851,3,94,47,0,1851,1852,5,26,0,0,1852,1853,3,124,62,0,1853,1854, + 5,3,0,0,1854,1943,1,0,0,0,1855,1856,5,25,0,0,1856,1865,5,7,0,0,1857,1862, + 3,94,47,0,1858,1859,5,4,0,0,1859,1861,3,94,47,0,1860,1858,1,0,0,0,1861, + 1864,1,0,0,0,1862,1860,1,0,0,0,1862,1863,1,0,0,0,1863,1866,1,0,0,0,1864, + 1862,1,0,0,0,1865,1857,1,0,0,0,1865,1866,1,0,0,0,1866,1867,1,0,0,0,1867, + 1943,5,8,0,0,1868,1943,3,174,87,0,1869,1943,5,49,0,0,1870,1874,5,53,0,0, + 1871,1872,5,2,0,0,1872,1873,5,265,0,0,1873,1875,5,3,0,0,1874,1871,1,0,0, + 0,1874,1875,1,0,0,0,1875,1943,1,0,0,0,1876,1880,5,54,0,0,1877,1878,5,2, + 0,0,1878,1879,5,265,0,0,1879,1881,5,3,0,0,1880,1877,1,0,0,0,1880,1881,1, + 0,0,0,1881,1943,1,0,0,0,1882,1886,5,125,0,0,1883,1884,5,2,0,0,1884,1885, + 5,265,0,0,1885,1887,5,3,0,0,1886,1883,1,0,0,0,1886,1887,1,0,0,0,1887,1943, + 1,0,0,0,1888,1892,5,126,0,0,1889,1890,5,2,0,0,1890,1891,5,265,0,0,1891, + 1893,5,3,0,0,1892,1889,1,0,0,0,1892,1893,1,0,0,0,1893,1943,1,0,0,0,1894, + 1943,5,55,0,0,1895,1943,5,48,0,0,1896,1943,5,52,0,0,1897,1943,5,50,0,0, + 1898,1899,5,210,0,0,1899,1900,5,2,0,0,1900,1901,3,100,50,0,1901,1902,5, + 88,0,0,1902,1905,3,100,50,0,1903,1904,5,86,0,0,1904,1906,3,100,50,0,1905, + 1903,1,0,0,0,1905,1906,1,0,0,0,1906,1907,1,0,0,0,1907,1908,5,3,0,0,1908, + 1943,1,0,0,0,1909,1910,5,146,0,0,1910,1911,5,2,0,0,1911,1914,3,100,50,0, + 1912,1913,5,4,0,0,1913,1915,3,122,61,0,1914,1912,1,0,0,0,1914,1915,1,0, + 0,0,1915,1916,1,0,0,0,1916,1917,5,3,0,0,1917,1943,1,0,0,0,1918,1919,5,79, + 0,0,1919,1920,5,2,0,0,1920,1921,3,174,87,0,1921,1922,5,88,0,0,1922,1923, + 3,100,50,0,1923,1924,5,3,0,0,1924,1943,1,0,0,0,1925,1926,5,2,0,0,1926,1927, + 3,94,47,0,1927,1928,5,3,0,0,1928,1943,1,0,0,0,1929,1930,5,97,0,0,1930,1939, + 5,2,0,0,1931,1936,3,166,83,0,1932,1933,5,4,0,0,1933,1935,3,166,83,0,1934, + 1932,1,0,0,0,1935,1938,1,0,0,0,1936,1934,1,0,0,0,1936,1937,1,0,0,0,1937, + 1940,1,0,0,0,1938,1936,1,0,0,0,1939,1931,1,0,0,0,1939,1940,1,0,0,0,1940, + 1941,1,0,0,0,1941,1943,5,3,0,0,1942,1693,1,0,0,0,1942,1695,1,0,0,0,1942, + 1696,1,0,0,0,1942,1699,1,0,0,0,1942,1702,1,0,0,0,1942,1703,1,0,0,0,1942, + 1704,1,0,0,0,1942,1705,1,0,0,0,1942,1706,1,0,0,0,1942,1707,1,0,0,0,1942, + 1714,1,0,0,0,1942,1724,1,0,0,0,1942,1736,1,0,0,0,1942,1747,1,0,0,0,1942, + 1786,1,0,0,0,1942,1789,1,0,0,0,1942,1793,1,0,0,0,1942,1807,1,0,0,0,1942, + 1811,1,0,0,0,1942,1816,1,0,0,0,1942,1829,1,0,0,0,1942,1841,1,0,0,0,1942, + 1848,1,0,0,0,1942,1855,1,0,0,0,1942,1868,1,0,0,0,1942,1869,1,0,0,0,1942, + 1870,1,0,0,0,1942,1876,1,0,0,0,1942,1882,1,0,0,0,1942,1888,1,0,0,0,1942, + 1894,1,0,0,0,1942,1895,1,0,0,0,1942,1896,1,0,0,0,1942,1897,1,0,0,0,1942, + 1898,1,0,0,0,1942,1909,1,0,0,0,1942,1918,1,0,0,0,1942,1925,1,0,0,0,1942, + 1929,1,0,0,0,1943,1954,1,0,0,0,1944,1945,10,17,0,0,1945,1946,5,7,0,0,1946, + 1947,3,100,50,0,1947,1948,5,8,0,0,1948,1953,1,0,0,0,1949,1950,10,15,0,0, + 1950,1951,5,1,0,0,1951,1953,3,174,87,0,1952,1944,1,0,0,0,1952,1949,1,0, + 0,0,1953,1956,1,0,0,0,1954,1952,1,0,0,0,1954,1955,1,0,0,0,1955,103,1,0, + 0,0,1956,1954,1,0,0,0,1957,1958,7,16,0,0,1958,105,1,0,0,0,1959,1960,5,102, + 0,0,1960,1964,5,150,0,0,1961,1962,5,184,0,0,1962,1964,5,150,0,0,1963,1959, + 1,0,0,0,1963,1961,1,0,0,0,1964,107,1,0,0,0,1965,1972,5,262,0,0,1966,1969, + 5,263,0,0,1967,1968,5,226,0,0,1968,1970,5,262,0,0,1969,1967,1,0,0,0,1969, + 1970,1,0,0,0,1970,1972,1,0,0,0,1971,1965,1,0,0,0,1971,1966,1,0,0,0,1972, + 109,1,0,0,0,1973,1974,5,218,0,0,1974,1975,5,248,0,0,1975,1980,3,118,59, + 0,1976,1977,5,218,0,0,1977,1978,5,248,0,0,1978,1980,3,108,54,0,1979,1973, + 1,0,0,0,1979,1976,1,0,0,0,1980,111,1,0,0,0,1981,1982,7,17,0,0,1982,113, + 1,0,0,0,1983,1984,7,18,0,0,1984,115,1,0,0,0,1985,1986,7,19,0,0,1986,117, + 1,0,0,0,1987,1989,5,110,0,0,1988,1990,7,14,0,0,1989,1988,1,0,0,0,1989,1990, + 1,0,0,0,1990,1991,1,0,0,0,1991,1992,3,108,54,0,1992,1995,3,120,60,0,1993, + 1994,5,220,0,0,1994,1996,3,120,60,0,1995,1993,1,0,0,0,1995,1996,1,0,0,0, + 1996,119,1,0,0,0,1997,1998,7,20,0,0,1998,121,1,0,0,0,1999,2000,7,21,0,0, + 2000,123,1,0,0,0,2001,2002,6,62,-1,0,2002,2003,5,192,0,0,2003,2004,5,2, + 0,0,2004,2009,3,126,63,0,2005,2006,5,4,0,0,2006,2008,3,126,63,0,2007,2005, + 1,0,0,0,2008,2011,1,0,0,0,2009,2007,1,0,0,0,2009,2010,1,0,0,0,2010,2012, + 1,0,0,0,2011,2009,1,0,0,0,2012,2013,5,3,0,0,2013,2093,1,0,0,0,2014,2015, + 5,110,0,0,2015,2018,3,120,60,0,2016,2017,5,220,0,0,2017,2019,3,120,60,0, + 2018,2016,1,0,0,0,2018,2019,1,0,0,0,2019,2093,1,0,0,0,2020,2025,5,219,0, + 0,2021,2022,5,2,0,0,2022,2023,3,128,64,0,2023,2024,5,3,0,0,2024,2026,1, + 0,0,0,2025,2021,1,0,0,0,2025,2026,1,0,0,0,2026,2030,1,0,0,0,2027,2028,5, + 244,0,0,2028,2029,5,218,0,0,2029,2031,5,248,0,0,2030,2027,1,0,0,0,2030, + 2031,1,0,0,0,2031,2093,1,0,0,0,2032,2037,5,219,0,0,2033,2034,5,2,0,0,2034, + 2035,3,128,64,0,2035,2036,5,3,0,0,2036,2038,1,0,0,0,2037,2033,1,0,0,0,2037, + 2038,1,0,0,0,2038,2039,1,0,0,0,2039,2040,5,243,0,0,2040,2041,5,218,0,0, + 2041,2093,5,248,0,0,2042,2047,5,218,0,0,2043,2044,5,2,0,0,2044,2045,3,128, + 64,0,2045,2046,5,3,0,0,2046,2048,1,0,0,0,2047,2043,1,0,0,0,2047,2048,1, + 0,0,0,2048,2052,1,0,0,0,2049,2050,5,244,0,0,2050,2051,5,218,0,0,2051,2053, + 5,248,0,0,2052,2049,1,0,0,0,2052,2053,1,0,0,0,2053,2093,1,0,0,0,2054,2059, + 5,218,0,0,2055,2056,5,2,0,0,2056,2057,3,128,64,0,2057,2058,5,3,0,0,2058, + 2060,1,0,0,0,2059,2055,1,0,0,0,2059,2060,1,0,0,0,2060,2061,1,0,0,0,2061, + 2062,5,243,0,0,2062,2063,5,218,0,0,2063,2093,5,248,0,0,2064,2065,5,68,0, + 0,2065,2093,5,172,0,0,2066,2067,5,25,0,0,2067,2068,5,251,0,0,2068,2069, + 3,124,62,0,2069,2070,5,253,0,0,2070,2093,1,0,0,0,2071,2072,5,128,0,0,2072, + 2073,5,251,0,0,2073,2074,3,124,62,0,2074,2075,5,4,0,0,2075,2076,3,124,62, + 0,2076,2077,5,253,0,0,2077,2093,1,0,0,0,2078,2090,3,174,87,0,2079,2080, + 5,2,0,0,2080,2085,3,128,64,0,2081,2082,5,4,0,0,2082,2084,3,128,64,0,2083, + 2081,1,0,0,0,2084,2087,1,0,0,0,2085,2083,1,0,0,0,2085,2086,1,0,0,0,2086, + 2088,1,0,0,0,2087,2085,1,0,0,0,2088,2089,5,3,0,0,2089,2091,1,0,0,0,2090, + 2079,1,0,0,0,2090,2091,1,0,0,0,2091,2093,1,0,0,0,2092,2001,1,0,0,0,2092, + 2014,1,0,0,0,2092,2020,1,0,0,0,2092,2032,1,0,0,0,2092,2042,1,0,0,0,2092, + 2054,1,0,0,0,2092,2064,1,0,0,0,2092,2066,1,0,0,0,2092,2071,1,0,0,0,2092, + 2078,1,0,0,0,2093,2103,1,0,0,0,2094,2095,10,2,0,0,2095,2099,5,25,0,0,2096, + 2097,5,7,0,0,2097,2098,5,265,0,0,2098,2100,5,8,0,0,2099,2096,1,0,0,0,2099, + 2100,1,0,0,0,2100,2102,1,0,0,0,2101,2094,1,0,0,0,2102,2105,1,0,0,0,2103, + 2101,1,0,0,0,2103,2104,1,0,0,0,2104,125,1,0,0,0,2105,2103,1,0,0,0,2106, + 2111,3,124,62,0,2107,2108,3,174,87,0,2108,2109,3,124,62,0,2109,2111,1,0, + 0,0,2110,2106,1,0,0,0,2110,2107,1,0,0,0,2111,127,1,0,0,0,2112,2115,5,265, + 0,0,2113,2115,3,124,62,0,2114,2112,1,0,0,0,2114,2113,1,0,0,0,2115,129,1, + 0,0,0,2116,2117,5,240,0,0,2117,2118,3,94,47,0,2118,2119,5,216,0,0,2119, + 2120,3,94,47,0,2120,131,1,0,0,0,2121,2122,5,82,0,0,2122,2123,5,2,0,0,2123, + 2124,5,241,0,0,2124,2125,3,96,48,0,2125,2126,5,3,0,0,2126,133,1,0,0,0,2127, + 2128,5,240,0,0,2128,2131,5,130,0,0,2129,2130,5,23,0,0,2130,2132,3,94,47, + 0,2131,2129,1,0,0,0,2131,2132,1,0,0,0,2132,2133,1,0,0,0,2133,2134,5,216, + 0,0,2134,2135,5,232,0,0,2135,2136,5,203,0,0,2136,2137,3,174,87,0,2137,2138, + 5,249,0,0,2138,2146,3,94,47,0,2139,2140,5,4,0,0,2140,2141,3,174,87,0,2141, + 2142,5,249,0,0,2142,2143,3,94,47,0,2143,2145,1,0,0,0,2144,2139,1,0,0,0, + 2145,2148,1,0,0,0,2146,2144,1,0,0,0,2146,2147,1,0,0,0,2147,2192,1,0,0,0, + 2148,2146,1,0,0,0,2149,2150,5,240,0,0,2150,2153,5,130,0,0,2151,2152,5,23, + 0,0,2152,2154,3,94,47,0,2153,2151,1,0,0,0,2153,2154,1,0,0,0,2154,2155,1, + 0,0,0,2155,2156,5,216,0,0,2156,2192,5,62,0,0,2157,2158,5,240,0,0,2158,2159, + 5,147,0,0,2159,2162,5,130,0,0,2160,2161,5,23,0,0,2161,2163,3,94,47,0,2162, + 2160,1,0,0,0,2162,2163,1,0,0,0,2163,2164,1,0,0,0,2164,2165,5,216,0,0,2165, + 2177,5,108,0,0,2166,2167,5,2,0,0,2167,2172,3,174,87,0,2168,2169,5,4,0,0, + 2169,2171,3,174,87,0,2170,2168,1,0,0,0,2171,2174,1,0,0,0,2172,2170,1,0, + 0,0,2172,2173,1,0,0,0,2173,2175,1,0,0,0,2174,2172,1,0,0,0,2175,2176,5,3, + 0,0,2176,2178,1,0,0,0,2177,2166,1,0,0,0,2177,2178,1,0,0,0,2178,2179,1,0, + 0,0,2179,2180,5,237,0,0,2180,2181,5,2,0,0,2181,2186,3,94,47,0,2182,2183, + 5,4,0,0,2183,2185,3,94,47,0,2184,2182,1,0,0,0,2185,2188,1,0,0,0,2186,2184, + 1,0,0,0,2186,2187,1,0,0,0,2187,2189,1,0,0,0,2188,2186,1,0,0,0,2189,2190, + 5,3,0,0,2190,2192,1,0,0,0,2191,2127,1,0,0,0,2191,2149,1,0,0,0,2191,2157, + 1,0,0,0,2192,135,1,0,0,0,2193,2199,5,162,0,0,2194,2200,3,174,87,0,2195, + 2196,5,2,0,0,2196,2197,3,56,28,0,2197,2198,5,3,0,0,2198,2200,1,0,0,0,2199, + 2194,1,0,0,0,2199,2195,1,0,0,0,2200,137,1,0,0,0,2201,2202,5,134,0,0,2202, + 2207,3,76,38,0,2203,2204,5,4,0,0,2204,2206,3,76,38,0,2205,2203,1,0,0,0, + 2206,2209,1,0,0,0,2207,2205,1,0,0,0,2207,2208,1,0,0,0,2208,2211,1,0,0,0, + 2209,2207,1,0,0,0,2210,2201,1,0,0,0,2210,2211,1,0,0,0,2211,2212,1,0,0,0, + 2212,2216,3,140,70,0,2213,2214,5,19,0,0,2214,2215,5,129,0,0,2215,2217,3, + 82,41,0,2216,2213,1,0,0,0,2216,2217,1,0,0,0,2217,2219,1,0,0,0,2218,2220, + 7,13,0,0,2219,2218,1,0,0,0,2219,2220,1,0,0,0,2220,2226,1,0,0,0,2221,2222, + 5,167,0,0,2222,2223,5,2,0,0,2223,2224,3,144,72,0,2224,2225,5,3,0,0,2225, + 2227,1,0,0,0,2226,2221,1,0,0,0,2226,2227,1,0,0,0,2227,2237,1,0,0,0,2228, + 2229,5,209,0,0,2229,2234,3,84,42,0,2230,2231,5,4,0,0,2231,2233,3,84,42, + 0,2232,2230,1,0,0,0,2233,2236,1,0,0,0,2234,2232,1,0,0,0,2234,2235,1,0,0, + 0,2235,2238,1,0,0,0,2236,2234,1,0,0,0,2237,2228,1,0,0,0,2237,2238,1,0,0, + 0,2238,2248,1,0,0,0,2239,2240,5,65,0,0,2240,2245,3,86,43,0,2241,2242,5, + 4,0,0,2242,2244,3,86,43,0,2243,2241,1,0,0,0,2244,2247,1,0,0,0,2245,2243, + 1,0,0,0,2245,2246,1,0,0,0,2246,2249,1,0,0,0,2247,2245,1,0,0,0,2248,2239, + 1,0,0,0,2248,2249,1,0,0,0,2249,139,1,0,0,0,2250,2251,5,176,0,0,2251,2275, + 3,142,71,0,2252,2253,5,193,0,0,2253,2275,3,142,71,0,2254,2255,5,98,0,0, + 2255,2275,3,142,71,0,2256,2257,5,176,0,0,2257,2258,5,31,0,0,2258,2259,3, + 142,71,0,2259,2260,5,23,0,0,2260,2261,3,142,71,0,2261,2275,1,0,0,0,2262, + 2263,5,193,0,0,2263,2264,5,31,0,0,2264,2265,3,142,71,0,2265,2266,5,23,0, + 0,2266,2267,3,142,71,0,2267,2275,1,0,0,0,2268,2269,5,98,0,0,2269,2270,5, + 31,0,0,2270,2271,3,142,71,0,2271,2272,5,23,0,0,2272,2273,3,142,71,0,2273, + 2275,1,0,0,0,2274,2250,1,0,0,0,2274,2252,1,0,0,0,2274,2254,1,0,0,0,2274, + 2256,1,0,0,0,2274,2262,1,0,0,0,2274,2268,1,0,0,0,2275,141,1,0,0,0,2276, + 2277,5,227,0,0,2277,2286,5,171,0,0,2278,2279,5,227,0,0,2279,2286,5,85,0, + 0,2280,2281,5,47,0,0,2281,2286,5,192,0,0,2282,2283,3,94,47,0,2283,2284, + 7,22,0,0,2284,2286,1,0,0,0,2285,2276,1,0,0,0,2285,2278,1,0,0,0,2285,2280, + 1,0,0,0,2285,2282,1,0,0,0,2286,143,1,0,0,0,2287,2288,6,72,-1,0,2288,2290, + 3,146,73,0,2289,2291,3,148,74,0,2290,2289,1,0,0,0,2290,2291,1,0,0,0,2291, + 2299,1,0,0,0,2292,2293,10,2,0,0,2293,2298,3,144,72,3,2294,2295,10,1,0,0, + 2295,2296,5,9,0,0,2296,2298,3,144,72,2,2297,2292,1,0,0,0,2297,2294,1,0, + 0,0,2298,2301,1,0,0,0,2299,2297,1,0,0,0,2299,2300,1,0,0,0,2300,145,1,0, + 0,0,2301,2299,1,0,0,0,2302,2328,3,174,87,0,2303,2304,5,2,0,0,2304,2328, + 5,3,0,0,2305,2306,5,169,0,0,2306,2307,5,2,0,0,2307,2312,3,144,72,0,2308, + 2309,5,4,0,0,2309,2311,3,144,72,0,2310,2308,1,0,0,0,2311,2314,1,0,0,0,2312, + 2310,1,0,0,0,2312,2313,1,0,0,0,2313,2315,1,0,0,0,2314,2312,1,0,0,0,2315, + 2316,5,3,0,0,2316,2328,1,0,0,0,2317,2318,5,2,0,0,2318,2319,3,144,72,0,2319, + 2320,5,3,0,0,2320,2328,1,0,0,0,2321,2328,5,10,0,0,2322,2328,5,11,0,0,2323, + 2324,5,12,0,0,2324,2325,3,144,72,0,2325,2326,5,13,0,0,2326,2328,1,0,0,0, + 2327,2302,1,0,0,0,2327,2303,1,0,0,0,2327,2305,1,0,0,0,2327,2317,1,0,0,0, + 2327,2321,1,0,0,0,2327,2322,1,0,0,0,2327,2323,1,0,0,0,2328,147,1,0,0,0, + 2329,2331,5,257,0,0,2330,2332,5,261,0,0,2331,2330,1,0,0,0,2331,2332,1,0, + 0,0,2332,2360,1,0,0,0,2333,2335,5,255,0,0,2334,2336,5,261,0,0,2335,2334, + 1,0,0,0,2335,2336,1,0,0,0,2336,2360,1,0,0,0,2337,2339,5,261,0,0,2338,2340, + 5,261,0,0,2339,2338,1,0,0,0,2339,2340,1,0,0,0,2340,2360,1,0,0,0,2341,2342, + 5,14,0,0,2342,2343,5,265,0,0,2343,2345,5,15,0,0,2344,2346,5,261,0,0,2345, + 2344,1,0,0,0,2345,2346,1,0,0,0,2346,2360,1,0,0,0,2347,2349,5,14,0,0,2348, + 2350,5,265,0,0,2349,2348,1,0,0,0,2349,2350,1,0,0,0,2350,2351,1,0,0,0,2351, + 2353,5,4,0,0,2352,2354,5,265,0,0,2353,2352,1,0,0,0,2353,2354,1,0,0,0,2354, + 2355,1,0,0,0,2355,2357,5,15,0,0,2356,2358,5,261,0,0,2357,2356,1,0,0,0,2357, + 2358,1,0,0,0,2358,2360,1,0,0,0,2359,2329,1,0,0,0,2359,2333,1,0,0,0,2359, + 2337,1,0,0,0,2359,2341,1,0,0,0,2359,2347,1,0,0,0,2360,149,1,0,0,0,2361, + 2362,3,174,87,0,2362,2363,5,249,0,0,2363,2364,3,94,47,0,2364,151,1,0,0, + 0,2365,2366,5,87,0,0,2366,2370,7,23,0,0,2367,2368,5,225,0,0,2368,2370,7, + 24,0,0,2369,2365,1,0,0,0,2369,2367,1,0,0,0,2370,153,1,0,0,0,2371,2372,5, + 115,0,0,2372,2373,5,121,0,0,2373,2377,3,156,78,0,2374,2375,5,177,0,0,2375, + 2377,7,25,0,0,2376,2371,1,0,0,0,2376,2374,1,0,0,0,2377,155,1,0,0,0,2378, + 2379,5,177,0,0,2379,2386,5,228,0,0,2380,2381,5,177,0,0,2381,2386,5,42,0, + 0,2382,2383,5,181,0,0,2383,2386,5,177,0,0,2384,2386,5,201,0,0,2385,2378, + 1,0,0,0,2385,2380,1,0,0,0,2385,2382,1,0,0,0,2385,2384,1,0,0,0,2386,157, + 1,0,0,0,2387,2393,3,94,47,0,2388,2389,3,174,87,0,2389,2390,5,16,0,0,2390, + 2391,3,94,47,0,2391,2393,1,0,0,0,2392,2387,1,0,0,0,2392,2388,1,0,0,0,2393, + 159,1,0,0,0,2394,2395,3,174,87,0,2395,2396,5,1,0,0,2396,2397,3,174,87,0, + 2397,2400,1,0,0,0,2398,2400,3,174,87,0,2399,2394,1,0,0,0,2399,2398,1,0, + 0,0,2400,161,1,0,0,0,2401,2406,3,160,80,0,2402,2403,5,4,0,0,2403,2405,3, + 160,80,0,2404,2402,1,0,0,0,2405,2408,1,0,0,0,2406,2404,1,0,0,0,2406,2407, + 1,0,0,0,2407,163,1,0,0,0,2408,2406,1,0,0,0,2409,2410,7,26,0,0,2410,165, + 1,0,0,0,2411,2416,3,174,87,0,2412,2413,5,1,0,0,2413,2415,3,174,87,0,2414, + 2412,1,0,0,0,2415,2418,1,0,0,0,2416,2414,1,0,0,0,2416,2417,1,0,0,0,2417, + 167,1,0,0,0,2418,2416,1,0,0,0,2419,2423,3,170,85,0,2420,2423,5,55,0,0,2421, + 2423,5,51,0,0,2422,2419,1,0,0,0,2422,2420,1,0,0,0,2422,2421,1,0,0,0,2423, + 169,1,0,0,0,2424,2430,3,174,87,0,2425,2426,5,234,0,0,2426,2430,3,174,87, + 0,2427,2428,5,188,0,0,2428,2430,3,174,87,0,2429,2424,1,0,0,0,2429,2425, + 1,0,0,0,2429,2427,1,0,0,0,2430,171,1,0,0,0,2431,2436,3,174,87,0,2432,2433, + 5,4,0,0,2433,2435,3,174,87,0,2434,2432,1,0,0,0,2435,2438,1,0,0,0,2436,2434, + 1,0,0,0,2436,2437,1,0,0,0,2437,173,1,0,0,0,2438,2436,1,0,0,0,2439,2445, + 5,268,0,0,2440,2445,5,270,0,0,2441,2445,3,178,89,0,2442,2445,5,271,0,0, + 2443,2445,5,269,0,0,2444,2439,1,0,0,0,2444,2440,1,0,0,0,2444,2441,1,0,0, + 0,2444,2442,1,0,0,0,2444,2443,1,0,0,0,2445,175,1,0,0,0,2446,2448,5,256, + 0,0,2447,2446,1,0,0,0,2447,2448,1,0,0,0,2448,2449,1,0,0,0,2449,2459,5,266, + 0,0,2450,2452,5,256,0,0,2451,2450,1,0,0,0,2451,2452,1,0,0,0,2452,2453,1, + 0,0,0,2453,2459,5,267,0,0,2454,2456,5,256,0,0,2455,2454,1,0,0,0,2455,2456, + 1,0,0,0,2456,2457,1,0,0,0,2457,2459,5,265,0,0,2458,2447,1,0,0,0,2458,2451, + 1,0,0,0,2458,2455,1,0,0,0,2459,177,1,0,0,0,2460,2461,7,27,0,0,2461,179, + 1,0,0,0,324,183,193,197,201,205,209,213,228,233,237,243,247,268,272,276, + 280,288,292,295,302,311,317,321,327,334,343,352,366,375,381,388,398,405, + 413,421,450,453,456,460,466,471,478,483,487,495,501,505,519,527,546,571, + 574,584,588,601,607,612,616,622,631,637,641,648,652,660,665,669,677,685, + 690,694,704,711,716,720,730,733,737,740,748,753,777,783,785,791,797,799, + 807,809,815,821,823,838,843,850,862,864,872,874,892,895,899,903,921,924, + 940,950,955,961,964,973,985,988,994,1001,1006,1012,1016,1020,1026,1037, + 1046,1056,1059,1064,1066,1073,1079,1081,1085,1095,1101,1104,1106,1118,1125, + 1129,1133,1137,1144,1153,1156,1160,1165,1169,1177,1180,1183,1190,1201,1204, + 1214,1217,1228,1233,1241,1244,1248,1257,1266,1269,1278,1281,1284,1288,1299, + 1302,1309,1312,1331,1335,1339,1343,1347,1351,1353,1364,1369,1378,1392,1395, + 1404,1407,1415,1418,1421,1426,1429,1441,1444,1452,1457,1461,1463,1465,1480, + 1482,1493,1514,1524,1535,1539,1541,1549,1566,1572,1583,1590,1594,1602,1604, + 1617,1625,1634,1640,1648,1654,1658,1663,1668,1674,1688,1690,1720,1731,1741, + 1744,1747,1752,1759,1762,1771,1774,1778,1781,1784,1799,1802,1821,1825,1833, + 1837,1862,1865,1874,1880,1886,1892,1905,1914,1936,1939,1942,1952,1954,1963, + 1969,1971,1979,1989,1995,2009,2018,2025,2030,2037,2047,2052,2059,2085,2090, + 2092,2099,2103,2110,2114,2131,2146,2153,2162,2172,2177,2186,2191,2199,2207, + 2210,2216,2219,2226,2234,2237,2245,2248,2274,2285,2290,2297,2299,2312,2327, + 2331,2335,2339,2345,2349,2353,2357,2359,2369,2376,2385,2392,2399,2406,2416, + 2422,2429,2436,2444,2447,2451,2455,2458]; + + private static __ATN: ATN; + public static get _ATN(): ATN { + if (!trinoSqlParserParser.__ATN) { + trinoSqlParserParser.__ATN = new ATNDeserializer().deserialize(trinoSqlParserParser._serializedATN); + } + + return trinoSqlParserParser.__ATN; + } + + + static DecisionsToDFA = trinoSqlParserParser._ATN.decisionToState.map( (ds: DecisionState, index: number) => new DFA(ds, index) ); + +} + +export class ProgramContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public EOF(): TerminalNode { + return this.getToken(trinoSqlParserParser.EOF, 0); + } + public statements_list(): StatementsContext[] { + return this.getTypedRuleContexts(StatementsContext) as StatementsContext[]; + } + public statements(i: number): StatementsContext { + return this.getTypedRuleContext(StatementsContext, i) as StatementsContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_program; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterProgram) { + listener.enterProgram(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitProgram) { + listener.exitProgram(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitProgram) { + return visitor.visitProgram(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatementsContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public singleStatement(): SingleStatementContext { + return this.getTypedRuleContext(SingleStatementContext, 0) as SingleStatementContext; + } + public standaloneExpression(): StandaloneExpressionContext { + return this.getTypedRuleContext(StandaloneExpressionContext, 0) as StandaloneExpressionContext; + } + public standalonePathSpecification(): StandalonePathSpecificationContext { + return this.getTypedRuleContext(StandalonePathSpecificationContext, 0) as StandalonePathSpecificationContext; + } + public standaloneType(): StandaloneTypeContext { + return this.getTypedRuleContext(StandaloneTypeContext, 0) as StandaloneTypeContext; + } + public standaloneRowPattern(): StandaloneRowPatternContext { + return this.getTypedRuleContext(StandaloneRowPatternContext, 0) as StandaloneRowPatternContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_statements; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStatements) { + listener.enterStatements(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStatements) { + listener.exitStatements(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStatements) { + return visitor.visitStatements(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SingleStatementContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public statement(): StatementContext { + return this.getTypedRuleContext(StatementContext, 0) as StatementContext; + } + public SEMICOLON(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEMICOLON, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_singleStatement; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSingleStatement) { + listener.enterSingleStatement(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSingleStatement) { + listener.exitSingleStatement(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSingleStatement) { + return visitor.visitSingleStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StandaloneExpressionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public SEMICOLON(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEMICOLON, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_standaloneExpression; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStandaloneExpression) { + listener.enterStandaloneExpression(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStandaloneExpression) { + listener.exitStandaloneExpression(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStandaloneExpression) { + return visitor.visitStandaloneExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StandalonePathSpecificationContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public pathSpecification(): PathSpecificationContext { + return this.getTypedRuleContext(PathSpecificationContext, 0) as PathSpecificationContext; + } + public SEMICOLON(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEMICOLON, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_standalonePathSpecification; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStandalonePathSpecification) { + listener.enterStandalonePathSpecification(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStandalonePathSpecification) { + listener.exitStandalonePathSpecification(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStandalonePathSpecification) { + return visitor.visitStandalonePathSpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StandaloneTypeContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public type_(): TypeContext { + return this.getTypedRuleContext(TypeContext, 0) as TypeContext; + } + public SEMICOLON(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEMICOLON, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_standaloneType; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStandaloneType) { + listener.enterStandaloneType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStandaloneType) { + listener.exitStandaloneType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStandaloneType) { + return visitor.visitStandaloneType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StandaloneRowPatternContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public rowPattern(): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, 0) as RowPatternContext; + } + public SEMICOLON(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEMICOLON, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_standaloneRowPattern; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStandaloneRowPattern) { + listener.enterStandaloneRowPattern(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStandaloneRowPattern) { + listener.exitStandaloneRowPattern(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStandaloneRowPattern) { + return visitor.visitStandaloneRowPattern(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatementContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_statement; + } + public copyFrom(ctx: StatementContext): void { + super.copyFrom(ctx); + } +} +export class ExplainContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public EXPLAIN(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXPLAIN, 0); + } + public statement(): StatementContext { + return this.getTypedRuleContext(StatementContext, 0) as StatementContext; + } + public ANALYZE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ANALYZE, 0); + } + public VERBOSE(): TerminalNode { + return this.getToken(trinoSqlParserParser.VERBOSE, 0); + } + public explainOption_list(): ExplainOptionContext[] { + return this.getTypedRuleContexts(ExplainOptionContext) as ExplainOptionContext[]; + } + public explainOption(i: number): ExplainOptionContext { + return this.getTypedRuleContext(ExplainOptionContext, i) as ExplainOptionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExplain) { + listener.enterExplain(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExplain) { + listener.exitExplain(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExplain) { + return visitor.visitExplain(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PrepareContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public PREPARE(): TerminalNode { + return this.getToken(trinoSqlParserParser.PREPARE, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public statement(): StatementContext { + return this.getTypedRuleContext(StatementContext, 0) as StatementContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPrepare) { + listener.enterPrepare(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPrepare) { + listener.exitPrepare(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPrepare) { + return visitor.visitPrepare(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropMaterializedViewContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP(): TerminalNode { + return this.getToken(trinoSqlParserParser.DROP, 0); + } + public MATERIALIZED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATERIALIZED, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDropMaterializedView) { + listener.enterDropMaterializedView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDropMaterializedView) { + listener.exitDropMaterializedView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDropMaterializedView) { + return visitor.visitDropMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetMaterializedViewPropertiesContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public MATERIALIZED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATERIALIZED, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public PROPERTIES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PROPERTIES, 0); + } + public propertyAssignments(): PropertyAssignmentsContext { + return this.getTypedRuleContext(PropertyAssignmentsContext, 0) as PropertyAssignmentsContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetMaterializedViewProperties) { + listener.enterSetMaterializedViewProperties(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetMaterializedViewProperties) { + listener.exitSetMaterializedViewProperties(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetMaterializedViewProperties) { + return visitor.visitSetMaterializedViewProperties(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UseContext extends StatementContext { + public _schema!: IdentifierContext; + public _catalog!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public USE(): TerminalNode { + return this.getToken(trinoSqlParserParser.USE, 0); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUse) { + listener.enterUse(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUse) { + listener.exitUse(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUse) { + return visitor.visitUse(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DeallocateContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DEALLOCATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEALLOCATE, 0); + } + public PREPARE(): TerminalNode { + return this.getToken(trinoSqlParserParser.PREPARE, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDeallocate) { + listener.enterDeallocate(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDeallocate) { + listener.exitDeallocate(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDeallocate) { + return visitor.visitDeallocate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameTableContext extends StatementContext { + public _from_!: QualifiedNameContext; + public _to!: QualifiedNameContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public RENAME(): TerminalNode { + return this.getToken(trinoSqlParserParser.RENAME, 0); + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public qualifiedName_list(): QualifiedNameContext[] { + return this.getTypedRuleContexts(QualifiedNameContext) as QualifiedNameContext[]; + } + public qualifiedName(i: number): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, i) as QualifiedNameContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRenameTable) { + listener.enterRenameTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRenameTable) { + listener.exitRenameTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRenameTable) { + return visitor.visitRenameTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommitContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMIT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMIT, 0); + } + public WORK(): TerminalNode { + return this.getToken(trinoSqlParserParser.WORK, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCommit) { + listener.enterCommit(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCommit) { + listener.exitCommit(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCommit) { + return visitor.visitCommit(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateRoleContext extends StatementContext { + public _name!: IdentifierContext; + public _catalog!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public ROLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLE, 0); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public ADMIN(): TerminalNode { + return this.getToken(trinoSqlParserParser.ADMIN, 0); + } + public grantor(): GrantorContext { + return this.getTypedRuleContext(GrantorContext, 0) as GrantorContext; + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCreateRole) { + listener.enterCreateRole(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCreateRole) { + listener.exitCreateRole(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCreateRole) { + return visitor.visitCreateRole(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropColumnContext extends StatementContext { + public _tableName!: QualifiedNameContext; + public _column!: QualifiedNameContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public DROP(): TerminalNode { + return this.getToken(trinoSqlParserParser.DROP, 0); + } + public COLUMN(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMN, 0); + } + public qualifiedName_list(): QualifiedNameContext[] { + return this.getTypedRuleContexts(QualifiedNameContext) as QualifiedNameContext[]; + } + public qualifiedName(i: number): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, i) as QualifiedNameContext; + } + public IF_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.IF); + } + public IF(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, i); + } + public EXISTS_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.EXISTS); + } + public EXISTS(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, i); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDropColumn) { + listener.enterDropColumn(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDropColumn) { + listener.exitDropColumn(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDropColumn) { + return visitor.visitDropColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropViewContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP(): TerminalNode { + return this.getToken(trinoSqlParserParser.DROP, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDropView) { + listener.enterDropView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDropView) { + listener.exitDropView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDropView) { + return visitor.visitDropView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowTablesContext extends StatementContext { + public _pattern!: StringContext; + public _escape!: StringContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public TABLES(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLES, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public string__list(): StringContext[] { + return this.getTypedRuleContexts(StringContext) as StringContext[]; + } + public string_(i: number): StringContext { + return this.getTypedRuleContext(StringContext, i) as StringContext; + } + public ESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ESCAPE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowTables) { + listener.enterShowTables(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowTables) { + listener.exitShowTables(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowTables) { + return visitor.visitShowTables(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetViewAuthorizationContext extends StatementContext { + public _from_!: QualifiedNameContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public AUTHORIZATION(): TerminalNode { + return this.getToken(trinoSqlParserParser.AUTHORIZATION, 0); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetViewAuthorization) { + listener.enterSetViewAuthorization(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetViewAuthorization) { + listener.exitSetViewAuthorization(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetViewAuthorization) { + return visitor.visitSetViewAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowTableCommentContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowTableComment) { + listener.enterShowTableComment(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowTableComment) { + listener.exitShowTableComment(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowTableComment) { + return visitor.visitShowTableComment(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCatalogsContext extends StatementContext { + public _pattern!: StringContext; + public _escape!: StringContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public CATALOGS(): TerminalNode { + return this.getToken(trinoSqlParserParser.CATALOGS, 0); + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public string__list(): StringContext[] { + return this.getTypedRuleContexts(StringContext) as StringContext[]; + } + public string_(i: number): StringContext { + return this.getTypedRuleContext(StringContext, i) as StringContext; + } + public ESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ESCAPE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowCatalogs) { + listener.enterShowCatalogs(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowCatalogs) { + listener.exitShowCatalogs(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowCatalogs) { + return visitor.visitShowCatalogs(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowRolesContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public ROLES(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLES, 0); + } + public CURRENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowRoles) { + listener.enterShowRoles(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowRoles) { + listener.exitShowRoles(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowRoles) { + return visitor.visitShowRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MergeContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public MERGE(): TerminalNode { + return this.getToken(trinoSqlParserParser.MERGE, 0); + } + public INTO(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTO, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public USING(): TerminalNode { + return this.getToken(trinoSqlParserParser.USING, 0); + } + public relation(): RelationContext { + return this.getTypedRuleContext(RelationContext, 0) as RelationContext; + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public mergeCase_list(): MergeCaseContext[] { + return this.getTypedRuleContexts(MergeCaseContext) as MergeCaseContext[]; + } + public mergeCase(i: number): MergeCaseContext { + return this.getTypedRuleContext(MergeCaseContext, i) as MergeCaseContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterMerge) { + listener.enterMerge(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitMerge) { + listener.exitMerge(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitMerge) { + return visitor.visitMerge(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameColumnContext extends StatementContext { + public _tableName!: QualifiedNameContext; + public _from_!: IdentifierContext; + public _to!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public RENAME(): TerminalNode { + return this.getToken(trinoSqlParserParser.RENAME, 0); + } + public COLUMN(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMN, 0); + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public IF_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.IF); + } + public IF(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, i); + } + public EXISTS_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.EXISTS); + } + public EXISTS(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, i); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRenameColumn) { + listener.enterRenameColumn(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRenameColumn) { + listener.exitRenameColumn(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRenameColumn) { + return visitor.visitRenameColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommentColumnContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public COLUMN(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMN, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public IS(): TerminalNode { + return this.getToken(trinoSqlParserParser.IS, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public NULL(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULL, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCommentColumn) { + listener.enterCommentColumn(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCommentColumn) { + listener.exitCommentColumn(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCommentColumn) { + return visitor.visitCommentColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RevokeRolesContext extends StatementContext { + public _catalog!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public REVOKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REVOKE, 0); + } + public roles(): RolesContext { + return this.getTypedRuleContext(RolesContext, 0) as RolesContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public principal_list(): PrincipalContext[] { + return this.getTypedRuleContexts(PrincipalContext) as PrincipalContext[]; + } + public principal(i: number): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, i) as PrincipalContext; + } + public ADMIN(): TerminalNode { + return this.getToken(trinoSqlParserParser.ADMIN, 0); + } + public OPTION(): TerminalNode { + return this.getToken(trinoSqlParserParser.OPTION, 0); + } + public FOR(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOR, 0); + } + public GRANTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANTED, 0); + } + public BY(): TerminalNode { + return this.getToken(trinoSqlParserParser.BY, 0); + } + public grantor(): GrantorContext { + return this.getTypedRuleContext(GrantorContext, 0) as GrantorContext; + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRevokeRoles) { + listener.enterRevokeRoles(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRevokeRoles) { + listener.exitRevokeRoles(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRevokeRoles) { + return visitor.visitRevokeRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateTableContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowCreateTable) { + listener.enterShowCreateTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowCreateTable) { + listener.exitShowCreateTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowCreateTable) { + return visitor.visitShowCreateTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowColumnsContext extends StatementContext { + public _pattern!: StringContext; + public _escape!: StringContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public COLUMNS(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMNS, 0); + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public string__list(): StringContext[] { + return this.getTypedRuleContexts(StringContext) as StringContext[]; + } + public string_(i: number): StringContext { + return this.getTypedRuleContext(StringContext, i) as StringContext; + } + public ESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ESCAPE, 0); + } + public DESCRIBE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DESCRIBE, 0); + } + public DESC(): TerminalNode { + return this.getToken(trinoSqlParserParser.DESC, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowColumns) { + listener.enterShowColumns(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowColumns) { + listener.exitShowColumns(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowColumns) { + return visitor.visitShowColumns(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowRoleGrantsContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public ROLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLE, 0); + } + public GRANTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANTS, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowRoleGrants) { + listener.enterShowRoleGrants(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowRoleGrants) { + listener.exitShowRoleGrants(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowRoleGrants) { + return visitor.visitShowRoleGrants(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AddColumnContext extends StatementContext { + public _tableName!: QualifiedNameContext; + public _column!: ColumnDefinitionContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public ADD(): TerminalNode { + return this.getToken(trinoSqlParserParser.ADD, 0); + } + public COLUMN(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMN, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public columnDefinition(): ColumnDefinitionContext { + return this.getTypedRuleContext(ColumnDefinitionContext, 0) as ColumnDefinitionContext; + } + public IF_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.IF); + } + public IF(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, i); + } + public EXISTS_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.EXISTS); + } + public EXISTS(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, i); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterAddColumn) { + listener.enterAddColumn(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitAddColumn) { + listener.exitAddColumn(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitAddColumn) { + return visitor.visitAddColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DenyContext extends StatementContext { + public _grantee!: PrincipalContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DENY(): TerminalNode { + return this.getToken(trinoSqlParserParser.DENY, 0); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public privilege_list(): PrivilegeContext[] { + return this.getTypedRuleContexts(PrivilegeContext) as PrivilegeContext[]; + } + public privilege(i: number): PrivilegeContext { + return this.getTypedRuleContext(PrivilegeContext, i) as PrivilegeContext; + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public PRIVILEGES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRIVILEGES, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDeny) { + listener.enterDeny(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDeny) { + listener.exitDeny(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDeny) { + return visitor.visitDeny(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ResetSessionContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public RESET(): TerminalNode { + return this.getToken(trinoSqlParserParser.RESET, 0); + } + public SESSION(): TerminalNode { + return this.getToken(trinoSqlParserParser.SESSION, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterResetSession) { + listener.enterResetSession(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitResetSession) { + listener.exitResetSession(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitResetSession) { + return visitor.visitResetSession(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InsertIntoContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public INSERT(): TerminalNode { + return this.getToken(trinoSqlParserParser.INSERT, 0); + } + public INTO(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTO, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public columnAliases(): ColumnAliasesContext { + return this.getTypedRuleContext(ColumnAliasesContext, 0) as ColumnAliasesContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterInsertInto) { + listener.enterInsertInto(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitInsertInto) { + listener.exitInsertInto(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitInsertInto) { + return visitor.visitInsertInto(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowSessionContext extends StatementContext { + public _pattern!: StringContext; + public _escape!: StringContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public SESSION(): TerminalNode { + return this.getToken(trinoSqlParserParser.SESSION, 0); + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public string__list(): StringContext[] { + return this.getTypedRuleContexts(StringContext) as StringContext[]; + } + public string_(i: number): StringContext { + return this.getTypedRuleContext(StringContext, i) as StringContext; + } + public ESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ESCAPE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowSession) { + listener.enterShowSession(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowSession) { + listener.exitShowSession(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowSession) { + return visitor.visitShowSession(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateSchemaContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public AUTHORIZATION(): TerminalNode { + return this.getToken(trinoSqlParserParser.AUTHORIZATION, 0); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public properties(): PropertiesContext { + return this.getTypedRuleContext(PropertiesContext, 0) as PropertiesContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCreateSchema) { + listener.enterCreateSchema(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCreateSchema) { + listener.exitCreateSchema(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCreateSchema) { + return visitor.visitCreateSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExecuteContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public EXECUTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXECUTE, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public USING(): TerminalNode { + return this.getToken(trinoSqlParserParser.USING, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExecute) { + listener.enterExecute(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExecute) { + listener.exitExecute(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExecute) { + return visitor.visitExecute(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameSchemaContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public RENAME(): TerminalNode { + return this.getToken(trinoSqlParserParser.RENAME, 0); + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRenameSchema) { + listener.enterRenameSchema(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRenameSchema) { + listener.exitRenameSchema(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRenameSchema) { + return visitor.visitRenameSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropRoleContext extends StatementContext { + public _name!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP(): TerminalNode { + return this.getToken(trinoSqlParserParser.DROP, 0); + } + public ROLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLE, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDropRole) { + listener.enterDropRole(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDropRole) { + listener.exitDropRole(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDropRole) { + return visitor.visitDropRole(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AnalyzeContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ANALYZE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ANALYZE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public properties(): PropertiesContext { + return this.getTypedRuleContext(PropertiesContext, 0) as PropertiesContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterAnalyze) { + listener.enterAnalyze(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitAnalyze) { + listener.exitAnalyze(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitAnalyze) { + return visitor.visitAnalyze(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetRoleContext extends StatementContext { + public _role!: IdentifierContext; + public _catalog!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public ROLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLE, 0); + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public NONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.NONE, 0); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetRole) { + listener.enterSetRole(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetRole) { + listener.exitSetRole(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetRole) { + return visitor.visitSetRole(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowGrantsContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public GRANTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANTS, 0); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowGrants) { + listener.enterShowGrants(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowGrants) { + listener.exitShowGrants(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowGrants) { + return visitor.visitShowGrants(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropSchemaContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP(): TerminalNode { + return this.getToken(trinoSqlParserParser.DROP, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public CASCADE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CASCADE, 0); + } + public RESTRICT(): TerminalNode { + return this.getToken(trinoSqlParserParser.RESTRICT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDropSchema) { + listener.enterDropSchema(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDropSchema) { + listener.exitDropSchema(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDropSchema) { + return visitor.visitDropSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetTableAuthorizationContext extends StatementContext { + public _tableName!: QualifiedNameContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public AUTHORIZATION(): TerminalNode { + return this.getToken(trinoSqlParserParser.AUTHORIZATION, 0); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetTableAuthorization) { + listener.enterSetTableAuthorization(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetTableAuthorization) { + listener.exitSetTableAuthorization(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetTableAuthorization) { + return visitor.visitSetTableAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateViewContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowCreateView) { + listener.enterShowCreateView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowCreateView) { + listener.exitShowCreateView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowCreateView) { + return visitor.visitShowCreateView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowColumnCommentContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public COLUMN(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMN, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowColumnComment) { + listener.enterShowColumnComment(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowColumnComment) { + listener.exitShowColumnComment(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowColumnComment) { + return visitor.visitShowColumnComment(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateTableContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public tableElement_list(): TableElementContext[] { + return this.getTypedRuleContexts(TableElementContext) as TableElementContext[]; + } + public tableElement(i: number): TableElementContext { + return this.getTypedRuleContext(TableElementContext, i) as TableElementContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public properties(): PropertiesContext { + return this.getTypedRuleContext(PropertiesContext, 0) as PropertiesContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCreateTable) { + listener.enterCreateTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCreateTable) { + listener.exitCreateTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCreateTable) { + return visitor.visitCreateTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StartTransactionContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public START(): TerminalNode { + return this.getToken(trinoSqlParserParser.START, 0); + } + public TRANSACTION(): TerminalNode { + return this.getToken(trinoSqlParserParser.TRANSACTION, 0); + } + public transactionMode_list(): TransactionModeContext[] { + return this.getTypedRuleContexts(TransactionModeContext) as TransactionModeContext[]; + } + public transactionMode(i: number): TransactionModeContext { + return this.getTypedRuleContext(TransactionModeContext, i) as TransactionModeContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStartTransaction) { + listener.enterStartTransaction(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStartTransaction) { + listener.exitStartTransaction(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStartTransaction) { + return visitor.visitStartTransaction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateTableAsSelectContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public columnAliases(): ColumnAliasesContext { + return this.getTypedRuleContext(ColumnAliasesContext, 0) as ColumnAliasesContext; + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public WITH_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.WITH); + } + public WITH(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, i); + } + public properties(): PropertiesContext { + return this.getTypedRuleContext(PropertiesContext, 0) as PropertiesContext; + } + public DATA(): TerminalNode { + return this.getToken(trinoSqlParserParser.DATA, 0); + } + public NO(): TerminalNode { + return this.getToken(trinoSqlParserParser.NO, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCreateTableAsSelect) { + listener.enterCreateTableAsSelect(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCreateTableAsSelect) { + listener.exitCreateTableAsSelect(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCreateTableAsSelect) { + return visitor.visitCreateTableAsSelect(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowStatsContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public STATS(): TerminalNode { + return this.getToken(trinoSqlParserParser.STATS, 0); + } + public FOR(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOR, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowStats) { + listener.enterShowStats(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowStats) { + listener.exitShowStats(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowStats) { + return visitor.visitShowStats(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateSchemaContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowCreateSchema) { + listener.enterShowCreateSchema(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowCreateSchema) { + listener.exitShowCreateSchema(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowCreateSchema) { + return visitor.visitShowCreateSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RevokeContext extends StatementContext { + public _grantee!: PrincipalContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public REVOKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REVOKE, 0); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public privilege_list(): PrivilegeContext[] { + return this.getTypedRuleContexts(PrivilegeContext) as PrivilegeContext[]; + } + public privilege(i: number): PrivilegeContext { + return this.getTypedRuleContext(PrivilegeContext, i) as PrivilegeContext; + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public PRIVILEGES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRIVILEGES, 0); + } + public GRANT(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANT, 0); + } + public OPTION(): TerminalNode { + return this.getToken(trinoSqlParserParser.OPTION, 0); + } + public FOR(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOR, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRevoke) { + listener.enterRevoke(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRevoke) { + listener.exitRevoke(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRevoke) { + return visitor.visitRevoke(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UpdateContext extends StatementContext { + public _where!: BooleanExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public UPDATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.UPDATE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public updateAssignment_list(): UpdateAssignmentContext[] { + return this.getTypedRuleContexts(UpdateAssignmentContext) as UpdateAssignmentContext[]; + } + public updateAssignment(i: number): UpdateAssignmentContext { + return this.getTypedRuleContext(UpdateAssignmentContext, i) as UpdateAssignmentContext; + } + public WHERE(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHERE, 0); + } + public booleanExpression(): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUpdate) { + listener.enterUpdate(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUpdate) { + listener.exitUpdate(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUpdate) { + return visitor.visitUpdate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableExecuteContext extends StatementContext { + public _tableName!: QualifiedNameContext; + public _procedureName!: IdentifierContext; + public _where!: BooleanExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public EXECUTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXECUTE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public WHERE(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHERE, 0); + } + public booleanExpression(): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; + } + public callArgument_list(): CallArgumentContext[] { + return this.getTypedRuleContexts(CallArgumentContext) as CallArgumentContext[]; + } + public callArgument(i: number): CallArgumentContext { + return this.getTypedRuleContext(CallArgumentContext, i) as CallArgumentContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTableExecute) { + listener.enterTableExecute(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTableExecute) { + listener.exitTableExecute(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTableExecute) { + return visitor.visitTableExecute(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DeleteContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DELETE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DELETE, 0); + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public WHERE(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHERE, 0); + } + public booleanExpression(): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDelete) { + listener.enterDelete(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDelete) { + listener.exitDelete(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDelete) { + return visitor.visitDelete(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DescribeInputContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DESCRIBE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DESCRIBE, 0); + } + public INPUT(): TerminalNode { + return this.getToken(trinoSqlParserParser.INPUT, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDescribeInput) { + listener.enterDescribeInput(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDescribeInput) { + listener.exitDescribeInput(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDescribeInput) { + return visitor.visitDescribeInput(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowStatsForQueryContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public STATS(): TerminalNode { + return this.getToken(trinoSqlParserParser.STATS, 0); + } + public FOR(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOR, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowStatsForQuery) { + listener.enterShowStatsForQuery(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowStatsForQuery) { + listener.exitShowStatsForQuery(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowStatsForQuery) { + return visitor.visitShowStatsForQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StatementDefaultContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStatementDefault) { + listener.enterStatementDefault(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStatementDefault) { + listener.exitStatementDefault(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStatementDefault) { + return visitor.visitStatementDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetTimeZoneContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public TIME(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIME, 0); + } + public ZONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ZONE, 0); + } + public LOCAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LOCAL, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetTimeZone) { + listener.enterSetTimeZone(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetTimeZone) { + listener.exitSetTimeZone(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetTimeZone) { + return visitor.visitSetTimeZone(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TruncateTableContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public TRUNCATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TRUNCATE, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTruncateTable) { + listener.enterTruncateTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTruncateTable) { + listener.exitTruncateTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTruncateTable) { + return visitor.visitTruncateTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateMaterializedViewContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public MATERIALIZED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATERIALIZED, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public OR(): TerminalNode { + return this.getToken(trinoSqlParserParser.OR, 0); + } + public REPLACE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REPLACE, 0); + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public properties(): PropertiesContext { + return this.getTypedRuleContext(PropertiesContext, 0) as PropertiesContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCreateMaterializedView) { + listener.enterCreateMaterializedView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCreateMaterializedView) { + listener.exitCreateMaterializedView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCreateMaterializedView) { + return visitor.visitCreateMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetSessionContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public SESSION(): TerminalNode { + return this.getToken(trinoSqlParserParser.SESSION, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public EQ(): TerminalNode { + return this.getToken(trinoSqlParserParser.EQ, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetSession) { + listener.enterSetSession(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetSession) { + listener.exitSetSession(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetSession) { + return visitor.visitSetSession(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateViewContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public OR(): TerminalNode { + return this.getToken(trinoSqlParserParser.OR, 0); + } + public REPLACE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REPLACE, 0); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public SECURITY(): TerminalNode { + return this.getToken(trinoSqlParserParser.SECURITY, 0); + } + public DEFINER(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEFINER, 0); + } + public INVOKER(): TerminalNode { + return this.getToken(trinoSqlParserParser.INVOKER, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCreateView) { + listener.enterCreateView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCreateView) { + listener.exitCreateView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCreateView) { + return visitor.visitCreateView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameMaterializedViewContext extends StatementContext { + public _from_!: QualifiedNameContext; + public _to!: QualifiedNameContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public MATERIALIZED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATERIALIZED, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public RENAME(): TerminalNode { + return this.getToken(trinoSqlParserParser.RENAME, 0); + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public qualifiedName_list(): QualifiedNameContext[] { + return this.getTypedRuleContexts(QualifiedNameContext) as QualifiedNameContext[]; + } + public qualifiedName(i: number): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, i) as QualifiedNameContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRenameMaterializedView) { + listener.enterRenameMaterializedView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRenameMaterializedView) { + listener.exitRenameMaterializedView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRenameMaterializedView) { + return visitor.visitRenameMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowSchemasContext extends StatementContext { + public _pattern!: StringContext; + public _escape!: StringContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public SCHEMAS(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMAS, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public string__list(): StringContext[] { + return this.getTypedRuleContexts(StringContext) as StringContext[]; + } + public string_(i: number): StringContext { + return this.getTypedRuleContext(StringContext, i) as StringContext; + } + public ESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ESCAPE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowSchemas) { + listener.enterShowSchemas(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowSchemas) { + listener.exitShowSchemas(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowSchemas) { + return visitor.visitShowSchemas(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropTableContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP(): TerminalNode { + return this.getToken(trinoSqlParserParser.DROP, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDropTable) { + listener.enterDropTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDropTable) { + listener.exitDropTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDropTable) { + return visitor.visitDropTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetSchemaAuthorizationContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public AUTHORIZATION(): TerminalNode { + return this.getToken(trinoSqlParserParser.AUTHORIZATION, 0); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetSchemaAuthorization) { + listener.enterSetSchemaAuthorization(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetSchemaAuthorization) { + listener.exitSetSchemaAuthorization(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetSchemaAuthorization) { + return visitor.visitSetSchemaAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RollbackContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ROLLBACK(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLLBACK, 0); + } + public WORK(): TerminalNode { + return this.getToken(trinoSqlParserParser.WORK, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRollback) { + listener.enterRollback(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRollback) { + listener.exitRollback(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRollback) { + return visitor.visitRollback(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommentTableContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public IS(): TerminalNode { + return this.getToken(trinoSqlParserParser.IS, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public NULL(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULL, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCommentTable) { + listener.enterCommentTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCommentTable) { + listener.exitCommentTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCommentTable) { + return visitor.visitCommentTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameViewContext extends StatementContext { + public _from_!: QualifiedNameContext; + public _to!: QualifiedNameContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public RENAME(): TerminalNode { + return this.getToken(trinoSqlParserParser.RENAME, 0); + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public qualifiedName_list(): QualifiedNameContext[] { + return this.getTypedRuleContexts(QualifiedNameContext) as QualifiedNameContext[]; + } + public qualifiedName(i: number): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, i) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRenameView) { + listener.enterRenameView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRenameView) { + listener.exitRenameView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRenameView) { + return visitor.visitRenameView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetPathContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public PATH(): TerminalNode { + return this.getToken(trinoSqlParserParser.PATH, 0); + } + public pathSpecification(): PathSpecificationContext { + return this.getTypedRuleContext(PathSpecificationContext, 0) as PathSpecificationContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetPath) { + listener.enterSetPath(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetPath) { + listener.exitSetPath(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetPath) { + return visitor.visitSetPath(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GrantRolesContext extends StatementContext { + public _catalog!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public GRANT(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANT, 0); + } + public roles(): RolesContext { + return this.getTypedRuleContext(RolesContext, 0) as RolesContext; + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public principal_list(): PrincipalContext[] { + return this.getTypedRuleContexts(PrincipalContext) as PrincipalContext[]; + } + public principal(i: number): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, i) as PrincipalContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public ADMIN(): TerminalNode { + return this.getToken(trinoSqlParserParser.ADMIN, 0); + } + public OPTION(): TerminalNode { + return this.getToken(trinoSqlParserParser.OPTION, 0); + } + public GRANTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANTED, 0); + } + public BY(): TerminalNode { + return this.getToken(trinoSqlParserParser.BY, 0); + } + public grantor(): GrantorContext { + return this.getTypedRuleContext(GrantorContext, 0) as GrantorContext; + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterGrantRoles) { + listener.enterGrantRoles(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitGrantRoles) { + listener.exitGrantRoles(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitGrantRoles) { + return visitor.visitGrantRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CallContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.CALL, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public callArgument_list(): CallArgumentContext[] { + return this.getTypedRuleContexts(CallArgumentContext) as CallArgumentContext[]; + } + public callArgument(i: number): CallArgumentContext { + return this.getTypedRuleContext(CallArgumentContext, i) as CallArgumentContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCall) { + listener.enterCall(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCall) { + listener.exitCall(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCall) { + return visitor.visitCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RefreshMaterializedViewContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public REFRESH(): TerminalNode { + return this.getToken(trinoSqlParserParser.REFRESH, 0); + } + public MATERIALIZED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATERIALIZED, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRefreshMaterializedView) { + listener.enterRefreshMaterializedView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRefreshMaterializedView) { + listener.exitRefreshMaterializedView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRefreshMaterializedView) { + return visitor.visitRefreshMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateMaterializedViewContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public CREATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CREATE, 0); + } + public MATERIALIZED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATERIALIZED, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowCreateMaterializedView) { + listener.enterShowCreateMaterializedView(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowCreateMaterializedView) { + listener.exitShowCreateMaterializedView(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowCreateMaterializedView) { + return visitor.visitShowCreateMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowFunctionsContext extends StatementContext { + public _pattern!: StringContext; + public _escape!: StringContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public FUNCTIONS(): TerminalNode { + return this.getToken(trinoSqlParserParser.FUNCTIONS, 0); + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public string__list(): StringContext[] { + return this.getTypedRuleContexts(StringContext) as StringContext[]; + } + public string_(i: number): StringContext { + return this.getTypedRuleContext(StringContext, i) as StringContext; + } + public ESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ESCAPE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterShowFunctions) { + listener.enterShowFunctions(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitShowFunctions) { + listener.exitShowFunctions(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitShowFunctions) { + return visitor.visitShowFunctions(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DescribeOutputContext extends StatementContext { + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DESCRIBE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DESCRIBE, 0); + } + public OUTPUT(): TerminalNode { + return this.getToken(trinoSqlParserParser.OUTPUT, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDescribeOutput) { + listener.enterDescribeOutput(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDescribeOutput) { + listener.exitDescribeOutput(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDescribeOutput) { + return visitor.visitDescribeOutput(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GrantContext extends StatementContext { + public _grantee!: PrincipalContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public GRANT_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.GRANT); + } + public GRANT(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANT, i); + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public privilege_list(): PrivilegeContext[] { + return this.getTypedRuleContexts(PrivilegeContext) as PrivilegeContext[]; + } + public privilege(i: number): PrivilegeContext { + return this.getTypedRuleContext(PrivilegeContext, i) as PrivilegeContext; + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public PRIVILEGES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRIVILEGES, 0); + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public OPTION(): TerminalNode { + return this.getToken(trinoSqlParserParser.OPTION, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterGrant) { + listener.enterGrant(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitGrant) { + listener.exitGrant(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitGrant) { + return visitor.visitGrant(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetTablePropertiesContext extends StatementContext { + public _tableName!: QualifiedNameContext; + constructor(parser: trinoSqlParserParser, ctx: StatementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALTER, 0); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public PROPERTIES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PROPERTIES, 0); + } + public propertyAssignments(): PropertyAssignmentsContext { + return this.getTypedRuleContext(PropertyAssignmentsContext, 0) as PropertyAssignmentsContext; + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetTableProperties) { + listener.enterSetTableProperties(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetTableProperties) { + listener.exitSetTableProperties(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetTableProperties) { + return visitor.visitSetTableProperties(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public queryNoWith(): QueryNoWithContext { + return this.getTypedRuleContext(QueryNoWithContext, 0) as QueryNoWithContext; + } + public with_(): WithContext { + return this.getTypedRuleContext(WithContext, 0) as WithContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_query; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQuery) { + listener.enterQuery(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQuery) { + listener.exitQuery(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQuery) { + return visitor.visitQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WithContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public namedQuery_list(): NamedQueryContext[] { + return this.getTypedRuleContexts(NamedQueryContext) as NamedQueryContext[]; + } + public namedQuery(i: number): NamedQueryContext { + return this.getTypedRuleContext(NamedQueryContext, i) as NamedQueryContext; + } + public RECURSIVE(): TerminalNode { + return this.getToken(trinoSqlParserParser.RECURSIVE, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_with; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterWith) { + listener.enterWith(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitWith) { + listener.exitWith(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitWith) { + return visitor.visitWith(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableElementContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public columnDefinition(): ColumnDefinitionContext { + return this.getTypedRuleContext(ColumnDefinitionContext, 0) as ColumnDefinitionContext; + } + public likeClause(): LikeClauseContext { + return this.getTypedRuleContext(LikeClauseContext, 0) as LikeClauseContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_tableElement; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTableElement) { + listener.enterTableElement(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTableElement) { + listener.exitTableElement(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTableElement) { + return visitor.visitTableElement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ColumnDefinitionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public type_(): TypeContext { + return this.getTypedRuleContext(TypeContext, 0) as TypeContext; + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public NULL(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULL, 0); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public properties(): PropertiesContext { + return this.getTypedRuleContext(PropertiesContext, 0) as PropertiesContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_columnDefinition; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterColumnDefinition) { + listener.enterColumnDefinition(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitColumnDefinition) { + listener.exitColumnDefinition(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitColumnDefinition) { + return visitor.visitColumnDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LikeClauseContext extends ParserRuleContext { + public _optionType!: Token; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public PROPERTIES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PROPERTIES, 0); + } + public INCLUDING(): TerminalNode { + return this.getToken(trinoSqlParserParser.INCLUDING, 0); + } + public EXCLUDING(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXCLUDING, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_likeClause; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLikeClause) { + listener.enterLikeClause(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLikeClause) { + listener.exitLikeClause(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLikeClause) { + return visitor.visitLikeClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertiesContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public propertyAssignments(): PropertyAssignmentsContext { + return this.getTypedRuleContext(PropertyAssignmentsContext, 0) as PropertyAssignmentsContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_properties; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterProperties) { + listener.enterProperties(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitProperties) { + listener.exitProperties(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitProperties) { + return visitor.visitProperties(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertyAssignmentsContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public property_list(): PropertyContext[] { + return this.getTypedRuleContexts(PropertyContext) as PropertyContext[]; + } + public property(i: number): PropertyContext { + return this.getTypedRuleContext(PropertyContext, i) as PropertyContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_propertyAssignments; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPropertyAssignments) { + listener.enterPropertyAssignments(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPropertyAssignments) { + listener.exitPropertyAssignments(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPropertyAssignments) { + return visitor.visitPropertyAssignments(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertyContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public EQ(): TerminalNode { + return this.getToken(trinoSqlParserParser.EQ, 0); + } + public propertyValue(): PropertyValueContext { + return this.getTypedRuleContext(PropertyValueContext, 0) as PropertyValueContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_property; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterProperty) { + listener.enterProperty(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitProperty) { + listener.exitProperty(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitProperty) { + return visitor.visitProperty(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertyValueContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_propertyValue; + } + public copyFrom(ctx: PropertyValueContext): void { + super.copyFrom(ctx); + } +} +export class DefaultPropertyValueContext extends PropertyValueContext { + constructor(parser: trinoSqlParserParser, ctx: PropertyValueContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DEFAULT(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEFAULT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDefaultPropertyValue) { + listener.enterDefaultPropertyValue(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDefaultPropertyValue) { + listener.exitDefaultPropertyValue(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDefaultPropertyValue) { + return visitor.visitDefaultPropertyValue(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NonDefaultPropertyValueContext extends PropertyValueContext { + constructor(parser: trinoSqlParserParser, ctx: PropertyValueContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNonDefaultPropertyValue) { + listener.enterNonDefaultPropertyValue(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNonDefaultPropertyValue) { + listener.exitNonDefaultPropertyValue(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNonDefaultPropertyValue) { + return visitor.visitNonDefaultPropertyValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryNoWithContext extends ParserRuleContext { + public _offset!: RowCountContext; + public _limit!: LimitRowCountContext; + public _fetchFirst!: RowCountContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public queryTerm(): QueryTermContext { + return this.getTypedRuleContext(QueryTermContext, 0) as QueryTermContext; + } + public ORDER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ORDER, 0); + } + public BY(): TerminalNode { + return this.getToken(trinoSqlParserParser.BY, 0); + } + public sortItem_list(): SortItemContext[] { + return this.getTypedRuleContexts(SortItemContext) as SortItemContext[]; + } + public sortItem(i: number): SortItemContext { + return this.getTypedRuleContext(SortItemContext, i) as SortItemContext; + } + public OFFSET(): TerminalNode { + return this.getToken(trinoSqlParserParser.OFFSET, 0); + } + public rowCount_list(): RowCountContext[] { + return this.getTypedRuleContexts(RowCountContext) as RowCountContext[]; + } + public rowCount(i: number): RowCountContext { + return this.getTypedRuleContext(RowCountContext, i) as RowCountContext; + } + public LIMIT(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIMIT, 0); + } + public FETCH(): TerminalNode { + return this.getToken(trinoSqlParserParser.FETCH, 0); + } + public limitRowCount(): LimitRowCountContext { + return this.getTypedRuleContext(LimitRowCountContext, 0) as LimitRowCountContext; + } + public FIRST(): TerminalNode { + return this.getToken(trinoSqlParserParser.FIRST, 0); + } + public NEXT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NEXT, 0); + } + public ROW_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.ROW); + } + public ROW(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.ROW, i); + } + public ROWS_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.ROWS); + } + public ROWS(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.ROWS, i); + } + public ONLY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ONLY, 0); + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public TIES(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIES, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_queryNoWith; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQueryNoWith) { + listener.enterQueryNoWith(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQueryNoWith) { + listener.exitQueryNoWith(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQueryNoWith) { + return visitor.visitQueryNoWith(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LimitRowCountContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public rowCount(): RowCountContext { + return this.getTypedRuleContext(RowCountContext, 0) as RowCountContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_limitRowCount; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLimitRowCount) { + listener.enterLimitRowCount(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLimitRowCount) { + listener.exitLimitRowCount(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLimitRowCount) { + return visitor.visitLimitRowCount(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowCountContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public INTEGER_VALUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTEGER_VALUE, 0); + } + public QUESTION_MARK(): TerminalNode { + return this.getToken(trinoSqlParserParser.QUESTION_MARK, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_rowCount; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRowCount) { + listener.enterRowCount(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRowCount) { + listener.exitRowCount(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRowCount) { + return visitor.visitRowCount(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryTermContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_queryTerm; + } + public copyFrom(ctx: QueryTermContext): void { + super.copyFrom(ctx); + } +} +export class QueryTermDefaultContext extends QueryTermContext { + constructor(parser: trinoSqlParserParser, ctx: QueryTermContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public queryPrimary(): QueryPrimaryContext { + return this.getTypedRuleContext(QueryPrimaryContext, 0) as QueryPrimaryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQueryTermDefault) { + listener.enterQueryTermDefault(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQueryTermDefault) { + listener.exitQueryTermDefault(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQueryTermDefault) { + return visitor.visitQueryTermDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetOperationContext extends QueryTermContext { + public _left!: QueryTermContext; + public _operator!: Token; + public _right!: QueryTermContext; + constructor(parser: trinoSqlParserParser, ctx: QueryTermContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public queryTerm_list(): QueryTermContext[] { + return this.getTypedRuleContexts(QueryTermContext) as QueryTermContext[]; + } + public queryTerm(i: number): QueryTermContext { + return this.getTypedRuleContext(QueryTermContext, i) as QueryTermContext; + } + public INTERSECT(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTERSECT, 0); + } + public setQuantifier(): SetQuantifierContext { + return this.getTypedRuleContext(SetQuantifierContext, 0) as SetQuantifierContext; + } + public UNION(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNION, 0); + } + public EXCEPT(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXCEPT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetOperation) { + listener.enterSetOperation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetOperation) { + listener.exitSetOperation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetOperation) { + return visitor.visitSetOperation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryPrimaryContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_queryPrimary; + } + public copyFrom(ctx: QueryPrimaryContext): void { + super.copyFrom(ctx); + } +} +export class SubqueryContext extends QueryPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: QueryPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public queryNoWith(): QueryNoWithContext { + return this.getTypedRuleContext(QueryNoWithContext, 0) as QueryNoWithContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSubquery) { + listener.enterSubquery(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSubquery) { + listener.exitSubquery(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSubquery) { + return visitor.visitSubquery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class QueryPrimaryDefaultContext extends QueryPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: QueryPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public querySpecification(): QuerySpecificationContext { + return this.getTypedRuleContext(QuerySpecificationContext, 0) as QuerySpecificationContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQueryPrimaryDefault) { + listener.enterQueryPrimaryDefault(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQueryPrimaryDefault) { + listener.exitQueryPrimaryDefault(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQueryPrimaryDefault) { + return visitor.visitQueryPrimaryDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableContext extends QueryPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: QueryPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public TABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLE, 0); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTable) { + listener.enterTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTable) { + listener.exitTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTable) { + return visitor.visitTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InlineTableContext extends QueryPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: QueryPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public VALUES(): TerminalNode { + return this.getToken(trinoSqlParserParser.VALUES, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterInlineTable) { + listener.enterInlineTable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitInlineTable) { + listener.exitInlineTable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitInlineTable) { + return visitor.visitInlineTable(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SortItemContext extends ParserRuleContext { + public _ordering!: Token; + public _nullOrdering!: Token; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public NULLS(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULLS, 0); + } + public ASC(): TerminalNode { + return this.getToken(trinoSqlParserParser.ASC, 0); + } + public DESC(): TerminalNode { + return this.getToken(trinoSqlParserParser.DESC, 0); + } + public FIRST(): TerminalNode { + return this.getToken(trinoSqlParserParser.FIRST, 0); + } + public LAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.LAST, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_sortItem; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSortItem) { + listener.enterSortItem(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSortItem) { + listener.exitSortItem(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSortItem) { + return visitor.visitSortItem(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QuerySpecificationContext extends ParserRuleContext { + public _where!: BooleanExpressionContext; + public _having!: BooleanExpressionContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public SELECT(): TerminalNode { + return this.getToken(trinoSqlParserParser.SELECT, 0); + } + public selectItem_list(): SelectItemContext[] { + return this.getTypedRuleContexts(SelectItemContext) as SelectItemContext[]; + } + public selectItem(i: number): SelectItemContext { + return this.getTypedRuleContext(SelectItemContext, i) as SelectItemContext; + } + public setQuantifier(): SetQuantifierContext { + return this.getTypedRuleContext(SetQuantifierContext, 0) as SetQuantifierContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public relation_list(): RelationContext[] { + return this.getTypedRuleContexts(RelationContext) as RelationContext[]; + } + public relation(i: number): RelationContext { + return this.getTypedRuleContext(RelationContext, i) as RelationContext; + } + public WHERE(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHERE, 0); + } + public GROUP(): TerminalNode { + return this.getToken(trinoSqlParserParser.GROUP, 0); + } + public BY(): TerminalNode { + return this.getToken(trinoSqlParserParser.BY, 0); + } + public groupBy(): GroupByContext { + return this.getTypedRuleContext(GroupByContext, 0) as GroupByContext; + } + public HAVING(): TerminalNode { + return this.getToken(trinoSqlParserParser.HAVING, 0); + } + public WINDOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.WINDOW, 0); + } + public windowDefinition_list(): WindowDefinitionContext[] { + return this.getTypedRuleContexts(WindowDefinitionContext) as WindowDefinitionContext[]; + } + public windowDefinition(i: number): WindowDefinitionContext { + return this.getTypedRuleContext(WindowDefinitionContext, i) as WindowDefinitionContext; + } + public booleanExpression_list(): BooleanExpressionContext[] { + return this.getTypedRuleContexts(BooleanExpressionContext) as BooleanExpressionContext[]; + } + public booleanExpression(i: number): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, i) as BooleanExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_querySpecification; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQuerySpecification) { + listener.enterQuerySpecification(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQuerySpecification) { + listener.exitQuerySpecification(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQuerySpecification) { + return visitor.visitQuerySpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupByContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public groupingElement_list(): GroupingElementContext[] { + return this.getTypedRuleContexts(GroupingElementContext) as GroupingElementContext[]; + } + public groupingElement(i: number): GroupingElementContext { + return this.getTypedRuleContext(GroupingElementContext, i) as GroupingElementContext; + } + public setQuantifier(): SetQuantifierContext { + return this.getTypedRuleContext(SetQuantifierContext, 0) as SetQuantifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_groupBy; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterGroupBy) { + listener.enterGroupBy(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitGroupBy) { + listener.exitGroupBy(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitGroupBy) { + return visitor.visitGroupBy(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupingElementContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_groupingElement; + } + public copyFrom(ctx: GroupingElementContext): void { + super.copyFrom(ctx); + } +} +export class MultipleGroupingSetsContext extends GroupingElementContext { + constructor(parser: trinoSqlParserParser, ctx: GroupingElementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public GROUPING(): TerminalNode { + return this.getToken(trinoSqlParserParser.GROUPING, 0); + } + public SETS(): TerminalNode { + return this.getToken(trinoSqlParserParser.SETS, 0); + } + public groupingSet_list(): GroupingSetContext[] { + return this.getTypedRuleContexts(GroupingSetContext) as GroupingSetContext[]; + } + public groupingSet(i: number): GroupingSetContext { + return this.getTypedRuleContext(GroupingSetContext, i) as GroupingSetContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterMultipleGroupingSets) { + listener.enterMultipleGroupingSets(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitMultipleGroupingSets) { + listener.exitMultipleGroupingSets(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitMultipleGroupingSets) { + return visitor.visitMultipleGroupingSets(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SingleGroupingSetContext extends GroupingElementContext { + constructor(parser: trinoSqlParserParser, ctx: GroupingElementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public groupingSet(): GroupingSetContext { + return this.getTypedRuleContext(GroupingSetContext, 0) as GroupingSetContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSingleGroupingSet) { + listener.enterSingleGroupingSet(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSingleGroupingSet) { + listener.exitSingleGroupingSet(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSingleGroupingSet) { + return visitor.visitSingleGroupingSet(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CubeContext extends GroupingElementContext { + constructor(parser: trinoSqlParserParser, ctx: GroupingElementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CUBE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CUBE, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCube) { + listener.enterCube(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCube) { + listener.exitCube(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCube) { + return visitor.visitCube(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RollupContext extends GroupingElementContext { + constructor(parser: trinoSqlParserParser, ctx: GroupingElementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ROLLUP(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLLUP, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRollup) { + listener.enterRollup(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRollup) { + listener.exitRollup(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRollup) { + return visitor.visitRollup(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupingSetContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_groupingSet; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterGroupingSet) { + listener.enterGroupingSet(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitGroupingSet) { + listener.exitGroupingSet(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitGroupingSet) { + return visitor.visitGroupingSet(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowDefinitionContext extends ParserRuleContext { + public _name!: IdentifierContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public windowSpecification(): WindowSpecificationContext { + return this.getTypedRuleContext(WindowSpecificationContext, 0) as WindowSpecificationContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_windowDefinition; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterWindowDefinition) { + listener.enterWindowDefinition(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitWindowDefinition) { + listener.exitWindowDefinition(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitWindowDefinition) { + return visitor.visitWindowDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowSpecificationContext extends ParserRuleContext { + public _existingWindowName!: IdentifierContext; + public _expression!: ExpressionContext; + public _partition: ExpressionContext[] = []; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public PARTITION(): TerminalNode { + return this.getToken(trinoSqlParserParser.PARTITION, 0); + } + public BY_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.BY); + } + public BY(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.BY, i); + } + public ORDER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ORDER, 0); + } + public sortItem_list(): SortItemContext[] { + return this.getTypedRuleContexts(SortItemContext) as SortItemContext[]; + } + public sortItem(i: number): SortItemContext { + return this.getTypedRuleContext(SortItemContext, i) as SortItemContext; + } + public windowFrame(): WindowFrameContext { + return this.getTypedRuleContext(WindowFrameContext, 0) as WindowFrameContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_windowSpecification; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterWindowSpecification) { + listener.enterWindowSpecification(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitWindowSpecification) { + listener.exitWindowSpecification(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitWindowSpecification) { + return visitor.visitWindowSpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NamedQueryContext extends ParserRuleContext { + public _name!: IdentifierContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public columnAliases(): ColumnAliasesContext { + return this.getTypedRuleContext(ColumnAliasesContext, 0) as ColumnAliasesContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_namedQuery; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNamedQuery) { + listener.enterNamedQuery(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNamedQuery) { + listener.exitNamedQuery(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNamedQuery) { + return visitor.visitNamedQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SetQuantifierContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public DISTINCT(): TerminalNode { + return this.getToken(trinoSqlParserParser.DISTINCT, 0); + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_setQuantifier; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSetQuantifier) { + listener.enterSetQuantifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSetQuantifier) { + listener.exitSetQuantifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSetQuantifier) { + return visitor.visitSetQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SelectItemContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_selectItem; + } + public copyFrom(ctx: SelectItemContext): void { + super.copyFrom(ctx); + } +} +export class SelectAllContext extends SelectItemContext { + constructor(parser: trinoSqlParserParser, ctx: SelectItemContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public primaryExpression(): PrimaryExpressionContext { + return this.getTypedRuleContext(PrimaryExpressionContext, 0) as PrimaryExpressionContext; + } + public ASTERISK(): TerminalNode { + return this.getToken(trinoSqlParserParser.ASTERISK, 0); + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public columnAliases(): ColumnAliasesContext { + return this.getTypedRuleContext(ColumnAliasesContext, 0) as ColumnAliasesContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSelectAll) { + listener.enterSelectAll(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSelectAll) { + listener.exitSelectAll(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSelectAll) { + return visitor.visitSelectAll(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SelectSingleContext extends SelectItemContext { + constructor(parser: trinoSqlParserParser, ctx: SelectItemContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSelectSingle) { + listener.enterSelectSingle(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSelectSingle) { + listener.exitSelectSingle(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSelectSingle) { + return visitor.visitSelectSingle(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelationContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_relation; + } + public copyFrom(ctx: RelationContext): void { + super.copyFrom(ctx); + } +} +export class RelationDefaultContext extends RelationContext { + constructor(parser: trinoSqlParserParser, ctx: RelationContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public sampledRelation(): SampledRelationContext { + return this.getTypedRuleContext(SampledRelationContext, 0) as SampledRelationContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRelationDefault) { + listener.enterRelationDefault(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRelationDefault) { + listener.exitRelationDefault(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRelationDefault) { + return visitor.visitRelationDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JoinRelationContext extends RelationContext { + public _left!: RelationContext; + public _right!: SampledRelationContext; + public _rightRelation!: RelationContext; + constructor(parser: trinoSqlParserParser, ctx: RelationContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public relation_list(): RelationContext[] { + return this.getTypedRuleContexts(RelationContext) as RelationContext[]; + } + public relation(i: number): RelationContext { + return this.getTypedRuleContext(RelationContext, i) as RelationContext; + } + public CROSS(): TerminalNode { + return this.getToken(trinoSqlParserParser.CROSS, 0); + } + public JOIN(): TerminalNode { + return this.getToken(trinoSqlParserParser.JOIN, 0); + } + public joinType(): JoinTypeContext { + return this.getTypedRuleContext(JoinTypeContext, 0) as JoinTypeContext; + } + public joinCriteria(): JoinCriteriaContext { + return this.getTypedRuleContext(JoinCriteriaContext, 0) as JoinCriteriaContext; + } + public NATURAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.NATURAL, 0); + } + public sampledRelation(): SampledRelationContext { + return this.getTypedRuleContext(SampledRelationContext, 0) as SampledRelationContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterJoinRelation) { + listener.enterJoinRelation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitJoinRelation) { + listener.exitJoinRelation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitJoinRelation) { + return visitor.visitJoinRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JoinTypeContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public INNER(): TerminalNode { + return this.getToken(trinoSqlParserParser.INNER, 0); + } + public LEFT(): TerminalNode { + return this.getToken(trinoSqlParserParser.LEFT, 0); + } + public OUTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.OUTER, 0); + } + public RIGHT(): TerminalNode { + return this.getToken(trinoSqlParserParser.RIGHT, 0); + } + public FULL(): TerminalNode { + return this.getToken(trinoSqlParserParser.FULL, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_joinType; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterJoinType) { + listener.enterJoinType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitJoinType) { + listener.exitJoinType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitJoinType) { + return visitor.visitJoinType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JoinCriteriaContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ON(): TerminalNode { + return this.getToken(trinoSqlParserParser.ON, 0); + } + public booleanExpression(): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; + } + public USING(): TerminalNode { + return this.getToken(trinoSqlParserParser.USING, 0); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_joinCriteria; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterJoinCriteria) { + listener.enterJoinCriteria(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitJoinCriteria) { + listener.exitJoinCriteria(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitJoinCriteria) { + return visitor.visitJoinCriteria(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SampledRelationContext extends ParserRuleContext { + public _percentage!: ExpressionContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public patternRecognition(): PatternRecognitionContext { + return this.getTypedRuleContext(PatternRecognitionContext, 0) as PatternRecognitionContext; + } + public TABLESAMPLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLESAMPLE, 0); + } + public sampleType(): SampleTypeContext { + return this.getTypedRuleContext(SampleTypeContext, 0) as SampleTypeContext; + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_sampledRelation; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSampledRelation) { + listener.enterSampledRelation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSampledRelation) { + listener.exitSampledRelation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSampledRelation) { + return visitor.visitSampledRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SampleTypeContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public BERNOULLI(): TerminalNode { + return this.getToken(trinoSqlParserParser.BERNOULLI, 0); + } + public SYSTEM(): TerminalNode { + return this.getToken(trinoSqlParserParser.SYSTEM, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_sampleType; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSampleType) { + listener.enterSampleType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSampleType) { + listener.exitSampleType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSampleType) { + return visitor.visitSampleType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternRecognitionContext extends ParserRuleContext { + public _expression!: ExpressionContext; + public _partition: ExpressionContext[] = []; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public aliasedRelation(): AliasedRelationContext { + return this.getTypedRuleContext(AliasedRelationContext, 0) as AliasedRelationContext; + } + public MATCH_RECOGNIZE(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCH_RECOGNIZE, 0); + } + public PATTERN(): TerminalNode { + return this.getToken(trinoSqlParserParser.PATTERN, 0); + } + public rowPattern(): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, 0) as RowPatternContext; + } + public DEFINE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEFINE, 0); + } + public variableDefinition_list(): VariableDefinitionContext[] { + return this.getTypedRuleContexts(VariableDefinitionContext) as VariableDefinitionContext[]; + } + public variableDefinition(i: number): VariableDefinitionContext { + return this.getTypedRuleContext(VariableDefinitionContext, i) as VariableDefinitionContext; + } + public PARTITION(): TerminalNode { + return this.getToken(trinoSqlParserParser.PARTITION, 0); + } + public BY_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.BY); + } + public BY(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.BY, i); + } + public ORDER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ORDER, 0); + } + public sortItem_list(): SortItemContext[] { + return this.getTypedRuleContexts(SortItemContext) as SortItemContext[]; + } + public sortItem(i: number): SortItemContext { + return this.getTypedRuleContext(SortItemContext, i) as SortItemContext; + } + public MEASURES(): TerminalNode { + return this.getToken(trinoSqlParserParser.MEASURES, 0); + } + public measureDefinition_list(): MeasureDefinitionContext[] { + return this.getTypedRuleContexts(MeasureDefinitionContext) as MeasureDefinitionContext[]; + } + public measureDefinition(i: number): MeasureDefinitionContext { + return this.getTypedRuleContext(MeasureDefinitionContext, i) as MeasureDefinitionContext; + } + public rowsPerMatch(): RowsPerMatchContext { + return this.getTypedRuleContext(RowsPerMatchContext, 0) as RowsPerMatchContext; + } + public AFTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.AFTER, 0); + } + public MATCH(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCH, 0); + } + public skipTo(): SkipToContext { + return this.getTypedRuleContext(SkipToContext, 0) as SkipToContext; + } + public SUBSET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SUBSET, 0); + } + public subsetDefinition_list(): SubsetDefinitionContext[] { + return this.getTypedRuleContexts(SubsetDefinitionContext) as SubsetDefinitionContext[]; + } + public subsetDefinition(i: number): SubsetDefinitionContext { + return this.getTypedRuleContext(SubsetDefinitionContext, i) as SubsetDefinitionContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public INITIAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.INITIAL, 0); + } + public SEEK(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEEK, 0); + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public columnAliases(): ColumnAliasesContext { + return this.getTypedRuleContext(ColumnAliasesContext, 0) as ColumnAliasesContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_patternRecognition; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPatternRecognition) { + listener.enterPatternRecognition(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPatternRecognition) { + listener.exitPatternRecognition(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPatternRecognition) { + return visitor.visitPatternRecognition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MeasureDefinitionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_measureDefinition; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterMeasureDefinition) { + listener.enterMeasureDefinition(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitMeasureDefinition) { + listener.exitMeasureDefinition(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitMeasureDefinition) { + return visitor.visitMeasureDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowsPerMatchContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ONE, 0); + } + public ROW(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROW, 0); + } + public PER(): TerminalNode { + return this.getToken(trinoSqlParserParser.PER, 0); + } + public MATCH(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCH, 0); + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public ROWS(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROWS, 0); + } + public emptyMatchHandling(): EmptyMatchHandlingContext { + return this.getTypedRuleContext(EmptyMatchHandlingContext, 0) as EmptyMatchHandlingContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_rowsPerMatch; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRowsPerMatch) { + listener.enterRowsPerMatch(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRowsPerMatch) { + listener.exitRowsPerMatch(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRowsPerMatch) { + return visitor.visitRowsPerMatch(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EmptyMatchHandlingContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public EMPTY(): TerminalNode { + return this.getToken(trinoSqlParserParser.EMPTY, 0); + } + public MATCHES(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCHES, 0); + } + public OMIT(): TerminalNode { + return this.getToken(trinoSqlParserParser.OMIT, 0); + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public UNMATCHED(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNMATCHED, 0); + } + public ROWS(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROWS, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_emptyMatchHandling; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterEmptyMatchHandling) { + listener.enterEmptyMatchHandling(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitEmptyMatchHandling) { + listener.exitEmptyMatchHandling(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitEmptyMatchHandling) { + return visitor.visitEmptyMatchHandling(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SkipToContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public NEXT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NEXT, 0); + } + public ROW(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROW, 0); + } + public PAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.PAST, 0); + } + public LAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.LAST, 0); + } + public FIRST(): TerminalNode { + return this.getToken(trinoSqlParserParser.FIRST, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_skipTo; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSkipTo) { + listener.enterSkipTo(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSkipTo) { + listener.exitSkipTo(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSkipTo) { + return visitor.visitSkipTo(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SubsetDefinitionContext extends ParserRuleContext { + public _name!: IdentifierContext; + public _identifier!: IdentifierContext; + public _union: IdentifierContext[] = []; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public EQ(): TerminalNode { + return this.getToken(trinoSqlParserParser.EQ, 0); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_subsetDefinition; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSubsetDefinition) { + listener.enterSubsetDefinition(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSubsetDefinition) { + listener.exitSubsetDefinition(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSubsetDefinition) { + return visitor.visitSubsetDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class VariableDefinitionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_variableDefinition; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterVariableDefinition) { + listener.enterVariableDefinition(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitVariableDefinition) { + listener.exitVariableDefinition(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitVariableDefinition) { + return visitor.visitVariableDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AliasedRelationContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public relationPrimary(): RelationPrimaryContext { + return this.getTypedRuleContext(RelationPrimaryContext, 0) as RelationPrimaryContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public columnAliases(): ColumnAliasesContext { + return this.getTypedRuleContext(ColumnAliasesContext, 0) as ColumnAliasesContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_aliasedRelation; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterAliasedRelation) { + listener.enterAliasedRelation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitAliasedRelation) { + listener.exitAliasedRelation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitAliasedRelation) { + return visitor.visitAliasedRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ColumnAliasesContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_columnAliases; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterColumnAliases) { + listener.enterColumnAliases(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitColumnAliases) { + listener.exitColumnAliases(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitColumnAliases) { + return visitor.visitColumnAliases(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelationPrimaryContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_relationPrimary; + } + public copyFrom(ctx: RelationPrimaryContext): void { + super.copyFrom(ctx); + } +} +export class SubqueryRelationContext extends RelationPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: RelationPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSubqueryRelation) { + listener.enterSubqueryRelation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSubqueryRelation) { + listener.exitSubqueryRelation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSubqueryRelation) { + return visitor.visitSubqueryRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ParenthesizedRelationContext extends RelationPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: RelationPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public relation(): RelationContext { + return this.getTypedRuleContext(RelationContext, 0) as RelationContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterParenthesizedRelation) { + listener.enterParenthesizedRelation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitParenthesizedRelation) { + listener.exitParenthesizedRelation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitParenthesizedRelation) { + return visitor.visitParenthesizedRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnnestContext extends RelationPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: RelationPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public UNNEST(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNNEST, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public ORDINALITY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ORDINALITY, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUnnest) { + listener.enterUnnest(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUnnest) { + listener.exitUnnest(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUnnest) { + return visitor.visitUnnest(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LateralContext extends RelationPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: RelationPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public LATERAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LATERAL, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLateral) { + listener.enterLateral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLateral) { + listener.exitLateral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLateral) { + return visitor.visitLateral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableNameContext extends RelationPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: RelationPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTableName) { + listener.enterTableName(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTableName) { + listener.exitTableName(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTableName) { + return visitor.visitTableName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public booleanExpression(): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_expression; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExpression) { + listener.enterExpression(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExpression) { + listener.exitExpression(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExpression) { + return visitor.visitExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanExpressionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_booleanExpression; + } + public copyFrom(ctx: BooleanExpressionContext): void { + super.copyFrom(ctx); + } +} +export class LogicalNotContext extends BooleanExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: BooleanExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public booleanExpression(): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLogicalNot) { + listener.enterLogicalNot(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLogicalNot) { + listener.exitLogicalNot(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLogicalNot) { + return visitor.visitLogicalNot(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PredicatedContext extends BooleanExpressionContext { + public _valueExpression!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: BooleanExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public predicate(): PredicateContext { + return this.getTypedRuleContext(PredicateContext, 0) as PredicateContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPredicated) { + listener.enterPredicated(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPredicated) { + listener.exitPredicated(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPredicated) { + return visitor.visitPredicated(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LogicalBinaryContext extends BooleanExpressionContext { + public _left!: BooleanExpressionContext; + public _operator!: Token; + public _right!: BooleanExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: BooleanExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public booleanExpression_list(): BooleanExpressionContext[] { + return this.getTypedRuleContexts(BooleanExpressionContext) as BooleanExpressionContext[]; + } + public booleanExpression(i: number): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, i) as BooleanExpressionContext; + } + public AND(): TerminalNode { + return this.getToken(trinoSqlParserParser.AND, 0); + } + public OR(): TerminalNode { + return this.getToken(trinoSqlParserParser.OR, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLogicalBinary) { + listener.enterLogicalBinary(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLogicalBinary) { + listener.exitLogicalBinary(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLogicalBinary) { + return visitor.visitLogicalBinary(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PredicateContext extends ParserRuleContext { + public value: ParserRuleContext; + constructor(parser: trinoSqlParserParser, parent: ParserRuleContext, invokingState: number, value: ParserRuleContext) { + super(parent, invokingState); + this.parser = parser; + this.value = value; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_predicate; + } + public copyFrom(ctx: PredicateContext): void { + super.copyFrom(ctx); + this.value = ctx.value; + } +} +export class ComparisonContext extends PredicateContext { + public _right!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public comparisonOperator(): ComparisonOperatorContext { + return this.getTypedRuleContext(ComparisonOperatorContext, 0) as ComparisonOperatorContext; + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterComparison) { + listener.enterComparison(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitComparison) { + listener.exitComparison(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitComparison) { + return visitor.visitComparison(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LikeContext extends PredicateContext { + public _pattern!: ValueExpressionContext; + public _escape!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public LIKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIKE, 0); + } + public valueExpression_list(): ValueExpressionContext[] { + return this.getTypedRuleContexts(ValueExpressionContext) as ValueExpressionContext[]; + } + public valueExpression(i: number): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, i) as ValueExpressionContext; + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public ESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ESCAPE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLike) { + listener.enterLike(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLike) { + listener.exitLike(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLike) { + return visitor.visitLike(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InSubqueryContext extends PredicateContext { + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterInSubquery) { + listener.enterInSubquery(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitInSubquery) { + listener.exitInSubquery(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitInSubquery) { + return visitor.visitInSubquery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DistinctFromContext extends PredicateContext { + public _right!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public IS(): TerminalNode { + return this.getToken(trinoSqlParserParser.IS, 0); + } + public DISTINCT(): TerminalNode { + return this.getToken(trinoSqlParserParser.DISTINCT, 0); + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDistinctFrom) { + listener.enterDistinctFrom(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDistinctFrom) { + listener.exitDistinctFrom(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDistinctFrom) { + return visitor.visitDistinctFrom(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InListContext extends PredicateContext { + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterInList) { + listener.enterInList(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitInList) { + listener.exitInList(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitInList) { + return visitor.visitInList(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NullPredicateContext extends PredicateContext { + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public IS(): TerminalNode { + return this.getToken(trinoSqlParserParser.IS, 0); + } + public NULL(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULL, 0); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNullPredicate) { + listener.enterNullPredicate(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNullPredicate) { + listener.exitNullPredicate(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNullPredicate) { + return visitor.visitNullPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BetweenContext extends PredicateContext { + public _lower!: ValueExpressionContext; + public _upper!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public BETWEEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.BETWEEN, 0); + } + public AND(): TerminalNode { + return this.getToken(trinoSqlParserParser.AND, 0); + } + public valueExpression_list(): ValueExpressionContext[] { + return this.getTypedRuleContexts(ValueExpressionContext) as ValueExpressionContext[]; + } + public valueExpression(i: number): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, i) as ValueExpressionContext; + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterBetween) { + listener.enterBetween(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitBetween) { + listener.exitBetween(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitBetween) { + return visitor.visitBetween(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class QuantifiedComparisonContext extends PredicateContext { + constructor(parser: trinoSqlParserParser, ctx: PredicateContext) { + super(parser, ctx.parentCtx, ctx.invokingState, ctx.value); + super.copyFrom(ctx); + } + public comparisonOperator(): ComparisonOperatorContext { + return this.getTypedRuleContext(ComparisonOperatorContext, 0) as ComparisonOperatorContext; + } + public comparisonQuantifier(): ComparisonQuantifierContext { + return this.getTypedRuleContext(ComparisonQuantifierContext, 0) as ComparisonQuantifierContext; + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQuantifiedComparison) { + listener.enterQuantifiedComparison(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQuantifiedComparison) { + listener.exitQuantifiedComparison(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQuantifiedComparison) { + return visitor.visitQuantifiedComparison(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ValueExpressionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_valueExpression; + } + public copyFrom(ctx: ValueExpressionContext): void { + super.copyFrom(ctx); + } +} +export class ValueExpressionDefaultContext extends ValueExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: ValueExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public primaryExpression(): PrimaryExpressionContext { + return this.getTypedRuleContext(PrimaryExpressionContext, 0) as PrimaryExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterValueExpressionDefault) { + listener.enterValueExpressionDefault(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitValueExpressionDefault) { + listener.exitValueExpressionDefault(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitValueExpressionDefault) { + return visitor.visitValueExpressionDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ConcatenationContext extends ValueExpressionContext { + public _left!: ValueExpressionContext; + public _right!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: ValueExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CONCAT(): TerminalNode { + return this.getToken(trinoSqlParserParser.CONCAT, 0); + } + public valueExpression_list(): ValueExpressionContext[] { + return this.getTypedRuleContexts(ValueExpressionContext) as ValueExpressionContext[]; + } + public valueExpression(i: number): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, i) as ValueExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterConcatenation) { + listener.enterConcatenation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitConcatenation) { + listener.exitConcatenation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitConcatenation) { + return visitor.visitConcatenation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArithmeticBinaryContext extends ValueExpressionContext { + public _left!: ValueExpressionContext; + public _operator!: Token; + public _right!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: ValueExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression_list(): ValueExpressionContext[] { + return this.getTypedRuleContexts(ValueExpressionContext) as ValueExpressionContext[]; + } + public valueExpression(i: number): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, i) as ValueExpressionContext; + } + public ASTERISK(): TerminalNode { + return this.getToken(trinoSqlParserParser.ASTERISK, 0); + } + public SLASH(): TerminalNode { + return this.getToken(trinoSqlParserParser.SLASH, 0); + } + public PERCENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.PERCENT, 0); + } + public PLUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.PLUS, 0); + } + public MINUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterArithmeticBinary) { + listener.enterArithmeticBinary(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitArithmeticBinary) { + listener.exitArithmeticBinary(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitArithmeticBinary) { + return visitor.visitArithmeticBinary(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArithmeticUnaryContext extends ValueExpressionContext { + public _operator!: Token; + constructor(parser: trinoSqlParserParser, ctx: ValueExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public MINUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUS, 0); + } + public PLUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.PLUS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterArithmeticUnary) { + listener.enterArithmeticUnary(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitArithmeticUnary) { + listener.exitArithmeticUnary(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitArithmeticUnary) { + return visitor.visitArithmeticUnary(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AtTimeZoneContext extends ValueExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: ValueExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public AT(): TerminalNode { + return this.getToken(trinoSqlParserParser.AT, 0); + } + public timeZoneSpecifier(): TimeZoneSpecifierContext { + return this.getTypedRuleContext(TimeZoneSpecifierContext, 0) as TimeZoneSpecifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterAtTimeZone) { + listener.enterAtTimeZone(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitAtTimeZone) { + listener.exitAtTimeZone(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitAtTimeZone) { + return visitor.visitAtTimeZone(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PrimaryExpressionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_primaryExpression; + } + public copyFrom(ctx: PrimaryExpressionContext): void { + super.copyFrom(ctx); + } +} +export class DereferenceContext extends PrimaryExpressionContext { + public _base!: PrimaryExpressionContext; + public _fieldName!: IdentifierContext; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public primaryExpression(): PrimaryExpressionContext { + return this.getTypedRuleContext(PrimaryExpressionContext, 0) as PrimaryExpressionContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDereference) { + listener.enterDereference(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDereference) { + listener.exitDereference(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDereference) { + return visitor.visitDereference(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TypeConstructorContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public DOUBLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DOUBLE, 0); + } + public PRECISION(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRECISION, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTypeConstructor) { + listener.enterTypeConstructor(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTypeConstructor) { + listener.exitTypeConstructor(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTypeConstructor) { + return visitor.visitTypeConstructor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SpecialDateTimeFunctionContext extends PrimaryExpressionContext { + public _name!: Token; + public _precision!: Token; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_DATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_DATE, 0); + } + public CURRENT_TIME(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_TIME, 0); + } + public INTEGER_VALUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTEGER_VALUE, 0); + } + public CURRENT_TIMESTAMP(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_TIMESTAMP, 0); + } + public LOCALTIME(): TerminalNode { + return this.getToken(trinoSqlParserParser.LOCALTIME, 0); + } + public LOCALTIMESTAMP(): TerminalNode { + return this.getToken(trinoSqlParserParser.LOCALTIMESTAMP, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSpecialDateTimeFunction) { + listener.enterSpecialDateTimeFunction(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSpecialDateTimeFunction) { + listener.exitSpecialDateTimeFunction(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSpecialDateTimeFunction) { + return visitor.visitSpecialDateTimeFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SubstringContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SUBSTRING(): TerminalNode { + return this.getToken(trinoSqlParserParser.SUBSTRING, 0); + } + public valueExpression_list(): ValueExpressionContext[] { + return this.getTypedRuleContexts(ValueExpressionContext) as ValueExpressionContext[]; + } + public valueExpression(i: number): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, i) as ValueExpressionContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public FOR(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOR, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSubstring) { + listener.enterSubstring(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSubstring) { + listener.exitSubstring(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSubstring) { + return visitor.visitSubstring(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CastContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.CAST, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public AS(): TerminalNode { + return this.getToken(trinoSqlParserParser.AS, 0); + } + public type_(): TypeContext { + return this.getTypedRuleContext(TypeContext, 0) as TypeContext; + } + public TRY_CAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.TRY_CAST, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCast) { + listener.enterCast(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCast) { + listener.exitCast(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCast) { + return visitor.visitCast(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LambdaContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLambda) { + listener.enterLambda(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLambda) { + listener.exitLambda(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLambda) { + return visitor.visitLambda(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ParenthesizedExpressionContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterParenthesizedExpression) { + listener.enterParenthesizedExpression(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitParenthesizedExpression) { + listener.exitParenthesizedExpression(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitParenthesizedExpression) { + return visitor.visitParenthesizedExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ParameterContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public QUESTION_MARK(): TerminalNode { + return this.getToken(trinoSqlParserParser.QUESTION_MARK, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterParameter) { + listener.enterParameter(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitParameter) { + listener.exitParameter(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitParameter) { + return visitor.visitParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NormalizeContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public NORMALIZE(): TerminalNode { + return this.getToken(trinoSqlParserParser.NORMALIZE, 0); + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public normalForm(): NormalFormContext { + return this.getTypedRuleContext(NormalFormContext, 0) as NormalFormContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNormalize) { + listener.enterNormalize(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNormalize) { + listener.exitNormalize(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNormalize) { + return visitor.visitNormalize(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IntervalLiteralContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public interval(): IntervalContext { + return this.getTypedRuleContext(IntervalContext, 0) as IntervalContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterIntervalLiteral) { + listener.enterIntervalLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitIntervalLiteral) { + listener.exitIntervalLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitIntervalLiteral) { + return visitor.visitIntervalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NumericLiteralContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public number_(): NumberContext { + return this.getTypedRuleContext(NumberContext, 0) as NumberContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNumericLiteral) { + listener.enterNumericLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNumericLiteral) { + listener.exitNumericLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNumericLiteral) { + return visitor.visitNumericLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BooleanLiteralContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public booleanValue(): BooleanValueContext { + return this.getTypedRuleContext(BooleanValueContext, 0) as BooleanValueContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterBooleanLiteral) { + listener.enterBooleanLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitBooleanLiteral) { + listener.exitBooleanLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitBooleanLiteral) { + return visitor.visitBooleanLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SimpleCaseContext extends PrimaryExpressionContext { + public _operand!: ExpressionContext; + public _elseExpression!: ExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CASE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CASE, 0); + } + public END(): TerminalNode { + return this.getToken(trinoSqlParserParser.END, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public whenClause_list(): WhenClauseContext[] { + return this.getTypedRuleContexts(WhenClauseContext) as WhenClauseContext[]; + } + public whenClause(i: number): WhenClauseContext { + return this.getTypedRuleContext(WhenClauseContext, i) as WhenClauseContext; + } + public ELSE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ELSE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSimpleCase) { + listener.enterSimpleCase(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSimpleCase) { + listener.exitSimpleCase(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSimpleCase) { + return visitor.visitSimpleCase(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ColumnReferenceContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterColumnReference) { + listener.enterColumnReference(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitColumnReference) { + listener.exitColumnReference(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitColumnReference) { + return visitor.visitColumnReference(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NullLiteralContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public NULL(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULL, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNullLiteral) { + listener.enterNullLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNullLiteral) { + listener.exitNullLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNullLiteral) { + return visitor.visitNullLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RowConstructorContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public ROW(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROW, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRowConstructor) { + listener.enterRowConstructor(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRowConstructor) { + listener.exitRowConstructor(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRowConstructor) { + return visitor.visitRowConstructor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SubscriptContext extends PrimaryExpressionContext { + public _value!: PrimaryExpressionContext; + public _index!: ValueExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public primaryExpression(): PrimaryExpressionContext { + return this.getTypedRuleContext(PrimaryExpressionContext, 0) as PrimaryExpressionContext; + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSubscript) { + listener.enterSubscript(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSubscript) { + listener.exitSubscript(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSubscript) { + return visitor.visitSubscript(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentPathContext extends PrimaryExpressionContext { + public _name!: Token; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_PATH(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_PATH, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCurrentPath) { + listener.enterCurrentPath(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCurrentPath) { + listener.exitCurrentPath(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCurrentPath) { + return visitor.visitCurrentPath(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SubqueryExpressionContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSubqueryExpression) { + listener.enterSubqueryExpression(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSubqueryExpression) { + listener.exitSubqueryExpression(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSubqueryExpression) { + return visitor.visitSubqueryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BinaryLiteralContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public BINARY_LITERAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.BINARY_LITERAL, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterBinaryLiteral) { + listener.enterBinaryLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitBinaryLiteral) { + listener.exitBinaryLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitBinaryLiteral) { + return visitor.visitBinaryLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentUserContext extends PrimaryExpressionContext { + public _name!: Token; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_USER(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_USER, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCurrentUser) { + listener.enterCurrentUser(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCurrentUser) { + listener.exitCurrentUser(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCurrentUser) { + return visitor.visitCurrentUser(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MeasureContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public over(): OverContext { + return this.getTypedRuleContext(OverContext, 0) as OverContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterMeasure) { + listener.enterMeasure(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitMeasure) { + listener.exitMeasure(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitMeasure) { + return visitor.visitMeasure(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExtractContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public EXTRACT(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXTRACT, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public FROM(): TerminalNode { + return this.getToken(trinoSqlParserParser.FROM, 0); + } + public valueExpression(): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, 0) as ValueExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExtract) { + listener.enterExtract(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExtract) { + listener.exitExtract(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExtract) { + return visitor.visitExtract(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StringLiteralContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterStringLiteral) { + listener.enterStringLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitStringLiteral) { + listener.exitStringLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitStringLiteral) { + return visitor.visitStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArrayConstructorContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ARRAY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ARRAY, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterArrayConstructor) { + listener.enterArrayConstructor(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitArrayConstructor) { + listener.exitArrayConstructor(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitArrayConstructor) { + return visitor.visitArrayConstructor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class FunctionCallContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public qualifiedName(): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, 0) as QualifiedNameContext; + } + public ASTERISK(): TerminalNode { + return this.getToken(trinoSqlParserParser.ASTERISK, 0); + } + public filter(): FilterContext { + return this.getTypedRuleContext(FilterContext, 0) as FilterContext; + } + public over(): OverContext { + return this.getTypedRuleContext(OverContext, 0) as OverContext; + } + public processingMode(): ProcessingModeContext { + return this.getTypedRuleContext(ProcessingModeContext, 0) as ProcessingModeContext; + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public ORDER(): TerminalNode { + return this.getToken(trinoSqlParserParser.ORDER, 0); + } + public BY(): TerminalNode { + return this.getToken(trinoSqlParserParser.BY, 0); + } + public sortItem_list(): SortItemContext[] { + return this.getTypedRuleContexts(SortItemContext) as SortItemContext[]; + } + public sortItem(i: number): SortItemContext { + return this.getTypedRuleContext(SortItemContext, i) as SortItemContext; + } + public setQuantifier(): SetQuantifierContext { + return this.getTypedRuleContext(SetQuantifierContext, 0) as SetQuantifierContext; + } + public nullTreatment(): NullTreatmentContext { + return this.getTypedRuleContext(NullTreatmentContext, 0) as NullTreatmentContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterFunctionCall) { + listener.enterFunctionCall(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitFunctionCall) { + listener.exitFunctionCall(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitFunctionCall) { + return visitor.visitFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentSchemaContext extends PrimaryExpressionContext { + public _name!: Token; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_SCHEMA, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCurrentSchema) { + listener.enterCurrentSchema(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCurrentSchema) { + listener.exitCurrentSchema(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCurrentSchema) { + return visitor.visitCurrentSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExistsContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public EXISTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXISTS, 0); + } + public query(): QueryContext { + return this.getTypedRuleContext(QueryContext, 0) as QueryContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExists) { + listener.enterExists(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExists) { + listener.exitExists(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExists) { + return visitor.visitExists(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PositionContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public POSITION(): TerminalNode { + return this.getToken(trinoSqlParserParser.POSITION, 0); + } + public valueExpression_list(): ValueExpressionContext[] { + return this.getTypedRuleContexts(ValueExpressionContext) as ValueExpressionContext[]; + } + public valueExpression(i: number): ValueExpressionContext { + return this.getTypedRuleContext(ValueExpressionContext, i) as ValueExpressionContext; + } + public IN(): TerminalNode { + return this.getToken(trinoSqlParserParser.IN, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPosition) { + listener.enterPosition(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPosition) { + listener.exitPosition(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPosition) { + return visitor.visitPosition(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SearchedCaseContext extends PrimaryExpressionContext { + public _elseExpression!: ExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CASE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CASE, 0); + } + public END(): TerminalNode { + return this.getToken(trinoSqlParserParser.END, 0); + } + public whenClause_list(): WhenClauseContext[] { + return this.getTypedRuleContexts(WhenClauseContext) as WhenClauseContext[]; + } + public whenClause(i: number): WhenClauseContext { + return this.getTypedRuleContext(WhenClauseContext, i) as WhenClauseContext; + } + public ELSE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ELSE, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSearchedCase) { + listener.enterSearchedCase(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSearchedCase) { + listener.exitSearchedCase(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSearchedCase) { + return visitor.visitSearchedCase(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentCatalogContext extends PrimaryExpressionContext { + public _name!: Token; + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_CATALOG(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_CATALOG, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCurrentCatalog) { + listener.enterCurrentCatalog(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCurrentCatalog) { + listener.exitCurrentCatalog(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCurrentCatalog) { + return visitor.visitCurrentCatalog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GroupingOperationContext extends PrimaryExpressionContext { + constructor(parser: trinoSqlParserParser, ctx: PrimaryExpressionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public GROUPING(): TerminalNode { + return this.getToken(trinoSqlParserParser.GROUPING, 0); + } + public qualifiedName_list(): QualifiedNameContext[] { + return this.getTypedRuleContexts(QualifiedNameContext) as QualifiedNameContext[]; + } + public qualifiedName(i: number): QualifiedNameContext { + return this.getTypedRuleContext(QualifiedNameContext, i) as QualifiedNameContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterGroupingOperation) { + listener.enterGroupingOperation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitGroupingOperation) { + listener.exitGroupingOperation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitGroupingOperation) { + return visitor.visitGroupingOperation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ProcessingModeContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public RUNNING(): TerminalNode { + return this.getToken(trinoSqlParserParser.RUNNING, 0); + } + public FINAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.FINAL, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_processingMode; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterProcessingMode) { + listener.enterProcessingMode(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitProcessingMode) { + listener.exitProcessingMode(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitProcessingMode) { + return visitor.visitProcessingMode(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NullTreatmentContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public IGNORE(): TerminalNode { + return this.getToken(trinoSqlParserParser.IGNORE, 0); + } + public NULLS(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULLS, 0); + } + public RESPECT(): TerminalNode { + return this.getToken(trinoSqlParserParser.RESPECT, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_nullTreatment; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNullTreatment) { + listener.enterNullTreatment(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNullTreatment) { + listener.exitNullTreatment(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNullTreatment) { + return visitor.visitNullTreatment(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StringContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_string; + } + public copyFrom(ctx: StringContext): void { + super.copyFrom(ctx); + } +} +export class UnicodeStringLiteralContext extends StringContext { + constructor(parser: trinoSqlParserParser, ctx: StringContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public UNICODE_STRING(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNICODE_STRING, 0); + } + public UESCAPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.UESCAPE, 0); + } + public STRING(): TerminalNode { + return this.getToken(trinoSqlParserParser.STRING, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUnicodeStringLiteral) { + listener.enterUnicodeStringLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUnicodeStringLiteral) { + listener.exitUnicodeStringLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUnicodeStringLiteral) { + return visitor.visitUnicodeStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BasicStringLiteralContext extends StringContext { + constructor(parser: trinoSqlParserParser, ctx: StringContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public STRING(): TerminalNode { + return this.getToken(trinoSqlParserParser.STRING, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterBasicStringLiteral) { + listener.enterBasicStringLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitBasicStringLiteral) { + listener.exitBasicStringLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitBasicStringLiteral) { + return visitor.visitBasicStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeZoneSpecifierContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_timeZoneSpecifier; + } + public copyFrom(ctx: TimeZoneSpecifierContext): void { + super.copyFrom(ctx); + } +} +export class TimeZoneIntervalContext extends TimeZoneSpecifierContext { + constructor(parser: trinoSqlParserParser, ctx: TimeZoneSpecifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public TIME(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIME, 0); + } + public ZONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ZONE, 0); + } + public interval(): IntervalContext { + return this.getTypedRuleContext(IntervalContext, 0) as IntervalContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTimeZoneInterval) { + listener.enterTimeZoneInterval(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTimeZoneInterval) { + listener.exitTimeZoneInterval(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTimeZoneInterval) { + return visitor.visitTimeZoneInterval(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TimeZoneStringContext extends TimeZoneSpecifierContext { + constructor(parser: trinoSqlParserParser, ctx: TimeZoneSpecifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public TIME(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIME, 0); + } + public ZONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ZONE, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTimeZoneString) { + listener.enterTimeZoneString(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTimeZoneString) { + listener.exitTimeZoneString(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTimeZoneString) { + return visitor.visitTimeZoneString(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComparisonOperatorContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public EQ(): TerminalNode { + return this.getToken(trinoSqlParserParser.EQ, 0); + } + public NEQ(): TerminalNode { + return this.getToken(trinoSqlParserParser.NEQ, 0); + } + public LT(): TerminalNode { + return this.getToken(trinoSqlParserParser.LT, 0); + } + public LTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.LTE, 0); + } + public GT(): TerminalNode { + return this.getToken(trinoSqlParserParser.GT, 0); + } + public GTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.GTE, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_comparisonOperator; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterComparisonOperator) { + listener.enterComparisonOperator(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitComparisonOperator) { + listener.exitComparisonOperator(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitComparisonOperator) { + return visitor.visitComparisonOperator(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComparisonQuantifierContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public SOME(): TerminalNode { + return this.getToken(trinoSqlParserParser.SOME, 0); + } + public ANY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ANY, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_comparisonQuantifier; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterComparisonQuantifier) { + listener.enterComparisonQuantifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitComparisonQuantifier) { + listener.exitComparisonQuantifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitComparisonQuantifier) { + return visitor.visitComparisonQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanValueContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public TRUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TRUE, 0); + } + public FALSE(): TerminalNode { + return this.getToken(trinoSqlParserParser.FALSE, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_booleanValue; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterBooleanValue) { + listener.enterBooleanValue(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitBooleanValue) { + listener.exitBooleanValue(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitBooleanValue) { + return visitor.visitBooleanValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalContext extends ParserRuleContext { + public _sign!: Token; + public _from_!: IntervalFieldContext; + public _to!: IntervalFieldContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public INTERVAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTERVAL, 0); + } + public string_(): StringContext { + return this.getTypedRuleContext(StringContext, 0) as StringContext; + } + public intervalField_list(): IntervalFieldContext[] { + return this.getTypedRuleContexts(IntervalFieldContext) as IntervalFieldContext[]; + } + public intervalField(i: number): IntervalFieldContext { + return this.getTypedRuleContext(IntervalFieldContext, i) as IntervalFieldContext; + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public PLUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.PLUS, 0); + } + public MINUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUS, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_interval; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterInterval) { + listener.enterInterval(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitInterval) { + listener.exitInterval(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitInterval) { + return visitor.visitInterval(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalFieldContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public YEAR(): TerminalNode { + return this.getToken(trinoSqlParserParser.YEAR, 0); + } + public MONTH(): TerminalNode { + return this.getToken(trinoSqlParserParser.MONTH, 0); + } + public DAY(): TerminalNode { + return this.getToken(trinoSqlParserParser.DAY, 0); + } + public HOUR(): TerminalNode { + return this.getToken(trinoSqlParserParser.HOUR, 0); + } + public MINUTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUTE, 0); + } + public SECOND(): TerminalNode { + return this.getToken(trinoSqlParserParser.SECOND, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_intervalField; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterIntervalField) { + listener.enterIntervalField(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitIntervalField) { + listener.exitIntervalField(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitIntervalField) { + return visitor.visitIntervalField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NormalFormContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public NFD(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFD, 0); + } + public NFC(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFC, 0); + } + public NFKD(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFKD, 0); + } + public NFKC(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFKC, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_normalForm; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNormalForm) { + listener.enterNormalForm(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNormalForm) { + listener.exitNormalForm(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNormalForm) { + return visitor.visitNormalForm(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TypeContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_type; + } + public copyFrom(ctx: TypeContext): void { + super.copyFrom(ctx); + } +} +export class RowTypeContext extends TypeContext { + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ROW(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROW, 0); + } + public rowField_list(): RowFieldContext[] { + return this.getTypedRuleContexts(RowFieldContext) as RowFieldContext[]; + } + public rowField(i: number): RowFieldContext { + return this.getTypedRuleContext(RowFieldContext, i) as RowFieldContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRowType) { + listener.enterRowType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRowType) { + listener.exitRowType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRowType) { + return visitor.visitRowType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IntervalTypeContext extends TypeContext { + public _from_!: IntervalFieldContext; + public _to!: IntervalFieldContext; + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public INTERVAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTERVAL, 0); + } + public intervalField_list(): IntervalFieldContext[] { + return this.getTypedRuleContexts(IntervalFieldContext) as IntervalFieldContext[]; + } + public intervalField(i: number): IntervalFieldContext { + return this.getTypedRuleContext(IntervalFieldContext, i) as IntervalFieldContext; + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterIntervalType) { + listener.enterIntervalType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitIntervalType) { + listener.exitIntervalType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitIntervalType) { + return visitor.visitIntervalType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArrayTypeContext extends TypeContext { + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public type_(): TypeContext { + return this.getTypedRuleContext(TypeContext, 0) as TypeContext; + } + public ARRAY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ARRAY, 0); + } + public INTEGER_VALUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTEGER_VALUE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterArrayType) { + listener.enterArrayType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitArrayType) { + listener.exitArrayType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitArrayType) { + return visitor.visitArrayType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DoublePrecisionTypeContext extends TypeContext { + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DOUBLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DOUBLE, 0); + } + public PRECISION(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRECISION, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDoublePrecisionType) { + listener.enterDoublePrecisionType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDoublePrecisionType) { + listener.exitDoublePrecisionType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDoublePrecisionType) { + return visitor.visitDoublePrecisionType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LegacyArrayTypeContext extends TypeContext { + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ARRAY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ARRAY, 0); + } + public LT(): TerminalNode { + return this.getToken(trinoSqlParserParser.LT, 0); + } + public type_(): TypeContext { + return this.getTypedRuleContext(TypeContext, 0) as TypeContext; + } + public GT(): TerminalNode { + return this.getToken(trinoSqlParserParser.GT, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLegacyArrayType) { + listener.enterLegacyArrayType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLegacyArrayType) { + listener.exitLegacyArrayType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLegacyArrayType) { + return visitor.visitLegacyArrayType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GenericTypeContext extends TypeContext { + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public typeParameter_list(): TypeParameterContext[] { + return this.getTypedRuleContexts(TypeParameterContext) as TypeParameterContext[]; + } + public typeParameter(i: number): TypeParameterContext { + return this.getTypedRuleContext(TypeParameterContext, i) as TypeParameterContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterGenericType) { + listener.enterGenericType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitGenericType) { + listener.exitGenericType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitGenericType) { + return visitor.visitGenericType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DateTimeTypeContext extends TypeContext { + public _base!: Token; + public _precision!: TypeParameterContext; + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public TIMESTAMP(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIMESTAMP, 0); + } + public WITHOUT(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITHOUT, 0); + } + public TIME_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.TIME); + } + public TIME(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.TIME, i); + } + public ZONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ZONE, 0); + } + public typeParameter(): TypeParameterContext { + return this.getTypedRuleContext(TypeParameterContext, 0) as TypeParameterContext; + } + public WITH(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITH, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDateTimeType) { + listener.enterDateTimeType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDateTimeType) { + listener.exitDateTimeType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDateTimeType) { + return visitor.visitDateTimeType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LegacyMapTypeContext extends TypeContext { + public _keyType!: TypeContext; + public _valueType!: TypeContext; + constructor(parser: trinoSqlParserParser, ctx: TypeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public MAP(): TerminalNode { + return this.getToken(trinoSqlParserParser.MAP, 0); + } + public LT(): TerminalNode { + return this.getToken(trinoSqlParserParser.LT, 0); + } + public GT(): TerminalNode { + return this.getToken(trinoSqlParserParser.GT, 0); + } + public type__list(): TypeContext[] { + return this.getTypedRuleContexts(TypeContext) as TypeContext[]; + } + public type_(i: number): TypeContext { + return this.getTypedRuleContext(TypeContext, i) as TypeContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterLegacyMapType) { + listener.enterLegacyMapType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitLegacyMapType) { + listener.exitLegacyMapType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitLegacyMapType) { + return visitor.visitLegacyMapType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowFieldContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public type_(): TypeContext { + return this.getTypedRuleContext(TypeContext, 0) as TypeContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_rowField; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRowField) { + listener.enterRowField(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRowField) { + listener.exitRowField(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRowField) { + return visitor.visitRowField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TypeParameterContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public INTEGER_VALUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTEGER_VALUE, 0); + } + public type_(): TypeContext { + return this.getTypedRuleContext(TypeContext, 0) as TypeContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_typeParameter; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTypeParameter) { + listener.enterTypeParameter(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTypeParameter) { + listener.exitTypeParameter(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTypeParameter) { + return visitor.visitTypeParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WhenClauseContext extends ParserRuleContext { + public _condition!: ExpressionContext; + public _result!: ExpressionContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public WHEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHEN, 0); + } + public THEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.THEN, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_whenClause; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterWhenClause) { + listener.enterWhenClause(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitWhenClause) { + listener.exitWhenClause(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitWhenClause) { + return visitor.visitWhenClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FilterContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public FILTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.FILTER, 0); + } + public WHERE(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHERE, 0); + } + public booleanExpression(): BooleanExpressionContext { + return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_filter; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterFilter) { + listener.enterFilter(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitFilter) { + listener.exitFilter(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitFilter) { + return visitor.visitFilter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MergeCaseContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_mergeCase; + } + public copyFrom(ctx: MergeCaseContext): void { + super.copyFrom(ctx); + } +} +export class MergeInsertContext extends MergeCaseContext { + public _condition!: ExpressionContext; + public _identifier!: IdentifierContext; + public _targets: IdentifierContext[] = []; + public _expression!: ExpressionContext; + public _values: ExpressionContext[] = []; + constructor(parser: trinoSqlParserParser, ctx: MergeCaseContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public WHEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHEN, 0); + } + public NOT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NOT, 0); + } + public MATCHED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCHED, 0); + } + public THEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.THEN, 0); + } + public INSERT(): TerminalNode { + return this.getToken(trinoSqlParserParser.INSERT, 0); + } + public VALUES(): TerminalNode { + return this.getToken(trinoSqlParserParser.VALUES, 0); + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public AND(): TerminalNode { + return this.getToken(trinoSqlParserParser.AND, 0); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterMergeInsert) { + listener.enterMergeInsert(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitMergeInsert) { + listener.exitMergeInsert(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitMergeInsert) { + return visitor.visitMergeInsert(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MergeUpdateContext extends MergeCaseContext { + public _condition!: ExpressionContext; + public _identifier!: IdentifierContext; + public _targets: IdentifierContext[] = []; + public _expression!: ExpressionContext; + public _values: ExpressionContext[] = []; + constructor(parser: trinoSqlParserParser, ctx: MergeCaseContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public WHEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHEN, 0); + } + public MATCHED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCHED, 0); + } + public THEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.THEN, 0); + } + public UPDATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.UPDATE, 0); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public EQ_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.EQ); + } + public EQ(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.EQ, i); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public expression_list(): ExpressionContext[] { + return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; + } + public expression(i: number): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; + } + public AND(): TerminalNode { + return this.getToken(trinoSqlParserParser.AND, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterMergeUpdate) { + listener.enterMergeUpdate(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitMergeUpdate) { + listener.exitMergeUpdate(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitMergeUpdate) { + return visitor.visitMergeUpdate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MergeDeleteContext extends MergeCaseContext { + public _condition!: ExpressionContext; + constructor(parser: trinoSqlParserParser, ctx: MergeCaseContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public WHEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.WHEN, 0); + } + public MATCHED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCHED, 0); + } + public THEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.THEN, 0); + } + public DELETE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DELETE, 0); + } + public AND(): TerminalNode { + return this.getToken(trinoSqlParserParser.AND, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterMergeDelete) { + listener.enterMergeDelete(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitMergeDelete) { + listener.exitMergeDelete(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitMergeDelete) { + return visitor.visitMergeDelete(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OverContext extends ParserRuleContext { + public _windowName!: IdentifierContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public OVER(): TerminalNode { + return this.getToken(trinoSqlParserParser.OVER, 0); + } + public windowSpecification(): WindowSpecificationContext { + return this.getTypedRuleContext(WindowSpecificationContext, 0) as WindowSpecificationContext; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_over; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterOver) { + listener.enterOver(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitOver) { + listener.exitOver(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitOver) { + return visitor.visitOver(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowFrameContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public frameExtent(): FrameExtentContext { + return this.getTypedRuleContext(FrameExtentContext, 0) as FrameExtentContext; + } + public MEASURES(): TerminalNode { + return this.getToken(trinoSqlParserParser.MEASURES, 0); + } + public measureDefinition_list(): MeasureDefinitionContext[] { + return this.getTypedRuleContexts(MeasureDefinitionContext) as MeasureDefinitionContext[]; + } + public measureDefinition(i: number): MeasureDefinitionContext { + return this.getTypedRuleContext(MeasureDefinitionContext, i) as MeasureDefinitionContext; + } + public AFTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.AFTER, 0); + } + public MATCH(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCH, 0); + } + public skipTo(): SkipToContext { + return this.getTypedRuleContext(SkipToContext, 0) as SkipToContext; + } + public PATTERN(): TerminalNode { + return this.getToken(trinoSqlParserParser.PATTERN, 0); + } + public rowPattern(): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, 0) as RowPatternContext; + } + public SUBSET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SUBSET, 0); + } + public subsetDefinition_list(): SubsetDefinitionContext[] { + return this.getTypedRuleContexts(SubsetDefinitionContext) as SubsetDefinitionContext[]; + } + public subsetDefinition(i: number): SubsetDefinitionContext { + return this.getTypedRuleContext(SubsetDefinitionContext, i) as SubsetDefinitionContext; + } + public DEFINE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEFINE, 0); + } + public variableDefinition_list(): VariableDefinitionContext[] { + return this.getTypedRuleContexts(VariableDefinitionContext) as VariableDefinitionContext[]; + } + public variableDefinition(i: number): VariableDefinitionContext { + return this.getTypedRuleContext(VariableDefinitionContext, i) as VariableDefinitionContext; + } + public INITIAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.INITIAL, 0); + } + public SEEK(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEEK, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_windowFrame; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterWindowFrame) { + listener.enterWindowFrame(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitWindowFrame) { + listener.exitWindowFrame(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitWindowFrame) { + return visitor.visitWindowFrame(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FrameExtentContext extends ParserRuleContext { + public _frameType!: Token; + public _start!: FrameBoundContext; + public _end!: FrameBoundContext; + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public RANGE(): TerminalNode { + return this.getToken(trinoSqlParserParser.RANGE, 0); + } + public frameBound_list(): FrameBoundContext[] { + return this.getTypedRuleContexts(FrameBoundContext) as FrameBoundContext[]; + } + public frameBound(i: number): FrameBoundContext { + return this.getTypedRuleContext(FrameBoundContext, i) as FrameBoundContext; + } + public ROWS(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROWS, 0); + } + public GROUPS(): TerminalNode { + return this.getToken(trinoSqlParserParser.GROUPS, 0); + } + public BETWEEN(): TerminalNode { + return this.getToken(trinoSqlParserParser.BETWEEN, 0); + } + public AND(): TerminalNode { + return this.getToken(trinoSqlParserParser.AND, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_frameExtent; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterFrameExtent) { + listener.enterFrameExtent(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitFrameExtent) { + listener.exitFrameExtent(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitFrameExtent) { + return visitor.visitFrameExtent(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FrameBoundContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_frameBound; + } + public copyFrom(ctx: FrameBoundContext): void { + super.copyFrom(ctx); + } +} +export class BoundedFrameContext extends FrameBoundContext { + public _boundType!: Token; + constructor(parser: trinoSqlParserParser, ctx: FrameBoundContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public PRECEDING(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRECEDING, 0); + } + public FOLLOWING(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOLLOWING, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterBoundedFrame) { + listener.enterBoundedFrame(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitBoundedFrame) { + listener.exitBoundedFrame(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitBoundedFrame) { + return visitor.visitBoundedFrame(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnboundedFrameContext extends FrameBoundContext { + public _boundType!: Token; + constructor(parser: trinoSqlParserParser, ctx: FrameBoundContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public UNBOUNDED(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNBOUNDED, 0); + } + public PRECEDING(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRECEDING, 0); + } + public FOLLOWING(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOLLOWING, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUnboundedFrame) { + listener.enterUnboundedFrame(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUnboundedFrame) { + listener.exitUnboundedFrame(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUnboundedFrame) { + return visitor.visitUnboundedFrame(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentRowBoundContext extends FrameBoundContext { + constructor(parser: trinoSqlParserParser, ctx: FrameBoundContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT, 0); + } + public ROW(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROW, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCurrentRowBound) { + listener.enterCurrentRowBound(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCurrentRowBound) { + listener.exitCurrentRowBound(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCurrentRowBound) { + return visitor.visitCurrentRowBound(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowPatternContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_rowPattern; + } + public copyFrom(ctx: RowPatternContext): void { + super.copyFrom(ctx); + } +} +export class QuantifiedPrimaryContext extends RowPatternContext { + constructor(parser: trinoSqlParserParser, ctx: RowPatternContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public patternPrimary(): PatternPrimaryContext { + return this.getTypedRuleContext(PatternPrimaryContext, 0) as PatternPrimaryContext; + } + public patternQuantifier(): PatternQuantifierContext { + return this.getTypedRuleContext(PatternQuantifierContext, 0) as PatternQuantifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQuantifiedPrimary) { + listener.enterQuantifiedPrimary(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQuantifiedPrimary) { + listener.exitQuantifiedPrimary(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQuantifiedPrimary) { + return visitor.visitQuantifiedPrimary(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PatternConcatenationContext extends RowPatternContext { + constructor(parser: trinoSqlParserParser, ctx: RowPatternContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public rowPattern_list(): RowPatternContext[] { + return this.getTypedRuleContexts(RowPatternContext) as RowPatternContext[]; + } + public rowPattern(i: number): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, i) as RowPatternContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPatternConcatenation) { + listener.enterPatternConcatenation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPatternConcatenation) { + listener.exitPatternConcatenation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPatternConcatenation) { + return visitor.visitPatternConcatenation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PatternAlternationContext extends RowPatternContext { + constructor(parser: trinoSqlParserParser, ctx: RowPatternContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public rowPattern_list(): RowPatternContext[] { + return this.getTypedRuleContexts(RowPatternContext) as RowPatternContext[]; + } + public rowPattern(i: number): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, i) as RowPatternContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPatternAlternation) { + listener.enterPatternAlternation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPatternAlternation) { + listener.exitPatternAlternation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPatternAlternation) { + return visitor.visitPatternAlternation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternPrimaryContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_patternPrimary; + } + public copyFrom(ctx: PatternPrimaryContext): void { + super.copyFrom(ctx); + } +} +export class PatternPermutationContext extends PatternPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: PatternPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public PERMUTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.PERMUTE, 0); + } + public rowPattern_list(): RowPatternContext[] { + return this.getTypedRuleContexts(RowPatternContext) as RowPatternContext[]; + } + public rowPattern(i: number): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, i) as RowPatternContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPatternPermutation) { + listener.enterPatternPermutation(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPatternPermutation) { + listener.exitPatternPermutation(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPatternPermutation) { + return visitor.visitPatternPermutation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PartitionEndAnchorContext extends PatternPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: PatternPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPartitionEndAnchor) { + listener.enterPartitionEndAnchor(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPartitionEndAnchor) { + listener.exitPartitionEndAnchor(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPartitionEndAnchor) { + return visitor.visitPartitionEndAnchor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PatternVariableContext extends PatternPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: PatternPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPatternVariable) { + listener.enterPatternVariable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPatternVariable) { + listener.exitPatternVariable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPatternVariable) { + return visitor.visitPatternVariable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExcludedPatternContext extends PatternPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: PatternPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public rowPattern(): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, 0) as RowPatternContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExcludedPattern) { + listener.enterExcludedPattern(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExcludedPattern) { + listener.exitExcludedPattern(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExcludedPattern) { + return visitor.visitExcludedPattern(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PartitionStartAnchorContext extends PatternPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: PatternPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPartitionStartAnchor) { + listener.enterPartitionStartAnchor(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPartitionStartAnchor) { + listener.exitPartitionStartAnchor(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPartitionStartAnchor) { + return visitor.visitPartitionStartAnchor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class EmptyPatternContext extends PatternPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: PatternPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterEmptyPattern) { + listener.enterEmptyPattern(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitEmptyPattern) { + listener.exitEmptyPattern(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitEmptyPattern) { + return visitor.visitEmptyPattern(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GroupedPatternContext extends PatternPrimaryContext { + constructor(parser: trinoSqlParserParser, ctx: PatternPrimaryContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public rowPattern(): RowPatternContext { + return this.getTypedRuleContext(RowPatternContext, 0) as RowPatternContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterGroupedPattern) { + listener.enterGroupedPattern(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitGroupedPattern) { + listener.exitGroupedPattern(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitGroupedPattern) { + return visitor.visitGroupedPattern(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternQuantifierContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_patternQuantifier; + } + public copyFrom(ctx: PatternQuantifierContext): void { + super.copyFrom(ctx); + } +} +export class ZeroOrMoreQuantifierContext extends PatternQuantifierContext { + public _reluctant!: Token; + constructor(parser: trinoSqlParserParser, ctx: PatternQuantifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ASTERISK(): TerminalNode { + return this.getToken(trinoSqlParserParser.ASTERISK, 0); + } + public QUESTION_MARK(): TerminalNode { + return this.getToken(trinoSqlParserParser.QUESTION_MARK, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterZeroOrMoreQuantifier) { + listener.enterZeroOrMoreQuantifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitZeroOrMoreQuantifier) { + listener.exitZeroOrMoreQuantifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitZeroOrMoreQuantifier) { + return visitor.visitZeroOrMoreQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class OneOrMoreQuantifierContext extends PatternQuantifierContext { + public _reluctant!: Token; + constructor(parser: trinoSqlParserParser, ctx: PatternQuantifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public PLUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.PLUS, 0); + } + public QUESTION_MARK(): TerminalNode { + return this.getToken(trinoSqlParserParser.QUESTION_MARK, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterOneOrMoreQuantifier) { + listener.enterOneOrMoreQuantifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitOneOrMoreQuantifier) { + listener.exitOneOrMoreQuantifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitOneOrMoreQuantifier) { + return visitor.visitOneOrMoreQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ZeroOrOneQuantifierContext extends PatternQuantifierContext { + public _reluctant!: Token; + constructor(parser: trinoSqlParserParser, ctx: PatternQuantifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public QUESTION_MARK_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.QUESTION_MARK); + } + public QUESTION_MARK(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.QUESTION_MARK, i); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterZeroOrOneQuantifier) { + listener.enterZeroOrOneQuantifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitZeroOrOneQuantifier) { + listener.exitZeroOrOneQuantifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitZeroOrOneQuantifier) { + return visitor.visitZeroOrOneQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RangeQuantifierContext extends PatternQuantifierContext { + public _exactly!: Token; + public _reluctant!: Token; + public _atLeast!: Token; + public _atMost!: Token; + constructor(parser: trinoSqlParserParser, ctx: PatternQuantifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public INTEGER_VALUE_list(): TerminalNode[] { + return this.getTokens(trinoSqlParserParser.INTEGER_VALUE); + } + public INTEGER_VALUE(i: number): TerminalNode { + return this.getToken(trinoSqlParserParser.INTEGER_VALUE, i); + } + public QUESTION_MARK(): TerminalNode { + return this.getToken(trinoSqlParserParser.QUESTION_MARK, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRangeQuantifier) { + listener.enterRangeQuantifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRangeQuantifier) { + listener.exitRangeQuantifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRangeQuantifier) { + return visitor.visitRangeQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class UpdateAssignmentContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public EQ(): TerminalNode { + return this.getToken(trinoSqlParserParser.EQ, 0); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_updateAssignment; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUpdateAssignment) { + listener.enterUpdateAssignment(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUpdateAssignment) { + listener.exitUpdateAssignment(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUpdateAssignment) { + return visitor.visitUpdateAssignment(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExplainOptionContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_explainOption; + } + public copyFrom(ctx: ExplainOptionContext): void { + super.copyFrom(ctx); + } +} +export class ExplainFormatContext extends ExplainOptionContext { + public _value!: Token; + constructor(parser: trinoSqlParserParser, ctx: ExplainOptionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public FORMAT(): TerminalNode { + return this.getToken(trinoSqlParserParser.FORMAT, 0); + } + public TEXT(): TerminalNode { + return this.getToken(trinoSqlParserParser.TEXT, 0); + } + public GRAPHVIZ(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRAPHVIZ, 0); + } + public JSON(): TerminalNode { + return this.getToken(trinoSqlParserParser.JSON, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExplainFormat) { + listener.enterExplainFormat(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExplainFormat) { + listener.exitExplainFormat(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExplainFormat) { + return visitor.visitExplainFormat(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExplainTypeContext extends ExplainOptionContext { + public _value!: Token; + constructor(parser: trinoSqlParserParser, ctx: ExplainOptionContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public TYPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TYPE, 0); + } + public LOGICAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LOGICAL, 0); + } + public DISTRIBUTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.DISTRIBUTED, 0); + } + public VALIDATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.VALIDATE, 0); + } + public IO(): TerminalNode { + return this.getToken(trinoSqlParserParser.IO, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterExplainType) { + listener.enterExplainType(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitExplainType) { + listener.exitExplainType(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitExplainType) { + return visitor.visitExplainType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TransactionModeContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_transactionMode; + } + public copyFrom(ctx: TransactionModeContext): void { + super.copyFrom(ctx); + } +} +export class TransactionAccessModeContext extends TransactionModeContext { + public _accessMode!: Token; + constructor(parser: trinoSqlParserParser, ctx: TransactionModeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public READ(): TerminalNode { + return this.getToken(trinoSqlParserParser.READ, 0); + } + public ONLY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ONLY, 0); + } + public WRITE(): TerminalNode { + return this.getToken(trinoSqlParserParser.WRITE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterTransactionAccessMode) { + listener.enterTransactionAccessMode(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitTransactionAccessMode) { + listener.exitTransactionAccessMode(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitTransactionAccessMode) { + return visitor.visitTransactionAccessMode(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IsolationLevelContext extends TransactionModeContext { + constructor(parser: trinoSqlParserParser, ctx: TransactionModeContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ISOLATION(): TerminalNode { + return this.getToken(trinoSqlParserParser.ISOLATION, 0); + } + public LEVEL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LEVEL, 0); + } + public levelOfIsolation(): LevelOfIsolationContext { + return this.getTypedRuleContext(LevelOfIsolationContext, 0) as LevelOfIsolationContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterIsolationLevel) { + listener.enterIsolationLevel(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitIsolationLevel) { + listener.exitIsolationLevel(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitIsolationLevel) { + return visitor.visitIsolationLevel(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LevelOfIsolationContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_levelOfIsolation; + } + public copyFrom(ctx: LevelOfIsolationContext): void { + super.copyFrom(ctx); + } +} +export class ReadUncommittedContext extends LevelOfIsolationContext { + constructor(parser: trinoSqlParserParser, ctx: LevelOfIsolationContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public READ(): TerminalNode { + return this.getToken(trinoSqlParserParser.READ, 0); + } + public UNCOMMITTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNCOMMITTED, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterReadUncommitted) { + listener.enterReadUncommitted(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitReadUncommitted) { + listener.exitReadUncommitted(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitReadUncommitted) { + return visitor.visitReadUncommitted(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SerializableContext extends LevelOfIsolationContext { + constructor(parser: trinoSqlParserParser, ctx: LevelOfIsolationContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public SERIALIZABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.SERIALIZABLE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSerializable) { + listener.enterSerializable(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSerializable) { + listener.exitSerializable(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSerializable) { + return visitor.visitSerializable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReadCommittedContext extends LevelOfIsolationContext { + constructor(parser: trinoSqlParserParser, ctx: LevelOfIsolationContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public READ(): TerminalNode { + return this.getToken(trinoSqlParserParser.READ, 0); + } + public COMMITTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMITTED, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterReadCommitted) { + listener.enterReadCommitted(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitReadCommitted) { + listener.exitReadCommitted(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitReadCommitted) { + return visitor.visitReadCommitted(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RepeatableReadContext extends LevelOfIsolationContext { + constructor(parser: trinoSqlParserParser, ctx: LevelOfIsolationContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public REPEATABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REPEATABLE, 0); + } + public READ(): TerminalNode { + return this.getToken(trinoSqlParserParser.READ, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRepeatableRead) { + listener.enterRepeatableRead(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRepeatableRead) { + listener.exitRepeatableRead(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRepeatableRead) { + return visitor.visitRepeatableRead(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CallArgumentContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_callArgument; + } + public copyFrom(ctx: CallArgumentContext): void { + super.copyFrom(ctx); + } +} +export class PositionalArgumentContext extends CallArgumentContext { + constructor(parser: trinoSqlParserParser, ctx: CallArgumentContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPositionalArgument) { + listener.enterPositionalArgument(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPositionalArgument) { + listener.exitPositionalArgument(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPositionalArgument) { + return visitor.visitPositionalArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NamedArgumentContext extends CallArgumentContext { + constructor(parser: trinoSqlParserParser, ctx: CallArgumentContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public expression(): ExpressionContext { + return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNamedArgument) { + listener.enterNamedArgument(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNamedArgument) { + listener.exitNamedArgument(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNamedArgument) { + return visitor.visitNamedArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PathElementContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_pathElement; + } + public copyFrom(ctx: PathElementContext): void { + super.copyFrom(ctx); + } +} +export class QualifiedArgumentContext extends PathElementContext { + constructor(parser: trinoSqlParserParser, ctx: PathElementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQualifiedArgument) { + listener.enterQualifiedArgument(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQualifiedArgument) { + listener.exitQualifiedArgument(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQualifiedArgument) { + return visitor.visitQualifiedArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnqualifiedArgumentContext extends PathElementContext { + constructor(parser: trinoSqlParserParser, ctx: PathElementContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUnqualifiedArgument) { + listener.enterUnqualifiedArgument(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUnqualifiedArgument) { + listener.exitUnqualifiedArgument(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUnqualifiedArgument) { + return visitor.visitUnqualifiedArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PathSpecificationContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public pathElement_list(): PathElementContext[] { + return this.getTypedRuleContexts(PathElementContext) as PathElementContext[]; + } + public pathElement(i: number): PathElementContext { + return this.getTypedRuleContext(PathElementContext, i) as PathElementContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_pathSpecification; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPathSpecification) { + listener.enterPathSpecification(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPathSpecification) { + listener.exitPathSpecification(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPathSpecification) { + return visitor.visitPathSpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PrivilegeContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public SELECT(): TerminalNode { + return this.getToken(trinoSqlParserParser.SELECT, 0); + } + public DELETE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DELETE, 0); + } + public INSERT(): TerminalNode { + return this.getToken(trinoSqlParserParser.INSERT, 0); + } + public UPDATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.UPDATE, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_privilege; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterPrivilege) { + listener.enterPrivilege(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitPrivilege) { + listener.exitPrivilege(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitPrivilege) { + return visitor.visitPrivilege(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QualifiedNameContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_qualifiedName; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQualifiedName) { + listener.enterQualifiedName(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQualifiedName) { + listener.exitQualifiedName(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQualifiedName) { + return visitor.visitQualifiedName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GrantorContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_grantor; + } + public copyFrom(ctx: GrantorContext): void { + super.copyFrom(ctx); + } +} +export class CurrentUserGrantorContext extends GrantorContext { + constructor(parser: trinoSqlParserParser, ctx: GrantorContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_USER(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_USER, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCurrentUserGrantor) { + listener.enterCurrentUserGrantor(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCurrentUserGrantor) { + listener.exitCurrentUserGrantor(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCurrentUserGrantor) { + return visitor.visitCurrentUserGrantor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SpecifiedPrincipalContext extends GrantorContext { + constructor(parser: trinoSqlParserParser, ctx: GrantorContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public principal(): PrincipalContext { + return this.getTypedRuleContext(PrincipalContext, 0) as PrincipalContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterSpecifiedPrincipal) { + listener.enterSpecifiedPrincipal(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitSpecifiedPrincipal) { + listener.exitSpecifiedPrincipal(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitSpecifiedPrincipal) { + return visitor.visitSpecifiedPrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentRoleGrantorContext extends GrantorContext { + constructor(parser: trinoSqlParserParser, ctx: GrantorContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_ROLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT_ROLE, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterCurrentRoleGrantor) { + listener.enterCurrentRoleGrantor(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitCurrentRoleGrantor) { + listener.exitCurrentRoleGrantor(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitCurrentRoleGrantor) { + return visitor.visitCurrentRoleGrantor(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PrincipalContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_principal; + } + public copyFrom(ctx: PrincipalContext): void { + super.copyFrom(ctx); + } +} +export class UnspecifiedPrincipalContext extends PrincipalContext { + constructor(parser: trinoSqlParserParser, ctx: PrincipalContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUnspecifiedPrincipal) { + listener.enterUnspecifiedPrincipal(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUnspecifiedPrincipal) { + listener.exitUnspecifiedPrincipal(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUnspecifiedPrincipal) { + return visitor.visitUnspecifiedPrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UserPrincipalContext extends PrincipalContext { + constructor(parser: trinoSqlParserParser, ctx: PrincipalContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public USER(): TerminalNode { + return this.getToken(trinoSqlParserParser.USER, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUserPrincipal) { + listener.enterUserPrincipal(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUserPrincipal) { + listener.exitUserPrincipal(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUserPrincipal) { + return visitor.visitUserPrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RolePrincipalContext extends PrincipalContext { + constructor(parser: trinoSqlParserParser, ctx: PrincipalContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public ROLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLE, 0); + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRolePrincipal) { + listener.enterRolePrincipal(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRolePrincipal) { + listener.exitRolePrincipal(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRolePrincipal) { + return visitor.visitRolePrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RolesContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + } + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_roles; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterRoles) { + listener.enterRoles(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitRoles) { + listener.exitRoles(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitRoles) { + return visitor.visitRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IdentifierContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_identifier; + } + public copyFrom(ctx: IdentifierContext): void { + super.copyFrom(ctx); + } +} +export class BackQuotedIdentifierContext extends IdentifierContext { + constructor(parser: trinoSqlParserParser, ctx: IdentifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public BACKQUOTED_IDENTIFIER(): TerminalNode { + return this.getToken(trinoSqlParserParser.BACKQUOTED_IDENTIFIER, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterBackQuotedIdentifier) { + listener.enterBackQuotedIdentifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitBackQuotedIdentifier) { + listener.exitBackQuotedIdentifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitBackQuotedIdentifier) { + return visitor.visitBackQuotedIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class QuotedIdentifierContext extends IdentifierContext { + constructor(parser: trinoSqlParserParser, ctx: IdentifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public QUOTED_IDENTIFIER(): TerminalNode { + return this.getToken(trinoSqlParserParser.QUOTED_IDENTIFIER, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterQuotedIdentifier) { + listener.enterQuotedIdentifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitQuotedIdentifier) { + listener.exitQuotedIdentifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitQuotedIdentifier) { + return visitor.visitQuotedIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DigitIdentifierContext extends IdentifierContext { + constructor(parser: trinoSqlParserParser, ctx: IdentifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DIGIT_IDENTIFIER(): TerminalNode { + return this.getToken(trinoSqlParserParser.DIGIT_IDENTIFIER, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDigitIdentifier) { + listener.enterDigitIdentifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDigitIdentifier) { + listener.exitDigitIdentifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDigitIdentifier) { + return visitor.visitDigitIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnquotedIdentifierContext extends IdentifierContext { + constructor(parser: trinoSqlParserParser, ctx: IdentifierContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public IDENTIFIER(): TerminalNode { + return this.getToken(trinoSqlParserParser.IDENTIFIER, 0); + } + public nonReserved(): NonReservedContext { + return this.getTypedRuleContext(NonReservedContext, 0) as NonReservedContext; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterUnquotedIdentifier) { + listener.enterUnquotedIdentifier(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitUnquotedIdentifier) { + listener.exitUnquotedIdentifier(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitUnquotedIdentifier) { + return visitor.visitUnquotedIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NumberContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_number; + } + public copyFrom(ctx: NumberContext): void { + super.copyFrom(ctx); + } +} +export class DecimalLiteralContext extends NumberContext { + constructor(parser: trinoSqlParserParser, ctx: NumberContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DECIMAL_VALUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DECIMAL_VALUE, 0); + } + public MINUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDecimalLiteral) { + listener.enterDecimalLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDecimalLiteral) { + listener.exitDecimalLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDecimalLiteral) { + return visitor.visitDecimalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DoubleLiteralContext extends NumberContext { + constructor(parser: trinoSqlParserParser, ctx: NumberContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public DOUBLE_VALUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DOUBLE_VALUE, 0); + } + public MINUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterDoubleLiteral) { + listener.enterDoubleLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitDoubleLiteral) { + listener.exitDoubleLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitDoubleLiteral) { + return visitor.visitDoubleLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IntegerLiteralContext extends NumberContext { + constructor(parser: trinoSqlParserParser, ctx: NumberContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public INTEGER_VALUE(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTEGER_VALUE, 0); + } + public MINUS(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUS, 0); + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterIntegerLiteral) { + listener.enterIntegerLiteral(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitIntegerLiteral) { + listener.exitIntegerLiteral(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitIntegerLiteral) { + return visitor.visitIntegerLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NonReservedContext extends ParserRuleContext { + constructor(parser?: trinoSqlParserParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public ADD(): TerminalNode { + return this.getToken(trinoSqlParserParser.ADD, 0); + } + public ADMIN(): TerminalNode { + return this.getToken(trinoSqlParserParser.ADMIN, 0); + } + public AFTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.AFTER, 0); + } + public ALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.ALL, 0); + } + public ANALYZE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ANALYZE, 0); + } + public ANY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ANY, 0); + } + public ARRAY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ARRAY, 0); + } + public ASC(): TerminalNode { + return this.getToken(trinoSqlParserParser.ASC, 0); + } + public AT(): TerminalNode { + return this.getToken(trinoSqlParserParser.AT, 0); + } + public AUTHORIZATION(): TerminalNode { + return this.getToken(trinoSqlParserParser.AUTHORIZATION, 0); + } + public BERNOULLI(): TerminalNode { + return this.getToken(trinoSqlParserParser.BERNOULLI, 0); + } + public CALL(): TerminalNode { + return this.getToken(trinoSqlParserParser.CALL, 0); + } + public CASCADE(): TerminalNode { + return this.getToken(trinoSqlParserParser.CASCADE, 0); + } + public CATALOGS(): TerminalNode { + return this.getToken(trinoSqlParserParser.CATALOGS, 0); + } + public COLUMN(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMN, 0); + } + public COLUMNS(): TerminalNode { + return this.getToken(trinoSqlParserParser.COLUMNS, 0); + } + public COMMENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMENT, 0); + } + public COMMIT(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMIT, 0); + } + public COMMITTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.COMMITTED, 0); + } + public CURRENT(): TerminalNode { + return this.getToken(trinoSqlParserParser.CURRENT, 0); + } + public DATA(): TerminalNode { + return this.getToken(trinoSqlParserParser.DATA, 0); + } + public DATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DATE, 0); + } + public DAY(): TerminalNode { + return this.getToken(trinoSqlParserParser.DAY, 0); + } + public DEFAULT(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEFAULT, 0); + } + public DEFINE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEFINE, 0); + } + public DEFINER(): TerminalNode { + return this.getToken(trinoSqlParserParser.DEFINER, 0); + } + public DESC(): TerminalNode { + return this.getToken(trinoSqlParserParser.DESC, 0); + } + public DISTRIBUTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.DISTRIBUTED, 0); + } + public DOUBLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.DOUBLE, 0); + } + public EMPTY(): TerminalNode { + return this.getToken(trinoSqlParserParser.EMPTY, 0); + } + public EXCLUDING(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXCLUDING, 0); + } + public EXPLAIN(): TerminalNode { + return this.getToken(trinoSqlParserParser.EXPLAIN, 0); + } + public FETCH(): TerminalNode { + return this.getToken(trinoSqlParserParser.FETCH, 0); + } + public FILTER(): TerminalNode { + return this.getToken(trinoSqlParserParser.FILTER, 0); + } + public FINAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.FINAL, 0); + } + public FIRST(): TerminalNode { + return this.getToken(trinoSqlParserParser.FIRST, 0); + } + public FOLLOWING(): TerminalNode { + return this.getToken(trinoSqlParserParser.FOLLOWING, 0); + } + public FORMAT(): TerminalNode { + return this.getToken(trinoSqlParserParser.FORMAT, 0); + } + public FUNCTIONS(): TerminalNode { + return this.getToken(trinoSqlParserParser.FUNCTIONS, 0); + } + public GRANT(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANT, 0); + } + public GRANTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANTED, 0); + } + public GRANTS(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRANTS, 0); + } + public DENY(): TerminalNode { + return this.getToken(trinoSqlParserParser.DENY, 0); + } + public GRAPHVIZ(): TerminalNode { + return this.getToken(trinoSqlParserParser.GRAPHVIZ, 0); + } + public GROUPS(): TerminalNode { + return this.getToken(trinoSqlParserParser.GROUPS, 0); + } + public HOUR(): TerminalNode { + return this.getToken(trinoSqlParserParser.HOUR, 0); + } + public IF(): TerminalNode { + return this.getToken(trinoSqlParserParser.IF, 0); + } + public IGNORE(): TerminalNode { + return this.getToken(trinoSqlParserParser.IGNORE, 0); + } + public INCLUDING(): TerminalNode { + return this.getToken(trinoSqlParserParser.INCLUDING, 0); + } + public INITIAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.INITIAL, 0); + } + public INPUT(): TerminalNode { + return this.getToken(trinoSqlParserParser.INPUT, 0); + } + public INTERVAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.INTERVAL, 0); + } + public INVOKER(): TerminalNode { + return this.getToken(trinoSqlParserParser.INVOKER, 0); + } + public IO(): TerminalNode { + return this.getToken(trinoSqlParserParser.IO, 0); + } + public ISOLATION(): TerminalNode { + return this.getToken(trinoSqlParserParser.ISOLATION, 0); + } + public JSON(): TerminalNode { + return this.getToken(trinoSqlParserParser.JSON, 0); + } + public LAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.LAST, 0); + } + public LATERAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LATERAL, 0); + } + public LEVEL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LEVEL, 0); + } + public LIMIT(): TerminalNode { + return this.getToken(trinoSqlParserParser.LIMIT, 0); + } + public LOCAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LOCAL, 0); + } + public LOGICAL(): TerminalNode { + return this.getToken(trinoSqlParserParser.LOGICAL, 0); + } + public MAP(): TerminalNode { + return this.getToken(trinoSqlParserParser.MAP, 0); + } + public MATCH(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCH, 0); + } + public MATCHED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCHED, 0); + } + public MATCHES(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCHES, 0); + } + public MATCH_RECOGNIZE(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATCH_RECOGNIZE, 0); + } + public MATERIALIZED(): TerminalNode { + return this.getToken(trinoSqlParserParser.MATERIALIZED, 0); + } + public MEASURES(): TerminalNode { + return this.getToken(trinoSqlParserParser.MEASURES, 0); + } + public MERGE(): TerminalNode { + return this.getToken(trinoSqlParserParser.MERGE, 0); + } + public MINUTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.MINUTE, 0); + } + public MONTH(): TerminalNode { + return this.getToken(trinoSqlParserParser.MONTH, 0); + } + public NEXT(): TerminalNode { + return this.getToken(trinoSqlParserParser.NEXT, 0); + } + public NFC(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFC, 0); + } + public NFD(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFD, 0); + } + public NFKC(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFKC, 0); + } + public NFKD(): TerminalNode { + return this.getToken(trinoSqlParserParser.NFKD, 0); + } + public NO(): TerminalNode { + return this.getToken(trinoSqlParserParser.NO, 0); + } + public NONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.NONE, 0); + } + public NULLIF(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULLIF, 0); + } + public NULLS(): TerminalNode { + return this.getToken(trinoSqlParserParser.NULLS, 0); + } + public OFFSET(): TerminalNode { + return this.getToken(trinoSqlParserParser.OFFSET, 0); + } + public OMIT(): TerminalNode { + return this.getToken(trinoSqlParserParser.OMIT, 0); + } + public ONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ONE, 0); + } + public ONLY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ONLY, 0); + } + public OPTION(): TerminalNode { + return this.getToken(trinoSqlParserParser.OPTION, 0); + } + public ORDINALITY(): TerminalNode { + return this.getToken(trinoSqlParserParser.ORDINALITY, 0); + } + public OUTPUT(): TerminalNode { + return this.getToken(trinoSqlParserParser.OUTPUT, 0); + } + public OVER(): TerminalNode { + return this.getToken(trinoSqlParserParser.OVER, 0); + } + public PARTITION(): TerminalNode { + return this.getToken(trinoSqlParserParser.PARTITION, 0); + } + public PARTITIONS(): TerminalNode { + return this.getToken(trinoSqlParserParser.PARTITIONS, 0); + } + public PAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.PAST, 0); + } + public PATH(): TerminalNode { + return this.getToken(trinoSqlParserParser.PATH, 0); + } + public PATTERN(): TerminalNode { + return this.getToken(trinoSqlParserParser.PATTERN, 0); + } + public PER(): TerminalNode { + return this.getToken(trinoSqlParserParser.PER, 0); + } + public PERMUTE(): TerminalNode { + return this.getToken(trinoSqlParserParser.PERMUTE, 0); + } + public POSITION(): TerminalNode { + return this.getToken(trinoSqlParserParser.POSITION, 0); + } + public PRECEDING(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRECEDING, 0); + } + public PRECISION(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRECISION, 0); + } + public PRIVILEGES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PRIVILEGES, 0); + } + public PROPERTIES(): TerminalNode { + return this.getToken(trinoSqlParserParser.PROPERTIES, 0); + } + public RANGE(): TerminalNode { + return this.getToken(trinoSqlParserParser.RANGE, 0); + } + public READ(): TerminalNode { + return this.getToken(trinoSqlParserParser.READ, 0); + } + public REFRESH(): TerminalNode { + return this.getToken(trinoSqlParserParser.REFRESH, 0); + } + public RENAME(): TerminalNode { + return this.getToken(trinoSqlParserParser.RENAME, 0); + } + public REPEATABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REPEATABLE, 0); + } + public REPLACE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REPLACE, 0); + } + public RESET(): TerminalNode { + return this.getToken(trinoSqlParserParser.RESET, 0); + } + public RESPECT(): TerminalNode { + return this.getToken(trinoSqlParserParser.RESPECT, 0); + } + public RESTRICT(): TerminalNode { + return this.getToken(trinoSqlParserParser.RESTRICT, 0); + } + public REVOKE(): TerminalNode { + return this.getToken(trinoSqlParserParser.REVOKE, 0); + } + public ROLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLE, 0); + } + public ROLES(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLES, 0); + } + public ROLLBACK(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROLLBACK, 0); + } + public ROW(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROW, 0); + } + public ROWS(): TerminalNode { + return this.getToken(trinoSqlParserParser.ROWS, 0); + } + public RUNNING(): TerminalNode { + return this.getToken(trinoSqlParserParser.RUNNING, 0); + } + public SCHEMA(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMA, 0); + } + public SCHEMAS(): TerminalNode { + return this.getToken(trinoSqlParserParser.SCHEMAS, 0); + } + public SECOND(): TerminalNode { + return this.getToken(trinoSqlParserParser.SECOND, 0); + } + public SECURITY(): TerminalNode { + return this.getToken(trinoSqlParserParser.SECURITY, 0); + } + public SEEK(): TerminalNode { + return this.getToken(trinoSqlParserParser.SEEK, 0); + } + public SERIALIZABLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.SERIALIZABLE, 0); + } + public SESSION(): TerminalNode { + return this.getToken(trinoSqlParserParser.SESSION, 0); + } + public SET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SET, 0); + } + public SETS(): TerminalNode { + return this.getToken(trinoSqlParserParser.SETS, 0); + } + public SHOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.SHOW, 0); + } + public SOME(): TerminalNode { + return this.getToken(trinoSqlParserParser.SOME, 0); + } + public START(): TerminalNode { + return this.getToken(trinoSqlParserParser.START, 0); + } + public STATS(): TerminalNode { + return this.getToken(trinoSqlParserParser.STATS, 0); + } + public SUBSET(): TerminalNode { + return this.getToken(trinoSqlParserParser.SUBSET, 0); + } + public SUBSTRING(): TerminalNode { + return this.getToken(trinoSqlParserParser.SUBSTRING, 0); + } + public SYSTEM(): TerminalNode { + return this.getToken(trinoSqlParserParser.SYSTEM, 0); + } + public TABLES(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLES, 0); + } + public TABLESAMPLE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TABLESAMPLE, 0); + } + public TEXT(): TerminalNode { + return this.getToken(trinoSqlParserParser.TEXT, 0); + } + public TIES(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIES, 0); + } + public TIME(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIME, 0); + } + public TIMESTAMP(): TerminalNode { + return this.getToken(trinoSqlParserParser.TIMESTAMP, 0); + } + public TO(): TerminalNode { + return this.getToken(trinoSqlParserParser.TO, 0); + } + public TRANSACTION(): TerminalNode { + return this.getToken(trinoSqlParserParser.TRANSACTION, 0); + } + public TRUNCATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TRUNCATE, 0); + } + public TRY_CAST(): TerminalNode { + return this.getToken(trinoSqlParserParser.TRY_CAST, 0); + } + public TYPE(): TerminalNode { + return this.getToken(trinoSqlParserParser.TYPE, 0); + } + public UNBOUNDED(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNBOUNDED, 0); + } + public UNCOMMITTED(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNCOMMITTED, 0); + } + public UNMATCHED(): TerminalNode { + return this.getToken(trinoSqlParserParser.UNMATCHED, 0); + } + public UPDATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.UPDATE, 0); + } + public USE(): TerminalNode { + return this.getToken(trinoSqlParserParser.USE, 0); + } + public USER(): TerminalNode { + return this.getToken(trinoSqlParserParser.USER, 0); + } + public VALIDATE(): TerminalNode { + return this.getToken(trinoSqlParserParser.VALIDATE, 0); + } + public VERBOSE(): TerminalNode { + return this.getToken(trinoSqlParserParser.VERBOSE, 0); + } + public VIEW(): TerminalNode { + return this.getToken(trinoSqlParserParser.VIEW, 0); + } + public WINDOW(): TerminalNode { + return this.getToken(trinoSqlParserParser.WINDOW, 0); + } + public WITHOUT(): TerminalNode { + return this.getToken(trinoSqlParserParser.WITHOUT, 0); + } + public WORK(): TerminalNode { + return this.getToken(trinoSqlParserParser.WORK, 0); + } + public WRITE(): TerminalNode { + return this.getToken(trinoSqlParserParser.WRITE, 0); + } + public YEAR(): TerminalNode { + return this.getToken(trinoSqlParserParser.YEAR, 0); + } + public ZONE(): TerminalNode { + return this.getToken(trinoSqlParserParser.ZONE, 0); + } + public get ruleIndex(): number { + return trinoSqlParserParser.RULE_nonReserved; + } + public enterRule(listener: trinoSqlParserListener): void { + if(listener.enterNonReserved) { + listener.enterNonReserved(this); + } + } + public exitRule(listener: trinoSqlParserListener): void { + if(listener.exitNonReserved) { + listener.exitNonReserved(this); + } + } + // @Override + public accept(visitor: trinoSqlParserVisitor): Result { + if (visitor.visitNonReserved) { + return visitor.visitNonReserved(this); + } else { + return visitor.visitChildren(this); + } + } +} diff --git a/src/lib/trinosql/trinoSqlParserVisitor.ts b/src/lib/trinosql/trinoSqlParserVisitor.ts new file mode 100644 index 0000000..eeea022 --- /dev/null +++ b/src/lib/trinosql/trinoSqlParserVisitor.ts @@ -0,0 +1,2028 @@ +// Generated from /Users/zhenglin/Documents/parser/dt-sql-parser/src/grammar/trinosql/trinoSqlParser.g4 by ANTLR 4.12.0 + +import {ParseTreeVisitor} from 'antlr4'; + + +import { ProgramContext } from "./trinoSqlParserParser"; +import { StatementsContext } from "./trinoSqlParserParser"; +import { SingleStatementContext } from "./trinoSqlParserParser"; +import { StandaloneExpressionContext } from "./trinoSqlParserParser"; +import { StandalonePathSpecificationContext } from "./trinoSqlParserParser"; +import { StandaloneTypeContext } from "./trinoSqlParserParser"; +import { StandaloneRowPatternContext } from "./trinoSqlParserParser"; +import { StatementDefaultContext } from "./trinoSqlParserParser"; +import { UseContext } from "./trinoSqlParserParser"; +import { CreateSchemaContext } from "./trinoSqlParserParser"; +import { DropSchemaContext } from "./trinoSqlParserParser"; +import { RenameSchemaContext } from "./trinoSqlParserParser"; +import { SetSchemaAuthorizationContext } from "./trinoSqlParserParser"; +import { CreateTableAsSelectContext } from "./trinoSqlParserParser"; +import { CreateTableContext } from "./trinoSqlParserParser"; +import { DropTableContext } from "./trinoSqlParserParser"; +import { InsertIntoContext } from "./trinoSqlParserParser"; +import { DeleteContext } from "./trinoSqlParserParser"; +import { TruncateTableContext } from "./trinoSqlParserParser"; +import { RenameTableContext } from "./trinoSqlParserParser"; +import { CommentTableContext } from "./trinoSqlParserParser"; +import { CommentColumnContext } from "./trinoSqlParserParser"; +import { RenameColumnContext } from "./trinoSqlParserParser"; +import { DropColumnContext } from "./trinoSqlParserParser"; +import { AddColumnContext } from "./trinoSqlParserParser"; +import { SetTableAuthorizationContext } from "./trinoSqlParserParser"; +import { SetTablePropertiesContext } from "./trinoSqlParserParser"; +import { TableExecuteContext } from "./trinoSqlParserParser"; +import { AnalyzeContext } from "./trinoSqlParserParser"; +import { CreateMaterializedViewContext } from "./trinoSqlParserParser"; +import { CreateViewContext } from "./trinoSqlParserParser"; +import { RefreshMaterializedViewContext } from "./trinoSqlParserParser"; +import { DropMaterializedViewContext } from "./trinoSqlParserParser"; +import { RenameMaterializedViewContext } from "./trinoSqlParserParser"; +import { SetMaterializedViewPropertiesContext } from "./trinoSqlParserParser"; +import { DropViewContext } from "./trinoSqlParserParser"; +import { RenameViewContext } from "./trinoSqlParserParser"; +import { SetViewAuthorizationContext } from "./trinoSqlParserParser"; +import { CallContext } from "./trinoSqlParserParser"; +import { CreateRoleContext } from "./trinoSqlParserParser"; +import { DropRoleContext } from "./trinoSqlParserParser"; +import { GrantRolesContext } from "./trinoSqlParserParser"; +import { RevokeRolesContext } from "./trinoSqlParserParser"; +import { SetRoleContext } from "./trinoSqlParserParser"; +import { GrantContext } from "./trinoSqlParserParser"; +import { DenyContext } from "./trinoSqlParserParser"; +import { RevokeContext } from "./trinoSqlParserParser"; +import { ShowGrantsContext } from "./trinoSqlParserParser"; +import { ExplainContext } from "./trinoSqlParserParser"; +import { ShowCreateTableContext } from "./trinoSqlParserParser"; +import { ShowCreateSchemaContext } from "./trinoSqlParserParser"; +import { ShowCreateViewContext } from "./trinoSqlParserParser"; +import { ShowCreateMaterializedViewContext } from "./trinoSqlParserParser"; +import { ShowTablesContext } from "./trinoSqlParserParser"; +import { ShowSchemasContext } from "./trinoSqlParserParser"; +import { ShowCatalogsContext } from "./trinoSqlParserParser"; +import { ShowColumnsContext } from "./trinoSqlParserParser"; +import { ShowStatsContext } from "./trinoSqlParserParser"; +import { ShowStatsForQueryContext } from "./trinoSqlParserParser"; +import { ShowRolesContext } from "./trinoSqlParserParser"; +import { ShowRoleGrantsContext } from "./trinoSqlParserParser"; +import { ShowFunctionsContext } from "./trinoSqlParserParser"; +import { ShowSessionContext } from "./trinoSqlParserParser"; +import { SetSessionContext } from "./trinoSqlParserParser"; +import { ResetSessionContext } from "./trinoSqlParserParser"; +import { StartTransactionContext } from "./trinoSqlParserParser"; +import { CommitContext } from "./trinoSqlParserParser"; +import { RollbackContext } from "./trinoSqlParserParser"; +import { PrepareContext } from "./trinoSqlParserParser"; +import { DeallocateContext } from "./trinoSqlParserParser"; +import { ExecuteContext } from "./trinoSqlParserParser"; +import { DescribeInputContext } from "./trinoSqlParserParser"; +import { DescribeOutputContext } from "./trinoSqlParserParser"; +import { SetPathContext } from "./trinoSqlParserParser"; +import { SetTimeZoneContext } from "./trinoSqlParserParser"; +import { UpdateContext } from "./trinoSqlParserParser"; +import { MergeContext } from "./trinoSqlParserParser"; +import { ShowTableCommentContext } from "./trinoSqlParserParser"; +import { ShowColumnCommentContext } from "./trinoSqlParserParser"; +import { QueryContext } from "./trinoSqlParserParser"; +import { WithContext } from "./trinoSqlParserParser"; +import { TableElementContext } from "./trinoSqlParserParser"; +import { ColumnDefinitionContext } from "./trinoSqlParserParser"; +import { LikeClauseContext } from "./trinoSqlParserParser"; +import { PropertiesContext } from "./trinoSqlParserParser"; +import { PropertyAssignmentsContext } from "./trinoSqlParserParser"; +import { PropertyContext } from "./trinoSqlParserParser"; +import { DefaultPropertyValueContext } from "./trinoSqlParserParser"; +import { NonDefaultPropertyValueContext } from "./trinoSqlParserParser"; +import { QueryNoWithContext } from "./trinoSqlParserParser"; +import { LimitRowCountContext } from "./trinoSqlParserParser"; +import { RowCountContext } from "./trinoSqlParserParser"; +import { QueryTermDefaultContext } from "./trinoSqlParserParser"; +import { SetOperationContext } from "./trinoSqlParserParser"; +import { QueryPrimaryDefaultContext } from "./trinoSqlParserParser"; +import { TableContext } from "./trinoSqlParserParser"; +import { InlineTableContext } from "./trinoSqlParserParser"; +import { SubqueryContext } from "./trinoSqlParserParser"; +import { SortItemContext } from "./trinoSqlParserParser"; +import { QuerySpecificationContext } from "./trinoSqlParserParser"; +import { GroupByContext } from "./trinoSqlParserParser"; +import { SingleGroupingSetContext } from "./trinoSqlParserParser"; +import { RollupContext } from "./trinoSqlParserParser"; +import { CubeContext } from "./trinoSqlParserParser"; +import { MultipleGroupingSetsContext } from "./trinoSqlParserParser"; +import { GroupingSetContext } from "./trinoSqlParserParser"; +import { WindowDefinitionContext } from "./trinoSqlParserParser"; +import { WindowSpecificationContext } from "./trinoSqlParserParser"; +import { NamedQueryContext } from "./trinoSqlParserParser"; +import { SetQuantifierContext } from "./trinoSqlParserParser"; +import { SelectSingleContext } from "./trinoSqlParserParser"; +import { SelectAllContext } from "./trinoSqlParserParser"; +import { RelationDefaultContext } from "./trinoSqlParserParser"; +import { JoinRelationContext } from "./trinoSqlParserParser"; +import { JoinTypeContext } from "./trinoSqlParserParser"; +import { JoinCriteriaContext } from "./trinoSqlParserParser"; +import { SampledRelationContext } from "./trinoSqlParserParser"; +import { SampleTypeContext } from "./trinoSqlParserParser"; +import { PatternRecognitionContext } from "./trinoSqlParserParser"; +import { MeasureDefinitionContext } from "./trinoSqlParserParser"; +import { RowsPerMatchContext } from "./trinoSqlParserParser"; +import { EmptyMatchHandlingContext } from "./trinoSqlParserParser"; +import { SkipToContext } from "./trinoSqlParserParser"; +import { SubsetDefinitionContext } from "./trinoSqlParserParser"; +import { VariableDefinitionContext } from "./trinoSqlParserParser"; +import { AliasedRelationContext } from "./trinoSqlParserParser"; +import { ColumnAliasesContext } from "./trinoSqlParserParser"; +import { TableNameContext } from "./trinoSqlParserParser"; +import { SubqueryRelationContext } from "./trinoSqlParserParser"; +import { UnnestContext } from "./trinoSqlParserParser"; +import { LateralContext } from "./trinoSqlParserParser"; +import { ParenthesizedRelationContext } from "./trinoSqlParserParser"; +import { ExpressionContext } from "./trinoSqlParserParser"; +import { LogicalNotContext } from "./trinoSqlParserParser"; +import { PredicatedContext } from "./trinoSqlParserParser"; +import { LogicalBinaryContext } from "./trinoSqlParserParser"; +import { ComparisonContext } from "./trinoSqlParserParser"; +import { QuantifiedComparisonContext } from "./trinoSqlParserParser"; +import { BetweenContext } from "./trinoSqlParserParser"; +import { InListContext } from "./trinoSqlParserParser"; +import { InSubqueryContext } from "./trinoSqlParserParser"; +import { LikeContext } from "./trinoSqlParserParser"; +import { NullPredicateContext } from "./trinoSqlParserParser"; +import { DistinctFromContext } from "./trinoSqlParserParser"; +import { ValueExpressionDefaultContext } from "./trinoSqlParserParser"; +import { ConcatenationContext } from "./trinoSqlParserParser"; +import { ArithmeticBinaryContext } from "./trinoSqlParserParser"; +import { ArithmeticUnaryContext } from "./trinoSqlParserParser"; +import { AtTimeZoneContext } from "./trinoSqlParserParser"; +import { DereferenceContext } from "./trinoSqlParserParser"; +import { TypeConstructorContext } from "./trinoSqlParserParser"; +import { SpecialDateTimeFunctionContext } from "./trinoSqlParserParser"; +import { SubstringContext } from "./trinoSqlParserParser"; +import { CastContext } from "./trinoSqlParserParser"; +import { LambdaContext } from "./trinoSqlParserParser"; +import { ParenthesizedExpressionContext } from "./trinoSqlParserParser"; +import { ParameterContext } from "./trinoSqlParserParser"; +import { NormalizeContext } from "./trinoSqlParserParser"; +import { IntervalLiteralContext } from "./trinoSqlParserParser"; +import { NumericLiteralContext } from "./trinoSqlParserParser"; +import { BooleanLiteralContext } from "./trinoSqlParserParser"; +import { SimpleCaseContext } from "./trinoSqlParserParser"; +import { ColumnReferenceContext } from "./trinoSqlParserParser"; +import { NullLiteralContext } from "./trinoSqlParserParser"; +import { RowConstructorContext } from "./trinoSqlParserParser"; +import { SubscriptContext } from "./trinoSqlParserParser"; +import { CurrentPathContext } from "./trinoSqlParserParser"; +import { SubqueryExpressionContext } from "./trinoSqlParserParser"; +import { BinaryLiteralContext } from "./trinoSqlParserParser"; +import { CurrentUserContext } from "./trinoSqlParserParser"; +import { MeasureContext } from "./trinoSqlParserParser"; +import { ExtractContext } from "./trinoSqlParserParser"; +import { StringLiteralContext } from "./trinoSqlParserParser"; +import { ArrayConstructorContext } from "./trinoSqlParserParser"; +import { FunctionCallContext } from "./trinoSqlParserParser"; +import { CurrentSchemaContext } from "./trinoSqlParserParser"; +import { ExistsContext } from "./trinoSqlParserParser"; +import { PositionContext } from "./trinoSqlParserParser"; +import { SearchedCaseContext } from "./trinoSqlParserParser"; +import { CurrentCatalogContext } from "./trinoSqlParserParser"; +import { GroupingOperationContext } from "./trinoSqlParserParser"; +import { ProcessingModeContext } from "./trinoSqlParserParser"; +import { NullTreatmentContext } from "./trinoSqlParserParser"; +import { BasicStringLiteralContext } from "./trinoSqlParserParser"; +import { UnicodeStringLiteralContext } from "./trinoSqlParserParser"; +import { TimeZoneIntervalContext } from "./trinoSqlParserParser"; +import { TimeZoneStringContext } from "./trinoSqlParserParser"; +import { ComparisonOperatorContext } from "./trinoSqlParserParser"; +import { ComparisonQuantifierContext } from "./trinoSqlParserParser"; +import { BooleanValueContext } from "./trinoSqlParserParser"; +import { IntervalContext } from "./trinoSqlParserParser"; +import { IntervalFieldContext } from "./trinoSqlParserParser"; +import { NormalFormContext } from "./trinoSqlParserParser"; +import { RowTypeContext } from "./trinoSqlParserParser"; +import { IntervalTypeContext } from "./trinoSqlParserParser"; +import { ArrayTypeContext } from "./trinoSqlParserParser"; +import { DoublePrecisionTypeContext } from "./trinoSqlParserParser"; +import { LegacyArrayTypeContext } from "./trinoSqlParserParser"; +import { GenericTypeContext } from "./trinoSqlParserParser"; +import { DateTimeTypeContext } from "./trinoSqlParserParser"; +import { LegacyMapTypeContext } from "./trinoSqlParserParser"; +import { RowFieldContext } from "./trinoSqlParserParser"; +import { TypeParameterContext } from "./trinoSqlParserParser"; +import { WhenClauseContext } from "./trinoSqlParserParser"; +import { FilterContext } from "./trinoSqlParserParser"; +import { MergeUpdateContext } from "./trinoSqlParserParser"; +import { MergeDeleteContext } from "./trinoSqlParserParser"; +import { MergeInsertContext } from "./trinoSqlParserParser"; +import { OverContext } from "./trinoSqlParserParser"; +import { WindowFrameContext } from "./trinoSqlParserParser"; +import { FrameExtentContext } from "./trinoSqlParserParser"; +import { UnboundedFrameContext } from "./trinoSqlParserParser"; +import { CurrentRowBoundContext } from "./trinoSqlParserParser"; +import { BoundedFrameContext } from "./trinoSqlParserParser"; +import { QuantifiedPrimaryContext } from "./trinoSqlParserParser"; +import { PatternConcatenationContext } from "./trinoSqlParserParser"; +import { PatternAlternationContext } from "./trinoSqlParserParser"; +import { PatternVariableContext } from "./trinoSqlParserParser"; +import { EmptyPatternContext } from "./trinoSqlParserParser"; +import { PatternPermutationContext } from "./trinoSqlParserParser"; +import { GroupedPatternContext } from "./trinoSqlParserParser"; +import { PartitionStartAnchorContext } from "./trinoSqlParserParser"; +import { PartitionEndAnchorContext } from "./trinoSqlParserParser"; +import { ExcludedPatternContext } from "./trinoSqlParserParser"; +import { ZeroOrMoreQuantifierContext } from "./trinoSqlParserParser"; +import { OneOrMoreQuantifierContext } from "./trinoSqlParserParser"; +import { ZeroOrOneQuantifierContext } from "./trinoSqlParserParser"; +import { RangeQuantifierContext } from "./trinoSqlParserParser"; +import { UpdateAssignmentContext } from "./trinoSqlParserParser"; +import { ExplainFormatContext } from "./trinoSqlParserParser"; +import { ExplainTypeContext } from "./trinoSqlParserParser"; +import { IsolationLevelContext } from "./trinoSqlParserParser"; +import { TransactionAccessModeContext } from "./trinoSqlParserParser"; +import { ReadUncommittedContext } from "./trinoSqlParserParser"; +import { ReadCommittedContext } from "./trinoSqlParserParser"; +import { RepeatableReadContext } from "./trinoSqlParserParser"; +import { SerializableContext } from "./trinoSqlParserParser"; +import { PositionalArgumentContext } from "./trinoSqlParserParser"; +import { NamedArgumentContext } from "./trinoSqlParserParser"; +import { QualifiedArgumentContext } from "./trinoSqlParserParser"; +import { UnqualifiedArgumentContext } from "./trinoSqlParserParser"; +import { PathSpecificationContext } from "./trinoSqlParserParser"; +import { PrivilegeContext } from "./trinoSqlParserParser"; +import { QualifiedNameContext } from "./trinoSqlParserParser"; +import { SpecifiedPrincipalContext } from "./trinoSqlParserParser"; +import { CurrentUserGrantorContext } from "./trinoSqlParserParser"; +import { CurrentRoleGrantorContext } from "./trinoSqlParserParser"; +import { UnspecifiedPrincipalContext } from "./trinoSqlParserParser"; +import { UserPrincipalContext } from "./trinoSqlParserParser"; +import { RolePrincipalContext } from "./trinoSqlParserParser"; +import { RolesContext } from "./trinoSqlParserParser"; +import { UnquotedIdentifierContext } from "./trinoSqlParserParser"; +import { QuotedIdentifierContext } from "./trinoSqlParserParser"; +import { BackQuotedIdentifierContext } from "./trinoSqlParserParser"; +import { DigitIdentifierContext } from "./trinoSqlParserParser"; +import { DecimalLiteralContext } from "./trinoSqlParserParser"; +import { DoubleLiteralContext } from "./trinoSqlParserParser"; +import { IntegerLiteralContext } from "./trinoSqlParserParser"; +import { NonReservedContext } from "./trinoSqlParserParser"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `trinoSqlParserParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export default class trinoSqlParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by `trinoSqlParserParser.program`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProgram?: (ctx: ProgramContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.statements`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatements?: (ctx: StatementsContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.singleStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleStatement?: (ctx: SingleStatementContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.standaloneExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStandaloneExpression?: (ctx: StandaloneExpressionContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.standalonePathSpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStandalonePathSpecification?: (ctx: StandalonePathSpecificationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.standaloneType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStandaloneType?: (ctx: StandaloneTypeContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.standaloneRowPattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStandaloneRowPattern?: (ctx: StandaloneRowPatternContext) => Result; + /** + * Visit a parse tree produced by the `statementDefault` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatementDefault?: (ctx: StatementDefaultContext) => Result; + /** + * Visit a parse tree produced by the `use` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUse?: (ctx: UseContext) => Result; + /** + * Visit a parse tree produced by the `createSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateSchema?: (ctx: CreateSchemaContext) => Result; + /** + * Visit a parse tree produced by the `dropSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropSchema?: (ctx: DropSchemaContext) => Result; + /** + * Visit a parse tree produced by the `renameSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameSchema?: (ctx: RenameSchemaContext) => Result; + /** + * Visit a parse tree produced by the `setSchemaAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetSchemaAuthorization?: (ctx: SetSchemaAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `createTableAsSelect` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateTableAsSelect?: (ctx: CreateTableAsSelectContext) => Result; + /** + * Visit a parse tree produced by the `createTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateTable?: (ctx: CreateTableContext) => Result; + /** + * Visit a parse tree produced by the `dropTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropTable?: (ctx: DropTableContext) => Result; + /** + * Visit a parse tree produced by the `insertInto` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInsertInto?: (ctx: InsertIntoContext) => Result; + /** + * Visit a parse tree produced by the `delete` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDelete?: (ctx: DeleteContext) => Result; + /** + * Visit a parse tree produced by the `truncateTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTruncateTable?: (ctx: TruncateTableContext) => Result; + /** + * Visit a parse tree produced by the `renameTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameTable?: (ctx: RenameTableContext) => Result; + /** + * Visit a parse tree produced by the `commentTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentTable?: (ctx: CommentTableContext) => Result; + /** + * Visit a parse tree produced by the `commentColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentColumn?: (ctx: CommentColumnContext) => Result; + /** + * Visit a parse tree produced by the `renameColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameColumn?: (ctx: RenameColumnContext) => Result; + /** + * Visit a parse tree produced by the `dropColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropColumn?: (ctx: DropColumnContext) => Result; + /** + * Visit a parse tree produced by the `addColumn` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAddColumn?: (ctx: AddColumnContext) => Result; + /** + * Visit a parse tree produced by the `setTableAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetTableAuthorization?: (ctx: SetTableAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `setTableProperties` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetTableProperties?: (ctx: SetTablePropertiesContext) => Result; + /** + * Visit a parse tree produced by the `tableExecute` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableExecute?: (ctx: TableExecuteContext) => Result; + /** + * Visit a parse tree produced by the `analyze` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAnalyze?: (ctx: AnalyzeContext) => Result; + /** + * Visit a parse tree produced by the `createMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateMaterializedView?: (ctx: CreateMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `createView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateView?: (ctx: CreateViewContext) => Result; + /** + * Visit a parse tree produced by the `refreshMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRefreshMaterializedView?: (ctx: RefreshMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `dropMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropMaterializedView?: (ctx: DropMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `renameMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameMaterializedView?: (ctx: RenameMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `setMaterializedViewProperties` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetMaterializedViewProperties?: (ctx: SetMaterializedViewPropertiesContext) => Result; + /** + * Visit a parse tree produced by the `dropView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropView?: (ctx: DropViewContext) => Result; + /** + * Visit a parse tree produced by the `renameView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameView?: (ctx: RenameViewContext) => Result; + /** + * Visit a parse tree produced by the `setViewAuthorization` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetViewAuthorization?: (ctx: SetViewAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `call` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCall?: (ctx: CallContext) => Result; + /** + * Visit a parse tree produced by the `createRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateRole?: (ctx: CreateRoleContext) => Result; + /** + * Visit a parse tree produced by the `dropRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropRole?: (ctx: DropRoleContext) => Result; + /** + * Visit a parse tree produced by the `grantRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGrantRoles?: (ctx: GrantRolesContext) => Result; + /** + * Visit a parse tree produced by the `revokeRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRevokeRoles?: (ctx: RevokeRolesContext) => Result; + /** + * Visit a parse tree produced by the `setRole` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetRole?: (ctx: SetRoleContext) => Result; + /** + * Visit a parse tree produced by the `grant` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGrant?: (ctx: GrantContext) => Result; + /** + * Visit a parse tree produced by the `deny` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDeny?: (ctx: DenyContext) => Result; + /** + * Visit a parse tree produced by the `revoke` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRevoke?: (ctx: RevokeContext) => Result; + /** + * Visit a parse tree produced by the `showGrants` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowGrants?: (ctx: ShowGrantsContext) => Result; + /** + * Visit a parse tree produced by the `explain` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplain?: (ctx: ExplainContext) => Result; + /** + * Visit a parse tree produced by the `showCreateTable` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateTable?: (ctx: ShowCreateTableContext) => Result; + /** + * Visit a parse tree produced by the `showCreateSchema` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateSchema?: (ctx: ShowCreateSchemaContext) => Result; + /** + * Visit a parse tree produced by the `showCreateView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateView?: (ctx: ShowCreateViewContext) => Result; + /** + * Visit a parse tree produced by the `showCreateMaterializedView` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateMaterializedView?: (ctx: ShowCreateMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `showTables` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowTables?: (ctx: ShowTablesContext) => Result; + /** + * Visit a parse tree produced by the `showSchemas` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowSchemas?: (ctx: ShowSchemasContext) => Result; + /** + * Visit a parse tree produced by the `showCatalogs` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCatalogs?: (ctx: ShowCatalogsContext) => Result; + /** + * Visit a parse tree produced by the `showColumns` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowColumns?: (ctx: ShowColumnsContext) => Result; + /** + * Visit a parse tree produced by the `showStats` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowStats?: (ctx: ShowStatsContext) => Result; + /** + * Visit a parse tree produced by the `showStatsForQuery` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowStatsForQuery?: (ctx: ShowStatsForQueryContext) => Result; + /** + * Visit a parse tree produced by the `showRoles` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowRoles?: (ctx: ShowRolesContext) => Result; + /** + * Visit a parse tree produced by the `showRoleGrants` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowRoleGrants?: (ctx: ShowRoleGrantsContext) => Result; + /** + * Visit a parse tree produced by the `showFunctions` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowFunctions?: (ctx: ShowFunctionsContext) => Result; + /** + * Visit a parse tree produced by the `showSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowSession?: (ctx: ShowSessionContext) => Result; + /** + * Visit a parse tree produced by the `setSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetSession?: (ctx: SetSessionContext) => Result; + /** + * Visit a parse tree produced by the `resetSession` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitResetSession?: (ctx: ResetSessionContext) => Result; + /** + * Visit a parse tree produced by the `startTransaction` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStartTransaction?: (ctx: StartTransactionContext) => Result; + /** + * Visit a parse tree produced by the `commit` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommit?: (ctx: CommitContext) => Result; + /** + * Visit a parse tree produced by the `rollback` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRollback?: (ctx: RollbackContext) => Result; + /** + * Visit a parse tree produced by the `prepare` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPrepare?: (ctx: PrepareContext) => Result; + /** + * Visit a parse tree produced by the `deallocate` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDeallocate?: (ctx: DeallocateContext) => Result; + /** + * Visit a parse tree produced by the `execute` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExecute?: (ctx: ExecuteContext) => Result; + /** + * Visit a parse tree produced by the `describeInput` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeInput?: (ctx: DescribeInputContext) => Result; + /** + * Visit a parse tree produced by the `describeOutput` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeOutput?: (ctx: DescribeOutputContext) => Result; + /** + * Visit a parse tree produced by the `setPath` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetPath?: (ctx: SetPathContext) => Result; + /** + * Visit a parse tree produced by the `setTimeZone` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetTimeZone?: (ctx: SetTimeZoneContext) => Result; + /** + * Visit a parse tree produced by the `update` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUpdate?: (ctx: UpdateContext) => Result; + /** + * Visit a parse tree produced by the `merge` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMerge?: (ctx: MergeContext) => Result; + /** + * Visit a parse tree produced by the `showTableComment` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowTableComment?: (ctx: ShowTableCommentContext) => Result; + /** + * Visit a parse tree produced by the `showColumnComment` + * labeled alternative in `trinoSqlParserParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowColumnComment?: (ctx: ShowColumnCommentContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.query`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuery?: (ctx: QueryContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.with`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWith?: (ctx: WithContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.tableElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableElement?: (ctx: TableElementContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.columnDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnDefinition?: (ctx: ColumnDefinitionContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.likeClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLikeClause?: (ctx: LikeClauseContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.properties`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProperties?: (ctx: PropertiesContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.propertyAssignments`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPropertyAssignments?: (ctx: PropertyAssignmentsContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.property`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProperty?: (ctx: PropertyContext) => Result; + /** + * Visit a parse tree produced by the `defaultPropertyValue` + * labeled alternative in `trinoSqlParserParser.propertyValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDefaultPropertyValue?: (ctx: DefaultPropertyValueContext) => Result; + /** + * Visit a parse tree produced by the `nonDefaultPropertyValue` + * labeled alternative in `trinoSqlParserParser.propertyValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNonDefaultPropertyValue?: (ctx: NonDefaultPropertyValueContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.queryNoWith`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryNoWith?: (ctx: QueryNoWithContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.limitRowCount`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLimitRowCount?: (ctx: LimitRowCountContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.rowCount`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowCount?: (ctx: RowCountContext) => Result; + /** + * Visit a parse tree produced by the `queryTermDefault` + * labeled alternative in `trinoSqlParserParser.queryTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryTermDefault?: (ctx: QueryTermDefaultContext) => Result; + /** + * Visit a parse tree produced by the `setOperation` + * labeled alternative in `trinoSqlParserParser.queryTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetOperation?: (ctx: SetOperationContext) => Result; + /** + * Visit a parse tree produced by the `queryPrimaryDefault` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryPrimaryDefault?: (ctx: QueryPrimaryDefaultContext) => Result; + /** + * Visit a parse tree produced by the `table` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTable?: (ctx: TableContext) => Result; + /** + * Visit a parse tree produced by the `inlineTable` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInlineTable?: (ctx: InlineTableContext) => Result; + /** + * Visit a parse tree produced by the `subquery` + * labeled alternative in `trinoSqlParserParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubquery?: (ctx: SubqueryContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.sortItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSortItem?: (ctx: SortItemContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.querySpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuerySpecification?: (ctx: QuerySpecificationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.groupBy`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupBy?: (ctx: GroupByContext) => Result; + /** + * Visit a parse tree produced by the `singleGroupingSet` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleGroupingSet?: (ctx: SingleGroupingSetContext) => Result; + /** + * Visit a parse tree produced by the `rollup` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRollup?: (ctx: RollupContext) => Result; + /** + * Visit a parse tree produced by the `cube` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCube?: (ctx: CubeContext) => Result; + /** + * Visit a parse tree produced by the `multipleGroupingSets` + * labeled alternative in `trinoSqlParserParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultipleGroupingSets?: (ctx: MultipleGroupingSetsContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.groupingSet`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingSet?: (ctx: GroupingSetContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.windowDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowDefinition?: (ctx: WindowDefinitionContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.windowSpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowSpecification?: (ctx: WindowSpecificationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.namedQuery`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedQuery?: (ctx: NamedQueryContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.setQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetQuantifier?: (ctx: SetQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `selectSingle` + * labeled alternative in `trinoSqlParserParser.selectItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectSingle?: (ctx: SelectSingleContext) => Result; + /** + * Visit a parse tree produced by the `selectAll` + * labeled alternative in `trinoSqlParserParser.selectItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectAll?: (ctx: SelectAllContext) => Result; + /** + * Visit a parse tree produced by the `relationDefault` + * labeled alternative in `trinoSqlParserParser.relation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelationDefault?: (ctx: RelationDefaultContext) => Result; + /** + * Visit a parse tree produced by the `joinRelation` + * labeled alternative in `trinoSqlParserParser.relation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinRelation?: (ctx: JoinRelationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.joinType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinType?: (ctx: JoinTypeContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.joinCriteria`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinCriteria?: (ctx: JoinCriteriaContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.sampledRelation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSampledRelation?: (ctx: SampledRelationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.sampleType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSampleType?: (ctx: SampleTypeContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.patternRecognition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternRecognition?: (ctx: PatternRecognitionContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.measureDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMeasureDefinition?: (ctx: MeasureDefinitionContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.rowsPerMatch`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowsPerMatch?: (ctx: RowsPerMatchContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.emptyMatchHandling`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEmptyMatchHandling?: (ctx: EmptyMatchHandlingContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.skipTo`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSkipTo?: (ctx: SkipToContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.subsetDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubsetDefinition?: (ctx: SubsetDefinitionContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.variableDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVariableDefinition?: (ctx: VariableDefinitionContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.aliasedRelation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAliasedRelation?: (ctx: AliasedRelationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.columnAliases`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnAliases?: (ctx: ColumnAliasesContext) => Result; + /** + * Visit a parse tree produced by the `tableName` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableName?: (ctx: TableNameContext) => Result; + /** + * Visit a parse tree produced by the `subqueryRelation` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubqueryRelation?: (ctx: SubqueryRelationContext) => Result; + /** + * Visit a parse tree produced by the `unnest` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnnest?: (ctx: UnnestContext) => Result; + /** + * Visit a parse tree produced by the `lateral` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLateral?: (ctx: LateralContext) => Result; + /** + * Visit a parse tree produced by the `parenthesizedRelation` + * labeled alternative in `trinoSqlParserParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParenthesizedRelation?: (ctx: ParenthesizedRelationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpression?: (ctx: ExpressionContext) => Result; + /** + * Visit a parse tree produced by the `logicalNot` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalNot?: (ctx: LogicalNotContext) => Result; + /** + * Visit a parse tree produced by the `predicated` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPredicated?: (ctx: PredicatedContext) => Result; + /** + * Visit a parse tree produced by the `logicalBinary` + * labeled alternative in `trinoSqlParserParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalBinary?: (ctx: LogicalBinaryContext) => Result; + /** + * Visit a parse tree produced by the `comparison` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparison?: (ctx: ComparisonContext) => Result; + /** + * Visit a parse tree produced by the `quantifiedComparison` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuantifiedComparison?: (ctx: QuantifiedComparisonContext) => Result; + /** + * Visit a parse tree produced by the `between` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBetween?: (ctx: BetweenContext) => Result; + /** + * Visit a parse tree produced by the `inList` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInList?: (ctx: InListContext) => Result; + /** + * Visit a parse tree produced by the `inSubquery` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInSubquery?: (ctx: InSubqueryContext) => Result; + /** + * Visit a parse tree produced by the `like` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLike?: (ctx: LikeContext) => Result; + /** + * Visit a parse tree produced by the `nullPredicate` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullPredicate?: (ctx: NullPredicateContext) => Result; + /** + * Visit a parse tree produced by the `distinctFrom` + * labeled alternative in `trinoSqlParserParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDistinctFrom?: (ctx: DistinctFromContext) => Result; + /** + * Visit a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => Result; + /** + * Visit a parse tree produced by the `concatenation` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConcatenation?: (ctx: ConcatenationContext) => Result; + /** + * Visit a parse tree produced by the `arithmeticBinary` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArithmeticBinary?: (ctx: ArithmeticBinaryContext) => Result; + /** + * Visit a parse tree produced by the `arithmeticUnary` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => Result; + /** + * Visit a parse tree produced by the `atTimeZone` + * labeled alternative in `trinoSqlParserParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAtTimeZone?: (ctx: AtTimeZoneContext) => Result; + /** + * Visit a parse tree produced by the `dereference` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDereference?: (ctx: DereferenceContext) => Result; + /** + * Visit a parse tree produced by the `typeConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTypeConstructor?: (ctx: TypeConstructorContext) => Result; + /** + * Visit a parse tree produced by the `specialDateTimeFunction` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpecialDateTimeFunction?: (ctx: SpecialDateTimeFunctionContext) => Result; + /** + * Visit a parse tree produced by the `substring` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubstring?: (ctx: SubstringContext) => Result; + /** + * Visit a parse tree produced by the `cast` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCast?: (ctx: CastContext) => Result; + /** + * Visit a parse tree produced by the `lambda` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLambda?: (ctx: LambdaContext) => Result; + /** + * Visit a parse tree produced by the `parenthesizedExpression` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => Result; + /** + * Visit a parse tree produced by the `parameter` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParameter?: (ctx: ParameterContext) => Result; + /** + * Visit a parse tree produced by the `normalize` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNormalize?: (ctx: NormalizeContext) => Result; + /** + * Visit a parse tree produced by the `intervalLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalLiteral?: (ctx: IntervalLiteralContext) => Result; + /** + * Visit a parse tree produced by the `numericLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNumericLiteral?: (ctx: NumericLiteralContext) => Result; + /** + * Visit a parse tree produced by the `booleanLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanLiteral?: (ctx: BooleanLiteralContext) => Result; + /** + * Visit a parse tree produced by the `simpleCase` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSimpleCase?: (ctx: SimpleCaseContext) => Result; + /** + * Visit a parse tree produced by the `columnReference` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnReference?: (ctx: ColumnReferenceContext) => Result; + /** + * Visit a parse tree produced by the `nullLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullLiteral?: (ctx: NullLiteralContext) => Result; + /** + * Visit a parse tree produced by the `rowConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowConstructor?: (ctx: RowConstructorContext) => Result; + /** + * Visit a parse tree produced by the `subscript` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubscript?: (ctx: SubscriptContext) => Result; + /** + * Visit a parse tree produced by the `currentPath` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentPath?: (ctx: CurrentPathContext) => Result; + /** + * Visit a parse tree produced by the `subqueryExpression` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubqueryExpression?: (ctx: SubqueryExpressionContext) => Result; + /** + * Visit a parse tree produced by the `binaryLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinaryLiteral?: (ctx: BinaryLiteralContext) => Result; + /** + * Visit a parse tree produced by the `currentUser` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentUser?: (ctx: CurrentUserContext) => Result; + /** + * Visit a parse tree produced by the `measure` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMeasure?: (ctx: MeasureContext) => Result; + /** + * Visit a parse tree produced by the `extract` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExtract?: (ctx: ExtractContext) => Result; + /** + * Visit a parse tree produced by the `stringLiteral` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringLiteral?: (ctx: StringLiteralContext) => Result; + /** + * Visit a parse tree produced by the `arrayConstructor` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArrayConstructor?: (ctx: ArrayConstructorContext) => Result; + /** + * Visit a parse tree produced by the `functionCall` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionCall?: (ctx: FunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `currentSchema` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentSchema?: (ctx: CurrentSchemaContext) => Result; + /** + * Visit a parse tree produced by the `exists` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExists?: (ctx: ExistsContext) => Result; + /** + * Visit a parse tree produced by the `position` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPosition?: (ctx: PositionContext) => Result; + /** + * Visit a parse tree produced by the `searchedCase` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchedCase?: (ctx: SearchedCaseContext) => Result; + /** + * Visit a parse tree produced by the `currentCatalog` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentCatalog?: (ctx: CurrentCatalogContext) => Result; + /** + * Visit a parse tree produced by the `groupingOperation` + * labeled alternative in `trinoSqlParserParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingOperation?: (ctx: GroupingOperationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.processingMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProcessingMode?: (ctx: ProcessingModeContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.nullTreatment`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullTreatment?: (ctx: NullTreatmentContext) => Result; + /** + * Visit a parse tree produced by the `basicStringLiteral` + * labeled alternative in `trinoSqlParserParser.string`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBasicStringLiteral?: (ctx: BasicStringLiteralContext) => Result; + /** + * Visit a parse tree produced by the `unicodeStringLiteral` + * labeled alternative in `trinoSqlParserParser.string`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnicodeStringLiteral?: (ctx: UnicodeStringLiteralContext) => Result; + /** + * Visit a parse tree produced by the `timeZoneInterval` + * labeled alternative in `trinoSqlParserParser.timeZoneSpecifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeZoneInterval?: (ctx: TimeZoneIntervalContext) => Result; + /** + * Visit a parse tree produced by the `timeZoneString` + * labeled alternative in `trinoSqlParserParser.timeZoneSpecifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeZoneString?: (ctx: TimeZoneStringContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.comparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonOperator?: (ctx: ComparisonOperatorContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.comparisonQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonQuantifier?: (ctx: ComparisonQuantifierContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.booleanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanValue?: (ctx: BooleanValueContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.interval`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInterval?: (ctx: IntervalContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.intervalField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalField?: (ctx: IntervalFieldContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.normalForm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNormalForm?: (ctx: NormalFormContext) => Result; + /** + * Visit a parse tree produced by the `rowType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowType?: (ctx: RowTypeContext) => Result; + /** + * Visit a parse tree produced by the `intervalType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalType?: (ctx: IntervalTypeContext) => Result; + /** + * Visit a parse tree produced by the `arrayType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArrayType?: (ctx: ArrayTypeContext) => Result; + /** + * Visit a parse tree produced by the `doublePrecisionType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDoublePrecisionType?: (ctx: DoublePrecisionTypeContext) => Result; + /** + * Visit a parse tree produced by the `legacyArrayType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLegacyArrayType?: (ctx: LegacyArrayTypeContext) => Result; + /** + * Visit a parse tree produced by the `genericType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGenericType?: (ctx: GenericTypeContext) => Result; + /** + * Visit a parse tree produced by the `dateTimeType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDateTimeType?: (ctx: DateTimeTypeContext) => Result; + /** + * Visit a parse tree produced by the `legacyMapType` + * labeled alternative in `trinoSqlParserParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLegacyMapType?: (ctx: LegacyMapTypeContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.rowField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowField?: (ctx: RowFieldContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.typeParameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTypeParameter?: (ctx: TypeParameterContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.whenClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWhenClause?: (ctx: WhenClauseContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.filter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFilter?: (ctx: FilterContext) => Result; + /** + * Visit a parse tree produced by the `mergeUpdate` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMergeUpdate?: (ctx: MergeUpdateContext) => Result; + /** + * Visit a parse tree produced by the `mergeDelete` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMergeDelete?: (ctx: MergeDeleteContext) => Result; + /** + * Visit a parse tree produced by the `mergeInsert` + * labeled alternative in `trinoSqlParserParser.mergeCase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMergeInsert?: (ctx: MergeInsertContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.over`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOver?: (ctx: OverContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.windowFrame`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowFrame?: (ctx: WindowFrameContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.frameExtent`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFrameExtent?: (ctx: FrameExtentContext) => Result; + /** + * Visit a parse tree produced by the `unboundedFrame` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnboundedFrame?: (ctx: UnboundedFrameContext) => Result; + /** + * Visit a parse tree produced by the `currentRowBound` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentRowBound?: (ctx: CurrentRowBoundContext) => Result; + /** + * Visit a parse tree produced by the `boundedFrame` + * labeled alternative in `trinoSqlParserParser.frameBound`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBoundedFrame?: (ctx: BoundedFrameContext) => Result; + /** + * Visit a parse tree produced by the `quantifiedPrimary` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuantifiedPrimary?: (ctx: QuantifiedPrimaryContext) => Result; + /** + * Visit a parse tree produced by the `patternConcatenation` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternConcatenation?: (ctx: PatternConcatenationContext) => Result; + /** + * Visit a parse tree produced by the `patternAlternation` + * labeled alternative in `trinoSqlParserParser.rowPattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternAlternation?: (ctx: PatternAlternationContext) => Result; + /** + * Visit a parse tree produced by the `patternVariable` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternVariable?: (ctx: PatternVariableContext) => Result; + /** + * Visit a parse tree produced by the `emptyPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEmptyPattern?: (ctx: EmptyPatternContext) => Result; + /** + * Visit a parse tree produced by the `patternPermutation` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternPermutation?: (ctx: PatternPermutationContext) => Result; + /** + * Visit a parse tree produced by the `groupedPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupedPattern?: (ctx: GroupedPatternContext) => Result; + /** + * Visit a parse tree produced by the `partitionStartAnchor` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionStartAnchor?: (ctx: PartitionStartAnchorContext) => Result; + /** + * Visit a parse tree produced by the `partitionEndAnchor` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionEndAnchor?: (ctx: PartitionEndAnchorContext) => Result; + /** + * Visit a parse tree produced by the `excludedPattern` + * labeled alternative in `trinoSqlParserParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExcludedPattern?: (ctx: ExcludedPatternContext) => Result; + /** + * Visit a parse tree produced by the `zeroOrMoreQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitZeroOrMoreQuantifier?: (ctx: ZeroOrMoreQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `oneOrMoreQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOneOrMoreQuantifier?: (ctx: OneOrMoreQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `zeroOrOneQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitZeroOrOneQuantifier?: (ctx: ZeroOrOneQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `rangeQuantifier` + * labeled alternative in `trinoSqlParserParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRangeQuantifier?: (ctx: RangeQuantifierContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.updateAssignment`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUpdateAssignment?: (ctx: UpdateAssignmentContext) => Result; + /** + * Visit a parse tree produced by the `explainFormat` + * labeled alternative in `trinoSqlParserParser.explainOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplainFormat?: (ctx: ExplainFormatContext) => Result; + /** + * Visit a parse tree produced by the `explainType` + * labeled alternative in `trinoSqlParserParser.explainOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplainType?: (ctx: ExplainTypeContext) => Result; + /** + * Visit a parse tree produced by the `isolationLevel` + * labeled alternative in `trinoSqlParserParser.transactionMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIsolationLevel?: (ctx: IsolationLevelContext) => Result; + /** + * Visit a parse tree produced by the `transactionAccessMode` + * labeled alternative in `trinoSqlParserParser.transactionMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransactionAccessMode?: (ctx: TransactionAccessModeContext) => Result; + /** + * Visit a parse tree produced by the `readUncommitted` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReadUncommitted?: (ctx: ReadUncommittedContext) => Result; + /** + * Visit a parse tree produced by the `readCommitted` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReadCommitted?: (ctx: ReadCommittedContext) => Result; + /** + * Visit a parse tree produced by the `repeatableRead` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRepeatableRead?: (ctx: RepeatableReadContext) => Result; + /** + * Visit a parse tree produced by the `serializable` + * labeled alternative in `trinoSqlParserParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSerializable?: (ctx: SerializableContext) => Result; + /** + * Visit a parse tree produced by the `positionalArgument` + * labeled alternative in `trinoSqlParserParser.callArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPositionalArgument?: (ctx: PositionalArgumentContext) => Result; + /** + * Visit a parse tree produced by the `namedArgument` + * labeled alternative in `trinoSqlParserParser.callArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedArgument?: (ctx: NamedArgumentContext) => Result; + /** + * Visit a parse tree produced by the `qualifiedArgument` + * labeled alternative in `trinoSqlParserParser.pathElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedArgument?: (ctx: QualifiedArgumentContext) => Result; + /** + * Visit a parse tree produced by the `unqualifiedArgument` + * labeled alternative in `trinoSqlParserParser.pathElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnqualifiedArgument?: (ctx: UnqualifiedArgumentContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.pathSpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPathSpecification?: (ctx: PathSpecificationContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.privilege`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPrivilege?: (ctx: PrivilegeContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.qualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedName?: (ctx: QualifiedNameContext) => Result; + /** + * Visit a parse tree produced by the `specifiedPrincipal` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpecifiedPrincipal?: (ctx: SpecifiedPrincipalContext) => Result; + /** + * Visit a parse tree produced by the `currentUserGrantor` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentUserGrantor?: (ctx: CurrentUserGrantorContext) => Result; + /** + * Visit a parse tree produced by the `currentRoleGrantor` + * labeled alternative in `trinoSqlParserParser.grantor`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentRoleGrantor?: (ctx: CurrentRoleGrantorContext) => Result; + /** + * Visit a parse tree produced by the `unspecifiedPrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnspecifiedPrincipal?: (ctx: UnspecifiedPrincipalContext) => Result; + /** + * Visit a parse tree produced by the `userPrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUserPrincipal?: (ctx: UserPrincipalContext) => Result; + /** + * Visit a parse tree produced by the `rolePrincipal` + * labeled alternative in `trinoSqlParserParser.principal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRolePrincipal?: (ctx: RolePrincipalContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.roles`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRoles?: (ctx: RolesContext) => Result; + /** + * Visit a parse tree produced by the `unquotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnquotedIdentifier?: (ctx: UnquotedIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `quotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `backQuotedIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `digitIdentifier` + * labeled alternative in `trinoSqlParserParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDigitIdentifier?: (ctx: DigitIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `decimalLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDecimalLiteral?: (ctx: DecimalLiteralContext) => Result; + /** + * Visit a parse tree produced by the `doubleLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDoubleLiteral?: (ctx: DoubleLiteralContext) => Result; + /** + * Visit a parse tree produced by the `integerLiteral` + * labeled alternative in `trinoSqlParserParser.number`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntegerLiteral?: (ctx: IntegerLiteralContext) => Result; + /** + * Visit a parse tree produced by `trinoSqlParserParser.nonReserved`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNonReserved?: (ctx: NonReservedContext) => Result; +} + diff --git a/src/parser/trinosql.ts b/src/parser/trinosql.ts new file mode 100644 index 0000000..aa043ce --- /dev/null +++ b/src/parser/trinosql.ts @@ -0,0 +1,17 @@ +import { CharStream, CommonTokenStream, Lexer } from 'antlr4'; +import trinoSqlLexer from '../lib/trinosql/trinoSqlParserLexer'; +import trinoSqlParser from '../lib/trinosql/trinoSqlParserParser'; +import BasicParser from './common/basicParser'; +export default class trinoSQL extends BasicParser { + public createLexer(input: string): trinoSqlLexer { + const chars = new CharStream(input.toUpperCase()); // Some Lexer only support uppercase token, So you need transform + const lexer = new trinoSqlLexer(chars); + return lexer; + } + public createParserFromLexer(lexer: Lexer): trinoSqlParser { + const tokens = new CommonTokenStream(lexer); + const parser = new trinoSqlParser(tokens); + return parser; + } +} + diff --git a/test/parser/trinosql/lexer.test.ts b/test/parser/trinosql/lexer.test.ts new file mode 100644 index 0000000..654c82c --- /dev/null +++ b/test/parser/trinosql/lexer.test.ts @@ -0,0 +1,12 @@ +import trinoSQL from '../../../src/parser/trinosql'; + +describe('trinoSQL Lexer tests', () => { + const parser = new trinoSQL(); + + const sql = 'SELECT * FROM table1'; + const tokens = parser.getAllTokens(sql); + + test('token counts', () => { + expect(tokens.length - 1).toBe(7); + }); +}); diff --git a/test/parser/trinosql/listener.test.ts b/test/parser/trinosql/listener.test.ts new file mode 100644 index 0000000..8d1663c --- /dev/null +++ b/test/parser/trinosql/listener.test.ts @@ -0,0 +1,29 @@ +import trinoSQL from '../../../src/parser/trinosql'; +import trinoSqlParserListener from '../../../src/lib/trinosql/trinoSqlParserListener'; +import { TableExpressionContext } from '../../../src/lib/trinosql/trinoSqlParser'; + +describe('trino SQL Listener Tests', () => { + const expectTableName = 'user1'; + const sql = `select id,name,sex from ${expectTableName};`; + const parser = new trinoSQL(); + + const parserTree = parser.parse(sql); + + test('Listener enterTableName', async () => { + let result = ''; + class MyListener extends trinoSqlParserListener { + + constructor() { + super() + } + + enterTableExpression = (ctx: TableExpressionContext): void => { + result = ctx.getText().toLowerCase(); + } + } + const listenTableName = new MyListener(); + + await parser.listen(listenTableName, parserTree); + expect(result).toBe(expectTableName); + }); +}); diff --git a/test/parser/trinosql/syntax/alterStatement.test.ts b/test/parser/trinosql/syntax/alterStatement.test.ts new file mode 100644 index 0000000..a099e64 --- /dev/null +++ b/test/parser/trinosql/syntax/alterStatement.test.ts @@ -0,0 +1,34 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + table: readSQL(__dirname, 'alter_table.sql'), + view: readSQL(__dirname, 'alter_view.sql'), + schema: readSQL(__dirname, 'alter_schema.sql'), + materializedView: readSQL(__dirname, 'alter_materialized_view.sql') +}; + +describe('TrinoSQL Alter Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + features.table.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.view.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.schema.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.materializedView.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/analyzeStatement.test.ts b/test/parser/trinosql/syntax/analyzeStatement.test.ts new file mode 100644 index 0000000..7d0f3fc --- /dev/null +++ b/test/parser/trinosql/syntax/analyzeStatement.test.ts @@ -0,0 +1,18 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + analyze: readSQL(__dirname, 'analyze.sql'), + +}; + +describe('TrinoSQL Analyze Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // analyze statements + features.analyze.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/callStatement.test.ts b/test/parser/trinosql/syntax/callStatement.test.ts new file mode 100644 index 0000000..34a9742 --- /dev/null +++ b/test/parser/trinosql/syntax/callStatement.test.ts @@ -0,0 +1,18 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + call: readSQL(__dirname, 'call.sql'), + +}; + +describe('TrinoSQL Call Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // call statements + features.call.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/commentStatement.test.ts b/test/parser/trinosql/syntax/commentStatement.test.ts new file mode 100644 index 0000000..40ef625 --- /dev/null +++ b/test/parser/trinosql/syntax/commentStatement.test.ts @@ -0,0 +1,18 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + comment: readSQL(__dirname, 'comment.sql'), + +}; + +describe('TrinoSQL Comment Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // Comment statements + features.comment.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/commitStatement.test.ts b/test/parser/trinosql/syntax/commitStatement.test.ts new file mode 100644 index 0000000..8323787 --- /dev/null +++ b/test/parser/trinosql/syntax/commitStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + commit: readSQL(__dirname, 'commit.sql'), +}; + +describe('TrinoSQL Commit Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // commit statements + features.commit.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/createStatement.test.ts b/test/parser/trinosql/syntax/createStatement.test.ts new file mode 100644 index 0000000..3bfd003 --- /dev/null +++ b/test/parser/trinosql/syntax/createStatement.test.ts @@ -0,0 +1,48 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + table: readSQL(__dirname, 'create_table.sql'), + view: readSQL(__dirname, 'create_view.sql'), + schema: readSQL(__dirname, 'create_schema.sql'), + role: readSQL(__dirname, 'create_role.sql'), + tableAsSelect: readSQL(__dirname, 'create_table_as_select.sql'), + materializedView: readSQL(__dirname, 'create_materialized_view.sql'), +}; + +describe('TrinoSQL Create Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + features.table.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.view.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.schema.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + + features.tableAsSelect.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.role.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.materializedView.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + +}); + diff --git a/test/parser/trinosql/syntax/deallocatePrepareStatement.test.ts b/test/parser/trinosql/syntax/deallocatePrepareStatement.test.ts new file mode 100644 index 0000000..61d6da5 --- /dev/null +++ b/test/parser/trinosql/syntax/deallocatePrepareStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + deallocatePrepare: readSQL(__dirname, 'deallocate_prepare.sql'), +}; + +describe('TrinoSQL deallocatePrepare Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // deallocate_prepare statements + features.deallocatePrepare.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/deleteStatement.test.ts b/test/parser/trinosql/syntax/deleteStatement.test.ts new file mode 100644 index 0000000..4a1cb80 --- /dev/null +++ b/test/parser/trinosql/syntax/deleteStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + delete: readSQL(__dirname, 'delete.sql'), +}; + +describe('TrinoSQL Delete Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // delete statements + features.delete.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/denyStatement.test.ts b/test/parser/trinosql/syntax/denyStatement.test.ts new file mode 100644 index 0000000..3680501 --- /dev/null +++ b/test/parser/trinosql/syntax/denyStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + deny: readSQL(__dirname, 'deny.sql'), +}; + +describe('TrinoSQL Deny Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // deny statements + features.deny.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/describeStatement.test.ts b/test/parser/trinosql/syntax/describeStatement.test.ts new file mode 100644 index 0000000..2f1f3a6 --- /dev/null +++ b/test/parser/trinosql/syntax/describeStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + describe: readSQL(__dirname, 'describe.sql'), +}; + +describe('TrinoSQL Describe Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // describe statements + features.describe.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/dropStatement.test.ts b/test/parser/trinosql/syntax/dropStatement.test.ts new file mode 100644 index 0000000..923bd35 --- /dev/null +++ b/test/parser/trinosql/syntax/dropStatement.test.ts @@ -0,0 +1,48 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + table: readSQL(__dirname, 'drop_table.sql'), + view: readSQL(__dirname, 'drop_view.sql'), + schema: readSQL(__dirname, 'drop_schema.sql'), + role: readSQL(__dirname, 'drop_role.sql'), + column: readSQL(__dirname, 'drop_column.sql'), + materializedView: readSQL(__dirname, 'drop_materialized_view.sql'), +}; + +describe('TrinoSQL Drop Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + features.table.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.view.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.schema.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + + features.column.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.role.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.materializedView.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + +}); + diff --git a/test/parser/trinosql/syntax/executeStatement.test.ts b/test/parser/trinosql/syntax/executeStatement.test.ts new file mode 100644 index 0000000..74fa5bc --- /dev/null +++ b/test/parser/trinosql/syntax/executeStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + execute: readSQL(__dirname, 'execute.sql'), +}; + +describe('TrinoSQL Execute Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // execute statements + features.execute.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/explainStatement.test.ts b/test/parser/trinosql/syntax/explainStatement.test.ts new file mode 100644 index 0000000..c19b441 --- /dev/null +++ b/test/parser/trinosql/syntax/explainStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + explain: readSQL(__dirname, 'explain.sql'), +}; + +describe('TrinoSQL Explain Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // explain statements + features.explain.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/fixtures/alter_materialized_view.sql b/test/parser/trinosql/syntax/fixtures/alter_materialized_view.sql new file mode 100644 index 0000000..22ef191 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/alter_materialized_view.sql @@ -0,0 +1,5 @@ +ALTER MATERIALIZED VIEW people RENAME TO users; +ALTER MATERIALIZED VIEW IF EXISTS people RENAME TO users; +ALTER MATERIALIZED VIEW people SET PROPERTIES x = 'y'; +ALTER MATERIALIZED VIEW people SET PROPERTIES foo = 123, bar = 456; +ALTER MATERIALIZED VIEW people SET PROPERTIES x = DEFAULT; diff --git a/test/parser/trinosql/syntax/fixtures/alter_schema.sql b/test/parser/trinosql/syntax/fixtures/alter_schema.sql new file mode 100644 index 0000000..fb3b812 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/alter_schema.sql @@ -0,0 +1,7 @@ +ALTER SCHEMA foo RENAME TO bar; +ALTER SCHEMA foo.bar RENAME TO baz; +ALTER SCHEMA "awesome schema"."awesome table" RENAME TO "even more awesome table"; + +ALTER SCHEMA web SET AUTHORIZATION alice; +ALTER SCHEMA web SET AUTHORIZATION ROLE alice; +ALTER SCHEMA web SET AUTHORIZATION USER alice; diff --git a/test/parser/trinosql/syntax/fixtures/alter_table.sql b/test/parser/trinosql/syntax/fixtures/alter_table.sql new file mode 100644 index 0000000..0ceb2ba --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/alter_table.sql @@ -0,0 +1,15 @@ +ALTER TABLE users RENAME TO people; +ALTER TABLE IF EXISTS users RENAME TO people; +ALTER TABLE users ADD COLUMN zip varchar; +ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS zip varchar; +ALTER TABLE users DROP COLUMN zip; +ALTER TABLE IF EXISTS users DROP COLUMN IF EXISTS zip; +ALTER TABLE users RENAME COLUMN id TO user_id; +ALTER TABLE IF EXISTS users RENAME column IF EXISTS id to user_id; +ALTER TABLE people SET AUTHORIZATION alice; +ALTER TABLE people SET AUTHORIZATION ROLE PUBLIC; +ALTER TABLE people SET PROPERTIES x = 'y'; +ALTER TABLE people SET PROPERTIES foo = 123, "foo bar" = 456; +ALTER TABLE people SET PROPERTIES x = DEFAULT; +ALTER TABLE hive.schema.test_table EXECUTE optimize(file_size_threshold => '10MB'); + diff --git a/test/parser/trinosql/syntax/fixtures/alter_view.sql b/test/parser/trinosql/syntax/fixtures/alter_view.sql new file mode 100644 index 0000000..2a7eaf1 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/alter_view.sql @@ -0,0 +1,4 @@ +ALTER VIEW people RENAME TO users; +ALTER VIEW people SET AUTHORIZATION alice; +ALTER VIEW people SET AUTHORIZATION USER alice; +ALTER VIEW people SET AUTHORIZATION ROLE alice; diff --git a/test/parser/trinosql/syntax/fixtures/analyze.sql b/test/parser/trinosql/syntax/fixtures/analyze.sql new file mode 100644 index 0000000..bcf2926 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/analyze.sql @@ -0,0 +1,4 @@ +ANALYZE foo; +ANALYZE foo WITH ( "string" = 'bar', "long" = 42, computed = concat('ban', 'ana'), a = ARRAY[ 'v1', 'v2' ] ); +EXPLAIN ANALYZE foo; +EXPLAIN ANALYZE ANALYZE foo; diff --git a/test/parser/trinosql/syntax/fixtures/call.sql b/test/parser/trinosql/syntax/fixtures/call.sql new file mode 100644 index 0000000..e95f5d6 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/call.sql @@ -0,0 +1,3 @@ +CALL foo(); +CALL foo(123, a => 1, b => 'go', 456); +CALL catalog.schema.test(); \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/comment.sql b/test/parser/trinosql/syntax/fixtures/comment.sql new file mode 100644 index 0000000..bae01bc --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/comment.sql @@ -0,0 +1,7 @@ +COMMENT ON TABLE users IS 'master table'; + +COMMENT ON COLUMN users.name IS 'full name'; + +SHOW COMMENT ON COLUMN column1; + +SHOW COMMENT ON TABLE table1; \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/commit.sql b/test/parser/trinosql/syntax/fixtures/commit.sql new file mode 100644 index 0000000..cbd3241 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/commit.sql @@ -0,0 +1,2 @@ +COMMIT; +COMMIT WORK; diff --git a/test/parser/trinosql/syntax/fixtures/create_materialized_view.sql b/test/parser/trinosql/syntax/fixtures/create_materialized_view.sql new file mode 100644 index 0000000..4523110 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/create_materialized_view.sql @@ -0,0 +1,5 @@ +CREATE MATERIALIZED VIEW a AS SELECT * FROM t; +CREATE OR REPLACE MATERIALIZED VIEW catalog.schema.matview COMMENT 'A simple materialized view' AS SELECT * FROM catalog2.schema2.tab; +CREATE OR REPLACE MATERIALIZED VIEW catalog.schema.matview COMMENT 'A simple materialized view' AS SELECT * FROM catalog2.schema2.tab; +CREATE OR REPLACE MATERIALIZED VIEW catalog.schema.matview COMMENT 'A simple materialized view'WITH (partitioned_by = ARRAY ['dateint']) AS SELECT * FROM catalog2.schema2.tab; +CREATE OR REPLACE MATERIALIZED VIEW catalog.schema.matview COMMENT 'A partitioned materialized view' WITH (partitioned_by = ARRAY ['dateint']) AS WITH a (t, u) AS (SELECT * FROM x), b AS (SELECT * FROM a) TABLE b; diff --git a/test/parser/trinosql/syntax/fixtures/create_role.sql b/test/parser/trinosql/syntax/fixtures/create_role.sql new file mode 100644 index 0000000..40c6d2b --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/create_role.sql @@ -0,0 +1,10 @@ +CREATE ROLE role; +CREATE ROLE role1 WITH ADMIN admin; +CREATE ROLE "role" WITH ADMIN "admin"; +CREATE ROLE "ro le" WITH ADMIN "ad min"; +CREATE ROLE "!@#$%^&*'" WITH ADMIN "ад""мін"; +CREATE ROLE role2 WITH ADMIN USER admin1; +CREATE ROLE role2 WITH ADMIN ROLE role1; +CREATE ROLE role2 WITH ADMIN CURRENT_USER; +CREATE ROLE role2 WITH ADMIN CURRENT_ROLE; +CREATE ROLE role WITH ADMIN CURRENT_ROLE IN my_catalog; diff --git a/test/parser/trinosql/syntax/fixtures/create_schema.sql b/test/parser/trinosql/syntax/fixtures/create_schema.sql new file mode 100644 index 0000000..d0639f4 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/create_schema.sql @@ -0,0 +1,4 @@ +CREATE SCHEMA test; +CREATE SCHEMA IF NOT EXISTS test; +CREATE SCHEMA test WITH (a = 'apple', b = 123); +CREATE SCHEMA "some name that contains space"; diff --git a/test/parser/trinosql/syntax/fixtures/create_table.sql b/test/parser/trinosql/syntax/fixtures/create_table.sql new file mode 100644 index 0000000..191dc6b --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/create_table.sql @@ -0,0 +1,2 @@ +CREATE TABLE IF NOT EXISTS bar (LIKE like_table); +CREATE TABLE IF NOT EXISTS bar (LIKE like_table INCLUDING PROPERTIES); diff --git a/test/parser/trinosql/syntax/fixtures/create_table_as_select.sql b/test/parser/trinosql/syntax/fixtures/create_table_as_select.sql new file mode 100644 index 0000000..4903270 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/create_table_as_select.sql @@ -0,0 +1,19 @@ +CREATE TABLE foo AS SELECT * FROM t; +CREATE TABLE foo(x) AS SELECT a FROM t; +CREATE TABLE foo(x,y) AS SELECT a,b FROM t; +CREATE TABLE IF NOT EXISTS foo AS SELECT * FROM t; +CREATE TABLE IF NOT EXISTS foo(x) AS SELECT a FROM t; +CREATE TABLE IF NOT EXISTS foo(x,y) AS SELECT a,b FROM t; +CREATE TABLE foo AS SELECT * FROM t WITH NO DATA; +CREATE TABLE foo(x) AS SELECT a FROM t WITH NO DATA; +CREATE TABLE foo(x,y) AS SELECT a,b FROM t WITH NO DATA; +CREATE TABLE foo WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT * FROM t; +CREATE TABLE foo(x) WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT a FROM t; +CREATE TABLE foo(x,y) WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT a,b FROM t; +CREATE TABLE foo WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT * FROM t WITH NO DATA; +CREATE TABLE foo(x) WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT a FROM t WITH NO DATA; +CREATE TABLE foo(x,y) WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT a,b FROM t WITH NO DATA; +CREATE TABLE foo COMMENT 'test'WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT * FROM t WITH NO DATA; +CREATE TABLE foo(x) COMMENT 'test'WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT a FROM t WITH NO DATA; +CREATE TABLE foo(x,y) COMMENT 'test'WITH ( string = 'bar', long = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT a,b FROM t WITH NO DATA; +CREATE TABLE foo(x,y) COMMENT 'test'WITH ( "string" = 'bar', "long" = 42, computed = 'ban' || 'ana', a = ARRAY[ 'v1', 'v2' ] ) AS SELECT a,b FROM t WITH NO DATA; diff --git a/test/parser/trinosql/syntax/fixtures/create_view.sql b/test/parser/trinosql/syntax/fixtures/create_view.sql new file mode 100644 index 0000000..d0be3bf --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/create_view.sql @@ -0,0 +1,11 @@ +CREATE VIEW a AS SELECT * FROM t; +CREATE OR REPLACE VIEW a AS SELECT * FROM t; +CREATE VIEW a SECURITY DEFINER AS SELECT * FROM t; +CREATE VIEW a SECURITY INVOKER AS SELECT * FROM t; +CREATE VIEW a COMMENT 'comment' SECURITY DEFINER AS SELECT * FROM t; +CREATE VIEW a COMMENT '' SECURITY INVOKER AS SELECT * FROM t; +CREATE VIEW a COMMENT 'comment' AS SELECT * FROM t; +CREATE VIEW a COMMENT '' AS SELECT * FROM t; +CREATE VIEW bar.foo AS SELECT * FROM t; +CREATE VIEW "awesome view" AS SELECT * FROM t; +CREATE VIEW "awesome schema"."awesome view" AS SELECT * FROM t; diff --git a/test/parser/trinosql/syntax/fixtures/deallocate_prepare.sql b/test/parser/trinosql/syntax/fixtures/deallocate_prepare.sql new file mode 100644 index 0000000..955619a --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/deallocate_prepare.sql @@ -0,0 +1 @@ +DEALLOCATE PREPARE my_query; diff --git a/test/parser/trinosql/syntax/fixtures/delete.sql b/test/parser/trinosql/syntax/fixtures/delete.sql new file mode 100644 index 0000000..820d095 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/delete.sql @@ -0,0 +1,5 @@ +DELETE FROM t; +DELETE FROM "awesome table"; +DELETE FROM t WHERE a = b; +DELETE FROM lineitem +WHERE orderkey IN (SELECT orderkey FROM orders WHERE priority = 'LOW'); \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/deny.sql b/test/parser/trinosql/syntax/fixtures/deny.sql new file mode 100644 index 0000000..c905f7d --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/deny.sql @@ -0,0 +1,4 @@ +DENY INSERT, DELETE ON t TO u; +DENY UPDATE ON t TO u; +DENY ALL PRIVILEGES ON TABLE t TO USER u; +DENY SELECT ON SCHEMA s TO USER u; diff --git a/test/parser/trinosql/syntax/fixtures/describe.sql b/test/parser/trinosql/syntax/fixtures/describe.sql new file mode 100644 index 0000000..e5df823 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/describe.sql @@ -0,0 +1,6 @@ +-- DESCRIBE INPUT +DESCRIBE INPUT myquery; +-- DESCRIBE OUTPUT +DESCRIBE OUTPUT myquery; +-- DESCRIBLE table_name +DESCRIBE table_name; \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/drop_column.sql b/test/parser/trinosql/syntax/fixtures/drop_column.sql new file mode 100644 index 0000000..56fdb04 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/drop_column.sql @@ -0,0 +1,5 @@ +ALTER TABLE foo.t DROP COLUMN c; +ALTER TABLE "t x" DROP COLUMN "c d"; +ALTER TABLE IF EXISTS foo.t DROP COLUMN c; +ALTER TABLE foo.t DROP COLUMN IF EXISTS c; +ALTER TABLE IF EXISTS foo.t DROP COLUMN IF EXISTS c; diff --git a/test/parser/trinosql/syntax/fixtures/drop_materialized_view.sql b/test/parser/trinosql/syntax/fixtures/drop_materialized_view.sql new file mode 100644 index 0000000..d8a2db8 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/drop_materialized_view.sql @@ -0,0 +1,6 @@ +DROP MATERIALIZED VIEW a; +DROP MATERIALIZED VIEW a.b; +DROP MATERIALIZED VIEW a.b.c; +DROP MATERIALIZED VIEW IF EXISTS a; +DROP MATERIALIZED VIEW IF EXISTS a.b; +DROP MATERIALIZED VIEW IF EXISTS a.b.c; diff --git a/test/parser/trinosql/syntax/fixtures/drop_role.sql b/test/parser/trinosql/syntax/fixtures/drop_role.sql new file mode 100644 index 0000000..299308e --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/drop_role.sql @@ -0,0 +1,4 @@ +DROP ROLE role; +DROP ROLE "role"; +DROP ROLE "ro le"; +DROP ROLE "!@#$%^&*'ад""мін"; diff --git a/test/parser/trinosql/syntax/fixtures/drop_schema.sql b/test/parser/trinosql/syntax/fixtures/drop_schema.sql new file mode 100644 index 0000000..95455bf --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/drop_schema.sql @@ -0,0 +1,5 @@ +DROP SCHEMA test; +DROP SCHEMA test CASCADE; +DROP SCHEMA IF EXISTS test; +DROP SCHEMA IF EXISTS test RESTRICT; +DROP SCHEMA "some schema that contains space"; diff --git a/test/parser/trinosql/syntax/fixtures/drop_table.sql b/test/parser/trinosql/syntax/fixtures/drop_table.sql new file mode 100644 index 0000000..1d7ae21 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/drop_table.sql @@ -0,0 +1,8 @@ +DROP TABLE a; +DROP TABLE a.b; +DROP TABLE a.b.c; +DROP TABLE a."b/y".c; +DROP TABLE IF EXISTS a; +DROP TABLE IF EXISTS a.b; +DROP TABLE IF EXISTS a.b.c; +DROP TABLE IF EXISTS a."b/y".c; diff --git a/test/parser/trinosql/syntax/fixtures/drop_view.sql b/test/parser/trinosql/syntax/fixtures/drop_view.sql new file mode 100644 index 0000000..030e080 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/drop_view.sql @@ -0,0 +1,6 @@ +DROP VIEW a; +DROP VIEW a.b; +DROP VIEW a.b.c; +DROP VIEW IF EXISTS a; +DROP VIEW IF EXISTS a.b; +DROP VIEW IF EXISTS a.b.c; diff --git a/test/parser/trinosql/syntax/fixtures/execute.sql b/test/parser/trinosql/syntax/fixtures/execute.sql new file mode 100644 index 0000000..ac7c7d9 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/execute.sql @@ -0,0 +1,11 @@ +PREPARE my_select1 FROM +SELECT name FROM nation; + +EXECUTE my_select1; + + +-- execute with using +PREPARE my_select2 FROM +SELECT name FROM nation WHERE regionkey = ? and nationkey < ?; + +EXECUTE my_select2 USING 1, 3; diff --git a/test/parser/trinosql/syntax/fixtures/explain.sql b/test/parser/trinosql/syntax/fixtures/explain.sql new file mode 100644 index 0000000..8ded1a0 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/explain.sql @@ -0,0 +1,6 @@ +EXPLAIN SELECT * FROM t; +EXPLAIN (TYPE LOGICAL) SELECT * FROM t; +EXPLAIN (TYPE LOGICAL, FORMAT TEXT) SELECT * FROM t; +-- EXPLAIN ANALYZE +EXPLAIN ANALYZE SELECT * FROM t; +EXPLAIN ANALYZE VERBOSE SELECT * FROM t; diff --git a/test/parser/trinosql/syntax/fixtures/grant.sql b/test/parser/trinosql/syntax/fixtures/grant.sql new file mode 100644 index 0000000..092fca7 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/grant.sql @@ -0,0 +1,15 @@ +GRANT INSERT, DELETE ON t TO u; +GRANT UPDATE ON t TO u; +GRANT SELECT ON t TO ROLE PUBLIC WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON TABLE t TO USER u; +GRANT DELETE ON "t" TO ROLE "public" WITH GRANT OPTION; +GRANT SELECT ON SCHEMA s TO USER u; +-- GRANT role +GRANT role1 TO user1; +GRANT role1, role2, role3 TO user1, USER user2, ROLE role4 WITH ADMIN OPTION; +GRANT role1 TO user1 WITH ADMIN OPTION GRANTED BY admin; +GRANT role1 TO USER user1 WITH ADMIN OPTION GRANTED BY USER admin; +GRANT role1 TO ROLE role2 WITH ADMIN OPTION GRANTED BY ROLE admin; +GRANT role1 TO ROLE role2 GRANTED BY ROLE admin; +GRANT "role1" TO ROLE "role2" GRANTED BY ROLE "admin"; +GRANT role1 TO user1 IN my_catalog; diff --git a/test/parser/trinosql/syntax/fixtures/implicit_join.sql b/test/parser/trinosql/syntax/fixtures/implicit_join.sql new file mode 100644 index 0000000..15b1923 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/implicit_join.sql @@ -0,0 +1 @@ +SELECT * FROM a, b; diff --git a/test/parser/trinosql/syntax/fixtures/insert_into.sql b/test/parser/trinosql/syntax/fixtures/insert_into.sql new file mode 100644 index 0000000..b114abd --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/insert_into.sql @@ -0,0 +1,12 @@ +INSERT INTO orders +SELECT * FROM new_orders; + +INSERT INTO cities VALUES (1, 'San Francisco'); + +INSERT INTO cities VALUES (2, 'San Jose'), (3, 'Oakland'); + +INSERT INTO nation (nationkey, name, regionkey, comment) +VALUES (26, 'POLAND', 3, 'no comment'); + +INSERT INTO nation (nationkey, name, regionkey) +VALUES (26, 'POLAND', 3); \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/match_recognize.sql b/test/parser/trinosql/syntax/fixtures/match_recognize.sql new file mode 100644 index 0000000..e0ae00a --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/match_recognize.sql @@ -0,0 +1,16 @@ +SELECT * FROM orders MATCH_RECOGNIZE( + PARTITION BY custkey + ORDER BY orderdate + MEASURES + A.totalprice AS starting_price, + LAST(B.totalprice) AS bottom_price, + LAST(U.totalprice) AS top_price + ONE ROW PER MATCH + AFTER MATCH SKIP PAST LAST ROW + PATTERN (A B+ C+ D+) + SUBSET U = (C, D) + DEFINE + B AS totalprice < PREV(totalprice), + C AS totalprice > PREV(totalprice) AND totalprice <= A.totalprice, + D AS totalprice > PREV(totalprice) + ); diff --git a/test/parser/trinosql/syntax/fixtures/merge.sql b/test/parser/trinosql/syntax/fixtures/merge.sql new file mode 100644 index 0000000..b4bbf60 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/merge.sql @@ -0,0 +1 @@ +MERGE INTO inventory AS i USING changes AS c ON i.part = c.part WHEN MATCHED AND c.action = 'mod' THEN UPDATE SET qty = qty + c.qty , ts = CURRENT_TIMESTAMP WHEN MATCHED AND c.action = 'del' THEN DELETE WHEN NOT MATCHED AND c.action = 'new' THEN INSERT (part, qty) VALUES (c.part, c.qty); diff --git a/test/parser/trinosql/syntax/fixtures/prepare.sql b/test/parser/trinosql/syntax/fixtures/prepare.sql new file mode 100644 index 0000000..c522f64 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/prepare.sql @@ -0,0 +1,9 @@ +PREPARE myquery FROM select * from foo; +PREPARE myquery FROM SELECT ?, ? FROM foo; +PREPARE myquery FROM SELECT * FROM foo LIMIT ?; +PREPARE myquery FROM SELECT ?, ? FROM foo LIMIT ?; +PREPARE myquery FROM SELECT ? FROM foo FETCH FIRST ? ROWS ONLY; +PREPARE myquery FROM SELECT ?, ? FROM foo FETCH NEXT ? ROWS WITH TIES; +PREPARE myquery FROM SELECT ?, ? FROM foo OFFSET ? ROWS; +PREPARE myquery FROM SELECT ? FROM foo OFFSET ? ROWS LIMIT ?; +PREPARE myquery FROM SELECT ? FROM foo OFFSET ? ROWS FETCH FIRST ? ROWS WITH TIES; diff --git a/test/parser/trinosql/syntax/fixtures/refresh_materialized_view.sql b/test/parser/trinosql/syntax/fixtures/refresh_materialized_view.sql new file mode 100644 index 0000000..903b3fd --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/refresh_materialized_view.sql @@ -0,0 +1,2 @@ +REFRESH MATERIALIZED VIEW test; +REFRESH MATERIALIZED VIEW "some name that contains space"; diff --git a/test/parser/trinosql/syntax/fixtures/reset_session.sql b/test/parser/trinosql/syntax/fixtures/reset_session.sql new file mode 100644 index 0000000..859afa7 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/reset_session.sql @@ -0,0 +1,2 @@ +RESET SESSION foo.bar; +RESET SESSION foo; diff --git a/test/parser/trinosql/syntax/fixtures/revoke.sql b/test/parser/trinosql/syntax/fixtures/revoke.sql new file mode 100644 index 0000000..7036b44 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/revoke.sql @@ -0,0 +1,6 @@ +REVOKE INSERT, DELETE ON t FROM u; +REVOKE UPDATE ON t FROM u; +REVOKE GRANT OPTION FOR SELECT ON t FROM ROLE PUBLIC; +REVOKE ALL PRIVILEGES ON TABLE t FROM USER u; +REVOKE DELETE ON TABLE "t" FROM "u"; +REVOKE SELECT ON SCHEMA s FROM USER u; diff --git a/test/parser/trinosql/syntax/fixtures/revoke_roles.sql b/test/parser/trinosql/syntax/fixtures/revoke_roles.sql new file mode 100644 index 0000000..f15ca8e --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/revoke_roles.sql @@ -0,0 +1,7 @@ +REVOKE role1 FROM user1; +REVOKE ADMIN OPTION FOR role1, role2, role3 FROM user1, USER user2, ROLE role4; +REVOKE ADMIN OPTION FOR role1 FROM user1 GRANTED BY admin; +REVOKE ADMIN OPTION FOR role1 FROM USER user1 GRANTED BY USER admin; +REVOKE role1 FROM ROLE role2 GRANTED BY ROLE admin; +REVOKE "role1" FROM ROLE "role2" GRANTED BY ROLE "admin"; +REVOKE role1 FROM user1 IN my_catalog; diff --git a/test/parser/trinosql/syntax/fixtures/rollback_transaction.sql b/test/parser/trinosql/syntax/fixtures/rollback_transaction.sql new file mode 100644 index 0000000..b5337f5 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/rollback_transaction.sql @@ -0,0 +1,2 @@ +ROLLBACK; +ROLLBACK WORK; diff --git a/test/parser/trinosql/syntax/fixtures/select.sql b/test/parser/trinosql/syntax/fixtures/select.sql new file mode 100644 index 0000000..471b91d --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select.sql @@ -0,0 +1,117 @@ +-- DOUBLE IN Query +SELECT 123.456E7 FROM DUAL; +-- GROUP BY +SELECT * FROM table1 GROUP BY a; +SELECT * FROM table1 GROUP BY a, b; +SELECT * FROM table1 GROUP BY (); +-- GROUP BY GROUPING SETS +SELECT * FROM table1 GROUP BY GROUPING SETS (a); +SELECT a, b, GROUPING(a, b) FROM table1 GROUP BY GROUPING SETS ((a), (b)); +-- GROUP BY ROLLUP +SELECT * FROM table1 GROUP BY ALL GROUPING SETS ((a, b), (a), ()), CUBE (c), ROLLUP (d); +SELECT * FROM table1 GROUP BY DISTINCT GROUPING SETS ((a, b), (a), ()), CUBE (c), ROLLUP (d); +-- GROUP BY CUBE +SELECT origin_state, destination_state, sum(package_weight) +FROM shipping +GROUP BY CUBE (origin_state, destination_state); +-- GROUP BY Combining multiple grouping expressions +SELECT origin_state, destination_state, origin_zip, sum(package_weight) +FROM shipping +GROUP BY + GROUPING SETS ((origin_state, destination_state)), + ROLLUP (origin_zip); + +SELECT origin_state, destination_state, origin_zip, sum(package_weight) +FROM shipping +GROUP BY GROUPING SETS ( + (origin_state, destination_state, origin_zip), + (origin_state, destination_state) +); + +SELECT origin_state, destination_state, origin_zip, sum(package_weight) +FROM shipping +GROUP BY + GROUPING SETS ((origin_state, destination_state)), + GROUPING SETS ((origin_zip), ()); +-- GROUP BY ALL and DISTINCT quantifiers +SELECT origin_state, destination_state, origin_zip, sum(package_weight) +FROM shipping +GROUP BY ALL + CUBE (origin_state, destination_state), + ROLLUP (origin_state, origin_zip); + +SELECT origin_state, destination_state, origin_zip, sum(package_weight) +FROM shipping +GROUP BY GROUPING SETS ( + (origin_state, destination_state, origin_zip), + (origin_state, origin_zip), + (origin_state, destination_state, origin_zip), + (origin_state, origin_zip), + (origin_state, destination_state), + (origin_state), + (origin_state, destination_state), + (origin_state), + (origin_state, destination_state), + (origin_state), + (destination_state), + () +); + +SELECT origin_state, destination_state, origin_zip, sum(package_weight) +FROM shipping +GROUP BY DISTINCT + CUBE (origin_state, destination_state), + ROLLUP (origin_state, origin_zip); + +SELECT origin_state, destination_state, origin_zip, sum(package_weight) +FROM shipping +GROUP BY GROUPING SETS ( + (origin_state, destination_state, origin_zip), + (origin_state, origin_zip), + (origin_state, destination_state), + (origin_state), + (destination_state), + () +); + +-- GROUP BY GROUPING operation +SELECT origin_state, origin_zip, destination_state, sum(package_weight), + grouping(origin_state, origin_zip, destination_state) +FROM shipping +GROUP BY GROUPING SETS ( + (origin_state), + (origin_state, origin_zip), + (destination_state) +); + +-- ORDER BY +SELECT * FROM table1 ORDER BY a; +-- Select expressions +SELECT (CAST(ROW(1, true) AS ROW(field1 bigint, field2 boolean))).* AS (alias1, alias2); +SELECT (CAST(ROW(1, true) AS ROW(field1 bigint, field2 boolean))).*; +SELECT (ROW(1, true)).*; +-- LIMIT +SELECT * FROM table1 LIMIT 2; +SELECT * FROM table1 LIMIT ALL; +SELECT * FROM (VALUES (1, '1'), (2, '2')) LIMIT ALL; +-- HAVING +SELECT count(*), mktsegment, nationkey, + CAST(sum(acctbal) AS bigint) AS totalbal +FROM customer +GROUP BY mktsegment, nationkey +HAVING sum(acctbal) > 5700000 +ORDER BY totalbal DESC; +-- WINDOW +SELECT orderkey, clerk, totalprice, + rank() OVER w AS rnk +FROM orders +WINDOW w AS (PARTITION BY clerk ORDER BY totalprice DESC) +ORDER BY count() OVER w, clerk, rnk +-- AGGREGATION FILTER/ ORDER BY +SELECT SUM(x) FILTER (WHERE x > 4); +SELECT array_agg(x ORDER BY t.y) FROM t; +-- INTERSECT +SELECT 123 INTERSECT DISTINCT SELECT 123 INTERSECT ALL SELECT 123; +-- substring_built_in_function +SELECT substring('string' FROM 2); +SELECT substring('string' FROM 2 FOR 3); diff --git a/test/parser/trinosql/syntax/fixtures/select_with_ unnest.sql b/test/parser/trinosql/syntax/fixtures/select_with_ unnest.sql new file mode 100644 index 0000000..b045898 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_ unnest.sql @@ -0,0 +1,56 @@ +SELECT * FROM UNNEST(ARRAY[1,2]) AS t(number); + +SELECT * FROM UNNEST( + map_from_entries( + ARRAY[ + ('SQL',1974), + ('Java', 1995) + ] + ) +) AS t(language, first_appeared_year); + +SELECT * +FROM UNNEST( + ARRAY[ + ROW('Java', 1995), + ROW('SQL' , 1974)], + ARRAY[ + ROW(false), + ROW(true)] +) as t(language,first_appeared_year,declarative); + +SELECT a, b, rownumber +FROM UNNEST ( + ARRAY[2, 5], + ARRAY[7, 8, 9] + ) WITH ORDINALITY AS t(a, b, rownumber); + +SELECT * FROM UNNEST (ARRAY[]) AS t(value); + +SELECT * FROM UNNEST (CAST(null AS ARRAY(integer))) AS t(number); + +SELECT student, score +FROM ( + VALUES + ('John', ARRAY[7, 10, 9]), + ('Mary', ARRAY[4, 8, 9]) +) AS tests (student, scores) +CROSS JOIN UNNEST(scores) AS t(score); + +SELECT numbers, animals, n, a +FROM ( + VALUES + (ARRAY[2, 5], ARRAY['dog', 'cat', 'bird']), + (ARRAY[7, 8, 9], ARRAY['cow', 'pig']) +) AS x (numbers, animals) +CROSS JOIN UNNEST(numbers, animals) AS t (n, a); + +SELECT runner, checkpoint +FROM ( + VALUES + ('Joe', ARRAY[10, 20, 30, 42]), + ('Roger', ARRAY[10]), + ('Dave', ARRAY[]), + ('Levi', NULL) +) AS marathon (runner, checkpoints) +LEFT JOIN UNNEST(checkpoints) AS t(checkpoint) ON TRUE; diff --git a/test/parser/trinosql/syntax/fixtures/select_with_clause.sql b/test/parser/trinosql/syntax/fixtures/select_with_clause.sql new file mode 100644 index 0000000..ac4fec5 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_clause.sql @@ -0,0 +1,28 @@ +SELECT a, b +FROM ( + SELECT a, MAX(b) AS b FROM t GROUP BY a +) AS x; + +WITH x AS (SELECT a, MAX(b) AS b FROM t GROUP BY a) +SELECT a, b FROM x; + +WITH + t1 AS (SELECT a, MAX(b) AS b FROM x GROUP BY a), + t2 AS (SELECT a, AVG(d) AS d FROM y GROUP BY a) +SELECT t1.*, t2.* +FROM t1 +JOIN t2 ON t1.a = t2.a; + +WITH + x AS (SELECT a FROM t), + y AS (SELECT a AS b FROM x), + z AS (SELECT b AS c FROM y) +SELECT c FROM z; + +WITH RECURSIVE t(n) AS ( + VALUES (1) + UNION ALL + SELECT n + 1 FROM t WHERE n < 4 +) +SELECT sum(n) FROM t; + diff --git a/test/parser/trinosql/syntax/fixtures/select_with_exists.sql b/test/parser/trinosql/syntax/fixtures/select_with_exists.sql new file mode 100644 index 0000000..328a6a2 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_exists.sql @@ -0,0 +1,4 @@ +SELECT EXISTS(SELECT 1); +SELECT EXISTS(SELECT 1) = EXISTS(SELECT 2); +SELECT NOT EXISTS(SELECT 1) = EXISTS(SELECT 2); +SELECT (NOT EXISTS(SELECT 1)) = EXISTS(SELECT 2); diff --git a/test/parser/trinosql/syntax/fixtures/select_with_fetch.sql b/test/parser/trinosql/syntax/fixtures/select_with_fetch.sql new file mode 100644 index 0000000..7e622f9 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_fetch.sql @@ -0,0 +1,6 @@ +SELECT * FROM table1 FETCH FIRST 2 ROWS ONLY; +SELECT * FROM table1 FETCH NEXT ROW ONLY; +SELECT * FROM (VALUES (1, '1'), (2, '2')) FETCH FIRST ROW ONLY; +SELECT * FROM (VALUES (1, '1'), (2, '2')) FETCH FIRST ROW WITH TIES; +SELECT * FROM table1 FETCH FIRST 2 ROWS WITH TIES; +SELECT * FROM table1 FETCH NEXT ROW WITH TIES; diff --git a/test/parser/trinosql/syntax/fixtures/select_with_join.sql b/test/parser/trinosql/syntax/fixtures/select_with_join.sql new file mode 100644 index 0000000..3d8b176 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_join.sql @@ -0,0 +1,23 @@ +SELECT * FROM users CROSS JOIN UNNEST(friends) WITH ordinality; +-- LATERAL +SELECT name, x, y +FROM nation +CROSS JOIN LATERAL (SELECT name || ' :-' AS x) +CROSS JOIN LATERAL (SELECT x || ')' AS y); + +-- Qualifying column names# + +SELECT nation.name, region.name +FROM nation +CROSS JOIN region; + +SELECT n.name, r.name +FROM nation AS n +CROSS JOIN region AS r; + +SELECT n.name, r.name +FROM nation n +CROSS JOIN region r; + +SELECT * FROM a CROSS JOIN b LEFT JOIN c ON true; +SELECT * FROM a CROSS JOIN b NATURAL JOIN c CROSS JOIN d NATURAL JOIN e; diff --git a/test/parser/trinosql/syntax/fixtures/select_with_offset.sql b/test/parser/trinosql/syntax/fixtures/select_with_offset.sql new file mode 100644 index 0000000..9823f96 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_offset.sql @@ -0,0 +1,4 @@ +SELECT * FROM table1 OFFSET 2 ROWS; +SELECT * FROM table1 OFFSET 2; +SELECT * FROM (VALUES (1, '1'), (2, '2')) OFFSET 2 ROWS; +SELECT * FROM (VALUES (1, '1'), (2, '2')) OFFSET 2; diff --git a/test/parser/trinosql/syntax/fixtures/select_with_row_type.sql b/test/parser/trinosql/syntax/fixtures/select_with_row_type.sql new file mode 100644 index 0000000..0f9cb33 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_row_type.sql @@ -0,0 +1,6 @@ +SELECT col1.f1, col2, col3.f1.f2.f3 FROM table1; +SELECT col1.f1[0], col2, col3[2].f2.f3, col4[4] FROM table1; +SELECT CAST(ROW(11, 12) AS ROW(COL0 INTEGER, COL1 INTEGER)).col0; +-- ALL COLUMNS +SELECT ROW (1, 'a', true).*; +SELECT ROW (1, 'a', true).* AS (f1, f2, f3); \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/select_with_set_operations.sql b/test/parser/trinosql/syntax/fixtures/select_with_set_operations.sql new file mode 100644 index 0000000..9750304 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_set_operations.sql @@ -0,0 +1,16 @@ +-- UNION +SELECT 13 +UNION +SELECT 42; + +SELECT 13 +UNION +SELECT * FROM (VALUES 42, 13); +-- INTERSECT +SELECT * FROM (VALUES 13, 42) +INTERSECT +SELECT 13; +--EXCEPT +SELECT * FROM (VALUES 13, 42) +EXCEPT +SELECT 13; \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/select_with_sub_queries.sql b/test/parser/trinosql/syntax/fixtures/select_with_sub_queries.sql new file mode 100644 index 0000000..d27a69c --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_sub_queries.sql @@ -0,0 +1,20 @@ +-- EXISTS +SELECT name +FROM nation +WHERE EXISTS ( + SELECT * + FROM region + WHERE region.regionkey = nation.regionkey +); +-- IN +SELECT name +FROM nation +WHERE regionkey IN ( + SELECT regionkey + FROM region + WHERE name = 'AMERICA' OR name = 'AFRICA' +); +-- Scalar subquery +SELECT name +FROM nation +WHERE regionkey = (SELECT max(regionkey) FROM region); \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/select_with_table_sample.sql b/test/parser/trinosql/syntax/fixtures/select_with_table_sample.sql new file mode 100644 index 0000000..eb26fae --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_table_sample.sql @@ -0,0 +1,10 @@ +SELECT * +FROM users TABLESAMPLE BERNOULLI (50); + +SELECT * +FROM users TABLESAMPLE SYSTEM (75); + +SELECT o.*, i.* +FROM orders o TABLESAMPLE SYSTEM (10) +JOIN lineitem i TABLESAMPLE BERNOULLI (40) + ON o.orderkey = i.orderkey; \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/select_with_union.sql b/test/parser/trinosql/syntax/fixtures/select_with_union.sql new file mode 100644 index 0000000..e0dc0e0 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/select_with_union.sql @@ -0,0 +1,2 @@ +SELECT 123 UNION DISTINCT +SELECT 123 UNION ALL SELECT 123; diff --git a/test/parser/trinosql/syntax/fixtures/set_path.sql b/test/parser/trinosql/syntax/fixtures/set_path.sql new file mode 100644 index 0000000..83e78fb --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/set_path.sql @@ -0,0 +1,2 @@ +SET PATH iLikeToEat.apples, andBananas; +SET PATH "schemas,with"."grammar.in", "their!names"; diff --git a/test/parser/trinosql/syntax/fixtures/set_role.sql b/test/parser/trinosql/syntax/fixtures/set_role.sql new file mode 100644 index 0000000..b898674 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/set_role.sql @@ -0,0 +1,5 @@ +SET ROLE ALL; +SET ROLE NONE; +SET ROLE role; +SET ROLE "role"; +SET ROLE role IN my_catalog; diff --git a/test/parser/trinosql/syntax/fixtures/set_session.sql b/test/parser/trinosql/syntax/fixtures/set_session.sql new file mode 100644 index 0000000..159d4b9 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/set_session.sql @@ -0,0 +1,4 @@ +SET SESSION foo = 'bar'; +SET SESSION foo.bar = 'baz'; +SET SESSION foo.bar.boo = 'baz'; +SET SESSION foo.bar = 'ban' || 'ana'; diff --git a/test/parser/trinosql/syntax/fixtures/set_time_zone.sql b/test/parser/trinosql/syntax/fixtures/set_time_zone.sql new file mode 100644 index 0000000..2412bf4 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/set_time_zone.sql @@ -0,0 +1,10 @@ +SET TIME ZONE LOCAL; + +SET TIME ZONE '-08:00'; + +SET TIME ZONE INTERVAL '10' HOUR; +SET TIME ZONE INTERVAL -'08:00' HOUR TO MINUTE; + +SET TIME ZONE 'America/Los_Angeles'; + +SET TIME ZONE concat_ws('/', 'America', 'Los_Angeles'); diff --git a/test/parser/trinosql/syntax/fixtures/show_catalogs.sql b/test/parser/trinosql/syntax/fixtures/show_catalogs.sql new file mode 100644 index 0000000..5d10be3 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_catalogs.sql @@ -0,0 +1,3 @@ +SHOW CATALOGS; +SHOW CATALOGS LIKE '%'; +SHOW CATALOGS LIKE '%$_%' ESCAPE '$'; diff --git a/test/parser/trinosql/syntax/fixtures/show_columns.sql b/test/parser/trinosql/syntax/fixtures/show_columns.sql new file mode 100644 index 0000000..aa3f4a1 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_columns.sql @@ -0,0 +1,5 @@ +SHOW COLUMNS FROM a; +SHOW COLUMNS FROM a.b; +SHOW COLUMNS FROM "awesome table"; +SHOW COLUMNS FROM "awesome schema"."awesome table"; +SHOW COLUMNS FROM a.b LIKE '%$_%' ESCAPE '$'; diff --git a/test/parser/trinosql/syntax/fixtures/show_create.sql b/test/parser/trinosql/syntax/fixtures/show_create.sql new file mode 100644 index 0000000..083d87c --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_create.sql @@ -0,0 +1,16 @@ +SHOW CREATE TABLE sf1.orders; + +SHOW CREATE SCHEMA IF NOT EXISTS traffic; + +SHOW CREATE VIEW test AS +SELECT orderkey, orderstatus, totalprice / 2 AS half +FROM orders; + +SHOW CREATE MATERIALIZED VIEW cancelled_orders +AS + SELECT orderkey, totalprice + FROM orders + WHERE orderstatus = 3; + + + diff --git a/test/parser/trinosql/syntax/fixtures/show_functions.sql b/test/parser/trinosql/syntax/fixtures/show_functions.sql new file mode 100644 index 0000000..56d2515 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_functions.sql @@ -0,0 +1,3 @@ +SHOW FUNCTIONS; +SHOW FUNCTIONS LIKE '%'; +SHOW FUNCTIONS LIKE '%' ESCAPE '$'; diff --git a/test/parser/trinosql/syntax/fixtures/show_grants.sql b/test/parser/trinosql/syntax/fixtures/show_grants.sql new file mode 100644 index 0000000..a79ccab --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_grants.sql @@ -0,0 +1,3 @@ +SHOW GRANTS ON TABLE t; +SHOW GRANTS ON t; +SHOW GRANTS; diff --git a/test/parser/trinosql/syntax/fixtures/show_role_grants.sql b/test/parser/trinosql/syntax/fixtures/show_role_grants.sql new file mode 100644 index 0000000..78f29ac --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_role_grants.sql @@ -0,0 +1,2 @@ +SHOW ROLE GRANTS; +SHOW ROLE GRANTS FROM catalog; diff --git a/test/parser/trinosql/syntax/fixtures/show_roles.sql b/test/parser/trinosql/syntax/fixtures/show_roles.sql new file mode 100644 index 0000000..41a9b09 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_roles.sql @@ -0,0 +1,6 @@ +SHOW ROLES; +SHOW ROLES FROM foo; +SHOW ROLES IN foo; +SHOW CURRENT ROLES; +SHOW CURRENT ROLES FROM foo; +SHOW CURRENT ROLES IN foo; diff --git a/test/parser/trinosql/syntax/fixtures/show_schemas.sql b/test/parser/trinosql/syntax/fixtures/show_schemas.sql new file mode 100644 index 0000000..d3abf0b --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_schemas.sql @@ -0,0 +1,4 @@ +SHOW SCHEMAS; +SHOW SCHEMAS FROM foo; +SHOW SCHEMAS IN foo LIKE '%'; +SHOW SCHEMAS IN foo LIKE '%$_%' ESCAPE '$'; diff --git a/test/parser/trinosql/syntax/fixtures/show_session.sql b/test/parser/trinosql/syntax/fixtures/show_session.sql new file mode 100644 index 0000000..f24f628 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_session.sql @@ -0,0 +1,3 @@ +SHOW SESSION; +SHOW SESSION LIKE '%'; +SHOW SESSION LIKE '%' ESCAPE '$'; diff --git a/test/parser/trinosql/syntax/fixtures/show_stats.sql b/test/parser/trinosql/syntax/fixtures/show_stats.sql new file mode 100644 index 0000000..4c3cc1a --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_stats.sql @@ -0,0 +1 @@ +SHOW STATS FOR a; diff --git a/test/parser/trinosql/syntax/fixtures/show_stats_for_query.sql b/test/parser/trinosql/syntax/fixtures/show_stats_for_query.sql new file mode 100644 index 0000000..33004e4 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_stats_for_query.sql @@ -0,0 +1,3 @@ +SHOW STATS FOR (SELECT * FROM a); +SHOW STATS FOR (SELECT * FROM a WHERE field > 0); +SHOW STATS FOR (SELECT * FROM a WHERE field > 0 or field < 0); diff --git a/test/parser/trinosql/syntax/fixtures/show_tables.sql b/test/parser/trinosql/syntax/fixtures/show_tables.sql new file mode 100644 index 0000000..ba0fef2 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/show_tables.sql @@ -0,0 +1,4 @@ +SHOW TABLES; +SHOW TABLES FROM a; +SHOW TABLES FROM "awesome schema"; +SHOW TABLES IN a LIKE '%$_%' ESCAPE '$'; diff --git a/test/parser/trinosql/syntax/fixtures/start_transaction.sql b/test/parser/trinosql/syntax/fixtures/start_transaction.sql new file mode 100644 index 0000000..42c61f7 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/start_transaction.sql @@ -0,0 +1,10 @@ +START TRANSACTION; +START TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +START TRANSACTION ISOLATION LEVEL READ COMMITTED; +START TRANSACTION ISOLATION LEVEL REPEATABLE READ; +START TRANSACTION ISOLATION LEVEL SERIALIZABLE; +START TRANSACTION READ ONLY; +START TRANSACTION READ WRITE; +START TRANSACTION ISOLATION LEVEL READ COMMITTED, READ ONLY; +START TRANSACTION READ ONLY, ISOLATION LEVEL READ COMMITTED; +START TRANSACTION READ WRITE, ISOLATION LEVEL SERIALIZABLE; diff --git a/test/parser/trinosql/syntax/fixtures/substring_built_in_function.sql b/test/parser/trinosql/syntax/fixtures/substring_built_in_function.sql new file mode 100644 index 0000000..448b439 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/substring_built_in_function.sql @@ -0,0 +1,2 @@ +SELECT substring('string' FROM 2); +SELECT substring('string' FROM 2 FOR 3); diff --git a/test/parser/trinosql/syntax/fixtures/truncate_table.sql b/test/parser/trinosql/syntax/fixtures/truncate_table.sql new file mode 100644 index 0000000..ca27e40 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/truncate_table.sql @@ -0,0 +1,3 @@ +TRUNCATE TABLE a; +TRUNCATE TABLE a.b; +TRUNCATE TABLE a.b.c; diff --git a/test/parser/trinosql/syntax/fixtures/update.sql b/test/parser/trinosql/syntax/fixtures/update.sql new file mode 100644 index 0000000..5347f31 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/update.sql @@ -0,0 +1,10 @@ +UPDATE foo_tablen SET bar = 23, baz = 3.1415E0, bletch = 'barf' WHERE (nothing = 'fun'); + +UPDATE new_hires SET manager = ( + SELECT + e.name + FROM + employees e + WHERE + e.employee_id = new_hires.manager_id +); diff --git a/test/parser/trinosql/syntax/fixtures/use.sql b/test/parser/trinosql/syntax/fixtures/use.sql new file mode 100644 index 0000000..94d98a7 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/use.sql @@ -0,0 +1,2 @@ +USE hive.finance; +USE information_schema; \ No newline at end of file diff --git a/test/parser/trinosql/syntax/fixtures/values.sql b/test/parser/trinosql/syntax/fixtures/values.sql new file mode 100644 index 0000000..8618d5c --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/values.sql @@ -0,0 +1,2 @@ +VALUES ('a', 1, 2.2e0), ('b', 2, 3.3e0); +SELECT * FROM (VALUES ('a', 1, 2.2e0), ('b', 2, 3.3e0)); diff --git a/test/parser/trinosql/syntax/fixtures/window_with_row_pattern_recognition.sql b/test/parser/trinosql/syntax/fixtures/window_with_row_pattern_recognition.sql new file mode 100644 index 0000000..47cce39 --- /dev/null +++ b/test/parser/trinosql/syntax/fixtures/window_with_row_pattern_recognition.sql @@ -0,0 +1,14 @@ +SELECT cust_key, value OVER w, label OVER w + FROM orders + WINDOW w AS ( + PARTITION BY cust_key + ORDER BY order_date + MEASURES + RUNNING LAST(total_price) AS value, + CLASSIFIER() AS label + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + PATTERN (A B+ C+) + DEFINE + B AS B.value < PREV (B.value), + C AS C.value > PREV (C.value) + ); diff --git a/test/parser/trinosql/syntax/grantStatement.test.ts b/test/parser/trinosql/syntax/grantStatement.test.ts new file mode 100644 index 0000000..911eab8 --- /dev/null +++ b/test/parser/trinosql/syntax/grantStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + grant: readSQL(__dirname, 'grant.sql'), +}; + +describe('TrinoSQL Grant Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // grant statements + features.grant.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/insertStatement.test.ts b/test/parser/trinosql/syntax/insertStatement.test.ts new file mode 100644 index 0000000..6fdc11a --- /dev/null +++ b/test/parser/trinosql/syntax/insertStatement.test.ts @@ -0,0 +1,16 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + insertIntoTable: readSQL(__dirname, 'insert_into.sql'), +}; + +describe('TrinoSQL Insert Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + features.insertIntoTable.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/matchRecognizeStatement.test.ts b/test/parser/trinosql/syntax/matchRecognizeStatement.test.ts new file mode 100644 index 0000000..0d11abd --- /dev/null +++ b/test/parser/trinosql/syntax/matchRecognizeStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + matchRecognize: readSQL(__dirname, 'match_recognize.sql'), +}; + +describe('TrinoSQL Match Recognize Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // match recognize statements + features.matchRecognize.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/merge.test.ts b/test/parser/trinosql/syntax/merge.test.ts new file mode 100644 index 0000000..ec7856e --- /dev/null +++ b/test/parser/trinosql/syntax/merge.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + merge: readSQL(__dirname, 'merge.sql'), +}; + +describe('TrinoSQL Merge Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // merge statements + features.merge.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/prepareStatement.test.ts b/test/parser/trinosql/syntax/prepareStatement.test.ts new file mode 100644 index 0000000..a9e8a01 --- /dev/null +++ b/test/parser/trinosql/syntax/prepareStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + prepare: readSQL(__dirname, 'prepare.sql'), +}; + +describe('TrinoSQL Prepare Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // prepare statements + features.prepare.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/refreshMaterializedViewStatement.test.ts b/test/parser/trinosql/syntax/refreshMaterializedViewStatement.test.ts new file mode 100644 index 0000000..072f65d --- /dev/null +++ b/test/parser/trinosql/syntax/refreshMaterializedViewStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + refreshMaterializedView: readSQL(__dirname, 'refresh_materialized_view.sql'), +}; + +describe('TrinoSQL Refresh Materialized View Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // refresh materialized view statements + features.refreshMaterializedView.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/resetSessionStatement.test.ts b/test/parser/trinosql/syntax/resetSessionStatement.test.ts new file mode 100644 index 0000000..c2c425d --- /dev/null +++ b/test/parser/trinosql/syntax/resetSessionStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + resetSession: readSQL(__dirname, 'reset_session.sql'), +}; + +describe('TrinoSQL Reset Session Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // reset session statements + features.resetSession.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/revokeStatement.test.ts b/test/parser/trinosql/syntax/revokeStatement.test.ts new file mode 100644 index 0000000..b9a21ec --- /dev/null +++ b/test/parser/trinosql/syntax/revokeStatement.test.ts @@ -0,0 +1,23 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + revoke: readSQL(__dirname, 'revoke.sql'), + revokeRoles: readSQL(__dirname, 'revoke_roles.sql'), +}; + +describe('TrinoSQL Revoke Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // revoke statements + features.revoke.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.revokeRoles.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/rollbackTransactionStatement.test.ts b/test/parser/trinosql/syntax/rollbackTransactionStatement.test.ts new file mode 100644 index 0000000..1b0a64c --- /dev/null +++ b/test/parser/trinosql/syntax/rollbackTransactionStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + rollbackTransaction: readSQL(__dirname, 'rollback_transaction.sql'), +}; + +describe('TrinoSQL Rollback Transaction Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // rollback transaction statements + features.rollbackTransaction.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/selectStatement.test.ts b/test/parser/trinosql/syntax/selectStatement.test.ts new file mode 100644 index 0000000..499dd83 --- /dev/null +++ b/test/parser/trinosql/syntax/selectStatement.test.ts @@ -0,0 +1,83 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + select: readSQL(__dirname, 'select.sql'), + selectWithClause: readSQL(__dirname, 'select_with_clause.sql'), + selectWithSetOperations: readSQL(__dirname, 'select_with_set_operations.sql'), + selectWithSubQueries: readSQL(__dirname, 'select_with_sub_queries.sql'), + selectWithTableSample: readSQL(__dirname, 'select_with_table_sample.sql'), + selectWithRowType: readSQL(__dirname, 'select_with_row_type.sql'), + selectWithOffset: readSQL(__dirname, 'select_with_offset.sql'), + selectWithJoin: readSQL(__dirname, 'select_with_join.sql'), + selectWithFetch: readSQL(__dirname, 'select_with_fetch.sql'), + selectWithUNNEST: readSQL(__dirname, 'select_with_ unnest.sql'), + selectWithExists: readSQL(__dirname, 'select_with_exists.sql'), + selectWithUnion: readSQL(__dirname, 'select_with_union.sql') +}; + +describe('TrinoSQL Select Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + features.select.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithClause.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithSetOperations.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + + features.selectWithSubQueries.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithTableSample.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithRowType.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithOffset.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithJoin.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithFetch.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithUNNEST.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithExists.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.selectWithUnion.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/setStatement.test.ts b/test/parser/trinosql/syntax/setStatement.test.ts new file mode 100644 index 0000000..ced2703 --- /dev/null +++ b/test/parser/trinosql/syntax/setStatement.test.ts @@ -0,0 +1,35 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + role: readSQL(__dirname, 'set_role.sql'), + session: readSQL(__dirname, 'set_session.sql'), + path: readSQL(__dirname, 'set_path.sql'), + timeZone: readSQL(__dirname, 'set_time_zone.sql'), +}; + +describe('TrinoSQL Set Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // set statements + features.role.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.path.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.session.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.timeZone.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/showStatement.test.ts b/test/parser/trinosql/syntax/showStatement.test.ts new file mode 100644 index 0000000..53ebeee --- /dev/null +++ b/test/parser/trinosql/syntax/showStatement.test.ts @@ -0,0 +1,78 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + tables: readSQL(__dirname, 'show_tables.sql'), + catalogs: readSQL(__dirname, 'show_catalogs.sql'), + columns: readSQL(__dirname, 'show_columns.sql'), + functions: readSQL(__dirname, 'show_functions.sql'), + grants: readSQL(__dirname, 'show_grants.sql'), + roleGrants: readSQL(__dirname, 'show_role_grants.sql'), + roles: readSQL(__dirname, 'show_roles.sql'), + schemas: readSQL(__dirname, 'show_schemas.sql'), + session: readSQL(__dirname, 'show_session.sql'), + statsForQuery: readSQL(__dirname, 'show_stats_for_query.sql'), + stats: readSQL(__dirname, 'show_stats.sql'), + create: readSQL(__dirname, 'show_create.sql'), +}; + +describe('TrinoSQL Show Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // show statements + features.tables.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.catalogs.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.columns.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.functions.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.grants.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.roleGrants.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.roles.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.schemas.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.session.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.statsForQuery.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); + features.stats.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/startTransactionStatement.test.ts b/test/parser/trinosql/syntax/startTransactionStatement.test.ts new file mode 100644 index 0000000..3cbaef2 --- /dev/null +++ b/test/parser/trinosql/syntax/startTransactionStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + startTransaction: readSQL(__dirname, 'start_transaction.sql'), +}; + +describe('TrinoSQL Start Transaction Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // start transaction statements + features.startTransaction.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/truncateTableStatement.test.ts b/test/parser/trinosql/syntax/truncateTableStatement.test.ts new file mode 100644 index 0000000..4c43b49 --- /dev/null +++ b/test/parser/trinosql/syntax/truncateTableStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + truncateTable: readSQL(__dirname, 'truncate_table.sql'), +}; + +describe('TrinoSQL Truncate Table Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // truncate table statements + features.truncateTable.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/updateStatement.test.ts b/test/parser/trinosql/syntax/updateStatement.test.ts new file mode 100644 index 0000000..03e2461 --- /dev/null +++ b/test/parser/trinosql/syntax/updateStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + update: readSQL(__dirname, 'update.sql'), +}; + +describe('TrinoSQL Update Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // update statements + features.update.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/useStatement.test.ts b/test/parser/trinosql/syntax/useStatement.test.ts new file mode 100644 index 0000000..ead39e2 --- /dev/null +++ b/test/parser/trinosql/syntax/useStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + use: readSQL(__dirname, 'use.sql'), +}; + +describe('TrinoSQL Use Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // use statements + features.use.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/valuesStatement.test.ts b/test/parser/trinosql/syntax/valuesStatement.test.ts new file mode 100644 index 0000000..fb5a369 --- /dev/null +++ b/test/parser/trinosql/syntax/valuesStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + values: readSQL(__dirname, 'values.sql'), +}; + +describe('TrinoSQL Values Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // values statements + features.values.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/syntax/windowWithRowPatternRecognitionStatement.test.ts b/test/parser/trinosql/syntax/windowWithRowPatternRecognitionStatement.test.ts new file mode 100644 index 0000000..d4e7b73 --- /dev/null +++ b/test/parser/trinosql/syntax/windowWithRowPatternRecognitionStatement.test.ts @@ -0,0 +1,17 @@ +import TrinoSQL from "../../../../src/parser/trinosql"; +import { readSQL } from "../../../helper"; + +const features = { + windowWithRowPatternRecognition: readSQL(__dirname, 'window_with_row_pattern_recognition.sql'), +}; + +describe('TrinoSQL Window With Row Pattern Recognition Statements Syntax Tests', () => { + const parser = new TrinoSQL(); + // window with row pattern recognition statements + features.windowWithRowPatternRecognition.forEach((sql) => { + it(sql, () => { + expect(parser.validate(sql).length).toBe(0); + }); + }); +}); + diff --git a/test/parser/trinosql/visitor.test.ts b/test/parser/trinosql/visitor.test.ts new file mode 100644 index 0000000..99bf0b0 --- /dev/null +++ b/test/parser/trinosql/visitor.test.ts @@ -0,0 +1,25 @@ +import trinoSQL from '../../../src/parser/trinosql'; +import trinoSqlParserVisitor from '../../../src/lib/trinosql/trinoSqlParserVisitor'; + +describe('trino SQL Visitor Tests', () => { + const expectTableName = 'user1'; + const sql = `select id,name,sex from ${expectTableName};`; + const parser = new trinoSQL(); + + const parserTree = parser.parse(sql, (error) => { + console.log('Parse error:', error); + }); + + test('Visitor visitTableName', () => { + let result = ''; + class MyVisitor extends trinoSqlParserVisitor{ + visitTableExpression = (ctx): void => { + result = ctx.getText().toLowerCase(); + } + } + const visitor: any = new MyVisitor(); + visitor.visit(parserTree); + + expect(result).toBe(expectTableName); + }); +});