From b996a6b24a8da297262b95c7cb21a62e4347496c Mon Sep 17 00:00:00 2001 From: Zhong Xu Date: Tue, 10 Jan 2023 15:24:38 -0800 Subject: [PATCH 01/25] planner2_dummy --- .gitignore | 4 + datafusion/sql/Cargo.toml | 1 + datafusion/sql/src/antlr/Presto.g4 | 1234 + datafusion/sql/src/antlr/presto/Presto.interp | 757 + datafusion/sql/src/antlr/presto/Presto.tokens | 620 + .../sql/src/antlr/presto/PrestoLexer.interp | 971 + .../sql/src/antlr/presto/PrestoLexer.tokens | 619 + .../sql/src/antlr/presto/prestolexer.rs | 2315 + .../sql/src/antlr/presto/prestolistener.rs | 3332 ++ .../sql/src/antlr/presto/prestoparser.rs | 43111 ++++++++++++++++ datafusion/sql/src/lib.rs | 10 + datafusion/sql/src/planner2.rs | 66 + 12 files changed, 53040 insertions(+) create mode 100644 datafusion/sql/src/antlr/Presto.g4 create mode 100644 datafusion/sql/src/antlr/presto/Presto.interp create mode 100644 datafusion/sql/src/antlr/presto/Presto.tokens create mode 100644 datafusion/sql/src/antlr/presto/PrestoLexer.interp create mode 100644 datafusion/sql/src/antlr/presto/PrestoLexer.tokens create mode 100644 datafusion/sql/src/antlr/presto/prestolexer.rs create mode 100644 datafusion/sql/src/antlr/presto/prestolistener.rs create mode 100644 datafusion/sql/src/antlr/presto/prestoparser.rs create mode 100644 datafusion/sql/src/planner2.rs diff --git a/.gitignore b/.gitignore index 1c68e313a8640..4665693faf5d1 100644 --- a/.gitignore +++ b/.gitignore @@ -100,3 +100,7 @@ dev/dist arrow-ballista datafusion/CHANGELOG.md.bak + +# antlr +.antlr +*.jar \ No newline at end of file diff --git a/datafusion/sql/Cargo.toml b/datafusion/sql/Cargo.toml index 4dfd9b97cda5a..0384871676aca 100644 --- a/datafusion/sql/Cargo.toml +++ b/datafusion/sql/Cargo.toml @@ -42,3 +42,4 @@ datafusion-common = { path = "../common", version = "16.0.0" } datafusion-expr = { path = "../expr", version = "16.0.0" } log = "^0.4" sqlparser = "0.30" +antlr-rust = "0.3.0-beta" \ No newline at end of file diff --git a/datafusion/sql/src/antlr/Presto.g4 b/datafusion/sql/src/antlr/Presto.g4 new file mode 100644 index 0000000000000..f880f96a62758 --- /dev/null +++ b/datafusion/sql/src/antlr/Presto.g4 @@ -0,0 +1,1234 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +grammar Presto; + +@tokenfactory{ +pub type LocalTokenFactory<'input> = antlr_rust::token_factory::ArenaCommonFactory<'input>; +} + +tokens { + DELIMITER +} + +singleStatement + : statement EOF + ; + +standaloneExpression + : expression EOF + ; + +standalonePathSpecification + : pathSpecification EOF + ; + +standaloneType + : type_ EOF + ; + +standaloneRowPattern + : rowPattern EOF + ; + +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 + | COMMENT ON TABLE qualifiedName IS (string | NULL) #commentTable + | COMMENT ON VIEW qualifiedName IS (string | NULL) #commentView + | COMMENT ON COLUMN qualifiedName IS (string | NULL) #commentColumn + | ALTER TABLE (IF EXISTS)? from=qualifiedName + RENAME TO to=qualifiedName #renameTable + | ALTER TABLE (IF EXISTS)? tableName=qualifiedName + ADD COLUMN (IF NOT EXISTS)? column=columnDefinition #addColumn + | 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 + ALTER COLUMN columnName=identifier SET DATA TYPE type_ #setColumnType + | 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 + (GRACE PERIOD interval)? + (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 (IN catalog=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 ('(' explainOption (',' explainOption)* ')')? statement #explain + | EXPLAIN ANALYZE VERBOSE? statement #explainAnalyze + | 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 + ; + +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? querySelectItems + (FROM relation (',' relation)*)? + (WHERE where_=booleanExpression)? + (GROUP BY groupBy)? + (HAVING having=booleanExpression)? + (WINDOW windowDefinition (',' windowDefinition)*)? + ; + +querySelectItems + : selectItem (COMMA selectItem)* + ; + +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 + ; + +trimsSpecification + : LEADING + | TRAILING + | BOTH + ; + +listAggOverflowBehavior + : ERROR + | TRUNCATE string? listaggCountIndication + ; + +listaggCountIndication + : WITH COUNT + | WITHOUT COUNT + ; + +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 queryPeriod? #tableName + | '(' query ')' #subqueryRelation + | UNNEST '(' expression (',' expression)* ')' (WITH ORDINALITY)? #unnest + | LATERAL '(' query ')' #lateral + | TABLE '(' tableFunctionCall ')' #tableFunctionInvocation + | '(' relation ')' #parenthesizedRelation + ; + +tableFunctionCall + : qualifiedName '(' (tableFunctionArgument (',' tableFunctionArgument)*)? + (COPARTITION copartitionTables (',' copartitionTables)*)? ')' + ; + +tableFunctionArgument + : (identifier '=>')? (tableArgument | descriptorArgument | expression) // descriptor before expression to avoid parsing descriptor as a function call + ; + +tableArgument + : tableArgumentRelation + (PARTITION BY ('(' (expression (',' expression)*)? ')' | expression))? + (PRUNE WHEN EMPTY | KEEP WHEN EMPTY)? + (ORDER BY ('(' sortItem (',' sortItem)* ')' | sortItem))? + ; + +tableArgumentRelation + : TABLE '(' qualifiedName ')' (AS? identifier columnAliases?)? #tableArgumentTable + | TABLE '(' query ')' (AS? identifier columnAliases?)? #tableArgumentQuery + ; + +descriptorArgument + : DESCRIPTOR '(' descriptorField (',' descriptorField)* ')' + | CAST '(' NULL AS DESCRIPTOR ')' + ; + +descriptorField + : identifier type_? + ; + +copartitionTables + : '(' qualifiedName ',' qualifiedName (',' qualifiedName)* ')' + ; + +expression + : booleanExpression + ; + +booleanExpression + : valueExpression predicate? #predicated + | NOT booleanExpression #logicalNot + | booleanExpression AND booleanExpression #and + | booleanExpression OR booleanExpression #or + ; + +// workaround for https://github.com/antlr/antlr4/issues/780 +predicate + : 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 + | name=LISTAGG '(' setQuantifier? expression (',' string)? + (ON OVERFLOW listAggOverflowBehavior)? ')' + (WITHIN GROUP '(' ORDER BY sortItem (',' sortItem)* ')') #listagg + | processingMode? qualifiedName '(' (label=identifier '.')? 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 + | TRIM '(' (trimsSpecification? trimChar=valueExpression? FROM)? + trimSource=valueExpression ')' #trim + | TRIM '(' trimSource=valueExpression ',' trimChar=valueExpression ')' #trim + | SUBSTRING '(' valueExpression FROM valueExpression (FOR valueExpression)? ')' #substring + | NORMALIZE '(' valueExpression (',' normalForm)? ')' #normalize + | EXTRACT '(' identifier FROM valueExpression ')' #extract + | '(' expression ')' #parenthesizedExpression + | GROUPING '(' (qualifiedName (',' qualifiedName)*)? ')' #groupingOperation + | JSON_EXISTS '(' jsonPathInvocation (jsonExistsErrorBehavior ON ERROR)? ')' #jsonExists + | JSON_VALUE '(' + jsonPathInvocation + (RETURNING type_)? + (emptyBehavior=jsonValueBehavior ON EMPTY)? + (errorBehavior=jsonValueBehavior ON ERROR)? + ')' #jsonValue + | JSON_QUERY '(' + jsonPathInvocation + (RETURNING type_ (FORMAT jsonRepresentation)?)? + (jsonQueryWrapperBehavior WRAPPER)? + ((KEEP | OMIT) QUOTES (ON SCALAR TEXT_STRING)?)? + (emptyBehavior=jsonQueryBehavior ON EMPTY)? + (errorBehavior=jsonQueryBehavior ON ERROR)? + ')' #jsonQuery + | JSON_OBJECT '(' + ( + jsonObjectMember (',' jsonObjectMember)* + (NULL ON NULL | ABSENT ON NULL)? + (WITH UNIQUE KEYS? | WITHOUT UNIQUE KEYS?)? + )? + (RETURNING type_ (FORMAT jsonRepresentation)?)? + ')' #jsonObject + | JSON_ARRAY '(' + ( + jsonValueExpression (',' jsonValueExpression)* + (NULL ON NULL | ABSENT ON NULL)? + )? + (RETURNING type_ (FORMAT jsonRepresentation)?)? + ')' #jsonArray + ; + +jsonPathInvocation + : jsonValueExpression ',' path=string + (PASSING jsonArgument (',' jsonArgument)*)? + ; + +jsonValueExpression + : expression (FORMAT jsonRepresentation)? + ; + +jsonRepresentation + : JSON (ENCODING (UTF8 | UTF16 | UTF32))? // TODO add implementation-defined JSON representation option + ; + +jsonArgument + : jsonValueExpression AS identifier + ; + +jsonExistsErrorBehavior + : TRUE + | FALSE + | UNKNOWN + | ERROR + ; + +jsonValueBehavior + : ERROR + | NULL + | DEFAULT expression + ; + +jsonQueryWrapperBehavior + : WITHOUT ARRAY? + | WITH (CONDITIONAL | UNCONDITIONAL)? ARRAY? + ; + +jsonQueryBehavior + : ERROR + | NULL + | EMPTY ARRAY + | EMPTY OBJECT + ; + +jsonObjectMember + : KEY? expression VALUE jsonValueExpression + | expression ':' jsonValueExpression + ; + +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 + : CREATE | SELECT | DELETE | INSERT | UPDATE + ; + +qualifiedName + : identifier ('.' identifier)* + ; + +queryPeriod + : FOR rangeType AS OF end=valueExpression + ; + +rangeType + : TIMESTAMP + | VERSION + ; + +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 + // IMPORTANT: this rule must only contain tokens. Nested rules are not supported. See SqlParser.exitNonReserved + : ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | AUTHORIZATION + | BERNOULLI | BOTH + | CALL | CASCADE | CATALOGS | COLUMN | COLUMNS | COMMENT | COMMIT | COMMITTED | CONDITIONAL | COPARTITION | COUNT | CURRENT + | DATA | DATE | DAY | DEFAULT | DEFINE | DEFINER | DENY | DESC | DESCRIPTOR | DISTRIBUTED | DOUBLE + | EMPTY | ENCODING | ERROR | EXCLUDING | EXPLAIN + | FETCH | FILTER | FINAL | FIRST | FOLLOWING | FORMAT | FUNCTIONS + | GRACE | GRANT | GRANTED | GRANTS | GRAPHVIZ | GROUPS + | HOUR + | IF | IGNORE | INCLUDING | INITIAL | INPUT | INTERVAL | INVOKER | IO | ISOLATION + | JSON + | KEEP | KEY | KEYS + | LAST | LATERAL | LEADING | LEVEL | LIMIT | LOCAL | LOGICAL + | MAP | MATCH | MATCHED | MATCHES | MATCH_RECOGNIZE | MATERIALIZED | MEASURES | MERGE | MINUTE | MONTH + | NEXT | NFC | NFD | NFKC | NFKD | NO | NONE | NULLIF | NULLS + | OBJECT | OF | OFFSET | OMIT | ONE | ONLY | OPTION | ORDINALITY | OUTPUT | OVER | OVERFLOW + | PARTITION | PARTITIONS | PASSING | PAST | PATH | PATTERN | PER | PERIOD | PERMUTE | POSITION | PRECEDING | PRECISION | PRIVILEGES | PROPERTIES | PRUNE + | QUOTES + | RANGE | READ | REFRESH | RENAME | REPEATABLE | REPLACE | RESET | RESPECT | RESTRICT | RETURNING | REVOKE | ROLE | ROLES | ROLLBACK | ROW | ROWS | RUNNING + | SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | SERIALIZABLE | SESSION | SET | SETS + | SHOW | SOME | START | STATS | SUBSET | SUBSTRING | SYSTEM + | TABLES | TABLESAMPLE | TEXT | TEXT_STRING | TIES | TIME | TIMESTAMP | TO | TRAILING | TRANSACTION | TRUNCATE | TRY_CAST | TYPE + | UNBOUNDED | UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | UPDATE | USE | USER | UTF16 | UTF32 | UTF8 + | VALIDATE | VALUE | VERBOSE | VERSION | VIEW + | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE + | YEAR + | ZONE + ; + +ABSENT: 'ABSENT'; +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'; +BOTH: 'BOTH'; +BY: 'BY'; +CALL: 'CALL'; +CASCADE: 'CASCADE'; +CASE: 'CASE'; +CAST: 'CAST'; +CATALOGS: 'CATALOGS'; +COLUMN: 'COLUMN'; +COLUMNS: 'COLUMNS'; +COMMA: ','; +COMMENT: 'COMMENT'; +COMMIT: 'COMMIT'; +COMMITTED: 'COMMITTED'; +CONDITIONAL: 'CONDITIONAL'; +CONSTRAINT: 'CONSTRAINT'; +COUNT: 'COUNT'; +COPARTITION: 'COPARTITION'; +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'; +DEALLOCATE: 'DEALLOCATE'; +DEFAULT: 'DEFAULT'; +DEFINE: 'DEFINE'; +DEFINER: 'DEFINER'; +DELETE: 'DELETE'; +DENY: 'DENY'; +DESC: 'DESC'; +DESCRIBE: 'DESCRIBE'; +DESCRIPTOR: 'DESCRIPTOR'; +DISTINCT: 'DISTINCT'; +DISTRIBUTED: 'DISTRIBUTED'; +DOUBLE: 'DOUBLE'; +DROP: 'DROP'; +ELSE: 'ELSE'; +EMPTY: 'EMPTY'; +ENCODING: 'ENCODING'; +END: 'END'; +ERROR: 'ERROR'; +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'; +GRACE: 'GRACE'; +GRANT: 'GRANT'; +GRANTED: 'GRANTED'; +GRANTS: 'GRANTS'; +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'; +JSON_ARRAY: 'JSON_ARRAY'; +JSON_EXISTS: 'JSON_EXISTS'; +JSON_OBJECT: 'JSON_OBJECT'; +JSON_QUERY: 'JSON_QUERY'; +JSON_VALUE: 'JSON_VALUE'; +KEEP: 'KEEP'; +KEY: 'KEY'; +KEYS: 'KEYS'; +LAST: 'LAST'; +LATERAL: 'LATERAL'; +LEADING: 'LEADING'; +LEFT: 'LEFT'; +LEVEL: 'LEVEL'; +LIKE: 'LIKE'; +LIMIT: 'LIMIT'; +LISTAGG: 'LISTAGG'; +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'; +OBJECT: 'OBJECT'; +OF: 'OF'; +OFFSET: 'OFFSET'; +OMIT: 'OMIT'; +ON: 'ON'; +ONE: 'ONE'; +ONLY: 'ONLY'; +OPTION: 'OPTION'; +OR: 'OR'; +ORDER: 'ORDER'; +ORDINALITY: 'ORDINALITY'; +OUTER: 'OUTER'; +OUTPUT: 'OUTPUT'; +OVER: 'OVER'; +OVERFLOW: 'OVERFLOW'; +PARTITION: 'PARTITION'; +PARTITIONS: 'PARTITIONS'; +PASSING: 'PASSING'; +PAST: 'PAST'; +PATH: 'PATH'; +PATTERN: 'PATTERN'; +PER: 'PER'; +PERIOD: 'PERIOD'; +PERMUTE: 'PERMUTE'; +POSITION: 'POSITION'; +PRECEDING: 'PRECEDING'; +PRECISION: 'PRECISION'; +PREPARE: 'PREPARE'; +PRIVILEGES: 'PRIVILEGES'; +PROPERTIES: 'PROPERTIES'; +PRUNE: 'PRUNE'; +QUOTES: 'QUOTES'; +RANGE: 'RANGE'; +READ: 'READ'; +RECURSIVE: 'RECURSIVE'; +REFRESH: 'REFRESH'; +RENAME: 'RENAME'; +REPEATABLE: 'REPEATABLE'; +REPLACE: 'REPLACE'; +RESET: 'RESET'; +RESPECT: 'RESPECT'; +RESTRICT: 'RESTRICT'; +RETURNING: 'RETURNING'; +REVOKE: 'REVOKE'; +RIGHT: 'RIGHT'; +ROLE: 'ROLE'; +ROLES: 'ROLES'; +ROLLBACK: 'ROLLBACK'; +ROLLUP: 'ROLLUP'; +ROW: 'ROW'; +ROWS: 'ROWS'; +RUNNING: 'RUNNING'; +SCALAR: 'SCALAR'; +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'; +TEXT_STRING: 'STRING'; +THEN: 'THEN'; +TIES: 'TIES'; +TIME: 'TIME'; +TIMESTAMP: 'TIMESTAMP'; +TO: 'TO'; +TRAILING: 'TRAILING'; +TRANSACTION: 'TRANSACTION'; +TRIM: 'TRIM'; +TRUE: 'TRUE'; +TRUNCATE: 'TRUNCATE'; +TRY_CAST: 'TRY_CAST'; +TYPE: 'TYPE'; +UESCAPE: 'UESCAPE'; +UNBOUNDED: 'UNBOUNDED'; +UNCOMMITTED: 'UNCOMMITTED'; +UNCONDITIONAL: 'UNCONDITIONAL'; +UNION: 'UNION'; +UNIQUE: 'UNIQUE'; +UNKNOWN: 'UNKNOWN'; +UNMATCHED: 'UNMATCHED'; +UNNEST: 'UNNEST'; +UPDATE: 'UPDATE'; +USE: 'USE'; +USER: 'USER'; +USING: 'USING'; +UTF16: 'UTF16'; +UTF32: 'UTF32'; +UTF8: 'UTF8'; +VALIDATE: 'VALIDATE'; +VALUE: 'VALUE'; +VALUES: 'VALUES'; +VERBOSE: 'VERBOSE'; +VERSION: 'VERSION'; +VIEW: 'VIEW'; +WHEN: 'WHEN'; +WHERE: 'WHERE'; +WINDOW: 'WINDOW'; +WITH: 'WITH'; +WITHIN: 'WITHIN'; +WITHOUT: 'WITHOUT'; +WORK: 'WORK'; +WRAPPER: 'WRAPPER'; +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 + : '`' ( ~'`' | '``' )* '`' + ; + +fragment EXPONENT + : 'E' [+-]? DIGIT+ + ; + +fragment DIGIT + : [0-9] + ; + +fragment LETTER + : [A-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 + : . + ; \ No newline at end of file diff --git a/datafusion/sql/src/antlr/presto/Presto.interp b/datafusion/sql/src/antlr/presto/Presto.interp new file mode 100644 index 0000000000000..2a316b73a8487 --- /dev/null +++ b/datafusion/sql/src/antlr/presto/Presto.interp @@ -0,0 +1,757 @@ +token literal names: +null +'.' +'(' +')' +'SKIP' +'=>' +'->' +'[' +']' +':' +'|' +'^' +'$' +'{-' +'-}' +'{' +'}' +'ABSENT' +'ADD' +'ADMIN' +'AFTER' +'ALL' +'ALTER' +'ANALYZE' +'AND' +'ANY' +'ARRAY' +'AS' +'ASC' +'AT' +'AUTHORIZATION' +'BERNOULLI' +'BETWEEN' +'BOTH' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CATALOGS' +'COLUMN' +'COLUMNS' +',' +'COMMENT' +'COMMIT' +'COMMITTED' +'CONDITIONAL' +'CONSTRAINT' +'COUNT' +'COPARTITION' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURRENT_CATALOG' +'CURRENT_DATE' +'CURRENT_PATH' +'CURRENT_ROLE' +'CURRENT_SCHEMA' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURRENT_USER' +'DATA' +'DATE' +'DAY' +'DEALLOCATE' +'DEFAULT' +'DEFINE' +'DEFINER' +'DELETE' +'DENY' +'DESC' +'DESCRIBE' +'DESCRIPTOR' +'DISTINCT' +'DISTRIBUTED' +'DOUBLE' +'DROP' +'ELSE' +'EMPTY' +'ENCODING' +'END' +'ERROR' +'ESCAPE' +'EXCEPT' +'EXCLUDING' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTRACT' +'FALSE' +'FETCH' +'FILTER' +'FINAL' +'FIRST' +'FOLLOWING' +'FOR' +'FORMAT' +'FROM' +'FULL' +'FUNCTIONS' +'GRACE' +'GRANT' +'GRANTED' +'GRANTS' +'GRAPHVIZ' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IF' +'IGNORE' +'IN' +'INCLUDING' +'INITIAL' +'INNER' +'INPUT' +'INSERT' +'INTERSECT' +'INTERVAL' +'INTO' +'INVOKER' +'IO' +'IS' +'ISOLATION' +'JOIN' +'JSON' +'JSON_ARRAY' +'JSON_EXISTS' +'JSON_OBJECT' +'JSON_QUERY' +'JSON_VALUE' +'KEEP' +'KEY' +'KEYS' +'LAST' +'LATERAL' +'LEADING' +'LEFT' +'LEVEL' +'LIKE' +'LIMIT' +'LISTAGG' +'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' +'OBJECT' +'OF' +'OFFSET' +'OMIT' +'ON' +'ONE' +'ONLY' +'OPTION' +'OR' +'ORDER' +'ORDINALITY' +'OUTER' +'OUTPUT' +'OVER' +'OVERFLOW' +'PARTITION' +'PARTITIONS' +'PASSING' +'PAST' +'PATH' +'PATTERN' +'PER' +'PERIOD' +'PERMUTE' +'POSITION' +'PRECEDING' +'PRECISION' +'PREPARE' +'PRIVILEGES' +'PROPERTIES' +'PRUNE' +'QUOTES' +'RANGE' +'READ' +'RECURSIVE' +'REFRESH' +'RENAME' +'REPEATABLE' +'REPLACE' +'RESET' +'RESPECT' +'RESTRICT' +'RETURNING' +'REVOKE' +'RIGHT' +'ROLE' +'ROLES' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'RUNNING' +'SCALAR' +'SCHEMA' +'SCHEMAS' +'SECOND' +'SECURITY' +'SEEK' +'SELECT' +'SERIALIZABLE' +'SESSION' +'SET' +'SETS' +'SHOW' +'SOME' +'START' +'STATS' +'SUBSET' +'SUBSTRING' +'SYSTEM' +'TABLE' +'TABLES' +'TABLESAMPLE' +'TEXT' +'STRING' +'THEN' +'TIES' +'TIME' +'TIMESTAMP' +'TO' +'TRAILING' +'TRANSACTION' +'TRIM' +'TRUE' +'TRUNCATE' +'TRY_CAST' +'TYPE' +'UESCAPE' +'UNBOUNDED' +'UNCOMMITTED' +'UNCONDITIONAL' +'UNION' +'UNIQUE' +'UNKNOWN' +'UNMATCHED' +'UNNEST' +'UPDATE' +'USE' +'USER' +'USING' +'UTF16' +'UTF32' +'UTF8' +'VALIDATE' +'VALUE' +'VALUES' +'VERBOSE' +'VERSION' +'VIEW' +'WHEN' +'WHERE' +'WINDOW' +'WITH' +'WITHIN' +'WITHOUT' +'WORK' +'WRAPPER' +'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 +ABSENT +ADD +ADMIN +AFTER +ALL +ALTER +ANALYZE +AND +ANY +ARRAY +AS +ASC +AT +AUTHORIZATION +BERNOULLI +BETWEEN +BOTH +BY +CALL +CASCADE +CASE +CAST +CATALOGS +COLUMN +COLUMNS +COMMA +COMMENT +COMMIT +COMMITTED +CONDITIONAL +CONSTRAINT +COUNT +COPARTITION +CREATE +CROSS +CUBE +CURRENT +CURRENT_CATALOG +CURRENT_DATE +CURRENT_PATH +CURRENT_ROLE +CURRENT_SCHEMA +CURRENT_TIME +CURRENT_TIMESTAMP +CURRENT_USER +DATA +DATE +DAY +DEALLOCATE +DEFAULT +DEFINE +DEFINER +DELETE +DENY +DESC +DESCRIBE +DESCRIPTOR +DISTINCT +DISTRIBUTED +DOUBLE +DROP +ELSE +EMPTY +ENCODING +END +ERROR +ESCAPE +EXCEPT +EXCLUDING +EXECUTE +EXISTS +EXPLAIN +EXTRACT +FALSE +FETCH +FILTER +FINAL +FIRST +FOLLOWING +FOR +FORMAT +FROM +FULL +FUNCTIONS +GRACE +GRANT +GRANTED +GRANTS +GRAPHVIZ +GROUP +GROUPING +GROUPS +HAVING +HOUR +IF +IGNORE +IN +INCLUDING +INITIAL +INNER +INPUT +INSERT +INTERSECT +INTERVAL +INTO +INVOKER +IO +IS +ISOLATION +JOIN +JSON +JSON_ARRAY +JSON_EXISTS +JSON_OBJECT +JSON_QUERY +JSON_VALUE +KEEP +KEY +KEYS +LAST +LATERAL +LEADING +LEFT +LEVEL +LIKE +LIMIT +LISTAGG +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 +OBJECT +OF +OFFSET +OMIT +ON +ONE +ONLY +OPTION +OR +ORDER +ORDINALITY +OUTER +OUTPUT +OVER +OVERFLOW +PARTITION +PARTITIONS +PASSING +PAST +PATH +PATTERN +PER +PERIOD +PERMUTE +POSITION +PRECEDING +PRECISION +PREPARE +PRIVILEGES +PROPERTIES +PRUNE +QUOTES +RANGE +READ +RECURSIVE +REFRESH +RENAME +REPEATABLE +REPLACE +RESET +RESPECT +RESTRICT +RETURNING +REVOKE +RIGHT +ROLE +ROLES +ROLLBACK +ROLLUP +ROW +ROWS +RUNNING +SCALAR +SCHEMA +SCHEMAS +SECOND +SECURITY +SEEK +SELECT +SERIALIZABLE +SESSION +SET +SETS +SHOW +SOME +START +STATS +SUBSET +SUBSTRING +SYSTEM +TABLE +TABLES +TABLESAMPLE +TEXT +TEXT_STRING +THEN +TIES +TIME +TIMESTAMP +TO +TRAILING +TRANSACTION +TRIM +TRUE +TRUNCATE +TRY_CAST +TYPE +UESCAPE +UNBOUNDED +UNCOMMITTED +UNCONDITIONAL +UNION +UNIQUE +UNKNOWN +UNMATCHED +UNNEST +UPDATE +USE +USER +USING +UTF16 +UTF32 +UTF8 +VALIDATE +VALUE +VALUES +VERBOSE +VERSION +VIEW +WHEN +WHERE +WINDOW +WITH +WITHIN +WITHOUT +WORK +WRAPPER +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 +SIMPLE_COMMENT +BRACKETED_COMMENT +WS +UNRECOGNIZED +DELIMITER + +rule names: +singleStatement +standaloneExpression +standalonePathSpecification +standaloneType +standaloneRowPattern +statement +query +with +tableElement +columnDefinition +likeClause +properties +propertyAssignments +property +propertyValue +queryNoWith +limitRowCount +rowCount +queryTerm +queryPrimary +sortItem +querySpecification +querySelectItems +groupBy +groupingElement +groupingSet +windowDefinition +windowSpecification +namedQuery +setQuantifier +selectItem +relation +joinType +joinCriteria +sampledRelation +sampleType +trimsSpecification +listAggOverflowBehavior +listaggCountIndication +patternRecognition +measureDefinition +rowsPerMatch +emptyMatchHandling +skipTo +subsetDefinition +variableDefinition +aliasedRelation +columnAliases +relationPrimary +tableFunctionCall +tableFunctionArgument +tableArgument +tableArgumentRelation +descriptorArgument +descriptorField +copartitionTables +expression +booleanExpression +predicate +valueExpression +primaryExpression +jsonPathInvocation +jsonValueExpression +jsonRepresentation +jsonArgument +jsonExistsErrorBehavior +jsonValueBehavior +jsonQueryWrapperBehavior +jsonQueryBehavior +jsonObjectMember +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 +queryPeriod +rangeType +grantor +principal +roles +identifier +number +nonReserved + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 320, 2958, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 251, 10, 7, 3, 7, 3, 7, 3, 7, 5, 7, 256, 10, 7, 3, 7, 3, 7, 5, 7, 260, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 266, 10, 7, 3, 7, 3, 7, 5, 7, 270, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 291, 10, 7, 3, 7, 3, 7, 5, 7, 295, 10, 7, 3, 7, 3, 7, 5, 7, 299, 10, 7, 3, 7, 3, 7, 5, 7, 303, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 311, 10, 7, 3, 7, 3, 7, 5, 7, 315, 10, 7, 3, 7, 5, 7, 318, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 325, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 332, 10, 7, 12, 7, 14, 7, 335, 11, 7, 3, 7, 3, 7, 3, 7, 5, 7, 340, 10, 7, 3, 7, 3, 7, 5, 7, 344, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 350, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 357, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 366, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 378, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 387, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 396, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 402, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 413, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 421, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 429, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 436, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 446, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 453, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 461, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 495, 10, 7, 12, 7, 14, 7, 498, 11, 7, 5, 7, 500, 10, 7, 3, 7, 5, 7, 503, 10, 7, 3, 7, 3, 7, 5, 7, 507, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 513, 10, 7, 3, 7, 3, 7, 3, 7, 5, 7, 518, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 525, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 531, 10, 7, 3, 7, 3, 7, 5, 7, 535, 10, 7, 3, 7, 3, 7, 5, 7, 539, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 547, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 553, 10, 7, 3, 7, 3, 7, 5, 7, 557, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 571, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 579, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 598, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 621, 10, 7, 12, 7, 14, 7, 624, 11, 7, 5, 7, 626, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 636, 10, 7, 3, 7, 3, 7, 5, 7, 640, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 647, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 655, 10, 7, 12, 7, 14, 7, 658, 11, 7, 3, 7, 3, 7, 3, 7, 5, 7, 663, 10, 7, 3, 7, 3, 7, 3, 7, 5, 7, 668, 10, 7, 3, 7, 3, 7, 5, 7, 672, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 678, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 685, 10, 7, 12, 7, 14, 7, 688, 11, 7, 3, 7, 3, 7, 3, 7, 5, 7, 693, 10, 7, 3, 7, 3, 7, 5, 7, 697, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 704, 10, 7, 3, 7, 3, 7, 5, 7, 708, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 714, 10, 7, 12, 7, 14, 7, 717, 11, 7, 3, 7, 3, 7, 5, 7, 721, 10, 7, 3, 7, 3, 7, 5, 7, 725, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 733, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 739, 10, 7, 12, 7, 14, 7, 742, 11, 7, 3, 7, 3, 7, 5, 7, 746, 10, 7, 3, 7, 3, 7, 5, 7, 750, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 760, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 765, 10, 7, 12, 7, 14, 7, 768, 11, 7, 3, 7, 3, 7, 5, 7, 772, 10, 7, 3, 7, 3, 7, 5, 7, 776, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 786, 10, 7, 3, 7, 5, 7, 789, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 796, 10, 7, 12, 7, 14, 7, 799, 11, 7, 3, 7, 3, 7, 5, 7, 803, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 809, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 833, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 839, 10, 7, 5, 7, 841, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 847, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 853, 10, 7, 5, 7, 855, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 863, 10, 7, 5, 7, 865, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 871, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 877, 10, 7, 5, 7, 879, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 894, 10, 7, 3, 7, 3, 7, 3, 7, 5, 7, 899, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 906, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 918, 10, 7, 5, 7, 920, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 928, 10, 7, 5, 7, 930, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 946, 10, 7, 12, 7, 14, 7, 949, 11, 7, 5, 7, 951, 10, 7, 3, 7, 3, 7, 5, 7, 955, 10, 7, 3, 7, 3, 7, 5, 7, 959, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 975, 10, 7, 12, 7, 14, 7, 978, 11, 7, 5, 7, 980, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 996, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 1004, 10, 7, 12, 7, 14, 7, 1007, 11, 7, 3, 7, 3, 7, 5, 7, 1011, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 1017, 10, 7, 3, 7, 5, 7, 1020, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 6, 7, 1027, 10, 7, 13, 7, 14, 7, 1028, 5, 7, 1031, 10, 7, 3, 8, 5, 8, 1034, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 5, 9, 1040, 10, 9, 3, 9, 3, 9, 3, 9, 7, 9, 1045, 10, 9, 12, 9, 14, 9, 1048, 11, 9, 3, 10, 3, 10, 5, 10, 1052, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 1058, 10, 11, 3, 11, 3, 11, 5, 11, 1062, 10, 11, 3, 11, 3, 11, 5, 11, 1066, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1072, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 7, 14, 1081, 10, 14, 12, 14, 14, 14, 1084, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 5, 16, 1092, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 1100, 10, 17, 12, 17, 14, 17, 1103, 11, 17, 5, 17, 1105, 10, 17, 3, 17, 3, 17, 3, 17, 5, 17, 1110, 10, 17, 5, 17, 1112, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 1119, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 1125, 10, 17, 5, 17, 1127, 10, 17, 3, 18, 3, 18, 5, 18, 1131, 10, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1141, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1147, 10, 20, 3, 20, 7, 20, 1150, 10, 20, 12, 20, 14, 20, 1153, 11, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 1162, 10, 21, 12, 21, 14, 21, 1165, 11, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 1171, 10, 21, 3, 22, 3, 22, 5, 22, 1175, 10, 22, 3, 22, 3, 22, 5, 22, 1179, 10, 22, 3, 23, 3, 23, 5, 23, 1183, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 1190, 10, 23, 12, 23, 14, 23, 1193, 11, 23, 5, 23, 1195, 10, 23, 3, 23, 3, 23, 5, 23, 1199, 10, 23, 3, 23, 3, 23, 3, 23, 5, 23, 1204, 10, 23, 3, 23, 3, 23, 5, 23, 1208, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 1214, 10, 23, 12, 23, 14, 23, 1217, 11, 23, 5, 23, 1219, 10, 23, 3, 24, 3, 24, 3, 24, 7, 24, 1224, 10, 24, 12, 24, 14, 24, 1227, 11, 24, 3, 25, 5, 25, 1230, 10, 25, 3, 25, 3, 25, 3, 25, 7, 25, 1235, 10, 25, 12, 25, 14, 25, 1238, 11, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 1246, 10, 26, 12, 26, 14, 26, 1249, 11, 26, 5, 26, 1251, 10, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 1259, 10, 26, 12, 26, 14, 26, 1262, 11, 26, 5, 26, 1264, 10, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 1273, 10, 26, 12, 26, 14, 26, 1276, 11, 26, 3, 26, 3, 26, 5, 26, 1280, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 1286, 10, 27, 12, 27, 14, 27, 1289, 11, 27, 5, 27, 1291, 10, 27, 3, 27, 3, 27, 5, 27, 1295, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 5, 29, 1304, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 1311, 10, 29, 12, 29, 14, 29, 1314, 11, 29, 5, 29, 1316, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 1323, 10, 29, 12, 29, 14, 29, 1326, 11, 29, 5, 29, 1328, 10, 29, 3, 29, 5, 29, 1331, 10, 29, 3, 30, 3, 30, 5, 30, 1335, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 1346, 10, 32, 3, 32, 5, 32, 1349, 10, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 1356, 10, 32, 3, 32, 5, 32, 1359, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 1378, 10, 33, 7, 33, 1380, 10, 33, 12, 33, 14, 33, 1383, 11, 33, 3, 34, 5, 34, 1386, 10, 34, 3, 34, 3, 34, 5, 34, 1390, 10, 34, 3, 34, 3, 34, 5, 34, 1394, 10, 34, 3, 34, 3, 34, 5, 34, 1398, 10, 34, 5, 34, 1400, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 7, 35, 1409, 10, 35, 12, 35, 14, 35, 1412, 11, 35, 3, 35, 3, 35, 5, 35, 1416, 10, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 5, 36, 1425, 10, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 5, 39, 1434, 10, 39, 3, 39, 5, 39, 1437, 10, 39, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1443, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 1453, 10, 41, 12, 41, 14, 41, 1456, 11, 41, 5, 41, 1458, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 1465, 10, 41, 12, 41, 14, 41, 1468, 11, 41, 5, 41, 1470, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 1476, 10, 41, 12, 41, 14, 41, 1479, 11, 41, 5, 41, 1481, 10, 41, 3, 41, 5, 41, 1484, 10, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1489, 10, 41, 3, 41, 5, 41, 1492, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 1502, 10, 41, 12, 41, 14, 41, 1505, 11, 41, 5, 41, 1507, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 1513, 10, 41, 12, 41, 14, 41, 1516, 11, 41, 3, 41, 3, 41, 5, 41, 1520, 10, 41, 3, 41, 3, 41, 5, 41, 1524, 10, 41, 5, 41, 1526, 10, 41, 5, 41, 1528, 10, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 1543, 10, 43, 5, 43, 1545, 10, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1556, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 1577, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 1585, 10, 46, 12, 46, 14, 46, 1588, 11, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 5, 48, 1598, 10, 48, 3, 48, 3, 48, 5, 48, 1602, 10, 48, 5, 48, 1604, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 1610, 10, 49, 12, 49, 14, 49, 1613, 11, 49, 3, 49, 3, 49, 3, 50, 3, 50, 5, 50, 1619, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 7, 50, 1630, 10, 50, 12, 50, 14, 50, 1633, 11, 50, 3, 50, 3, 50, 3, 50, 5, 50, 1638, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 1654, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 1661, 10, 51, 12, 51, 14, 51, 1664, 11, 51, 5, 51, 1666, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 1672, 10, 51, 12, 51, 14, 51, 1675, 11, 51, 5, 51, 1677, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 5, 52, 1684, 10, 52, 3, 52, 3, 52, 3, 52, 5, 52, 1689, 10, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1698, 10, 53, 12, 53, 14, 53, 1701, 11, 53, 5, 53, 1703, 10, 53, 3, 53, 3, 53, 5, 53, 1707, 10, 53, 5, 53, 1709, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1717, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1725, 10, 53, 12, 53, 14, 53, 1728, 11, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1733, 10, 53, 5, 53, 1735, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 1742, 10, 54, 3, 54, 3, 54, 5, 54, 1746, 10, 54, 5, 54, 1748, 10, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 1755, 10, 54, 3, 54, 3, 54, 5, 54, 1759, 10, 54, 5, 54, 1761, 10, 54, 5, 54, 1763, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1770, 10, 55, 12, 55, 14, 55, 1773, 11, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 1783, 10, 55, 3, 56, 3, 56, 5, 56, 1787, 10, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 7, 57, 1795, 10, 57, 12, 57, 14, 57, 1798, 11, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 5, 59, 1807, 10, 59, 3, 59, 3, 59, 5, 59, 1811, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 1819, 10, 59, 12, 59, 14, 59, 1822, 11, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1834, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1842, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 1849, 10, 60, 12, 60, 14, 60, 1852, 11, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1857, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1865, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1871, 10, 60, 3, 60, 3, 60, 5, 60, 1875, 10, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1880, 10, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1885, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 1891, 10, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 7, 61, 1905, 10, 61, 12, 61, 14, 61, 1908, 11, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 6, 62, 1935, 10, 62, 13, 62, 14, 62, 1936, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 1946, 10, 62, 12, 62, 14, 62, 1949, 11, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 1956, 10, 62, 3, 62, 3, 62, 3, 62, 5, 62, 1961, 10, 62, 3, 62, 3, 62, 3, 62, 5, 62, 1966, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 1977, 10, 62, 12, 62, 14, 62, 1980, 11, 62, 3, 62, 3, 62, 3, 62, 5, 62, 1985, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 1992, 10, 62, 3, 62, 3, 62, 3, 62, 5, 62, 1997, 10, 62, 3, 62, 5, 62, 2000, 10, 62, 3, 62, 5, 62, 2003, 10, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2008, 10, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2013, 10, 62, 12, 62, 14, 62, 2016, 11, 62, 5, 62, 2018, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2025, 10, 62, 12, 62, 14, 62, 2028, 11, 62, 5, 62, 2030, 10, 62, 3, 62, 3, 62, 5, 62, 2034, 10, 62, 3, 62, 5, 62, 2037, 10, 62, 3, 62, 5, 62, 2040, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2053, 10, 62, 12, 62, 14, 62, 2056, 11, 62, 5, 62, 2058, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 6, 62, 2075, 10, 62, 13, 62, 14, 62, 2076, 3, 62, 3, 62, 5, 62, 2081, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 6, 62, 2087, 10, 62, 13, 62, 14, 62, 2088, 3, 62, 3, 62, 5, 62, 2093, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2116, 10, 62, 12, 62, 14, 62, 2119, 11, 62, 5, 62, 2121, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2130, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2136, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2142, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2148, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2157, 10, 62, 3, 62, 5, 62, 2160, 10, 62, 3, 62, 5, 62, 2163, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2182, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2191, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2211, 10, 62, 12, 62, 14, 62, 2214, 11, 62, 5, 62, 2216, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2226, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2235, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2241, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2247, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2258, 10, 62, 5, 62, 2260, 10, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2265, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2272, 10, 62, 5, 62, 2274, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2280, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2286, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2295, 10, 62, 12, 62, 14, 62, 2298, 11, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2306, 10, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2311, 10, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2316, 10, 62, 5, 62, 2318, 10, 62, 5, 62, 2320, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2326, 10, 62, 5, 62, 2328, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2336, 10, 62, 12, 62, 14, 62, 2339, 11, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2347, 10, 62, 5, 62, 2349, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2355, 10, 62, 5, 62, 2357, 10, 62, 3, 62, 5, 62, 2360, 10, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 2370, 10, 62, 12, 62, 14, 62, 2373, 11, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 2382, 10, 63, 12, 63, 14, 63, 2385, 11, 63, 5, 63, 2387, 10, 63, 3, 64, 3, 64, 3, 64, 5, 64, 2392, 10, 64, 3, 65, 3, 65, 3, 65, 5, 65, 2397, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 2409, 10, 68, 3, 69, 3, 69, 5, 69, 2413, 10, 69, 3, 69, 3, 69, 5, 69, 2417, 10, 69, 3, 69, 5, 69, 2420, 10, 69, 5, 69, 2422, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 5, 70, 2430, 10, 70, 3, 71, 5, 71, 2433, 10, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 2443, 10, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 5, 73, 2451, 10, 73, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 2457, 10, 74, 5, 74, 2459, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 5, 75, 2467, 10, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 5, 79, 2477, 10, 79, 3, 79, 3, 79, 3, 79, 3, 79, 5, 79, 2483, 10, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 2495, 10, 82, 12, 82, 14, 82, 2498, 11, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2506, 10, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2513, 10, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2518, 10, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2525, 10, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2535, 10, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2540, 10, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2547, 10, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 2571, 10, 82, 12, 82, 14, 82, 2574, 11, 82, 3, 82, 3, 82, 5, 82, 2578, 10, 82, 5, 82, 2580, 10, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 2587, 10, 82, 7, 82, 2589, 10, 82, 12, 82, 14, 82, 2592, 11, 82, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 2598, 10, 83, 3, 84, 3, 84, 5, 84, 2602, 10, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2619, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 2632, 10, 87, 12, 87, 14, 87, 2635, 11, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2641, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2650, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 2658, 10, 87, 12, 87, 14, 87, 2661, 11, 87, 3, 87, 3, 87, 5, 87, 2665, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 2672, 10, 87, 12, 87, 14, 87, 2675, 11, 87, 3, 87, 3, 87, 5, 87, 2679, 10, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 5, 88, 2687, 10, 88, 3, 89, 3, 89, 3, 89, 3, 89, 7, 89, 2693, 10, 89, 12, 89, 14, 89, 2696, 11, 89, 5, 89, 2698, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 2704, 10, 89, 3, 89, 5, 89, 2707, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 2714, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 7, 89, 2720, 10, 89, 12, 89, 14, 89, 2723, 11, 89, 5, 89, 2725, 10, 89, 3, 89, 3, 89, 3, 89, 3, 89, 7, 89, 2731, 10, 89, 12, 89, 14, 89, 2734, 11, 89, 5, 89, 2736, 10, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 5, 90, 2762, 10, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 5, 91, 2773, 10, 91, 3, 92, 3, 92, 3, 92, 5, 92, 2778, 10, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 7, 92, 2785, 10, 92, 12, 92, 14, 92, 2788, 11, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 7, 93, 2798, 10, 93, 12, 93, 14, 93, 2801, 11, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 2815, 10, 93, 3, 94, 3, 94, 5, 94, 2819, 10, 94, 3, 94, 3, 94, 5, 94, 2823, 10, 94, 3, 94, 3, 94, 5, 94, 2827, 10, 94, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 2833, 10, 94, 3, 94, 3, 94, 5, 94, 2837, 10, 94, 3, 94, 3, 94, 5, 94, 2841, 10, 94, 3, 94, 3, 94, 5, 94, 2845, 10, 94, 5, 94, 2847, 10, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 2857, 10, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 5, 97, 2864, 10, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2873, 10, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 5, 99, 2880, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2887, 10, 100, 3, 101, 3, 101, 3, 101, 7, 101, 2892, 10, 101, 12, 101, 14, 101, 2895, 11, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 7, 103, 2902, 10, 103, 12, 103, 14, 103, 2905, 11, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 5, 106, 2918, 10, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 2925, 10, 107, 3, 108, 3, 108, 3, 108, 7, 108, 2930, 10, 108, 12, 108, 14, 108, 2933, 11, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 2940, 10, 109, 3, 110, 5, 110, 2943, 10, 110, 3, 110, 3, 110, 5, 110, 2947, 10, 110, 3, 110, 3, 110, 5, 110, 2951, 10, 110, 3, 110, 5, 110, 2954, 10, 110, 3, 111, 3, 111, 3, 111, 2, 9, 38, 64, 116, 120, 122, 162, 182, 112, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 2, 36, 4, 2, 38, 38, 214, 214, 4, 2, 70, 70, 124, 124, 4, 2, 226, 226, 243, 243, 4, 2, 100, 100, 115, 115, 4, 2, 87, 87, 116, 116, 3, 2, 222, 223, 4, 2, 96, 96, 161, 161, 4, 2, 305, 305, 309, 309, 4, 2, 86, 86, 264, 264, 4, 2, 30, 30, 73, 73, 4, 2, 96, 96, 138, 138, 4, 2, 23, 23, 76, 76, 4, 2, 33, 33, 242, 242, 5, 2, 35, 35, 140, 140, 253, 253, 4, 2, 117, 117, 230, 230, 3, 2, 299, 300, 3, 2, 301, 303, 4, 2, 135, 135, 176, 176, 3, 2, 273, 275, 6, 2, 84, 84, 92, 92, 256, 256, 266, 266, 4, 2, 48, 48, 263, 263, 4, 2, 95, 95, 224, 224, 3, 2, 293, 298, 5, 2, 23, 23, 27, 27, 237, 237, 4, 2, 92, 92, 256, 256, 7, 2, 66, 66, 112, 112, 158, 159, 228, 228, 291, 291, 3, 2, 162, 165, 4, 2, 97, 97, 198, 198, 5, 2, 107, 107, 129, 129, 246, 246, 6, 2, 77, 77, 125, 125, 149, 149, 276, 276, 4, 2, 179, 179, 290, 290, 7, 2, 52, 52, 71, 71, 120, 120, 231, 231, 269, 269, 4, 2, 251, 251, 280, 280, 57, 2, 19, 23, 25, 25, 27, 28, 30, 33, 35, 35, 37, 38, 41, 43, 45, 48, 50, 51, 55, 55, 64, 66, 68, 70, 72, 73, 75, 75, 77, 78, 81, 82, 84, 84, 87, 87, 90, 90, 93, 97, 99, 99, 102, 107, 110, 110, 112, 114, 116, 117, 119, 119, 122, 122, 124, 125, 127, 127, 129, 129, 135, 140, 142, 142, 144, 144, 146, 146, 149, 159, 161, 167, 171, 176, 178, 180, 183, 183, 185, 199, 201, 206, 208, 216, 218, 220, 222, 230, 232, 242, 244, 247, 249, 254, 257, 259, 261, 263, 265, 267, 269, 271, 273, 277, 279, 281, 284, 284, 286, 292, 2, 3425, 2, 222, 3, 2, 2, 2, 4, 225, 3, 2, 2, 2, 6, 228, 3, 2, 2, 2, 8, 231, 3, 2, 2, 2, 10, 234, 3, 2, 2, 2, 12, 1030, 3, 2, 2, 2, 14, 1033, 3, 2, 2, 2, 16, 1037, 3, 2, 2, 2, 18, 1051, 3, 2, 2, 2, 20, 1053, 3, 2, 2, 2, 22, 1067, 3, 2, 2, 2, 24, 1073, 3, 2, 2, 2, 26, 1077, 3, 2, 2, 2, 28, 1085, 3, 2, 2, 2, 30, 1091, 3, 2, 2, 2, 32, 1093, 3, 2, 2, 2, 34, 1130, 3, 2, 2, 2, 36, 1132, 3, 2, 2, 2, 38, 1134, 3, 2, 2, 2, 40, 1170, 3, 2, 2, 2, 42, 1172, 3, 2, 2, 2, 44, 1180, 3, 2, 2, 2, 46, 1220, 3, 2, 2, 2, 48, 1229, 3, 2, 2, 2, 50, 1279, 3, 2, 2, 2, 52, 1294, 3, 2, 2, 2, 54, 1296, 3, 2, 2, 2, 56, 1303, 3, 2, 2, 2, 58, 1332, 3, 2, 2, 2, 60, 1341, 3, 2, 2, 2, 62, 1358, 3, 2, 2, 2, 64, 1360, 3, 2, 2, 2, 66, 1399, 3, 2, 2, 2, 68, 1415, 3, 2, 2, 2, 70, 1417, 3, 2, 2, 2, 72, 1426, 3, 2, 2, 2, 74, 1428, 3, 2, 2, 2, 76, 1436, 3, 2, 2, 2, 78, 1442, 3, 2, 2, 2, 80, 1444, 3, 2, 2, 2, 82, 1529, 3, 2, 2, 2, 84, 1544, 3, 2, 2, 2, 86, 1555, 3, 2, 2, 2, 88, 1576, 3, 2, 2, 2, 90, 1578, 3, 2, 2, 2, 92, 1591, 3, 2, 2, 2, 94, 1595, 3, 2, 2, 2, 96, 1605, 3, 2, 2, 2, 98, 1653, 3, 2, 2, 2, 100, 1655, 3, 2, 2, 2, 102, 1683, 3, 2, 2, 2, 104, 1690, 3, 2, 2, 2, 106, 1762, 3, 2, 2, 2, 108, 1782, 3, 2, 2, 2, 110, 1784, 3, 2, 2, 2, 112, 1788, 3, 2, 2, 2, 114, 1801, 3, 2, 2, 2, 116, 1810, 3, 2, 2, 2, 118, 1884, 3, 2, 2, 2, 120, 1890, 3, 2, 2, 2, 122, 2359, 3, 2, 2, 2, 124, 2374, 3, 2, 2, 2, 126, 2388, 3, 2, 2, 2, 128, 2393, 3, 2, 2, 2, 130, 2398, 3, 2, 2, 2, 132, 2402, 3, 2, 2, 2, 134, 2408, 3, 2, 2, 2, 136, 2421, 3, 2, 2, 2, 138, 2429, 3, 2, 2, 2, 140, 2442, 3, 2, 2, 2, 142, 2444, 3, 2, 2, 2, 144, 2450, 3, 2, 2, 2, 146, 2458, 3, 2, 2, 2, 148, 2466, 3, 2, 2, 2, 150, 2468, 3, 2, 2, 2, 152, 2470, 3, 2, 2, 2, 154, 2472, 3, 2, 2, 2, 156, 2474, 3, 2, 2, 2, 158, 2484, 3, 2, 2, 2, 160, 2486, 3, 2, 2, 2, 162, 2579, 3, 2, 2, 2, 164, 2597, 3, 2, 2, 2, 166, 2601, 3, 2, 2, 2, 168, 2603, 3, 2, 2, 2, 170, 2608, 3, 2, 2, 2, 172, 2678, 3, 2, 2, 2, 174, 2680, 3, 2, 2, 2, 176, 2697, 3, 2, 2, 2, 178, 2761, 3, 2, 2, 2, 180, 2772, 3, 2, 2, 2, 182, 2774, 3, 2, 2, 2, 184, 2814, 3, 2, 2, 2, 186, 2846, 3, 2, 2, 2, 188, 2848, 3, 2, 2, 2, 190, 2856, 3, 2, 2, 2, 192, 2863, 3, 2, 2, 2, 194, 2872, 3, 2, 2, 2, 196, 2879, 3, 2, 2, 2, 198, 2886, 3, 2, 2, 2, 200, 2888, 3, 2, 2, 2, 202, 2896, 3, 2, 2, 2, 204, 2898, 3, 2, 2, 2, 206, 2906, 3, 2, 2, 2, 208, 2912, 3, 2, 2, 2, 210, 2917, 3, 2, 2, 2, 212, 2924, 3, 2, 2, 2, 214, 2926, 3, 2, 2, 2, 216, 2939, 3, 2, 2, 2, 218, 2953, 3, 2, 2, 2, 220, 2955, 3, 2, 2, 2, 222, 223, 5, 12, 7, 2, 223, 224, 7, 2, 2, 3, 224, 3, 3, 2, 2, 2, 225, 226, 5, 114, 58, 2, 226, 227, 7, 2, 2, 3, 227, 5, 3, 2, 2, 2, 228, 229, 5, 200, 101, 2, 229, 230, 7, 2, 2, 3, 230, 7, 3, 2, 2, 2, 231, 232, 5, 162, 82, 2, 232, 233, 7, 2, 2, 3, 233, 9, 3, 2, 2, 2, 234, 235, 5, 182, 92, 2, 235, 236, 7, 2, 2, 3, 236, 11, 3, 2, 2, 2, 237, 1031, 5, 14, 8, 2, 238, 239, 7, 270, 2, 2, 239, 1031, 5, 216, 109, 2, 240, 241, 7, 270, 2, 2, 241, 242, 5, 216, 109, 2, 242, 243, 7, 3, 2, 2, 243, 244, 5, 216, 109, 2, 244, 1031, 3, 2, 2, 2, 245, 246, 7, 52, 2, 2, 246, 250, 7, 226, 2, 2, 247, 248, 7, 113, 2, 2, 248, 249, 7, 169, 2, 2, 249, 251, 7, 89, 2, 2, 250, 247, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 255, 5, 204, 103, 2, 253, 254, 7, 32, 2, 2, 254, 256, 5, 212, 107, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 258, 7, 285, 2, 2, 258, 260, 5, 24, 13, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 1031, 3, 2, 2, 2, 261, 262, 7, 79, 2, 2, 262, 265, 7, 226, 2, 2, 263, 264, 7, 113, 2, 2, 264, 266, 7, 89, 2, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 269, 5, 204, 103, 2, 268, 270, 9, 2, 2, 2, 269, 268, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 1031, 3, 2, 2, 2, 271, 272, 7, 24, 2, 2, 272, 273, 7, 226, 2, 2, 273, 274, 5, 204, 103, 2, 274, 275, 7, 209, 2, 2, 275, 276, 7, 252, 2, 2, 276, 277, 5, 216, 109, 2, 277, 1031, 3, 2, 2, 2, 278, 279, 7, 24, 2, 2, 279, 280, 7, 226, 2, 2, 280, 281, 5, 204, 103, 2, 281, 282, 7, 234, 2, 2, 282, 283, 7, 32, 2, 2, 283, 284, 5, 212, 107, 2, 284, 1031, 3, 2, 2, 2, 285, 286, 7, 52, 2, 2, 286, 290, 7, 243, 2, 2, 287, 288, 7, 113, 2, 2, 288, 289, 7, 169, 2, 2, 289, 291, 7, 89, 2, 2, 290, 287, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 294, 5, 204, 103, 2, 293, 295, 5, 96, 49, 2, 294, 293, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 298, 3, 2, 2, 2, 296, 297, 7, 45, 2, 2, 297, 299, 5, 146, 74, 2, 298, 296, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 302, 3, 2, 2, 2, 300, 301, 7, 285, 2, 2, 301, 303, 5, 24, 13, 2, 302, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 310, 7, 29, 2, 2, 305, 311, 5, 14, 8, 2, 306, 307, 7, 4, 2, 2, 307, 308, 5, 14, 8, 2, 308, 309, 7, 5, 2, 2, 309, 311, 3, 2, 2, 2, 310, 305, 3, 2, 2, 2, 310, 306, 3, 2, 2, 2, 311, 317, 3, 2, 2, 2, 312, 314, 7, 285, 2, 2, 313, 315, 7, 166, 2, 2, 314, 313, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 318, 7, 64, 2, 2, 317, 312, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 1031, 3, 2, 2, 2, 319, 320, 7, 52, 2, 2, 320, 324, 7, 243, 2, 2, 321, 322, 7, 113, 2, 2, 322, 323, 7, 169, 2, 2, 323, 325, 7, 89, 2, 2, 324, 321, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 327, 5, 204, 103, 2, 327, 328, 7, 4, 2, 2, 328, 333, 5, 18, 10, 2, 329, 330, 7, 44, 2, 2, 330, 332, 5, 18, 10, 2, 331, 329, 3, 2, 2, 2, 332, 335, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 336, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 336, 339, 7, 5, 2, 2, 337, 338, 7, 45, 2, 2, 338, 340, 5, 146, 74, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 343, 3, 2, 2, 2, 341, 342, 7, 285, 2, 2, 342, 344, 5, 24, 13, 2, 343, 341, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 1031, 3, 2, 2, 2, 345, 346, 7, 79, 2, 2, 346, 349, 7, 243, 2, 2, 347, 348, 7, 113, 2, 2, 348, 350, 7, 89, 2, 2, 349, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 1031, 5, 204, 103, 2, 352, 353, 7, 120, 2, 2, 353, 354, 7, 123, 2, 2, 354, 356, 5, 204, 103, 2, 355, 357, 5, 96, 49, 2, 356, 355, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 359, 5, 14, 8, 2, 359, 1031, 3, 2, 2, 2, 360, 361, 7, 71, 2, 2, 361, 362, 7, 100, 2, 2, 362, 365, 5, 204, 103, 2, 363, 364, 7, 283, 2, 2, 364, 366, 5, 116, 59, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 1031, 3, 2, 2, 2, 367, 368, 7, 257, 2, 2, 368, 369, 7, 243, 2, 2, 369, 1031, 5, 204, 103, 2, 370, 371, 7, 45, 2, 2, 371, 372, 7, 177, 2, 2, 372, 373, 7, 243, 2, 2, 373, 374, 5, 204, 103, 2, 374, 377, 7, 126, 2, 2, 375, 378, 5, 146, 74, 2, 376, 378, 7, 170, 2, 2, 377, 375, 3, 2, 2, 2, 377, 376, 3, 2, 2, 2, 378, 1031, 3, 2, 2, 2, 379, 380, 7, 45, 2, 2, 380, 381, 7, 177, 2, 2, 381, 382, 7, 281, 2, 2, 382, 383, 5, 204, 103, 2, 383, 386, 7, 126, 2, 2, 384, 387, 5, 146, 74, 2, 385, 387, 7, 170, 2, 2, 386, 384, 3, 2, 2, 2, 386, 385, 3, 2, 2, 2, 387, 1031, 3, 2, 2, 2, 388, 389, 7, 45, 2, 2, 389, 390, 7, 177, 2, 2, 390, 391, 7, 42, 2, 2, 391, 392, 5, 204, 103, 2, 392, 395, 7, 126, 2, 2, 393, 396, 5, 146, 74, 2, 394, 396, 7, 170, 2, 2, 395, 393, 3, 2, 2, 2, 395, 394, 3, 2, 2, 2, 396, 1031, 3, 2, 2, 2, 397, 398, 7, 24, 2, 2, 398, 401, 7, 243, 2, 2, 399, 400, 7, 113, 2, 2, 400, 402, 7, 89, 2, 2, 401, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 5, 204, 103, 2, 404, 405, 7, 209, 2, 2, 405, 406, 7, 252, 2, 2, 406, 407, 5, 204, 103, 2, 407, 1031, 3, 2, 2, 2, 408, 409, 7, 24, 2, 2, 409, 412, 7, 243, 2, 2, 410, 411, 7, 113, 2, 2, 411, 413, 7, 89, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 415, 5, 204, 103, 2, 415, 416, 7, 20, 2, 2, 416, 420, 7, 42, 2, 2, 417, 418, 7, 113, 2, 2, 418, 419, 7, 169, 2, 2, 419, 421, 7, 89, 2, 2, 420, 417, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 5, 20, 11, 2, 423, 1031, 3, 2, 2, 2, 424, 425, 7, 24, 2, 2, 425, 428, 7, 243, 2, 2, 426, 427, 7, 113, 2, 2, 427, 429, 7, 89, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 431, 5, 204, 103, 2, 431, 432, 7, 209, 2, 2, 432, 435, 7, 42, 2, 2, 433, 434, 7, 113, 2, 2, 434, 436, 7, 89, 2, 2, 435, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 5, 216, 109, 2, 438, 439, 7, 252, 2, 2, 439, 440, 5, 216, 109, 2, 440, 1031, 3, 2, 2, 2, 441, 442, 7, 24, 2, 2, 442, 445, 7, 243, 2, 2, 443, 444, 7, 113, 2, 2, 444, 446, 7, 89, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 5, 204, 103, 2, 448, 449, 7, 79, 2, 2, 449, 452, 7, 42, 2, 2, 450, 451, 7, 113, 2, 2, 451, 453, 7, 89, 2, 2, 452, 450, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 455, 5, 204, 103, 2, 455, 1031, 3, 2, 2, 2, 456, 457, 7, 24, 2, 2, 457, 460, 7, 243, 2, 2, 458, 459, 7, 113, 2, 2, 459, 461, 7, 89, 2, 2, 460, 458, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 5, 204, 103, 2, 463, 464, 7, 24, 2, 2, 464, 465, 7, 42, 2, 2, 465, 466, 5, 216, 109, 2, 466, 467, 7, 234, 2, 2, 467, 468, 7, 64, 2, 2, 468, 469, 7, 259, 2, 2, 469, 470, 5, 162, 82, 2, 470, 1031, 3, 2, 2, 2, 471, 472, 7, 24, 2, 2, 472, 473, 7, 243, 2, 2, 473, 474, 5, 204, 103, 2, 474, 475, 7, 234, 2, 2, 475, 476, 7, 32, 2, 2, 476, 477, 5, 212, 107, 2, 477, 1031, 3, 2, 2, 2, 478, 479, 7, 24, 2, 2, 479, 480, 7, 243, 2, 2, 480, 481, 5, 204, 103, 2, 481, 482, 7, 234, 2, 2, 482, 483, 7, 202, 2, 2, 483, 484, 5, 26, 14, 2, 484, 1031, 3, 2, 2, 2, 485, 486, 7, 24, 2, 2, 486, 487, 7, 243, 2, 2, 487, 488, 5, 204, 103, 2, 488, 489, 7, 88, 2, 2, 489, 502, 5, 216, 109, 2, 490, 499, 7, 4, 2, 2, 491, 496, 5, 196, 99, 2, 492, 493, 7, 44, 2, 2, 493, 495, 5, 196, 99, 2, 494, 492, 3, 2, 2, 2, 495, 498, 3, 2, 2, 2, 496, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 500, 3, 2, 2, 2, 498, 496, 3, 2, 2, 2, 499, 491, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 503, 7, 5, 2, 2, 502, 490, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 506, 3, 2, 2, 2, 504, 505, 7, 283, 2, 2, 505, 507, 5, 116, 59, 2, 506, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 1031, 3, 2, 2, 2, 508, 509, 7, 25, 2, 2, 509, 512, 5, 204, 103, 2, 510, 511, 7, 285, 2, 2, 511, 513, 5, 24, 13, 2, 512, 510, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 1031, 3, 2, 2, 2, 514, 517, 7, 52, 2, 2, 515, 516, 7, 181, 2, 2, 516, 518, 7, 211, 2, 2, 517, 515, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 7, 155, 2, 2, 520, 524, 7, 281, 2, 2, 521, 522, 7, 113, 2, 2, 522, 523, 7, 169, 2, 2, 523, 525, 7, 89, 2, 2, 524, 521, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 530, 5, 204, 103, 2, 527, 528, 7, 103, 2, 2, 528, 529, 7, 195, 2, 2, 529, 531, 5, 156, 79, 2, 530, 527, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 534, 3, 2, 2, 2, 532, 533, 7, 45, 2, 2, 533, 535, 5, 146, 74, 2, 534, 532, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 538, 3, 2, 2, 2, 536, 537, 7, 285, 2, 2, 537, 539, 5, 24, 13, 2, 538, 536, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 541, 7, 29, 2, 2, 541, 542, 5, 14, 8, 2, 542, 1031, 3, 2, 2, 2, 543, 546, 7, 52, 2, 2, 544, 545, 7, 181, 2, 2, 545, 547, 7, 211, 2, 2, 546, 544, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 7, 281, 2, 2, 549, 552, 5, 204, 103, 2, 550, 551, 7, 45, 2, 2, 551, 553, 5, 146, 74, 2, 552, 550, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 556, 3, 2, 2, 2, 554, 555, 7, 229, 2, 2, 555, 557, 9, 3, 2, 2, 556, 554, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 7, 29, 2, 2, 559, 560, 5, 14, 8, 2, 560, 1031, 3, 2, 2, 2, 561, 562, 7, 208, 2, 2, 562, 563, 7, 155, 2, 2, 563, 564, 7, 281, 2, 2, 564, 1031, 5, 204, 103, 2, 565, 566, 7, 79, 2, 2, 566, 567, 7, 155, 2, 2, 567, 570, 7, 281, 2, 2, 568, 569, 7, 113, 2, 2, 569, 571, 7, 89, 2, 2, 570, 568, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 572, 3, 2, 2, 2, 572, 1031, 5, 204, 103, 2, 573, 574, 7, 24, 2, 2, 574, 575, 7, 155, 2, 2, 575, 578, 7, 281, 2, 2, 576, 577, 7, 113, 2, 2, 577, 579, 7, 89, 2, 2, 578, 576, 3, 2, 2, 2, 578, 579, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 581, 5, 204, 103, 2, 581, 582, 7, 209, 2, 2, 582, 583, 7, 252, 2, 2, 583, 584, 5, 204, 103, 2, 584, 1031, 3, 2, 2, 2, 585, 586, 7, 24, 2, 2, 586, 587, 7, 155, 2, 2, 587, 588, 7, 281, 2, 2, 588, 589, 5, 204, 103, 2, 589, 590, 7, 234, 2, 2, 590, 591, 7, 202, 2, 2, 591, 592, 5, 26, 14, 2, 592, 1031, 3, 2, 2, 2, 593, 594, 7, 79, 2, 2, 594, 597, 7, 281, 2, 2, 595, 596, 7, 113, 2, 2, 596, 598, 7, 89, 2, 2, 597, 595, 3, 2, 2, 2, 597, 598, 3, 2, 2, 2, 598, 599, 3, 2, 2, 2, 599, 1031, 5, 204, 103, 2, 600, 601, 7, 24, 2, 2, 601, 602, 7, 281, 2, 2, 602, 603, 5, 204, 103, 2, 603, 604, 7, 209, 2, 2, 604, 605, 7, 252, 2, 2, 605, 606, 5, 204, 103, 2, 606, 1031, 3, 2, 2, 2, 607, 608, 7, 24, 2, 2, 608, 609, 7, 281, 2, 2, 609, 610, 5, 204, 103, 2, 610, 611, 7, 234, 2, 2, 611, 612, 7, 32, 2, 2, 612, 613, 5, 212, 107, 2, 613, 1031, 3, 2, 2, 2, 614, 615, 7, 37, 2, 2, 615, 616, 5, 204, 103, 2, 616, 625, 7, 4, 2, 2, 617, 622, 5, 196, 99, 2, 618, 619, 7, 44, 2, 2, 619, 621, 5, 196, 99, 2, 620, 618, 3, 2, 2, 2, 621, 624, 3, 2, 2, 2, 622, 620, 3, 2, 2, 2, 622, 623, 3, 2, 2, 2, 623, 626, 3, 2, 2, 2, 624, 622, 3, 2, 2, 2, 625, 617, 3, 2, 2, 2, 625, 626, 3, 2, 2, 2, 626, 627, 3, 2, 2, 2, 627, 628, 7, 5, 2, 2, 628, 1031, 3, 2, 2, 2, 629, 630, 7, 52, 2, 2, 630, 631, 7, 218, 2, 2, 631, 635, 5, 216, 109, 2, 632, 633, 7, 285, 2, 2, 633, 634, 7, 21, 2, 2, 634, 636, 5, 210, 106, 2, 635, 632, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 639, 3, 2, 2, 2, 637, 638, 7, 115, 2, 2, 638, 640, 5, 216, 109, 2, 639, 637, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 1031, 3, 2, 2, 2, 641, 642, 7, 79, 2, 2, 642, 643, 7, 218, 2, 2, 643, 646, 5, 216, 109, 2, 644, 645, 7, 115, 2, 2, 645, 647, 5, 216, 109, 2, 646, 644, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 1031, 3, 2, 2, 2, 648, 649, 7, 104, 2, 2, 649, 650, 5, 214, 108, 2, 650, 651, 7, 252, 2, 2, 651, 656, 5, 212, 107, 2, 652, 653, 7, 44, 2, 2, 653, 655, 5, 212, 107, 2, 654, 652, 3, 2, 2, 2, 655, 658, 3, 2, 2, 2, 656, 654, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 662, 3, 2, 2, 2, 658, 656, 3, 2, 2, 2, 659, 660, 7, 285, 2, 2, 660, 661, 7, 21, 2, 2, 661, 663, 7, 180, 2, 2, 662, 659, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 667, 3, 2, 2, 2, 664, 665, 7, 105, 2, 2, 665, 666, 7, 36, 2, 2, 666, 668, 5, 210, 106, 2, 667, 664, 3, 2, 2, 2, 667, 668, 3, 2, 2, 2, 668, 671, 3, 2, 2, 2, 669, 670, 7, 115, 2, 2, 670, 672, 5, 216, 109, 2, 671, 669, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 1031, 3, 2, 2, 2, 673, 677, 7, 216, 2, 2, 674, 675, 7, 21, 2, 2, 675, 676, 7, 180, 2, 2, 676, 678, 7, 98, 2, 2, 677, 674, 3, 2, 2, 2, 677, 678, 3, 2, 2, 2, 678, 679, 3, 2, 2, 2, 679, 680, 5, 214, 108, 2, 680, 681, 7, 100, 2, 2, 681, 686, 5, 212, 107, 2, 682, 683, 7, 44, 2, 2, 683, 685, 5, 212, 107, 2, 684, 682, 3, 2, 2, 2, 685, 688, 3, 2, 2, 2, 686, 684, 3, 2, 2, 2, 686, 687, 3, 2, 2, 2, 687, 692, 3, 2, 2, 2, 688, 686, 3, 2, 2, 2, 689, 690, 7, 105, 2, 2, 690, 691, 7, 36, 2, 2, 691, 693, 5, 210, 106, 2, 692, 689, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 696, 3, 2, 2, 2, 694, 695, 7, 115, 2, 2, 695, 697, 5, 216, 109, 2, 696, 694, 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 1031, 3, 2, 2, 2, 698, 699, 7, 234, 2, 2, 699, 703, 7, 218, 2, 2, 700, 704, 7, 23, 2, 2, 701, 704, 7, 167, 2, 2, 702, 704, 5, 216, 109, 2, 703, 700, 3, 2, 2, 2, 703, 701, 3, 2, 2, 2, 703, 702, 3, 2, 2, 2, 704, 707, 3, 2, 2, 2, 705, 706, 7, 115, 2, 2, 706, 708, 5, 216, 109, 2, 707, 705, 3, 2, 2, 2, 707, 708, 3, 2, 2, 2, 708, 1031, 3, 2, 2, 2, 709, 720, 7, 104, 2, 2, 710, 715, 5, 202, 102, 2, 711, 712, 7, 44, 2, 2, 712, 714, 5, 202, 102, 2, 713, 711, 3, 2, 2, 2, 714, 717, 3, 2, 2, 2, 715, 713, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 721, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 718, 719, 7, 23, 2, 2, 719, 721, 7, 201, 2, 2, 720, 710, 3, 2, 2, 2, 720, 718, 3, 2, 2, 2, 721, 722, 3, 2, 2, 2, 722, 724, 7, 177, 2, 2, 723, 725, 9, 4, 2, 2, 724, 723, 3, 2, 2, 2, 724, 725, 3, 2, 2, 2, 725, 726, 3, 2, 2, 2, 726, 727, 5, 204, 103, 2, 727, 728, 7, 252, 2, 2, 728, 732, 5, 212, 107, 2, 729, 730, 7, 285, 2, 2, 730, 731, 7, 104, 2, 2, 731, 733, 7, 180, 2, 2, 732, 729, 3, 2, 2, 2, 732, 733, 3, 2, 2, 2, 733, 1031, 3, 2, 2, 2, 734, 745, 7, 72, 2, 2, 735, 740, 5, 202, 102, 2, 736, 737, 7, 44, 2, 2, 737, 739, 5, 202, 102, 2, 738, 736, 3, 2, 2, 2, 739, 742, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 740, 741, 3, 2, 2, 2, 741, 746, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 743, 744, 7, 23, 2, 2, 744, 746, 7, 201, 2, 2, 745, 735, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 749, 7, 177, 2, 2, 748, 750, 9, 4, 2, 2, 749, 748, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 752, 5, 204, 103, 2, 752, 753, 7, 252, 2, 2, 753, 754, 5, 212, 107, 2, 754, 1031, 3, 2, 2, 2, 755, 759, 7, 216, 2, 2, 756, 757, 7, 104, 2, 2, 757, 758, 7, 180, 2, 2, 758, 760, 7, 98, 2, 2, 759, 756, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 771, 3, 2, 2, 2, 761, 766, 5, 202, 102, 2, 762, 763, 7, 44, 2, 2, 763, 765, 5, 202, 102, 2, 764, 762, 3, 2, 2, 2, 765, 768, 3, 2, 2, 2, 766, 764, 3, 2, 2, 2, 766, 767, 3, 2, 2, 2, 767, 772, 3, 2, 2, 2, 768, 766, 3, 2, 2, 2, 769, 770, 7, 23, 2, 2, 770, 772, 7, 201, 2, 2, 771, 761, 3, 2, 2, 2, 771, 769, 3, 2, 2, 2, 772, 773, 3, 2, 2, 2, 773, 775, 7, 177, 2, 2, 774, 776, 9, 4, 2, 2, 775, 774, 3, 2, 2, 2, 775, 776, 3, 2, 2, 2, 776, 777, 3, 2, 2, 2, 777, 778, 5, 204, 103, 2, 778, 779, 7, 100, 2, 2, 779, 780, 5, 212, 107, 2, 780, 1031, 3, 2, 2, 2, 781, 782, 7, 236, 2, 2, 782, 788, 7, 106, 2, 2, 783, 785, 7, 177, 2, 2, 784, 786, 7, 243, 2, 2, 785, 784, 3, 2, 2, 2, 785, 786, 3, 2, 2, 2, 786, 787, 3, 2, 2, 2, 787, 789, 5, 204, 103, 2, 788, 783, 3, 2, 2, 2, 788, 789, 3, 2, 2, 2, 789, 1031, 3, 2, 2, 2, 790, 802, 7, 90, 2, 2, 791, 792, 7, 4, 2, 2, 792, 797, 5, 190, 96, 2, 793, 794, 7, 44, 2, 2, 794, 796, 5, 190, 96, 2, 795, 793, 3, 2, 2, 2, 796, 799, 3, 2, 2, 2, 797, 795, 3, 2, 2, 2, 797, 798, 3, 2, 2, 2, 798, 800, 3, 2, 2, 2, 799, 797, 3, 2, 2, 2, 800, 801, 7, 5, 2, 2, 801, 803, 3, 2, 2, 2, 802, 791, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 804, 3, 2, 2, 2, 804, 1031, 5, 12, 7, 2, 805, 806, 7, 90, 2, 2, 806, 808, 7, 25, 2, 2, 807, 809, 7, 279, 2, 2, 808, 807, 3, 2, 2, 2, 808, 809, 3, 2, 2, 2, 809, 810, 3, 2, 2, 2, 810, 1031, 5, 12, 7, 2, 811, 812, 7, 236, 2, 2, 812, 813, 7, 52, 2, 2, 813, 814, 7, 243, 2, 2, 814, 1031, 5, 204, 103, 2, 815, 816, 7, 236, 2, 2, 816, 817, 7, 52, 2, 2, 817, 818, 7, 226, 2, 2, 818, 1031, 5, 204, 103, 2, 819, 820, 7, 236, 2, 2, 820, 821, 7, 52, 2, 2, 821, 822, 7, 281, 2, 2, 822, 1031, 5, 204, 103, 2, 823, 824, 7, 236, 2, 2, 824, 825, 7, 52, 2, 2, 825, 826, 7, 155, 2, 2, 826, 827, 7, 281, 2, 2, 827, 1031, 5, 204, 103, 2, 828, 829, 7, 236, 2, 2, 829, 832, 7, 244, 2, 2, 830, 831, 9, 5, 2, 2, 831, 833, 5, 204, 103, 2, 832, 830, 3, 2, 2, 2, 832, 833, 3, 2, 2, 2, 833, 840, 3, 2, 2, 2, 834, 835, 7, 143, 2, 2, 835, 838, 5, 146, 74, 2, 836, 837, 7, 85, 2, 2, 837, 839, 5, 146, 74, 2, 838, 836, 3, 2, 2, 2, 838, 839, 3, 2, 2, 2, 839, 841, 3, 2, 2, 2, 840, 834, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 1031, 3, 2, 2, 2, 842, 843, 7, 236, 2, 2, 843, 846, 7, 227, 2, 2, 844, 845, 9, 5, 2, 2, 845, 847, 5, 216, 109, 2, 846, 844, 3, 2, 2, 2, 846, 847, 3, 2, 2, 2, 847, 854, 3, 2, 2, 2, 848, 849, 7, 143, 2, 2, 849, 852, 5, 146, 74, 2, 850, 851, 7, 85, 2, 2, 851, 853, 5, 146, 74, 2, 852, 850, 3, 2, 2, 2, 852, 853, 3, 2, 2, 2, 853, 855, 3, 2, 2, 2, 854, 848, 3, 2, 2, 2, 854, 855, 3, 2, 2, 2, 855, 1031, 3, 2, 2, 2, 856, 857, 7, 236, 2, 2, 857, 864, 7, 41, 2, 2, 858, 859, 7, 143, 2, 2, 859, 862, 5, 146, 74, 2, 860, 861, 7, 85, 2, 2, 861, 863, 5, 146, 74, 2, 862, 860, 3, 2, 2, 2, 862, 863, 3, 2, 2, 2, 863, 865, 3, 2, 2, 2, 864, 858, 3, 2, 2, 2, 864, 865, 3, 2, 2, 2, 865, 1031, 3, 2, 2, 2, 866, 867, 7, 236, 2, 2, 867, 868, 7, 43, 2, 2, 868, 870, 9, 5, 2, 2, 869, 871, 5, 204, 103, 2, 870, 869, 3, 2, 2, 2, 870, 871, 3, 2, 2, 2, 871, 878, 3, 2, 2, 2, 872, 873, 7, 143, 2, 2, 873, 876, 5, 146, 74, 2, 874, 875, 7, 85, 2, 2, 875, 877, 5, 146, 74, 2, 876, 874, 3, 2, 2, 2, 876, 877, 3, 2, 2, 2, 877, 879, 3, 2, 2, 2, 878, 872, 3, 2, 2, 2, 878, 879, 3, 2, 2, 2, 879, 1031, 3, 2, 2, 2, 880, 881, 7, 236, 2, 2, 881, 882, 7, 239, 2, 2, 882, 883, 7, 98, 2, 2, 883, 1031, 5, 204, 103, 2, 884, 885, 7, 236, 2, 2, 885, 886, 7, 239, 2, 2, 886, 887, 7, 98, 2, 2, 887, 888, 7, 4, 2, 2, 888, 889, 5, 14, 8, 2, 889, 890, 7, 5, 2, 2, 890, 1031, 3, 2, 2, 2, 891, 893, 7, 236, 2, 2, 892, 894, 7, 55, 2, 2, 893, 892, 3, 2, 2, 2, 893, 894, 3, 2, 2, 2, 894, 895, 3, 2, 2, 2, 895, 898, 7, 219, 2, 2, 896, 897, 9, 5, 2, 2, 897, 899, 5, 216, 109, 2, 898, 896, 3, 2, 2, 2, 898, 899, 3, 2, 2, 2, 899, 1031, 3, 2, 2, 2, 900, 901, 7, 236, 2, 2, 901, 902, 7, 218, 2, 2, 902, 905, 7, 106, 2, 2, 903, 904, 9, 5, 2, 2, 904, 906, 5, 216, 109, 2, 905, 903, 3, 2, 2, 2, 905, 906, 3, 2, 2, 2, 906, 1031, 3, 2, 2, 2, 907, 908, 7, 74, 2, 2, 908, 1031, 5, 204, 103, 2, 909, 910, 7, 73, 2, 2, 910, 1031, 5, 204, 103, 2, 911, 912, 7, 236, 2, 2, 912, 919, 7, 102, 2, 2, 913, 914, 7, 143, 2, 2, 914, 917, 5, 146, 74, 2, 915, 916, 7, 85, 2, 2, 916, 918, 5, 146, 74, 2, 917, 915, 3, 2, 2, 2, 917, 918, 3, 2, 2, 2, 918, 920, 3, 2, 2, 2, 919, 913, 3, 2, 2, 2, 919, 920, 3, 2, 2, 2, 920, 1031, 3, 2, 2, 2, 921, 922, 7, 236, 2, 2, 922, 929, 7, 233, 2, 2, 923, 924, 7, 143, 2, 2, 924, 927, 5, 146, 74, 2, 925, 926, 7, 85, 2, 2, 926, 928, 5, 146, 74, 2, 927, 925, 3, 2, 2, 2, 927, 928, 3, 2, 2, 2, 928, 930, 3, 2, 2, 2, 929, 923, 3, 2, 2, 2, 929, 930, 3, 2, 2, 2, 930, 1031, 3, 2, 2, 2, 931, 932, 7, 234, 2, 2, 932, 933, 7, 233, 2, 2, 933, 934, 5, 204, 103, 2, 934, 935, 7, 293, 2, 2, 935, 936, 5, 114, 58, 2, 936, 1031, 3, 2, 2, 2, 937, 938, 7, 212, 2, 2, 938, 939, 7, 233, 2, 2, 939, 1031, 5, 204, 103, 2, 940, 941, 7, 238, 2, 2, 941, 950, 7, 254, 2, 2, 942, 947, 5, 192, 97, 2, 943, 944, 7, 44, 2, 2, 944, 946, 5, 192, 97, 2, 945, 943, 3, 2, 2, 2, 946, 949, 3, 2, 2, 2, 947, 945, 3, 2, 2, 2, 947, 948, 3, 2, 2, 2, 948, 951, 3, 2, 2, 2, 949, 947, 3, 2, 2, 2, 950, 942, 3, 2, 2, 2, 950, 951, 3, 2, 2, 2, 951, 1031, 3, 2, 2, 2, 952, 954, 7, 46, 2, 2, 953, 955, 7, 288, 2, 2, 954, 953, 3, 2, 2, 2, 954, 955, 3, 2, 2, 2, 955, 1031, 3, 2, 2, 2, 956, 958, 7, 220, 2, 2, 957, 959, 7, 288, 2, 2, 958, 957, 3, 2, 2, 2, 958, 959, 3, 2, 2, 2, 959, 1031, 3, 2, 2, 2, 960, 961, 7, 200, 2, 2, 961, 962, 5, 216, 109, 2, 962, 963, 7, 100, 2, 2, 963, 964, 5, 12, 7, 2, 964, 1031, 3, 2, 2, 2, 965, 966, 7, 67, 2, 2, 966, 967, 7, 200, 2, 2, 967, 1031, 5, 216, 109, 2, 968, 969, 7, 88, 2, 2, 969, 979, 5, 216, 109, 2, 970, 971, 7, 272, 2, 2, 971, 976, 5, 114, 58, 2, 972, 973, 7, 44, 2, 2, 973, 975, 5, 114, 58, 2, 974, 972, 3, 2, 2, 2, 975, 978, 3, 2, 2, 2, 976, 974, 3, 2, 2, 2, 976, 977, 3, 2, 2, 2, 977, 980, 3, 2, 2, 2, 978, 976, 3, 2, 2, 2, 979, 970, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 1031, 3, 2, 2, 2, 981, 982, 7, 74, 2, 2, 982, 983, 7, 119, 2, 2, 983, 1031, 5, 216, 109, 2, 984, 985, 7, 74, 2, 2, 985, 986, 7, 185, 2, 2, 986, 1031, 5, 216, 109, 2, 987, 988, 7, 234, 2, 2, 988, 989, 7, 192, 2, 2, 989, 1031, 5, 200, 101, 2, 990, 991, 7, 234, 2, 2, 991, 992, 7, 250, 2, 2, 992, 995, 7, 292, 2, 2, 993, 996, 7, 146, 2, 2, 994, 996, 5, 114, 58, 2, 995, 993, 3, 2, 2, 2, 995, 994, 3, 2, 2, 2, 996, 1031, 3, 2, 2, 2, 997, 998, 7, 269, 2, 2, 998, 999, 5, 204, 103, 2, 999, 1000, 7, 234, 2, 2, 1000, 1005, 5, 188, 95, 2, 1001, 1002, 7, 44, 2, 2, 1002, 1004, 5, 188, 95, 2, 1003, 1001, 3, 2, 2, 2, 1004, 1007, 3, 2, 2, 2, 1005, 1003, 3, 2, 2, 2, 1005, 1006, 3, 2, 2, 2, 1006, 1010, 3, 2, 2, 2, 1007, 1005, 3, 2, 2, 2, 1008, 1009, 7, 283, 2, 2, 1009, 1011, 5, 116, 59, 2, 1010, 1008, 3, 2, 2, 2, 1010, 1011, 3, 2, 2, 2, 1011, 1031, 3, 2, 2, 2, 1012, 1013, 7, 157, 2, 2, 1013, 1014, 7, 123, 2, 2, 1014, 1019, 5, 204, 103, 2, 1015, 1017, 7, 29, 2, 2, 1016, 1015, 3, 2, 2, 2, 1016, 1017, 3, 2, 2, 2, 1017, 1018, 3, 2, 2, 2, 1018, 1020, 5, 216, 109, 2, 1019, 1016, 3, 2, 2, 2, 1019, 1020, 3, 2, 2, 2, 1020, 1021, 3, 2, 2, 2, 1021, 1022, 7, 272, 2, 2, 1022, 1023, 5, 64, 33, 2, 1023, 1024, 7, 177, 2, 2, 1024, 1026, 5, 114, 58, 2, 1025, 1027, 5, 172, 87, 2, 1026, 1025, 3, 2, 2, 2, 1027, 1028, 3, 2, 2, 2, 1028, 1026, 3, 2, 2, 2, 1028, 1029, 3, 2, 2, 2, 1029, 1031, 3, 2, 2, 2, 1030, 237, 3, 2, 2, 2, 1030, 238, 3, 2, 2, 2, 1030, 240, 3, 2, 2, 2, 1030, 245, 3, 2, 2, 2, 1030, 261, 3, 2, 2, 2, 1030, 271, 3, 2, 2, 2, 1030, 278, 3, 2, 2, 2, 1030, 285, 3, 2, 2, 2, 1030, 319, 3, 2, 2, 2, 1030, 345, 3, 2, 2, 2, 1030, 352, 3, 2, 2, 2, 1030, 360, 3, 2, 2, 2, 1030, 367, 3, 2, 2, 2, 1030, 370, 3, 2, 2, 2, 1030, 379, 3, 2, 2, 2, 1030, 388, 3, 2, 2, 2, 1030, 397, 3, 2, 2, 2, 1030, 408, 3, 2, 2, 2, 1030, 424, 3, 2, 2, 2, 1030, 441, 3, 2, 2, 2, 1030, 456, 3, 2, 2, 2, 1030, 471, 3, 2, 2, 2, 1030, 478, 3, 2, 2, 2, 1030, 485, 3, 2, 2, 2, 1030, 508, 3, 2, 2, 2, 1030, 514, 3, 2, 2, 2, 1030, 543, 3, 2, 2, 2, 1030, 561, 3, 2, 2, 2, 1030, 565, 3, 2, 2, 2, 1030, 573, 3, 2, 2, 2, 1030, 585, 3, 2, 2, 2, 1030, 593, 3, 2, 2, 2, 1030, 600, 3, 2, 2, 2, 1030, 607, 3, 2, 2, 2, 1030, 614, 3, 2, 2, 2, 1030, 629, 3, 2, 2, 2, 1030, 641, 3, 2, 2, 2, 1030, 648, 3, 2, 2, 2, 1030, 673, 3, 2, 2, 2, 1030, 698, 3, 2, 2, 2, 1030, 709, 3, 2, 2, 2, 1030, 734, 3, 2, 2, 2, 1030, 755, 3, 2, 2, 2, 1030, 781, 3, 2, 2, 2, 1030, 790, 3, 2, 2, 2, 1030, 805, 3, 2, 2, 2, 1030, 811, 3, 2, 2, 2, 1030, 815, 3, 2, 2, 2, 1030, 819, 3, 2, 2, 2, 1030, 823, 3, 2, 2, 2, 1030, 828, 3, 2, 2, 2, 1030, 842, 3, 2, 2, 2, 1030, 856, 3, 2, 2, 2, 1030, 866, 3, 2, 2, 2, 1030, 880, 3, 2, 2, 2, 1030, 884, 3, 2, 2, 2, 1030, 891, 3, 2, 2, 2, 1030, 900, 3, 2, 2, 2, 1030, 907, 3, 2, 2, 2, 1030, 909, 3, 2, 2, 2, 1030, 911, 3, 2, 2, 2, 1030, 921, 3, 2, 2, 2, 1030, 931, 3, 2, 2, 2, 1030, 937, 3, 2, 2, 2, 1030, 940, 3, 2, 2, 2, 1030, 952, 3, 2, 2, 2, 1030, 956, 3, 2, 2, 2, 1030, 960, 3, 2, 2, 2, 1030, 965, 3, 2, 2, 2, 1030, 968, 3, 2, 2, 2, 1030, 981, 3, 2, 2, 2, 1030, 984, 3, 2, 2, 2, 1030, 987, 3, 2, 2, 2, 1030, 990, 3, 2, 2, 2, 1030, 997, 3, 2, 2, 2, 1030, 1012, 3, 2, 2, 2, 1031, 13, 3, 2, 2, 2, 1032, 1034, 5, 16, 9, 2, 1033, 1032, 3, 2, 2, 2, 1033, 1034, 3, 2, 2, 2, 1034, 1035, 3, 2, 2, 2, 1035, 1036, 5, 32, 17, 2, 1036, 15, 3, 2, 2, 2, 1037, 1039, 7, 285, 2, 2, 1038, 1040, 7, 207, 2, 2, 1039, 1038, 3, 2, 2, 2, 1039, 1040, 3, 2, 2, 2, 1040, 1041, 3, 2, 2, 2, 1041, 1046, 5, 58, 30, 2, 1042, 1043, 7, 44, 2, 2, 1043, 1045, 5, 58, 30, 2, 1044, 1042, 3, 2, 2, 2, 1045, 1048, 3, 2, 2, 2, 1046, 1044, 3, 2, 2, 2, 1046, 1047, 3, 2, 2, 2, 1047, 17, 3, 2, 2, 2, 1048, 1046, 3, 2, 2, 2, 1049, 1052, 5, 20, 11, 2, 1050, 1052, 5, 22, 12, 2, 1051, 1049, 3, 2, 2, 2, 1051, 1050, 3, 2, 2, 2, 1052, 19, 3, 2, 2, 2, 1053, 1054, 5, 216, 109, 2, 1054, 1057, 5, 162, 82, 2, 1055, 1056, 7, 169, 2, 2, 1056, 1058, 7, 170, 2, 2, 1057, 1055, 3, 2, 2, 2, 1057, 1058, 3, 2, 2, 2, 1058, 1061, 3, 2, 2, 2, 1059, 1060, 7, 45, 2, 2, 1060, 1062, 5, 146, 74, 2, 1061, 1059, 3, 2, 2, 2, 1061, 1062, 3, 2, 2, 2, 1062, 1065, 3, 2, 2, 2, 1063, 1064, 7, 285, 2, 2, 1064, 1066, 5, 24, 13, 2, 1065, 1063, 3, 2, 2, 2, 1065, 1066, 3, 2, 2, 2, 1066, 21, 3, 2, 2, 2, 1067, 1068, 7, 143, 2, 2, 1068, 1071, 5, 204, 103, 2, 1069, 1070, 9, 6, 2, 2, 1070, 1072, 7, 202, 2, 2, 1071, 1069, 3, 2, 2, 2, 1071, 1072, 3, 2, 2, 2, 1072, 23, 3, 2, 2, 2, 1073, 1074, 7, 4, 2, 2, 1074, 1075, 5, 26, 14, 2, 1075, 1076, 7, 5, 2, 2, 1076, 25, 3, 2, 2, 2, 1077, 1082, 5, 28, 15, 2, 1078, 1079, 7, 44, 2, 2, 1079, 1081, 5, 28, 15, 2, 1080, 1078, 3, 2, 2, 2, 1081, 1084, 3, 2, 2, 2, 1082, 1080, 3, 2, 2, 2, 1082, 1083, 3, 2, 2, 2, 1083, 27, 3, 2, 2, 2, 1084, 1082, 3, 2, 2, 2, 1085, 1086, 5, 216, 109, 2, 1086, 1087, 7, 293, 2, 2, 1087, 1088, 5, 30, 16, 2, 1088, 29, 3, 2, 2, 2, 1089, 1092, 7, 68, 2, 2, 1090, 1092, 5, 114, 58, 2, 1091, 1089, 3, 2, 2, 2, 1091, 1090, 3, 2, 2, 2, 1092, 31, 3, 2, 2, 2, 1093, 1104, 5, 38, 20, 2, 1094, 1095, 7, 182, 2, 2, 1095, 1096, 7, 36, 2, 2, 1096, 1101, 5, 42, 22, 2, 1097, 1098, 7, 44, 2, 2, 1098, 1100, 5, 42, 22, 2, 1099, 1097, 3, 2, 2, 2, 1100, 1103, 3, 2, 2, 2, 1101, 1099, 3, 2, 2, 2, 1101, 1102, 3, 2, 2, 2, 1102, 1105, 3, 2, 2, 2, 1103, 1101, 3, 2, 2, 2, 1104, 1094, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 1111, 3, 2, 2, 2, 1106, 1107, 7, 175, 2, 2, 1107, 1109, 5, 36, 19, 2, 1108, 1110, 9, 7, 2, 2, 1109, 1108, 3, 2, 2, 2, 1109, 1110, 3, 2, 2, 2, 1110, 1112, 3, 2, 2, 2, 1111, 1106, 3, 2, 2, 2, 1111, 1112, 3, 2, 2, 2, 1112, 1126, 3, 2, 2, 2, 1113, 1114, 7, 144, 2, 2, 1114, 1127, 5, 34, 18, 2, 1115, 1116, 7, 93, 2, 2, 1116, 1118, 9, 8, 2, 2, 1117, 1119, 5, 36, 19, 2, 1118, 1117, 3, 2, 2, 2, 1118, 1119, 3, 2, 2, 2, 1119, 1120, 3, 2, 2, 2, 1120, 1124, 9, 7, 2, 2, 1121, 1125, 7, 179, 2, 2, 1122, 1123, 7, 285, 2, 2, 1123, 1125, 7, 249, 2, 2, 1124, 1121, 3, 2, 2, 2, 1124, 1122, 3, 2, 2, 2, 1125, 1127, 3, 2, 2, 2, 1126, 1113, 3, 2, 2, 2, 1126, 1115, 3, 2, 2, 2, 1126, 1127, 3, 2, 2, 2, 1127, 33, 3, 2, 2, 2, 1128, 1131, 7, 23, 2, 2, 1129, 1131, 5, 36, 19, 2, 1130, 1128, 3, 2, 2, 2, 1130, 1129, 3, 2, 2, 2, 1131, 35, 3, 2, 2, 2, 1132, 1133, 9, 9, 2, 2, 1133, 37, 3, 2, 2, 2, 1134, 1135, 8, 20, 1, 2, 1135, 1136, 5, 40, 21, 2, 1136, 1151, 3, 2, 2, 2, 1137, 1138, 12, 4, 2, 2, 1138, 1140, 7, 121, 2, 2, 1139, 1141, 5, 60, 31, 2, 1140, 1139, 3, 2, 2, 2, 1140, 1141, 3, 2, 2, 2, 1141, 1142, 3, 2, 2, 2, 1142, 1150, 5, 38, 20, 5, 1143, 1144, 12, 3, 2, 2, 1144, 1146, 9, 10, 2, 2, 1145, 1147, 5, 60, 31, 2, 1146, 1145, 3, 2, 2, 2, 1146, 1147, 3, 2, 2, 2, 1147, 1148, 3, 2, 2, 2, 1148, 1150, 5, 38, 20, 4, 1149, 1137, 3, 2, 2, 2, 1149, 1143, 3, 2, 2, 2, 1150, 1153, 3, 2, 2, 2, 1151, 1149, 3, 2, 2, 2, 1151, 1152, 3, 2, 2, 2, 1152, 39, 3, 2, 2, 2, 1153, 1151, 3, 2, 2, 2, 1154, 1171, 5, 44, 23, 2, 1155, 1156, 7, 243, 2, 2, 1156, 1171, 5, 204, 103, 2, 1157, 1158, 7, 278, 2, 2, 1158, 1163, 5, 114, 58, 2, 1159, 1160, 7, 44, 2, 2, 1160, 1162, 5, 114, 58, 2, 1161, 1159, 3, 2, 2, 2, 1162, 1165, 3, 2, 2, 2, 1163, 1161, 3, 2, 2, 2, 1163, 1164, 3, 2, 2, 2, 1164, 1171, 3, 2, 2, 2, 1165, 1163, 3, 2, 2, 2, 1166, 1167, 7, 4, 2, 2, 1167, 1168, 5, 32, 17, 2, 1168, 1169, 7, 5, 2, 2, 1169, 1171, 3, 2, 2, 2, 1170, 1154, 3, 2, 2, 2, 1170, 1155, 3, 2, 2, 2, 1170, 1157, 3, 2, 2, 2, 1170, 1166, 3, 2, 2, 2, 1171, 41, 3, 2, 2, 2, 1172, 1174, 5, 114, 58, 2, 1173, 1175, 9, 11, 2, 2, 1174, 1173, 3, 2, 2, 2, 1174, 1175, 3, 2, 2, 2, 1175, 1178, 3, 2, 2, 2, 1176, 1177, 7, 172, 2, 2, 1177, 1179, 9, 12, 2, 2, 1178, 1176, 3, 2, 2, 2, 1178, 1179, 3, 2, 2, 2, 1179, 43, 3, 2, 2, 2, 1180, 1182, 7, 231, 2, 2, 1181, 1183, 5, 60, 31, 2, 1182, 1181, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, 2, 1183, 1184, 3, 2, 2, 2, 1184, 1194, 5, 46, 24, 2, 1185, 1186, 7, 100, 2, 2, 1186, 1191, 5, 64, 33, 2, 1187, 1188, 7, 44, 2, 2, 1188, 1190, 5, 64, 33, 2, 1189, 1187, 3, 2, 2, 2, 1190, 1193, 3, 2, 2, 2, 1191, 1189, 3, 2, 2, 2, 1191, 1192, 3, 2, 2, 2, 1192, 1195, 3, 2, 2, 2, 1193, 1191, 3, 2, 2, 2, 1194, 1185, 3, 2, 2, 2, 1194, 1195, 3, 2, 2, 2, 1195, 1198, 3, 2, 2, 2, 1196, 1197, 7, 283, 2, 2, 1197, 1199, 5, 116, 59, 2, 1198, 1196, 3, 2, 2, 2, 1198, 1199, 3, 2, 2, 2, 1199, 1203, 3, 2, 2, 2, 1200, 1201, 7, 108, 2, 2, 1201, 1202, 7, 36, 2, 2, 1202, 1204, 5, 48, 25, 2, 1203, 1200, 3, 2, 2, 2, 1203, 1204, 3, 2, 2, 2, 1204, 1207, 3, 2, 2, 2, 1205, 1206, 7, 111, 2, 2, 1206, 1208, 5, 116, 59, 2, 1207, 1205, 3, 2, 2, 2, 1207, 1208, 3, 2, 2, 2, 1208, 1218, 3, 2, 2, 2, 1209, 1210, 7, 284, 2, 2, 1210, 1215, 5, 54, 28, 2, 1211, 1212, 7, 44, 2, 2, 1212, 1214, 5, 54, 28, 2, 1213, 1211, 3, 2, 2, 2, 1214, 1217, 3, 2, 2, 2, 1215, 1213, 3, 2, 2, 2, 1215, 1216, 3, 2, 2, 2, 1216, 1219, 3, 2, 2, 2, 1217, 1215, 3, 2, 2, 2, 1218, 1209, 3, 2, 2, 2, 1218, 1219, 3, 2, 2, 2, 1219, 45, 3, 2, 2, 2, 1220, 1225, 5, 62, 32, 2, 1221, 1222, 7, 44, 2, 2, 1222, 1224, 5, 62, 32, 2, 1223, 1221, 3, 2, 2, 2, 1224, 1227, 3, 2, 2, 2, 1225, 1223, 3, 2, 2, 2, 1225, 1226, 3, 2, 2, 2, 1226, 47, 3, 2, 2, 2, 1227, 1225, 3, 2, 2, 2, 1228, 1230, 5, 60, 31, 2, 1229, 1228, 3, 2, 2, 2, 1229, 1230, 3, 2, 2, 2, 1230, 1231, 3, 2, 2, 2, 1231, 1236, 5, 50, 26, 2, 1232, 1233, 7, 44, 2, 2, 1233, 1235, 5, 50, 26, 2, 1234, 1232, 3, 2, 2, 2, 1235, 1238, 3, 2, 2, 2, 1236, 1234, 3, 2, 2, 2, 1236, 1237, 3, 2, 2, 2, 1237, 49, 3, 2, 2, 2, 1238, 1236, 3, 2, 2, 2, 1239, 1280, 5, 52, 27, 2, 1240, 1241, 7, 221, 2, 2, 1241, 1250, 7, 4, 2, 2, 1242, 1247, 5, 114, 58, 2, 1243, 1244, 7, 44, 2, 2, 1244, 1246, 5, 114, 58, 2, 1245, 1243, 3, 2, 2, 2, 1246, 1249, 3, 2, 2, 2, 1247, 1245, 3, 2, 2, 2, 1247, 1248, 3, 2, 2, 2, 1248, 1251, 3, 2, 2, 2, 1249, 1247, 3, 2, 2, 2, 1250, 1242, 3, 2, 2, 2, 1250, 1251, 3, 2, 2, 2, 1251, 1252, 3, 2, 2, 2, 1252, 1280, 7, 5, 2, 2, 1253, 1254, 7, 54, 2, 2, 1254, 1263, 7, 4, 2, 2, 1255, 1260, 5, 114, 58, 2, 1256, 1257, 7, 44, 2, 2, 1257, 1259, 5, 114, 58, 2, 1258, 1256, 3, 2, 2, 2, 1259, 1262, 3, 2, 2, 2, 1260, 1258, 3, 2, 2, 2, 1260, 1261, 3, 2, 2, 2, 1261, 1264, 3, 2, 2, 2, 1262, 1260, 3, 2, 2, 2, 1263, 1255, 3, 2, 2, 2, 1263, 1264, 3, 2, 2, 2, 1264, 1265, 3, 2, 2, 2, 1265, 1280, 7, 5, 2, 2, 1266, 1267, 7, 109, 2, 2, 1267, 1268, 7, 235, 2, 2, 1268, 1269, 7, 4, 2, 2, 1269, 1274, 5, 52, 27, 2, 1270, 1271, 7, 44, 2, 2, 1271, 1273, 5, 52, 27, 2, 1272, 1270, 3, 2, 2, 2, 1273, 1276, 3, 2, 2, 2, 1274, 1272, 3, 2, 2, 2, 1274, 1275, 3, 2, 2, 2, 1275, 1277, 3, 2, 2, 2, 1276, 1274, 3, 2, 2, 2, 1277, 1278, 7, 5, 2, 2, 1278, 1280, 3, 2, 2, 2, 1279, 1239, 3, 2, 2, 2, 1279, 1240, 3, 2, 2, 2, 1279, 1253, 3, 2, 2, 2, 1279, 1266, 3, 2, 2, 2, 1280, 51, 3, 2, 2, 2, 1281, 1290, 7, 4, 2, 2, 1282, 1287, 5, 114, 58, 2, 1283, 1284, 7, 44, 2, 2, 1284, 1286, 5, 114, 58, 2, 1285, 1283, 3, 2, 2, 2, 1286, 1289, 3, 2, 2, 2, 1287, 1285, 3, 2, 2, 2, 1287, 1288, 3, 2, 2, 2, 1288, 1291, 3, 2, 2, 2, 1289, 1287, 3, 2, 2, 2, 1290, 1282, 3, 2, 2, 2, 1290, 1291, 3, 2, 2, 2, 1291, 1292, 3, 2, 2, 2, 1292, 1295, 7, 5, 2, 2, 1293, 1295, 5, 114, 58, 2, 1294, 1281, 3, 2, 2, 2, 1294, 1293, 3, 2, 2, 2, 1295, 53, 3, 2, 2, 2, 1296, 1297, 5, 216, 109, 2, 1297, 1298, 7, 29, 2, 2, 1298, 1299, 7, 4, 2, 2, 1299, 1300, 5, 56, 29, 2, 1300, 1301, 7, 5, 2, 2, 1301, 55, 3, 2, 2, 2, 1302, 1304, 5, 216, 109, 2, 1303, 1302, 3, 2, 2, 2, 1303, 1304, 3, 2, 2, 2, 1304, 1315, 3, 2, 2, 2, 1305, 1306, 7, 188, 2, 2, 1306, 1307, 7, 36, 2, 2, 1307, 1312, 5, 114, 58, 2, 1308, 1309, 7, 44, 2, 2, 1309, 1311, 5, 114, 58, 2, 1310, 1308, 3, 2, 2, 2, 1311, 1314, 3, 2, 2, 2, 1312, 1310, 3, 2, 2, 2, 1312, 1313, 3, 2, 2, 2, 1313, 1316, 3, 2, 2, 2, 1314, 1312, 3, 2, 2, 2, 1315, 1305, 3, 2, 2, 2, 1315, 1316, 3, 2, 2, 2, 1316, 1327, 3, 2, 2, 2, 1317, 1318, 7, 182, 2, 2, 1318, 1319, 7, 36, 2, 2, 1319, 1324, 5, 42, 22, 2, 1320, 1321, 7, 44, 2, 2, 1321, 1323, 5, 42, 22, 2, 1322, 1320, 3, 2, 2, 2, 1323, 1326, 3, 2, 2, 2, 1324, 1322, 3, 2, 2, 2, 1324, 1325, 3, 2, 2, 2, 1325, 1328, 3, 2, 2, 2, 1326, 1324, 3, 2, 2, 2, 1327, 1317, 3, 2, 2, 2, 1327, 1328, 3, 2, 2, 2, 1328, 1330, 3, 2, 2, 2, 1329, 1331, 5, 176, 89, 2, 1330, 1329, 3, 2, 2, 2, 1330, 1331, 3, 2, 2, 2, 1331, 57, 3, 2, 2, 2, 1332, 1334, 5, 216, 109, 2, 1333, 1335, 5, 96, 49, 2, 1334, 1333, 3, 2, 2, 2, 1334, 1335, 3, 2, 2, 2, 1335, 1336, 3, 2, 2, 2, 1336, 1337, 7, 29, 2, 2, 1337, 1338, 7, 4, 2, 2, 1338, 1339, 5, 14, 8, 2, 1339, 1340, 7, 5, 2, 2, 1340, 59, 3, 2, 2, 2, 1341, 1342, 9, 13, 2, 2, 1342, 61, 3, 2, 2, 2, 1343, 1348, 5, 114, 58, 2, 1344, 1346, 7, 29, 2, 2, 1345, 1344, 3, 2, 2, 2, 1345, 1346, 3, 2, 2, 2, 1346, 1347, 3, 2, 2, 2, 1347, 1349, 5, 216, 109, 2, 1348, 1345, 3, 2, 2, 2, 1348, 1349, 3, 2, 2, 2, 1349, 1359, 3, 2, 2, 2, 1350, 1351, 5, 122, 62, 2, 1351, 1352, 7, 3, 2, 2, 1352, 1355, 7, 301, 2, 2, 1353, 1354, 7, 29, 2, 2, 1354, 1356, 5, 96, 49, 2, 1355, 1353, 3, 2, 2, 2, 1355, 1356, 3, 2, 2, 2, 1356, 1359, 3, 2, 2, 2, 1357, 1359, 7, 301, 2, 2, 1358, 1343, 3, 2, 2, 2, 1358, 1350, 3, 2, 2, 2, 1358, 1357, 3, 2, 2, 2, 1359, 63, 3, 2, 2, 2, 1360, 1361, 8, 33, 1, 2, 1361, 1362, 5, 70, 36, 2, 1362, 1381, 3, 2, 2, 2, 1363, 1377, 12, 4, 2, 2, 1364, 1365, 7, 53, 2, 2, 1365, 1366, 7, 128, 2, 2, 1366, 1378, 5, 70, 36, 2, 1367, 1368, 5, 66, 34, 2, 1368, 1369, 7, 128, 2, 2, 1369, 1370, 5, 64, 33, 2, 1370, 1371, 5, 68, 35, 2, 1371, 1378, 3, 2, 2, 2, 1372, 1373, 7, 160, 2, 2, 1373, 1374, 5, 66, 34, 2, 1374, 1375, 7, 128, 2, 2, 1375, 1376, 5, 70, 36, 2, 1376, 1378, 3, 2, 2, 2, 1377, 1364, 3, 2, 2, 2, 1377, 1367, 3, 2, 2, 2, 1377, 1372, 3, 2, 2, 2, 1378, 1380, 3, 2, 2, 2, 1379, 1363, 3, 2, 2, 2, 1380, 1383, 3, 2, 2, 2, 1381, 1379, 3, 2, 2, 2, 1381, 1382, 3, 2, 2, 2, 1382, 65, 3, 2, 2, 2, 1383, 1381, 3, 2, 2, 2, 1384, 1386, 7, 118, 2, 2, 1385, 1384, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 1400, 3, 2, 2, 2, 1387, 1389, 7, 141, 2, 2, 1388, 1390, 7, 184, 2, 2, 1389, 1388, 3, 2, 2, 2, 1389, 1390, 3, 2, 2, 2, 1390, 1400, 3, 2, 2, 2, 1391, 1393, 7, 217, 2, 2, 1392, 1394, 7, 184, 2, 2, 1393, 1392, 3, 2, 2, 2, 1393, 1394, 3, 2, 2, 2, 1394, 1400, 3, 2, 2, 2, 1395, 1397, 7, 101, 2, 2, 1396, 1398, 7, 184, 2, 2, 1397, 1396, 3, 2, 2, 2, 1397, 1398, 3, 2, 2, 2, 1398, 1400, 3, 2, 2, 2, 1399, 1385, 3, 2, 2, 2, 1399, 1387, 3, 2, 2, 2, 1399, 1391, 3, 2, 2, 2, 1399, 1395, 3, 2, 2, 2, 1400, 67, 3, 2, 2, 2, 1401, 1402, 7, 177, 2, 2, 1402, 1416, 5, 116, 59, 2, 1403, 1404, 7, 272, 2, 2, 1404, 1405, 7, 4, 2, 2, 1405, 1410, 5, 216, 109, 2, 1406, 1407, 7, 44, 2, 2, 1407, 1409, 5, 216, 109, 2, 1408, 1406, 3, 2, 2, 2, 1409, 1412, 3, 2, 2, 2, 1410, 1408, 3, 2, 2, 2, 1410, 1411, 3, 2, 2, 2, 1411, 1413, 3, 2, 2, 2, 1412, 1410, 3, 2, 2, 2, 1413, 1414, 7, 5, 2, 2, 1414, 1416, 3, 2, 2, 2, 1415, 1401, 3, 2, 2, 2, 1415, 1403, 3, 2, 2, 2, 1416, 69, 3, 2, 2, 2, 1417, 1424, 5, 80, 41, 2, 1418, 1419, 7, 245, 2, 2, 1419, 1420, 5, 72, 37, 2, 1420, 1421, 7, 4, 2, 2, 1421, 1422, 5, 114, 58, 2, 1422, 1423, 7, 5, 2, 2, 1423, 1425, 3, 2, 2, 2, 1424, 1418, 3, 2, 2, 2, 1424, 1425, 3, 2, 2, 2, 1425, 71, 3, 2, 2, 2, 1426, 1427, 9, 14, 2, 2, 1427, 73, 3, 2, 2, 2, 1428, 1429, 9, 15, 2, 2, 1429, 75, 3, 2, 2, 2, 1430, 1437, 7, 84, 2, 2, 1431, 1433, 7, 257, 2, 2, 1432, 1434, 5, 146, 74, 2, 1433, 1432, 3, 2, 2, 2, 1433, 1434, 3, 2, 2, 2, 1434, 1435, 3, 2, 2, 2, 1435, 1437, 5, 78, 40, 2, 1436, 1430, 3, 2, 2, 2, 1436, 1431, 3, 2, 2, 2, 1437, 77, 3, 2, 2, 2, 1438, 1439, 7, 285, 2, 2, 1439, 1443, 7, 50, 2, 2, 1440, 1441, 7, 287, 2, 2, 1441, 1443, 7, 50, 2, 2, 1442, 1438, 3, 2, 2, 2, 1442, 1440, 3, 2, 2, 2, 1443, 79, 3, 2, 2, 2, 1444, 1527, 5, 94, 48, 2, 1445, 1446, 7, 154, 2, 2, 1446, 1457, 7, 4, 2, 2, 1447, 1448, 7, 188, 2, 2, 1448, 1449, 7, 36, 2, 2, 1449, 1454, 5, 114, 58, 2, 1450, 1451, 7, 44, 2, 2, 1451, 1453, 5, 114, 58, 2, 1452, 1450, 3, 2, 2, 2, 1453, 1456, 3, 2, 2, 2, 1454, 1452, 3, 2, 2, 2, 1454, 1455, 3, 2, 2, 2, 1455, 1458, 3, 2, 2, 2, 1456, 1454, 3, 2, 2, 2, 1457, 1447, 3, 2, 2, 2, 1457, 1458, 3, 2, 2, 2, 1458, 1469, 3, 2, 2, 2, 1459, 1460, 7, 182, 2, 2, 1460, 1461, 7, 36, 2, 2, 1461, 1466, 5, 42, 22, 2, 1462, 1463, 7, 44, 2, 2, 1463, 1465, 5, 42, 22, 2, 1464, 1462, 3, 2, 2, 2, 1465, 1468, 3, 2, 2, 2, 1466, 1464, 3, 2, 2, 2, 1466, 1467, 3, 2, 2, 2, 1467, 1470, 3, 2, 2, 2, 1468, 1466, 3, 2, 2, 2, 1469, 1459, 3, 2, 2, 2, 1469, 1470, 3, 2, 2, 2, 1470, 1480, 3, 2, 2, 2, 1471, 1472, 7, 156, 2, 2, 1472, 1477, 5, 82, 42, 2, 1473, 1474, 7, 44, 2, 2, 1474, 1476, 5, 82, 42, 2, 1475, 1473, 3, 2, 2, 2, 1476, 1479, 3, 2, 2, 2, 1477, 1475, 3, 2, 2, 2, 1477, 1478, 3, 2, 2, 2, 1478, 1481, 3, 2, 2, 2, 1479, 1477, 3, 2, 2, 2, 1480, 1471, 3, 2, 2, 2, 1480, 1481, 3, 2, 2, 2, 1481, 1483, 3, 2, 2, 2, 1482, 1484, 5, 84, 43, 2, 1483, 1482, 3, 2, 2, 2, 1483, 1484, 3, 2, 2, 2, 1484, 1488, 3, 2, 2, 2, 1485, 1486, 7, 22, 2, 2, 1486, 1487, 7, 151, 2, 2, 1487, 1489, 5, 88, 45, 2, 1488, 1485, 3, 2, 2, 2, 1488, 1489, 3, 2, 2, 2, 1489, 1491, 3, 2, 2, 2, 1490, 1492, 9, 16, 2, 2, 1491, 1490, 3, 2, 2, 2, 1491, 1492, 3, 2, 2, 2, 1492, 1493, 3, 2, 2, 2, 1493, 1494, 7, 193, 2, 2, 1494, 1495, 7, 4, 2, 2, 1495, 1496, 5, 182, 92, 2, 1496, 1506, 7, 5, 2, 2, 1497, 1498, 7, 240, 2, 2, 1498, 1503, 5, 90, 46, 2, 1499, 1500, 7, 44, 2, 2, 1500, 1502, 5, 90, 46, 2, 1501, 1499, 3, 2, 2, 2, 1502, 1505, 3, 2, 2, 2, 1503, 1501, 3, 2, 2, 2, 1503, 1504, 3, 2, 2, 2, 1504, 1507, 3, 2, 2, 2, 1505, 1503, 3, 2, 2, 2, 1506, 1497, 3, 2, 2, 2, 1506, 1507, 3, 2, 2, 2, 1507, 1508, 3, 2, 2, 2, 1508, 1509, 7, 69, 2, 2, 1509, 1514, 5, 92, 47, 2, 1510, 1511, 7, 44, 2, 2, 1511, 1513, 5, 92, 47, 2, 1512, 1510, 3, 2, 2, 2, 1513, 1516, 3, 2, 2, 2, 1514, 1512, 3, 2, 2, 2, 1514, 1515, 3, 2, 2, 2, 1515, 1517, 3, 2, 2, 2, 1516, 1514, 3, 2, 2, 2, 1517, 1525, 7, 5, 2, 2, 1518, 1520, 7, 29, 2, 2, 1519, 1518, 3, 2, 2, 2, 1519, 1520, 3, 2, 2, 2, 1520, 1521, 3, 2, 2, 2, 1521, 1523, 5, 216, 109, 2, 1522, 1524, 5, 96, 49, 2, 1523, 1522, 3, 2, 2, 2, 1523, 1524, 3, 2, 2, 2, 1524, 1526, 3, 2, 2, 2, 1525, 1519, 3, 2, 2, 2, 1525, 1526, 3, 2, 2, 2, 1526, 1528, 3, 2, 2, 2, 1527, 1445, 3, 2, 2, 2, 1527, 1528, 3, 2, 2, 2, 1528, 81, 3, 2, 2, 2, 1529, 1530, 5, 114, 58, 2, 1530, 1531, 7, 29, 2, 2, 1531, 1532, 5, 216, 109, 2, 1532, 83, 3, 2, 2, 2, 1533, 1534, 7, 178, 2, 2, 1534, 1535, 7, 222, 2, 2, 1535, 1536, 7, 194, 2, 2, 1536, 1545, 7, 151, 2, 2, 1537, 1538, 7, 23, 2, 2, 1538, 1539, 7, 223, 2, 2, 1539, 1540, 7, 194, 2, 2, 1540, 1542, 7, 151, 2, 2, 1541, 1543, 5, 86, 44, 2, 1542, 1541, 3, 2, 2, 2, 1542, 1543, 3, 2, 2, 2, 1543, 1545, 3, 2, 2, 2, 1544, 1533, 3, 2, 2, 2, 1544, 1537, 3, 2, 2, 2, 1545, 85, 3, 2, 2, 2, 1546, 1547, 7, 236, 2, 2, 1547, 1548, 7, 81, 2, 2, 1548, 1556, 7, 153, 2, 2, 1549, 1550, 7, 176, 2, 2, 1550, 1551, 7, 81, 2, 2, 1551, 1556, 7, 153, 2, 2, 1552, 1553, 7, 285, 2, 2, 1553, 1554, 7, 267, 2, 2, 1554, 1556, 7, 223, 2, 2, 1555, 1546, 3, 2, 2, 2, 1555, 1549, 3, 2, 2, 2, 1555, 1552, 3, 2, 2, 2, 1556, 87, 3, 2, 2, 2, 1557, 1558, 7, 6, 2, 2, 1558, 1559, 7, 252, 2, 2, 1559, 1560, 7, 161, 2, 2, 1560, 1577, 7, 222, 2, 2, 1561, 1562, 7, 6, 2, 2, 1562, 1563, 7, 191, 2, 2, 1563, 1564, 7, 138, 2, 2, 1564, 1577, 7, 222, 2, 2, 1565, 1566, 7, 6, 2, 2, 1566, 1567, 7, 252, 2, 2, 1567, 1568, 7, 96, 2, 2, 1568, 1577, 5, 216, 109, 2, 1569, 1570, 7, 6, 2, 2, 1570, 1571, 7, 252, 2, 2, 1571, 1572, 7, 138, 2, 2, 1572, 1577, 5, 216, 109, 2, 1573, 1574, 7, 6, 2, 2, 1574, 1575, 7, 252, 2, 2, 1575, 1577, 5, 216, 109, 2, 1576, 1557, 3, 2, 2, 2, 1576, 1561, 3, 2, 2, 2, 1576, 1565, 3, 2, 2, 2, 1576, 1569, 3, 2, 2, 2, 1576, 1573, 3, 2, 2, 2, 1577, 89, 3, 2, 2, 2, 1578, 1579, 5, 216, 109, 2, 1579, 1580, 7, 293, 2, 2, 1580, 1581, 7, 4, 2, 2, 1581, 1586, 5, 216, 109, 2, 1582, 1583, 7, 44, 2, 2, 1583, 1585, 5, 216, 109, 2, 1584, 1582, 3, 2, 2, 2, 1585, 1588, 3, 2, 2, 2, 1586, 1584, 3, 2, 2, 2, 1586, 1587, 3, 2, 2, 2, 1587, 1589, 3, 2, 2, 2, 1588, 1586, 3, 2, 2, 2, 1589, 1590, 7, 5, 2, 2, 1590, 91, 3, 2, 2, 2, 1591, 1592, 5, 216, 109, 2, 1592, 1593, 7, 29, 2, 2, 1593, 1594, 5, 114, 58, 2, 1594, 93, 3, 2, 2, 2, 1595, 1603, 5, 98, 50, 2, 1596, 1598, 7, 29, 2, 2, 1597, 1596, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 1599, 3, 2, 2, 2, 1599, 1601, 5, 216, 109, 2, 1600, 1602, 5, 96, 49, 2, 1601, 1600, 3, 2, 2, 2, 1601, 1602, 3, 2, 2, 2, 1602, 1604, 3, 2, 2, 2, 1603, 1597, 3, 2, 2, 2, 1603, 1604, 3, 2, 2, 2, 1604, 95, 3, 2, 2, 2, 1605, 1606, 7, 4, 2, 2, 1606, 1611, 5, 216, 109, 2, 1607, 1608, 7, 44, 2, 2, 1608, 1610, 5, 216, 109, 2, 1609, 1607, 3, 2, 2, 2, 1610, 1613, 3, 2, 2, 2, 1611, 1609, 3, 2, 2, 2, 1611, 1612, 3, 2, 2, 2, 1612, 1614, 3, 2, 2, 2, 1613, 1611, 3, 2, 2, 2, 1614, 1615, 7, 5, 2, 2, 1615, 97, 3, 2, 2, 2, 1616, 1618, 5, 204, 103, 2, 1617, 1619, 5, 206, 104, 2, 1618, 1617, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 1654, 3, 2, 2, 2, 1620, 1621, 7, 4, 2, 2, 1621, 1622, 5, 14, 8, 2, 1622, 1623, 7, 5, 2, 2, 1623, 1654, 3, 2, 2, 2, 1624, 1625, 7, 268, 2, 2, 1625, 1626, 7, 4, 2, 2, 1626, 1631, 5, 114, 58, 2, 1627, 1628, 7, 44, 2, 2, 1628, 1630, 5, 114, 58, 2, 1629, 1627, 3, 2, 2, 2, 1630, 1633, 3, 2, 2, 2, 1631, 1629, 3, 2, 2, 2, 1631, 1632, 3, 2, 2, 2, 1632, 1634, 3, 2, 2, 2, 1633, 1631, 3, 2, 2, 2, 1634, 1637, 7, 5, 2, 2, 1635, 1636, 7, 285, 2, 2, 1636, 1638, 7, 183, 2, 2, 1637, 1635, 3, 2, 2, 2, 1637, 1638, 3, 2, 2, 2, 1638, 1654, 3, 2, 2, 2, 1639, 1640, 7, 139, 2, 2, 1640, 1641, 7, 4, 2, 2, 1641, 1642, 5, 14, 8, 2, 1642, 1643, 7, 5, 2, 2, 1643, 1654, 3, 2, 2, 2, 1644, 1645, 7, 243, 2, 2, 1645, 1646, 7, 4, 2, 2, 1646, 1647, 5, 100, 51, 2, 1647, 1648, 7, 5, 2, 2, 1648, 1654, 3, 2, 2, 2, 1649, 1650, 7, 4, 2, 2, 1650, 1651, 5, 64, 33, 2, 1651, 1652, 7, 5, 2, 2, 1652, 1654, 3, 2, 2, 2, 1653, 1616, 3, 2, 2, 2, 1653, 1620, 3, 2, 2, 2, 1653, 1624, 3, 2, 2, 2, 1653, 1639, 3, 2, 2, 2, 1653, 1644, 3, 2, 2, 2, 1653, 1649, 3, 2, 2, 2, 1654, 99, 3, 2, 2, 2, 1655, 1656, 5, 204, 103, 2, 1656, 1665, 7, 4, 2, 2, 1657, 1662, 5, 102, 52, 2, 1658, 1659, 7, 44, 2, 2, 1659, 1661, 5, 102, 52, 2, 1660, 1658, 3, 2, 2, 2, 1661, 1664, 3, 2, 2, 2, 1662, 1660, 3, 2, 2, 2, 1662, 1663, 3, 2, 2, 2, 1663, 1666, 3, 2, 2, 2, 1664, 1662, 3, 2, 2, 2, 1665, 1657, 3, 2, 2, 2, 1665, 1666, 3, 2, 2, 2, 1666, 1676, 3, 2, 2, 2, 1667, 1668, 7, 51, 2, 2, 1668, 1673, 5, 112, 57, 2, 1669, 1670, 7, 44, 2, 2, 1670, 1672, 5, 112, 57, 2, 1671, 1669, 3, 2, 2, 2, 1672, 1675, 3, 2, 2, 2, 1673, 1671, 3, 2, 2, 2, 1673, 1674, 3, 2, 2, 2, 1674, 1677, 3, 2, 2, 2, 1675, 1673, 3, 2, 2, 2, 1676, 1667, 3, 2, 2, 2, 1676, 1677, 3, 2, 2, 2, 1677, 1678, 3, 2, 2, 2, 1678, 1679, 7, 5, 2, 2, 1679, 101, 3, 2, 2, 2, 1680, 1681, 5, 216, 109, 2, 1681, 1682, 7, 7, 2, 2, 1682, 1684, 3, 2, 2, 2, 1683, 1680, 3, 2, 2, 2, 1683, 1684, 3, 2, 2, 2, 1684, 1688, 3, 2, 2, 2, 1685, 1689, 5, 104, 53, 2, 1686, 1689, 5, 108, 55, 2, 1687, 1689, 5, 114, 58, 2, 1688, 1685, 3, 2, 2, 2, 1688, 1686, 3, 2, 2, 2, 1688, 1687, 3, 2, 2, 2, 1689, 103, 3, 2, 2, 2, 1690, 1708, 5, 106, 54, 2, 1691, 1692, 7, 188, 2, 2, 1692, 1706, 7, 36, 2, 2, 1693, 1702, 7, 4, 2, 2, 1694, 1699, 5, 114, 58, 2, 1695, 1696, 7, 44, 2, 2, 1696, 1698, 5, 114, 58, 2, 1697, 1695, 3, 2, 2, 2, 1698, 1701, 3, 2, 2, 2, 1699, 1697, 3, 2, 2, 2, 1699, 1700, 3, 2, 2, 2, 1700, 1703, 3, 2, 2, 2, 1701, 1699, 3, 2, 2, 2, 1702, 1694, 3, 2, 2, 2, 1702, 1703, 3, 2, 2, 2, 1703, 1704, 3, 2, 2, 2, 1704, 1707, 7, 5, 2, 2, 1705, 1707, 5, 114, 58, 2, 1706, 1693, 3, 2, 2, 2, 1706, 1705, 3, 2, 2, 2, 1707, 1709, 3, 2, 2, 2, 1708, 1691, 3, 2, 2, 2, 1708, 1709, 3, 2, 2, 2, 1709, 1716, 3, 2, 2, 2, 1710, 1711, 7, 203, 2, 2, 1711, 1712, 7, 282, 2, 2, 1712, 1717, 7, 81, 2, 2, 1713, 1714, 7, 135, 2, 2, 1714, 1715, 7, 282, 2, 2, 1715, 1717, 7, 81, 2, 2, 1716, 1710, 3, 2, 2, 2, 1716, 1713, 3, 2, 2, 2, 1716, 1717, 3, 2, 2, 2, 1717, 1734, 3, 2, 2, 2, 1718, 1719, 7, 182, 2, 2, 1719, 1732, 7, 36, 2, 2, 1720, 1721, 7, 4, 2, 2, 1721, 1726, 5, 42, 22, 2, 1722, 1723, 7, 44, 2, 2, 1723, 1725, 5, 42, 22, 2, 1724, 1722, 3, 2, 2, 2, 1725, 1728, 3, 2, 2, 2, 1726, 1724, 3, 2, 2, 2, 1726, 1727, 3, 2, 2, 2, 1727, 1729, 3, 2, 2, 2, 1728, 1726, 3, 2, 2, 2, 1729, 1730, 7, 5, 2, 2, 1730, 1733, 3, 2, 2, 2, 1731, 1733, 5, 42, 22, 2, 1732, 1720, 3, 2, 2, 2, 1732, 1731, 3, 2, 2, 2, 1733, 1735, 3, 2, 2, 2, 1734, 1718, 3, 2, 2, 2, 1734, 1735, 3, 2, 2, 2, 1735, 105, 3, 2, 2, 2, 1736, 1737, 7, 243, 2, 2, 1737, 1738, 7, 4, 2, 2, 1738, 1739, 5, 204, 103, 2, 1739, 1747, 7, 5, 2, 2, 1740, 1742, 7, 29, 2, 2, 1741, 1740, 3, 2, 2, 2, 1741, 1742, 3, 2, 2, 2, 1742, 1743, 3, 2, 2, 2, 1743, 1745, 5, 216, 109, 2, 1744, 1746, 5, 96, 49, 2, 1745, 1744, 3, 2, 2, 2, 1745, 1746, 3, 2, 2, 2, 1746, 1748, 3, 2, 2, 2, 1747, 1741, 3, 2, 2, 2, 1747, 1748, 3, 2, 2, 2, 1748, 1763, 3, 2, 2, 2, 1749, 1750, 7, 243, 2, 2, 1750, 1751, 7, 4, 2, 2, 1751, 1752, 5, 14, 8, 2, 1752, 1760, 7, 5, 2, 2, 1753, 1755, 7, 29, 2, 2, 1754, 1753, 3, 2, 2, 2, 1754, 1755, 3, 2, 2, 2, 1755, 1756, 3, 2, 2, 2, 1756, 1758, 5, 216, 109, 2, 1757, 1759, 5, 96, 49, 2, 1758, 1757, 3, 2, 2, 2, 1758, 1759, 3, 2, 2, 2, 1759, 1761, 3, 2, 2, 2, 1760, 1754, 3, 2, 2, 2, 1760, 1761, 3, 2, 2, 2, 1761, 1763, 3, 2, 2, 2, 1762, 1736, 3, 2, 2, 2, 1762, 1749, 3, 2, 2, 2, 1763, 107, 3, 2, 2, 2, 1764, 1765, 7, 75, 2, 2, 1765, 1766, 7, 4, 2, 2, 1766, 1771, 5, 110, 56, 2, 1767, 1768, 7, 44, 2, 2, 1768, 1770, 5, 110, 56, 2, 1769, 1767, 3, 2, 2, 2, 1770, 1773, 3, 2, 2, 2, 1771, 1769, 3, 2, 2, 2, 1771, 1772, 3, 2, 2, 2, 1772, 1774, 3, 2, 2, 2, 1773, 1771, 3, 2, 2, 2, 1774, 1775, 7, 5, 2, 2, 1775, 1783, 3, 2, 2, 2, 1776, 1777, 7, 40, 2, 2, 1777, 1778, 7, 4, 2, 2, 1778, 1779, 7, 170, 2, 2, 1779, 1780, 7, 29, 2, 2, 1780, 1781, 7, 75, 2, 2, 1781, 1783, 7, 5, 2, 2, 1782, 1764, 3, 2, 2, 2, 1782, 1776, 3, 2, 2, 2, 1783, 109, 3, 2, 2, 2, 1784, 1786, 5, 216, 109, 2, 1785, 1787, 5, 162, 82, 2, 1786, 1785, 3, 2, 2, 2, 1786, 1787, 3, 2, 2, 2, 1787, 111, 3, 2, 2, 2, 1788, 1789, 7, 4, 2, 2, 1789, 1790, 5, 204, 103, 2, 1790, 1791, 7, 44, 2, 2, 1791, 1796, 5, 204, 103, 2, 1792, 1793, 7, 44, 2, 2, 1793, 1795, 5, 204, 103, 2, 1794, 1792, 3, 2, 2, 2, 1795, 1798, 3, 2, 2, 2, 1796, 1794, 3, 2, 2, 2, 1796, 1797, 3, 2, 2, 2, 1797, 1799, 3, 2, 2, 2, 1798, 1796, 3, 2, 2, 2, 1799, 1800, 7, 5, 2, 2, 1800, 113, 3, 2, 2, 2, 1801, 1802, 5, 116, 59, 2, 1802, 115, 3, 2, 2, 2, 1803, 1804, 8, 59, 1, 2, 1804, 1806, 5, 120, 61, 2, 1805, 1807, 5, 118, 60, 2, 1806, 1805, 3, 2, 2, 2, 1806, 1807, 3, 2, 2, 2, 1807, 1811, 3, 2, 2, 2, 1808, 1809, 7, 169, 2, 2, 1809, 1811, 5, 116, 59, 5, 1810, 1803, 3, 2, 2, 2, 1810, 1808, 3, 2, 2, 2, 1811, 1820, 3, 2, 2, 2, 1812, 1813, 12, 4, 2, 2, 1813, 1814, 7, 26, 2, 2, 1814, 1819, 5, 116, 59, 5, 1815, 1816, 12, 3, 2, 2, 1816, 1817, 7, 181, 2, 2, 1817, 1819, 5, 116, 59, 4, 1818, 1812, 3, 2, 2, 2, 1818, 1815, 3, 2, 2, 2, 1819, 1822, 3, 2, 2, 2, 1820, 1818, 3, 2, 2, 2, 1820, 1821, 3, 2, 2, 2, 1821, 117, 3, 2, 2, 2, 1822, 1820, 3, 2, 2, 2, 1823, 1824, 5, 150, 76, 2, 1824, 1825, 5, 120, 61, 2, 1825, 1885, 3, 2, 2, 2, 1826, 1827, 5, 150, 76, 2, 1827, 1828, 5, 152, 77, 2, 1828, 1829, 7, 4, 2, 2, 1829, 1830, 5, 14, 8, 2, 1830, 1831, 7, 5, 2, 2, 1831, 1885, 3, 2, 2, 2, 1832, 1834, 7, 169, 2, 2, 1833, 1832, 3, 2, 2, 2, 1833, 1834, 3, 2, 2, 2, 1834, 1835, 3, 2, 2, 2, 1835, 1836, 7, 34, 2, 2, 1836, 1837, 5, 120, 61, 2, 1837, 1838, 7, 26, 2, 2, 1838, 1839, 5, 120, 61, 2, 1839, 1885, 3, 2, 2, 2, 1840, 1842, 7, 169, 2, 2, 1841, 1840, 3, 2, 2, 2, 1841, 1842, 3, 2, 2, 2, 1842, 1843, 3, 2, 2, 2, 1843, 1844, 7, 115, 2, 2, 1844, 1845, 7, 4, 2, 2, 1845, 1850, 5, 114, 58, 2, 1846, 1847, 7, 44, 2, 2, 1847, 1849, 5, 114, 58, 2, 1848, 1846, 3, 2, 2, 2, 1849, 1852, 3, 2, 2, 2, 1850, 1848, 3, 2, 2, 2, 1850, 1851, 3, 2, 2, 2, 1851, 1853, 3, 2, 2, 2, 1852, 1850, 3, 2, 2, 2, 1853, 1854, 7, 5, 2, 2, 1854, 1885, 3, 2, 2, 2, 1855, 1857, 7, 169, 2, 2, 1856, 1855, 3, 2, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, 1858, 3, 2, 2, 2, 1858, 1859, 7, 115, 2, 2, 1859, 1860, 7, 4, 2, 2, 1860, 1861, 5, 14, 8, 2, 1861, 1862, 7, 5, 2, 2, 1862, 1885, 3, 2, 2, 2, 1863, 1865, 7, 169, 2, 2, 1864, 1863, 3, 2, 2, 2, 1864, 1865, 3, 2, 2, 2, 1865, 1866, 3, 2, 2, 2, 1866, 1867, 7, 143, 2, 2, 1867, 1870, 5, 120, 61, 2, 1868, 1869, 7, 85, 2, 2, 1869, 1871, 5, 120, 61, 2, 1870, 1868, 3, 2, 2, 2, 1870, 1871, 3, 2, 2, 2, 1871, 1885, 3, 2, 2, 2, 1872, 1874, 7, 126, 2, 2, 1873, 1875, 7, 169, 2, 2, 1874, 1873, 3, 2, 2, 2, 1874, 1875, 3, 2, 2, 2, 1875, 1876, 3, 2, 2, 2, 1876, 1885, 7, 170, 2, 2, 1877, 1879, 7, 126, 2, 2, 1878, 1880, 7, 169, 2, 2, 1879, 1878, 3, 2, 2, 2, 1879, 1880, 3, 2, 2, 2, 1880, 1881, 3, 2, 2, 2, 1881, 1882, 7, 76, 2, 2, 1882, 1883, 7, 100, 2, 2, 1883, 1885, 5, 120, 61, 2, 1884, 1823, 3, 2, 2, 2, 1884, 1826, 3, 2, 2, 2, 1884, 1833, 3, 2, 2, 2, 1884, 1841, 3, 2, 2, 2, 1884, 1856, 3, 2, 2, 2, 1884, 1864, 3, 2, 2, 2, 1884, 1872, 3, 2, 2, 2, 1884, 1877, 3, 2, 2, 2, 1885, 119, 3, 2, 2, 2, 1886, 1887, 8, 61, 1, 2, 1887, 1891, 5, 122, 62, 2, 1888, 1889, 9, 17, 2, 2, 1889, 1891, 5, 120, 61, 6, 1890, 1886, 3, 2, 2, 2, 1890, 1888, 3, 2, 2, 2, 1891, 1906, 3, 2, 2, 2, 1892, 1893, 12, 5, 2, 2, 1893, 1894, 9, 18, 2, 2, 1894, 1905, 5, 120, 61, 6, 1895, 1896, 12, 4, 2, 2, 1896, 1897, 9, 17, 2, 2, 1897, 1905, 5, 120, 61, 5, 1898, 1899, 12, 3, 2, 2, 1899, 1900, 7, 304, 2, 2, 1900, 1905, 5, 120, 61, 4, 1901, 1902, 12, 7, 2, 2, 1902, 1903, 7, 31, 2, 2, 1903, 1905, 5, 148, 75, 2, 1904, 1892, 3, 2, 2, 2, 1904, 1895, 3, 2, 2, 2, 1904, 1898, 3, 2, 2, 2, 1904, 1901, 3, 2, 2, 2, 1905, 1908, 3, 2, 2, 2, 1906, 1904, 3, 2, 2, 2, 1906, 1907, 3, 2, 2, 2, 1907, 121, 3, 2, 2, 2, 1908, 1906, 3, 2, 2, 2, 1909, 1910, 8, 62, 1, 2, 1910, 2360, 7, 170, 2, 2, 1911, 2360, 5, 156, 79, 2, 1912, 1913, 5, 216, 109, 2, 1913, 1914, 5, 146, 74, 2, 1914, 2360, 3, 2, 2, 2, 1915, 1916, 7, 78, 2, 2, 1916, 1917, 7, 199, 2, 2, 1917, 2360, 5, 146, 74, 2, 1918, 2360, 5, 218, 110, 2, 1919, 2360, 5, 154, 78, 2, 1920, 2360, 5, 146, 74, 2, 1921, 2360, 7, 308, 2, 2, 1922, 2360, 7, 305, 2, 2, 1923, 1924, 7, 197, 2, 2, 1924, 1925, 7, 4, 2, 2, 1925, 1926, 5, 120, 61, 2, 1926, 1927, 7, 115, 2, 2, 1927, 1928, 5, 120, 61, 2, 1928, 1929, 7, 5, 2, 2, 1929, 2360, 3, 2, 2, 2, 1930, 1931, 7, 4, 2, 2, 1931, 1934, 5, 114, 58, 2, 1932, 1933, 7, 44, 2, 2, 1933, 1935, 5, 114, 58, 2, 1934, 1932, 3, 2, 2, 2, 1935, 1936, 3, 2, 2, 2, 1936, 1934, 3, 2, 2, 2, 1936, 1937, 3, 2, 2, 2, 1937, 1938, 3, 2, 2, 2, 1938, 1939, 7, 5, 2, 2, 1939, 2360, 3, 2, 2, 2, 1940, 1941, 7, 222, 2, 2, 1941, 1942, 7, 4, 2, 2, 1942, 1947, 5, 114, 58, 2, 1943, 1944, 7, 44, 2, 2, 1944, 1946, 5, 114, 58, 2, 1945, 1943, 3, 2, 2, 2, 1946, 1949, 3, 2, 2, 2, 1947, 1945, 3, 2, 2, 2, 1947, 1948, 3, 2, 2, 2, 1948, 1950, 3, 2, 2, 2, 1949, 1947, 3, 2, 2, 2, 1950, 1951, 7, 5, 2, 2, 1951, 2360, 3, 2, 2, 2, 1952, 1953, 7, 145, 2, 2, 1953, 1955, 7, 4, 2, 2, 1954, 1956, 5, 60, 31, 2, 1955, 1954, 3, 2, 2, 2, 1955, 1956, 3, 2, 2, 2, 1956, 1957, 3, 2, 2, 2, 1957, 1960, 5, 114, 58, 2, 1958, 1959, 7, 44, 2, 2, 1959, 1961, 5, 146, 74, 2, 1960, 1958, 3, 2, 2, 2, 1960, 1961, 3, 2, 2, 2, 1961, 1965, 3, 2, 2, 2, 1962, 1963, 7, 177, 2, 2, 1963, 1964, 7, 187, 2, 2, 1964, 1966, 5, 76, 39, 2, 1965, 1962, 3, 2, 2, 2, 1965, 1966, 3, 2, 2, 2, 1966, 1967, 3, 2, 2, 2, 1967, 1968, 7, 5, 2, 2, 1968, 1969, 7, 286, 2, 2, 1969, 1970, 7, 108, 2, 2, 1970, 1971, 7, 4, 2, 2, 1971, 1972, 7, 182, 2, 2, 1972, 1973, 7, 36, 2, 2, 1973, 1978, 5, 42, 22, 2, 1974, 1975, 7, 44, 2, 2, 1975, 1977, 5, 42, 22, 2, 1976, 1974, 3, 2, 2, 2, 1977, 1980, 3, 2, 2, 2, 1978, 1976, 3, 2, 2, 2, 1978, 1979, 3, 2, 2, 2, 1979, 1981, 3, 2, 2, 2, 1980, 1978, 3, 2, 2, 2, 1981, 1982, 7, 5, 2, 2, 1982, 2360, 3, 2, 2, 2, 1983, 1985, 5, 142, 72, 2, 1984, 1983, 3, 2, 2, 2, 1984, 1985, 3, 2, 2, 2, 1985, 1986, 3, 2, 2, 2, 1986, 1987, 5, 204, 103, 2, 1987, 1991, 7, 4, 2, 2, 1988, 1989, 5, 216, 109, 2, 1989, 1990, 7, 3, 2, 2, 1990, 1992, 3, 2, 2, 2, 1991, 1988, 3, 2, 2, 2, 1991, 1992, 3, 2, 2, 2, 1992, 1993, 3, 2, 2, 2, 1993, 1994, 7, 301, 2, 2, 1994, 1996, 7, 5, 2, 2, 1995, 1997, 5, 170, 86, 2, 1996, 1995, 3, 2, 2, 2, 1996, 1997, 3, 2, 2, 2, 1997, 1999, 3, 2, 2, 2, 1998, 2000, 5, 174, 88, 2, 1999, 1998, 3, 2, 2, 2, 1999, 2000, 3, 2, 2, 2, 2000, 2360, 3, 2, 2, 2, 2001, 2003, 5, 142, 72, 2, 2002, 2001, 3, 2, 2, 2, 2002, 2003, 3, 2, 2, 2, 2003, 2004, 3, 2, 2, 2, 2004, 2005, 5, 204, 103, 2, 2005, 2017, 7, 4, 2, 2, 2006, 2008, 5, 60, 31, 2, 2007, 2006, 3, 2, 2, 2, 2007, 2008, 3, 2, 2, 2, 2008, 2009, 3, 2, 2, 2, 2009, 2014, 5, 114, 58, 2, 2010, 2011, 7, 44, 2, 2, 2011, 2013, 5, 114, 58, 2, 2012, 2010, 3, 2, 2, 2, 2013, 2016, 3, 2, 2, 2, 2014, 2012, 3, 2, 2, 2, 2014, 2015, 3, 2, 2, 2, 2015, 2018, 3, 2, 2, 2, 2016, 2014, 3, 2, 2, 2, 2017, 2007, 3, 2, 2, 2, 2017, 2018, 3, 2, 2, 2, 2018, 2029, 3, 2, 2, 2, 2019, 2020, 7, 182, 2, 2, 2020, 2021, 7, 36, 2, 2, 2021, 2026, 5, 42, 22, 2, 2022, 2023, 7, 44, 2, 2, 2023, 2025, 5, 42, 22, 2, 2024, 2022, 3, 2, 2, 2, 2025, 2028, 3, 2, 2, 2, 2026, 2024, 3, 2, 2, 2, 2026, 2027, 3, 2, 2, 2, 2027, 2030, 3, 2, 2, 2, 2028, 2026, 3, 2, 2, 2, 2029, 2019, 3, 2, 2, 2, 2029, 2030, 3, 2, 2, 2, 2030, 2031, 3, 2, 2, 2, 2031, 2033, 7, 5, 2, 2, 2032, 2034, 5, 170, 86, 2, 2033, 2032, 3, 2, 2, 2, 2033, 2034, 3, 2, 2, 2, 2034, 2039, 3, 2, 2, 2, 2035, 2037, 5, 144, 73, 2, 2036, 2035, 3, 2, 2, 2, 2036, 2037, 3, 2, 2, 2, 2037, 2038, 3, 2, 2, 2, 2038, 2040, 5, 174, 88, 2, 2039, 2036, 3, 2, 2, 2, 2039, 2040, 3, 2, 2, 2, 2040, 2360, 3, 2, 2, 2, 2041, 2042, 5, 216, 109, 2, 2042, 2043, 5, 174, 88, 2, 2043, 2360, 3, 2, 2, 2, 2044, 2045, 5, 216, 109, 2, 2045, 2046, 7, 8, 2, 2, 2046, 2047, 5, 114, 58, 2, 2047, 2360, 3, 2, 2, 2, 2048, 2057, 7, 4, 2, 2, 2049, 2054, 5, 216, 109, 2, 2050, 2051, 7, 44, 2, 2, 2051, 2053, 5, 216, 109, 2, 2052, 2050, 3, 2, 2, 2, 2053, 2056, 3, 2, 2, 2, 2054, 2052, 3, 2, 2, 2, 2054, 2055, 3, 2, 2, 2, 2055, 2058, 3, 2, 2, 2, 2056, 2054, 3, 2, 2, 2, 2057, 2049, 3, 2, 2, 2, 2057, 2058, 3, 2, 2, 2, 2058, 2059, 3, 2, 2, 2, 2059, 2060, 7, 5, 2, 2, 2060, 2061, 7, 8, 2, 2, 2061, 2360, 5, 114, 58, 2, 2062, 2063, 7, 4, 2, 2, 2063, 2064, 5, 14, 8, 2, 2064, 2065, 7, 5, 2, 2, 2065, 2360, 3, 2, 2, 2, 2066, 2067, 7, 89, 2, 2, 2067, 2068, 7, 4, 2, 2, 2068, 2069, 5, 14, 8, 2, 2069, 2070, 7, 5, 2, 2, 2070, 2360, 3, 2, 2, 2, 2071, 2072, 7, 39, 2, 2, 2072, 2074, 5, 114, 58, 2, 2073, 2075, 5, 168, 85, 2, 2074, 2073, 3, 2, 2, 2, 2075, 2076, 3, 2, 2, 2, 2076, 2074, 3, 2, 2, 2, 2076, 2077, 3, 2, 2, 2, 2077, 2080, 3, 2, 2, 2, 2078, 2079, 7, 80, 2, 2, 2079, 2081, 5, 114, 58, 2, 2080, 2078, 3, 2, 2, 2, 2080, 2081, 3, 2, 2, 2, 2081, 2082, 3, 2, 2, 2, 2082, 2083, 7, 83, 2, 2, 2083, 2360, 3, 2, 2, 2, 2084, 2086, 7, 39, 2, 2, 2085, 2087, 5, 168, 85, 2, 2086, 2085, 3, 2, 2, 2, 2087, 2088, 3, 2, 2, 2, 2088, 2086, 3, 2, 2, 2, 2088, 2089, 3, 2, 2, 2, 2089, 2092, 3, 2, 2, 2, 2090, 2091, 7, 80, 2, 2, 2091, 2093, 5, 114, 58, 2, 2092, 2090, 3, 2, 2, 2, 2092, 2093, 3, 2, 2, 2, 2093, 2094, 3, 2, 2, 2, 2094, 2095, 7, 83, 2, 2, 2095, 2360, 3, 2, 2, 2, 2096, 2097, 7, 40, 2, 2, 2097, 2098, 7, 4, 2, 2, 2098, 2099, 5, 114, 58, 2, 2099, 2100, 7, 29, 2, 2, 2100, 2101, 5, 162, 82, 2, 2101, 2102, 7, 5, 2, 2, 2102, 2360, 3, 2, 2, 2, 2103, 2104, 7, 258, 2, 2, 2104, 2105, 7, 4, 2, 2, 2105, 2106, 5, 114, 58, 2, 2106, 2107, 7, 29, 2, 2, 2107, 2108, 5, 162, 82, 2, 2108, 2109, 7, 5, 2, 2, 2109, 2360, 3, 2, 2, 2, 2110, 2111, 7, 28, 2, 2, 2111, 2120, 7, 9, 2, 2, 2112, 2117, 5, 114, 58, 2, 2113, 2114, 7, 44, 2, 2, 2114, 2116, 5, 114, 58, 2, 2115, 2113, 3, 2, 2, 2, 2116, 2119, 3, 2, 2, 2, 2117, 2115, 3, 2, 2, 2, 2117, 2118, 3, 2, 2, 2, 2118, 2121, 3, 2, 2, 2, 2119, 2117, 3, 2, 2, 2, 2120, 2112, 3, 2, 2, 2, 2120, 2121, 3, 2, 2, 2, 2121, 2122, 3, 2, 2, 2, 2122, 2360, 7, 10, 2, 2, 2123, 2360, 5, 216, 109, 2, 2124, 2360, 7, 57, 2, 2, 2125, 2129, 7, 61, 2, 2, 2126, 2127, 7, 4, 2, 2, 2127, 2128, 7, 309, 2, 2, 2128, 2130, 7, 5, 2, 2, 2129, 2126, 3, 2, 2, 2, 2129, 2130, 3, 2, 2, 2, 2130, 2360, 3, 2, 2, 2, 2131, 2135, 7, 62, 2, 2, 2132, 2133, 7, 4, 2, 2, 2133, 2134, 7, 309, 2, 2, 2134, 2136, 7, 5, 2, 2, 2135, 2132, 3, 2, 2, 2, 2135, 2136, 3, 2, 2, 2, 2136, 2360, 3, 2, 2, 2, 2137, 2141, 7, 147, 2, 2, 2138, 2139, 7, 4, 2, 2, 2139, 2140, 7, 309, 2, 2, 2140, 2142, 7, 5, 2, 2, 2141, 2138, 3, 2, 2, 2, 2141, 2142, 3, 2, 2, 2, 2142, 2360, 3, 2, 2, 2, 2143, 2147, 7, 148, 2, 2, 2144, 2145, 7, 4, 2, 2, 2145, 2146, 7, 309, 2, 2, 2146, 2148, 7, 5, 2, 2, 2147, 2144, 3, 2, 2, 2, 2147, 2148, 3, 2, 2, 2, 2148, 2360, 3, 2, 2, 2, 2149, 2360, 7, 63, 2, 2, 2150, 2360, 7, 56, 2, 2, 2151, 2360, 7, 60, 2, 2, 2152, 2360, 7, 58, 2, 2, 2153, 2154, 7, 255, 2, 2, 2154, 2162, 7, 4, 2, 2, 2155, 2157, 5, 74, 38, 2, 2156, 2155, 3, 2, 2, 2, 2156, 2157, 3, 2, 2, 2, 2157, 2159, 3, 2, 2, 2, 2158, 2160, 5, 120, 61, 2, 2159, 2158, 3, 2, 2, 2, 2159, 2160, 3, 2, 2, 2, 2160, 2161, 3, 2, 2, 2, 2161, 2163, 7, 100, 2, 2, 2162, 2156, 3, 2, 2, 2, 2162, 2163, 3, 2, 2, 2, 2163, 2164, 3, 2, 2, 2, 2164, 2165, 5, 120, 61, 2, 2165, 2166, 7, 5, 2, 2, 2166, 2360, 3, 2, 2, 2, 2167, 2168, 7, 255, 2, 2, 2168, 2169, 7, 4, 2, 2, 2169, 2170, 5, 120, 61, 2, 2170, 2171, 7, 44, 2, 2, 2171, 2172, 5, 120, 61, 2, 2172, 2173, 7, 5, 2, 2, 2173, 2360, 3, 2, 2, 2, 2174, 2175, 7, 241, 2, 2, 2175, 2176, 7, 4, 2, 2, 2176, 2177, 5, 120, 61, 2, 2177, 2178, 7, 100, 2, 2, 2178, 2181, 5, 120, 61, 2, 2179, 2180, 7, 98, 2, 2, 2180, 2182, 5, 120, 61, 2, 2181, 2179, 3, 2, 2, 2, 2181, 2182, 3, 2, 2, 2, 2182, 2183, 3, 2, 2, 2, 2183, 2184, 7, 5, 2, 2, 2184, 2360, 3, 2, 2, 2, 2185, 2186, 7, 168, 2, 2, 2186, 2187, 7, 4, 2, 2, 2187, 2190, 5, 120, 61, 2, 2188, 2189, 7, 44, 2, 2, 2189, 2191, 5, 160, 81, 2, 2190, 2188, 3, 2, 2, 2, 2190, 2191, 3, 2, 2, 2, 2191, 2192, 3, 2, 2, 2, 2192, 2193, 7, 5, 2, 2, 2193, 2360, 3, 2, 2, 2, 2194, 2195, 7, 91, 2, 2, 2195, 2196, 7, 4, 2, 2, 2196, 2197, 5, 216, 109, 2, 2197, 2198, 7, 100, 2, 2, 2198, 2199, 5, 120, 61, 2, 2199, 2200, 7, 5, 2, 2, 2200, 2360, 3, 2, 2, 2, 2201, 2202, 7, 4, 2, 2, 2202, 2203, 5, 114, 58, 2, 2203, 2204, 7, 5, 2, 2, 2204, 2360, 3, 2, 2, 2, 2205, 2206, 7, 109, 2, 2, 2206, 2215, 7, 4, 2, 2, 2207, 2212, 5, 204, 103, 2, 2208, 2209, 7, 44, 2, 2, 2209, 2211, 5, 204, 103, 2, 2210, 2208, 3, 2, 2, 2, 2211, 2214, 3, 2, 2, 2, 2212, 2210, 3, 2, 2, 2, 2212, 2213, 3, 2, 2, 2, 2213, 2216, 3, 2, 2, 2, 2214, 2212, 3, 2, 2, 2, 2215, 2207, 3, 2, 2, 2, 2215, 2216, 3, 2, 2, 2, 2216, 2217, 3, 2, 2, 2, 2217, 2360, 7, 5, 2, 2, 2218, 2219, 7, 131, 2, 2, 2219, 2220, 7, 4, 2, 2, 2220, 2225, 5, 124, 63, 2, 2221, 2222, 5, 132, 67, 2, 2222, 2223, 7, 177, 2, 2, 2223, 2224, 7, 84, 2, 2, 2224, 2226, 3, 2, 2, 2, 2225, 2221, 3, 2, 2, 2, 2225, 2226, 3, 2, 2, 2, 2226, 2227, 3, 2, 2, 2, 2227, 2228, 7, 5, 2, 2, 2228, 2360, 3, 2, 2, 2, 2229, 2230, 7, 134, 2, 2, 2230, 2231, 7, 4, 2, 2, 2231, 2234, 5, 124, 63, 2, 2232, 2233, 7, 215, 2, 2, 2233, 2235, 5, 162, 82, 2, 2234, 2232, 3, 2, 2, 2, 2234, 2235, 3, 2, 2, 2, 2235, 2240, 3, 2, 2, 2, 2236, 2237, 5, 134, 68, 2, 2237, 2238, 7, 177, 2, 2, 2238, 2239, 7, 81, 2, 2, 2239, 2241, 3, 2, 2, 2, 2240, 2236, 3, 2, 2, 2, 2240, 2241, 3, 2, 2, 2, 2241, 2246, 3, 2, 2, 2, 2242, 2243, 5, 134, 68, 2, 2243, 2244, 7, 177, 2, 2, 2244, 2245, 7, 84, 2, 2, 2245, 2247, 3, 2, 2, 2, 2246, 2242, 3, 2, 2, 2, 2246, 2247, 3, 2, 2, 2, 2247, 2248, 3, 2, 2, 2, 2248, 2249, 7, 5, 2, 2, 2249, 2360, 3, 2, 2, 2, 2250, 2251, 7, 133, 2, 2, 2251, 2252, 7, 4, 2, 2, 2252, 2259, 5, 124, 63, 2, 2253, 2254, 7, 215, 2, 2, 2254, 2257, 5, 162, 82, 2, 2255, 2256, 7, 99, 2, 2, 2256, 2258, 5, 128, 65, 2, 2257, 2255, 3, 2, 2, 2, 2257, 2258, 3, 2, 2, 2, 2258, 2260, 3, 2, 2, 2, 2259, 2253, 3, 2, 2, 2, 2259, 2260, 3, 2, 2, 2, 2260, 2264, 3, 2, 2, 2, 2261, 2262, 5, 136, 69, 2, 2262, 2263, 7, 289, 2, 2, 2263, 2265, 3, 2, 2, 2, 2264, 2261, 3, 2, 2, 2, 2264, 2265, 3, 2, 2, 2, 2265, 2273, 3, 2, 2, 2, 2266, 2267, 9, 19, 2, 2, 2267, 2271, 7, 204, 2, 2, 2268, 2269, 7, 177, 2, 2, 2269, 2270, 7, 225, 2, 2, 2270, 2272, 7, 247, 2, 2, 2271, 2268, 3, 2, 2, 2, 2271, 2272, 3, 2, 2, 2, 2272, 2274, 3, 2, 2, 2, 2273, 2266, 3, 2, 2, 2, 2273, 2274, 3, 2, 2, 2, 2274, 2279, 3, 2, 2, 2, 2275, 2276, 5, 138, 70, 2, 2276, 2277, 7, 177, 2, 2, 2277, 2278, 7, 81, 2, 2, 2278, 2280, 3, 2, 2, 2, 2279, 2275, 3, 2, 2, 2, 2279, 2280, 3, 2, 2, 2, 2280, 2285, 3, 2, 2, 2, 2281, 2282, 5, 138, 70, 2, 2282, 2283, 7, 177, 2, 2, 2283, 2284, 7, 84, 2, 2, 2284, 2286, 3, 2, 2, 2, 2285, 2281, 3, 2, 2, 2, 2285, 2286, 3, 2, 2, 2, 2286, 2287, 3, 2, 2, 2, 2287, 2288, 7, 5, 2, 2, 2288, 2360, 3, 2, 2, 2, 2289, 2290, 7, 132, 2, 2, 2290, 2319, 7, 4, 2, 2, 2291, 2296, 5, 140, 71, 2, 2292, 2293, 7, 44, 2, 2, 2293, 2295, 5, 140, 71, 2, 2294, 2292, 3, 2, 2, 2, 2295, 2298, 3, 2, 2, 2, 2296, 2294, 3, 2, 2, 2, 2296, 2297, 3, 2, 2, 2, 2297, 2305, 3, 2, 2, 2, 2298, 2296, 3, 2, 2, 2, 2299, 2300, 7, 170, 2, 2, 2300, 2301, 7, 177, 2, 2, 2301, 2306, 7, 170, 2, 2, 2302, 2303, 7, 19, 2, 2, 2303, 2304, 7, 177, 2, 2, 2304, 2306, 7, 170, 2, 2, 2305, 2299, 3, 2, 2, 2, 2305, 2302, 3, 2, 2, 2, 2305, 2306, 3, 2, 2, 2, 2306, 2317, 3, 2, 2, 2, 2307, 2308, 7, 285, 2, 2, 2308, 2310, 7, 265, 2, 2, 2309, 2311, 7, 137, 2, 2, 2310, 2309, 3, 2, 2, 2, 2310, 2311, 3, 2, 2, 2, 2311, 2318, 3, 2, 2, 2, 2312, 2313, 7, 287, 2, 2, 2313, 2315, 7, 265, 2, 2, 2314, 2316, 7, 137, 2, 2, 2315, 2314, 3, 2, 2, 2, 2315, 2316, 3, 2, 2, 2, 2316, 2318, 3, 2, 2, 2, 2317, 2307, 3, 2, 2, 2, 2317, 2312, 3, 2, 2, 2, 2317, 2318, 3, 2, 2, 2, 2318, 2320, 3, 2, 2, 2, 2319, 2291, 3, 2, 2, 2, 2319, 2320, 3, 2, 2, 2, 2320, 2327, 3, 2, 2, 2, 2321, 2322, 7, 215, 2, 2, 2322, 2325, 5, 162, 82, 2, 2323, 2324, 7, 99, 2, 2, 2324, 2326, 5, 128, 65, 2, 2325, 2323, 3, 2, 2, 2, 2325, 2326, 3, 2, 2, 2, 2326, 2328, 3, 2, 2, 2, 2327, 2321, 3, 2, 2, 2, 2327, 2328, 3, 2, 2, 2, 2328, 2329, 3, 2, 2, 2, 2329, 2360, 7, 5, 2, 2, 2330, 2331, 7, 130, 2, 2, 2331, 2348, 7, 4, 2, 2, 2332, 2337, 5, 126, 64, 2, 2333, 2334, 7, 44, 2, 2, 2334, 2336, 5, 126, 64, 2, 2335, 2333, 3, 2, 2, 2, 2336, 2339, 3, 2, 2, 2, 2337, 2335, 3, 2, 2, 2, 2337, 2338, 3, 2, 2, 2, 2338, 2346, 3, 2, 2, 2, 2339, 2337, 3, 2, 2, 2, 2340, 2341, 7, 170, 2, 2, 2341, 2342, 7, 177, 2, 2, 2342, 2347, 7, 170, 2, 2, 2343, 2344, 7, 19, 2, 2, 2344, 2345, 7, 177, 2, 2, 2345, 2347, 7, 170, 2, 2, 2346, 2340, 3, 2, 2, 2, 2346, 2343, 3, 2, 2, 2, 2346, 2347, 3, 2, 2, 2, 2347, 2349, 3, 2, 2, 2, 2348, 2332, 3, 2, 2, 2, 2348, 2349, 3, 2, 2, 2, 2349, 2356, 3, 2, 2, 2, 2350, 2351, 7, 215, 2, 2, 2351, 2354, 5, 162, 82, 2, 2352, 2353, 7, 99, 2, 2, 2353, 2355, 5, 128, 65, 2, 2354, 2352, 3, 2, 2, 2, 2354, 2355, 3, 2, 2, 2, 2355, 2357, 3, 2, 2, 2, 2356, 2350, 3, 2, 2, 2, 2356, 2357, 3, 2, 2, 2, 2357, 2358, 3, 2, 2, 2, 2358, 2360, 7, 5, 2, 2, 2359, 1909, 3, 2, 2, 2, 2359, 1911, 3, 2, 2, 2, 2359, 1912, 3, 2, 2, 2, 2359, 1915, 3, 2, 2, 2, 2359, 1918, 3, 2, 2, 2, 2359, 1919, 3, 2, 2, 2, 2359, 1920, 3, 2, 2, 2, 2359, 1921, 3, 2, 2, 2, 2359, 1922, 3, 2, 2, 2, 2359, 1923, 3, 2, 2, 2, 2359, 1930, 3, 2, 2, 2, 2359, 1940, 3, 2, 2, 2, 2359, 1952, 3, 2, 2, 2, 2359, 1984, 3, 2, 2, 2, 2359, 2002, 3, 2, 2, 2, 2359, 2041, 3, 2, 2, 2, 2359, 2044, 3, 2, 2, 2, 2359, 2048, 3, 2, 2, 2, 2359, 2062, 3, 2, 2, 2, 2359, 2066, 3, 2, 2, 2, 2359, 2071, 3, 2, 2, 2, 2359, 2084, 3, 2, 2, 2, 2359, 2096, 3, 2, 2, 2, 2359, 2103, 3, 2, 2, 2, 2359, 2110, 3, 2, 2, 2, 2359, 2123, 3, 2, 2, 2, 2359, 2124, 3, 2, 2, 2, 2359, 2125, 3, 2, 2, 2, 2359, 2131, 3, 2, 2, 2, 2359, 2137, 3, 2, 2, 2, 2359, 2143, 3, 2, 2, 2, 2359, 2149, 3, 2, 2, 2, 2359, 2150, 3, 2, 2, 2, 2359, 2151, 3, 2, 2, 2, 2359, 2152, 3, 2, 2, 2, 2359, 2153, 3, 2, 2, 2, 2359, 2167, 3, 2, 2, 2, 2359, 2174, 3, 2, 2, 2, 2359, 2185, 3, 2, 2, 2, 2359, 2194, 3, 2, 2, 2, 2359, 2201, 3, 2, 2, 2, 2359, 2205, 3, 2, 2, 2, 2359, 2218, 3, 2, 2, 2, 2359, 2229, 3, 2, 2, 2, 2359, 2250, 3, 2, 2, 2, 2359, 2289, 3, 2, 2, 2, 2359, 2330, 3, 2, 2, 2, 2360, 2371, 3, 2, 2, 2, 2361, 2362, 12, 26, 2, 2, 2362, 2363, 7, 9, 2, 2, 2363, 2364, 5, 120, 61, 2, 2364, 2365, 7, 10, 2, 2, 2365, 2370, 3, 2, 2, 2, 2366, 2367, 12, 24, 2, 2, 2367, 2368, 7, 3, 2, 2, 2368, 2370, 5, 216, 109, 2, 2369, 2361, 3, 2, 2, 2, 2369, 2366, 3, 2, 2, 2, 2370, 2373, 3, 2, 2, 2, 2371, 2369, 3, 2, 2, 2, 2371, 2372, 3, 2, 2, 2, 2372, 123, 3, 2, 2, 2, 2373, 2371, 3, 2, 2, 2, 2374, 2375, 5, 126, 64, 2, 2375, 2376, 7, 44, 2, 2, 2376, 2386, 5, 146, 74, 2, 2377, 2378, 7, 190, 2, 2, 2378, 2383, 5, 130, 66, 2, 2379, 2380, 7, 44, 2, 2, 2380, 2382, 5, 130, 66, 2, 2381, 2379, 3, 2, 2, 2, 2382, 2385, 3, 2, 2, 2, 2383, 2381, 3, 2, 2, 2, 2383, 2384, 3, 2, 2, 2, 2384, 2387, 3, 2, 2, 2, 2385, 2383, 3, 2, 2, 2, 2386, 2377, 3, 2, 2, 2, 2386, 2387, 3, 2, 2, 2, 2387, 125, 3, 2, 2, 2, 2388, 2391, 5, 114, 58, 2, 2389, 2390, 7, 99, 2, 2, 2390, 2392, 5, 128, 65, 2, 2391, 2389, 3, 2, 2, 2, 2391, 2392, 3, 2, 2, 2, 2392, 127, 3, 2, 2, 2, 2393, 2396, 7, 129, 2, 2, 2394, 2395, 7, 82, 2, 2, 2395, 2397, 9, 20, 2, 2, 2396, 2394, 3, 2, 2, 2, 2396, 2397, 3, 2, 2, 2, 2397, 129, 3, 2, 2, 2, 2398, 2399, 5, 126, 64, 2, 2399, 2400, 7, 29, 2, 2, 2400, 2401, 5, 216, 109, 2, 2401, 131, 3, 2, 2, 2, 2402, 2403, 9, 21, 2, 2, 2403, 133, 3, 2, 2, 2, 2404, 2409, 7, 84, 2, 2, 2405, 2409, 7, 170, 2, 2, 2406, 2407, 7, 68, 2, 2, 2407, 2409, 5, 114, 58, 2, 2408, 2404, 3, 2, 2, 2, 2408, 2405, 3, 2, 2, 2, 2408, 2406, 3, 2, 2, 2, 2409, 135, 3, 2, 2, 2, 2410, 2412, 7, 287, 2, 2, 2411, 2413, 7, 28, 2, 2, 2412, 2411, 3, 2, 2, 2, 2412, 2413, 3, 2, 2, 2, 2413, 2422, 3, 2, 2, 2, 2414, 2416, 7, 285, 2, 2, 2415, 2417, 9, 22, 2, 2, 2416, 2415, 3, 2, 2, 2, 2416, 2417, 3, 2, 2, 2, 2417, 2419, 3, 2, 2, 2, 2418, 2420, 7, 28, 2, 2, 2419, 2418, 3, 2, 2, 2, 2419, 2420, 3, 2, 2, 2, 2420, 2422, 3, 2, 2, 2, 2421, 2410, 3, 2, 2, 2, 2421, 2414, 3, 2, 2, 2, 2422, 137, 3, 2, 2, 2, 2423, 2430, 7, 84, 2, 2, 2424, 2430, 7, 170, 2, 2, 2425, 2426, 7, 81, 2, 2, 2426, 2430, 7, 28, 2, 2, 2427, 2428, 7, 81, 2, 2, 2428, 2430, 7, 173, 2, 2, 2429, 2423, 3, 2, 2, 2, 2429, 2424, 3, 2, 2, 2, 2429, 2425, 3, 2, 2, 2, 2429, 2427, 3, 2, 2, 2, 2430, 139, 3, 2, 2, 2, 2431, 2433, 7, 136, 2, 2, 2432, 2431, 3, 2, 2, 2, 2432, 2433, 3, 2, 2, 2, 2433, 2434, 3, 2, 2, 2, 2434, 2435, 5, 114, 58, 2, 2435, 2436, 7, 277, 2, 2, 2436, 2437, 5, 126, 64, 2, 2437, 2443, 3, 2, 2, 2, 2438, 2439, 5, 114, 58, 2, 2439, 2440, 7, 11, 2, 2, 2440, 2441, 5, 126, 64, 2, 2441, 2443, 3, 2, 2, 2, 2442, 2432, 3, 2, 2, 2, 2442, 2438, 3, 2, 2, 2, 2443, 141, 3, 2, 2, 2, 2444, 2445, 9, 23, 2, 2, 2445, 143, 3, 2, 2, 2, 2446, 2447, 7, 114, 2, 2, 2447, 2451, 7, 172, 2, 2, 2448, 2449, 7, 213, 2, 2, 2449, 2451, 7, 172, 2, 2, 2450, 2446, 3, 2, 2, 2, 2450, 2448, 3, 2, 2, 2, 2451, 145, 3, 2, 2, 2, 2452, 2459, 7, 306, 2, 2, 2453, 2456, 7, 307, 2, 2, 2454, 2455, 7, 260, 2, 2, 2455, 2457, 7, 306, 2, 2, 2456, 2454, 3, 2, 2, 2, 2456, 2457, 3, 2, 2, 2, 2457, 2459, 3, 2, 2, 2, 2458, 2452, 3, 2, 2, 2, 2458, 2453, 3, 2, 2, 2, 2459, 147, 3, 2, 2, 2, 2460, 2461, 7, 250, 2, 2, 2461, 2462, 7, 292, 2, 2, 2462, 2467, 5, 156, 79, 2, 2463, 2464, 7, 250, 2, 2, 2464, 2465, 7, 292, 2, 2, 2465, 2467, 5, 146, 74, 2, 2466, 2460, 3, 2, 2, 2, 2466, 2463, 3, 2, 2, 2, 2467, 149, 3, 2, 2, 2, 2468, 2469, 9, 24, 2, 2, 2469, 151, 3, 2, 2, 2, 2470, 2471, 9, 25, 2, 2, 2471, 153, 3, 2, 2, 2, 2472, 2473, 9, 26, 2, 2, 2473, 155, 3, 2, 2, 2, 2474, 2476, 7, 122, 2, 2, 2475, 2477, 9, 17, 2, 2, 2476, 2475, 3, 2, 2, 2, 2476, 2477, 3, 2, 2, 2, 2477, 2478, 3, 2, 2, 2, 2478, 2479, 5, 146, 74, 2, 2479, 2482, 5, 158, 80, 2, 2480, 2481, 7, 252, 2, 2, 2481, 2483, 5, 158, 80, 2, 2482, 2480, 3, 2, 2, 2, 2482, 2483, 3, 2, 2, 2, 2483, 157, 3, 2, 2, 2, 2484, 2485, 9, 27, 2, 2, 2485, 159, 3, 2, 2, 2, 2486, 2487, 9, 28, 2, 2, 2487, 161, 3, 2, 2, 2, 2488, 2489, 8, 82, 1, 2, 2489, 2490, 7, 222, 2, 2, 2490, 2491, 7, 4, 2, 2, 2491, 2496, 5, 164, 83, 2, 2492, 2493, 7, 44, 2, 2, 2493, 2495, 5, 164, 83, 2, 2494, 2492, 3, 2, 2, 2, 2495, 2498, 3, 2, 2, 2, 2496, 2494, 3, 2, 2, 2, 2496, 2497, 3, 2, 2, 2, 2497, 2499, 3, 2, 2, 2, 2498, 2496, 3, 2, 2, 2, 2499, 2500, 7, 5, 2, 2, 2500, 2580, 3, 2, 2, 2, 2501, 2502, 7, 122, 2, 2, 2502, 2505, 5, 158, 80, 2, 2503, 2504, 7, 252, 2, 2, 2504, 2506, 5, 158, 80, 2, 2505, 2503, 3, 2, 2, 2, 2505, 2506, 3, 2, 2, 2, 2506, 2580, 3, 2, 2, 2, 2507, 2512, 7, 251, 2, 2, 2508, 2509, 7, 4, 2, 2, 2509, 2510, 5, 166, 84, 2, 2510, 2511, 7, 5, 2, 2, 2511, 2513, 3, 2, 2, 2, 2512, 2508, 3, 2, 2, 2, 2512, 2513, 3, 2, 2, 2, 2513, 2517, 3, 2, 2, 2, 2514, 2515, 7, 287, 2, 2, 2515, 2516, 7, 250, 2, 2, 2516, 2518, 7, 292, 2, 2, 2517, 2514, 3, 2, 2, 2, 2517, 2518, 3, 2, 2, 2, 2518, 2580, 3, 2, 2, 2, 2519, 2524, 7, 251, 2, 2, 2520, 2521, 7, 4, 2, 2, 2521, 2522, 5, 166, 84, 2, 2522, 2523, 7, 5, 2, 2, 2523, 2525, 3, 2, 2, 2, 2524, 2520, 3, 2, 2, 2, 2524, 2525, 3, 2, 2, 2, 2525, 2526, 3, 2, 2, 2, 2526, 2527, 7, 285, 2, 2, 2527, 2528, 7, 250, 2, 2, 2528, 2580, 7, 292, 2, 2, 2529, 2534, 7, 250, 2, 2, 2530, 2531, 7, 4, 2, 2, 2531, 2532, 5, 166, 84, 2, 2532, 2533, 7, 5, 2, 2, 2533, 2535, 3, 2, 2, 2, 2534, 2530, 3, 2, 2, 2, 2534, 2535, 3, 2, 2, 2, 2535, 2539, 3, 2, 2, 2, 2536, 2537, 7, 287, 2, 2, 2537, 2538, 7, 250, 2, 2, 2538, 2540, 7, 292, 2, 2, 2539, 2536, 3, 2, 2, 2, 2539, 2540, 3, 2, 2, 2, 2540, 2580, 3, 2, 2, 2, 2541, 2546, 7, 250, 2, 2, 2542, 2543, 7, 4, 2, 2, 2543, 2544, 5, 166, 84, 2, 2544, 2545, 7, 5, 2, 2, 2545, 2547, 3, 2, 2, 2, 2546, 2542, 3, 2, 2, 2, 2546, 2547, 3, 2, 2, 2, 2547, 2548, 3, 2, 2, 2, 2548, 2549, 7, 285, 2, 2, 2549, 2550, 7, 250, 2, 2, 2550, 2580, 7, 292, 2, 2, 2551, 2552, 7, 78, 2, 2, 2552, 2580, 7, 199, 2, 2, 2553, 2554, 7, 28, 2, 2, 2554, 2555, 7, 295, 2, 2, 2555, 2556, 5, 162, 82, 2, 2556, 2557, 7, 297, 2, 2, 2557, 2580, 3, 2, 2, 2, 2558, 2559, 7, 150, 2, 2, 2559, 2560, 7, 295, 2, 2, 2560, 2561, 5, 162, 82, 2, 2561, 2562, 7, 44, 2, 2, 2562, 2563, 5, 162, 82, 2, 2563, 2564, 7, 297, 2, 2, 2564, 2580, 3, 2, 2, 2, 2565, 2577, 5, 216, 109, 2, 2566, 2567, 7, 4, 2, 2, 2567, 2572, 5, 166, 84, 2, 2568, 2569, 7, 44, 2, 2, 2569, 2571, 5, 166, 84, 2, 2570, 2568, 3, 2, 2, 2, 2571, 2574, 3, 2, 2, 2, 2572, 2570, 3, 2, 2, 2, 2572, 2573, 3, 2, 2, 2, 2573, 2575, 3, 2, 2, 2, 2574, 2572, 3, 2, 2, 2, 2575, 2576, 7, 5, 2, 2, 2576, 2578, 3, 2, 2, 2, 2577, 2566, 3, 2, 2, 2, 2577, 2578, 3, 2, 2, 2, 2578, 2580, 3, 2, 2, 2, 2579, 2488, 3, 2, 2, 2, 2579, 2501, 3, 2, 2, 2, 2579, 2507, 3, 2, 2, 2, 2579, 2519, 3, 2, 2, 2, 2579, 2529, 3, 2, 2, 2, 2579, 2541, 3, 2, 2, 2, 2579, 2551, 3, 2, 2, 2, 2579, 2553, 3, 2, 2, 2, 2579, 2558, 3, 2, 2, 2, 2579, 2565, 3, 2, 2, 2, 2580, 2590, 3, 2, 2, 2, 2581, 2582, 12, 4, 2, 2, 2582, 2586, 7, 28, 2, 2, 2583, 2584, 7, 9, 2, 2, 2584, 2585, 7, 309, 2, 2, 2585, 2587, 7, 10, 2, 2, 2586, 2583, 3, 2, 2, 2, 2586, 2587, 3, 2, 2, 2, 2587, 2589, 3, 2, 2, 2, 2588, 2581, 3, 2, 2, 2, 2589, 2592, 3, 2, 2, 2, 2590, 2588, 3, 2, 2, 2, 2590, 2591, 3, 2, 2, 2, 2591, 163, 3, 2, 2, 2, 2592, 2590, 3, 2, 2, 2, 2593, 2598, 5, 162, 82, 2, 2594, 2595, 5, 216, 109, 2, 2595, 2596, 5, 162, 82, 2, 2596, 2598, 3, 2, 2, 2, 2597, 2593, 3, 2, 2, 2, 2597, 2594, 3, 2, 2, 2, 2598, 165, 3, 2, 2, 2, 2599, 2602, 7, 309, 2, 2, 2600, 2602, 5, 162, 82, 2, 2601, 2599, 3, 2, 2, 2, 2601, 2600, 3, 2, 2, 2, 2602, 167, 3, 2, 2, 2, 2603, 2604, 7, 282, 2, 2, 2604, 2605, 5, 114, 58, 2, 2605, 2606, 7, 248, 2, 2, 2606, 2607, 5, 114, 58, 2, 2607, 169, 3, 2, 2, 2, 2608, 2609, 7, 94, 2, 2, 2609, 2610, 7, 4, 2, 2, 2610, 2611, 7, 283, 2, 2, 2611, 2612, 5, 116, 59, 2, 2612, 2613, 7, 5, 2, 2, 2613, 171, 3, 2, 2, 2, 2614, 2615, 7, 282, 2, 2, 2615, 2618, 7, 152, 2, 2, 2616, 2617, 7, 26, 2, 2, 2617, 2619, 5, 114, 58, 2, 2618, 2616, 3, 2, 2, 2, 2618, 2619, 3, 2, 2, 2, 2619, 2620, 3, 2, 2, 2, 2620, 2621, 7, 248, 2, 2, 2621, 2622, 7, 269, 2, 2, 2622, 2623, 7, 234, 2, 2, 2623, 2624, 5, 216, 109, 2, 2624, 2625, 7, 293, 2, 2, 2625, 2633, 5, 114, 58, 2, 2626, 2627, 7, 44, 2, 2, 2627, 2628, 5, 216, 109, 2, 2628, 2629, 7, 293, 2, 2, 2629, 2630, 5, 114, 58, 2, 2630, 2632, 3, 2, 2, 2, 2631, 2626, 3, 2, 2, 2, 2632, 2635, 3, 2, 2, 2, 2633, 2631, 3, 2, 2, 2, 2633, 2634, 3, 2, 2, 2, 2634, 2679, 3, 2, 2, 2, 2635, 2633, 3, 2, 2, 2, 2636, 2637, 7, 282, 2, 2, 2637, 2640, 7, 152, 2, 2, 2638, 2639, 7, 26, 2, 2, 2639, 2641, 5, 114, 58, 2, 2640, 2638, 3, 2, 2, 2, 2640, 2641, 3, 2, 2, 2, 2641, 2642, 3, 2, 2, 2, 2642, 2643, 7, 248, 2, 2, 2643, 2679, 7, 71, 2, 2, 2644, 2645, 7, 282, 2, 2, 2645, 2646, 7, 169, 2, 2, 2646, 2649, 7, 152, 2, 2, 2647, 2648, 7, 26, 2, 2, 2648, 2650, 5, 114, 58, 2, 2649, 2647, 3, 2, 2, 2, 2649, 2650, 3, 2, 2, 2, 2650, 2651, 3, 2, 2, 2, 2651, 2652, 7, 248, 2, 2, 2652, 2664, 7, 120, 2, 2, 2653, 2654, 7, 4, 2, 2, 2654, 2659, 5, 216, 109, 2, 2655, 2656, 7, 44, 2, 2, 2656, 2658, 5, 216, 109, 2, 2657, 2655, 3, 2, 2, 2, 2658, 2661, 3, 2, 2, 2, 2659, 2657, 3, 2, 2, 2, 2659, 2660, 3, 2, 2, 2, 2660, 2662, 3, 2, 2, 2, 2661, 2659, 3, 2, 2, 2, 2662, 2663, 7, 5, 2, 2, 2663, 2665, 3, 2, 2, 2, 2664, 2653, 3, 2, 2, 2, 2664, 2665, 3, 2, 2, 2, 2665, 2666, 3, 2, 2, 2, 2666, 2667, 7, 278, 2, 2, 2667, 2668, 7, 4, 2, 2, 2668, 2673, 5, 114, 58, 2, 2669, 2670, 7, 44, 2, 2, 2670, 2672, 5, 114, 58, 2, 2671, 2669, 3, 2, 2, 2, 2672, 2675, 3, 2, 2, 2, 2673, 2671, 3, 2, 2, 2, 2673, 2674, 3, 2, 2, 2, 2674, 2676, 3, 2, 2, 2, 2675, 2673, 3, 2, 2, 2, 2676, 2677, 7, 5, 2, 2, 2677, 2679, 3, 2, 2, 2, 2678, 2614, 3, 2, 2, 2, 2678, 2636, 3, 2, 2, 2, 2678, 2644, 3, 2, 2, 2, 2679, 173, 3, 2, 2, 2, 2680, 2686, 7, 186, 2, 2, 2681, 2687, 5, 216, 109, 2, 2682, 2683, 7, 4, 2, 2, 2683, 2684, 5, 56, 29, 2, 2684, 2685, 7, 5, 2, 2, 2685, 2687, 3, 2, 2, 2, 2686, 2681, 3, 2, 2, 2, 2686, 2682, 3, 2, 2, 2, 2687, 175, 3, 2, 2, 2, 2688, 2689, 7, 156, 2, 2, 2689, 2694, 5, 82, 42, 2, 2690, 2691, 7, 44, 2, 2, 2691, 2693, 5, 82, 42, 2, 2692, 2690, 3, 2, 2, 2, 2693, 2696, 3, 2, 2, 2, 2694, 2692, 3, 2, 2, 2, 2694, 2695, 3, 2, 2, 2, 2695, 2698, 3, 2, 2, 2, 2696, 2694, 3, 2, 2, 2, 2697, 2688, 3, 2, 2, 2, 2697, 2698, 3, 2, 2, 2, 2698, 2699, 3, 2, 2, 2, 2699, 2703, 5, 178, 90, 2, 2700, 2701, 7, 22, 2, 2, 2701, 2702, 7, 151, 2, 2, 2702, 2704, 5, 88, 45, 2, 2703, 2700, 3, 2, 2, 2, 2703, 2704, 3, 2, 2, 2, 2704, 2706, 3, 2, 2, 2, 2705, 2707, 9, 16, 2, 2, 2706, 2705, 3, 2, 2, 2, 2706, 2707, 3, 2, 2, 2, 2707, 2713, 3, 2, 2, 2, 2708, 2709, 7, 193, 2, 2, 2709, 2710, 7, 4, 2, 2, 2710, 2711, 5, 182, 92, 2, 2711, 2712, 7, 5, 2, 2, 2712, 2714, 3, 2, 2, 2, 2713, 2708, 3, 2, 2, 2, 2713, 2714, 3, 2, 2, 2, 2714, 2724, 3, 2, 2, 2, 2715, 2716, 7, 240, 2, 2, 2716, 2721, 5, 90, 46, 2, 2717, 2718, 7, 44, 2, 2, 2718, 2720, 5, 90, 46, 2, 2719, 2717, 3, 2, 2, 2, 2720, 2723, 3, 2, 2, 2, 2721, 2719, 3, 2, 2, 2, 2721, 2722, 3, 2, 2, 2, 2722, 2725, 3, 2, 2, 2, 2723, 2721, 3, 2, 2, 2, 2724, 2715, 3, 2, 2, 2, 2724, 2725, 3, 2, 2, 2, 2725, 2735, 3, 2, 2, 2, 2726, 2727, 7, 69, 2, 2, 2727, 2732, 5, 92, 47, 2, 2728, 2729, 7, 44, 2, 2, 2729, 2731, 5, 92, 47, 2, 2730, 2728, 3, 2, 2, 2, 2731, 2734, 3, 2, 2, 2, 2732, 2730, 3, 2, 2, 2, 2732, 2733, 3, 2, 2, 2, 2733, 2736, 3, 2, 2, 2, 2734, 2732, 3, 2, 2, 2, 2735, 2726, 3, 2, 2, 2, 2735, 2736, 3, 2, 2, 2, 2736, 177, 3, 2, 2, 2, 2737, 2738, 7, 205, 2, 2, 2738, 2762, 5, 180, 91, 2, 2739, 2740, 7, 223, 2, 2, 2740, 2762, 5, 180, 91, 2, 2741, 2742, 7, 110, 2, 2, 2742, 2762, 5, 180, 91, 2, 2743, 2744, 7, 205, 2, 2, 2744, 2745, 7, 34, 2, 2, 2745, 2746, 5, 180, 91, 2, 2746, 2747, 7, 26, 2, 2, 2747, 2748, 5, 180, 91, 2, 2748, 2762, 3, 2, 2, 2, 2749, 2750, 7, 223, 2, 2, 2750, 2751, 7, 34, 2, 2, 2751, 2752, 5, 180, 91, 2, 2752, 2753, 7, 26, 2, 2, 2753, 2754, 5, 180, 91, 2, 2754, 2762, 3, 2, 2, 2, 2755, 2756, 7, 110, 2, 2, 2756, 2757, 7, 34, 2, 2, 2757, 2758, 5, 180, 91, 2, 2758, 2759, 7, 26, 2, 2, 2759, 2760, 5, 180, 91, 2, 2760, 2762, 3, 2, 2, 2, 2761, 2737, 3, 2, 2, 2, 2761, 2739, 3, 2, 2, 2, 2761, 2741, 3, 2, 2, 2, 2761, 2743, 3, 2, 2, 2, 2761, 2749, 3, 2, 2, 2, 2761, 2755, 3, 2, 2, 2, 2762, 179, 3, 2, 2, 2, 2763, 2764, 7, 261, 2, 2, 2764, 2773, 7, 198, 2, 2, 2765, 2766, 7, 261, 2, 2, 2766, 2773, 7, 97, 2, 2, 2767, 2768, 7, 55, 2, 2, 2768, 2773, 7, 222, 2, 2, 2769, 2770, 5, 114, 58, 2, 2770, 2771, 9, 29, 2, 2, 2771, 2773, 3, 2, 2, 2, 2772, 2763, 3, 2, 2, 2, 2772, 2765, 3, 2, 2, 2, 2772, 2767, 3, 2, 2, 2, 2772, 2769, 3, 2, 2, 2, 2773, 181, 3, 2, 2, 2, 2774, 2775, 8, 92, 1, 2, 2775, 2777, 5, 184, 93, 2, 2776, 2778, 5, 186, 94, 2, 2777, 2776, 3, 2, 2, 2, 2777, 2778, 3, 2, 2, 2, 2778, 2786, 3, 2, 2, 2, 2779, 2780, 12, 4, 2, 2, 2780, 2785, 5, 182, 92, 5, 2781, 2782, 12, 3, 2, 2, 2782, 2783, 7, 12, 2, 2, 2783, 2785, 5, 182, 92, 4, 2784, 2779, 3, 2, 2, 2, 2784, 2781, 3, 2, 2, 2, 2785, 2788, 3, 2, 2, 2, 2786, 2784, 3, 2, 2, 2, 2786, 2787, 3, 2, 2, 2, 2787, 183, 3, 2, 2, 2, 2788, 2786, 3, 2, 2, 2, 2789, 2815, 5, 216, 109, 2, 2790, 2791, 7, 4, 2, 2, 2791, 2815, 7, 5, 2, 2, 2792, 2793, 7, 196, 2, 2, 2793, 2794, 7, 4, 2, 2, 2794, 2799, 5, 182, 92, 2, 2795, 2796, 7, 44, 2, 2, 2796, 2798, 5, 182, 92, 2, 2797, 2795, 3, 2, 2, 2, 2798, 2801, 3, 2, 2, 2, 2799, 2797, 3, 2, 2, 2, 2799, 2800, 3, 2, 2, 2, 2800, 2802, 3, 2, 2, 2, 2801, 2799, 3, 2, 2, 2, 2802, 2803, 7, 5, 2, 2, 2803, 2815, 3, 2, 2, 2, 2804, 2805, 7, 4, 2, 2, 2805, 2806, 5, 182, 92, 2, 2806, 2807, 7, 5, 2, 2, 2807, 2815, 3, 2, 2, 2, 2808, 2815, 7, 13, 2, 2, 2809, 2815, 7, 14, 2, 2, 2810, 2811, 7, 15, 2, 2, 2811, 2812, 5, 182, 92, 2, 2812, 2813, 7, 16, 2, 2, 2813, 2815, 3, 2, 2, 2, 2814, 2789, 3, 2, 2, 2, 2814, 2790, 3, 2, 2, 2, 2814, 2792, 3, 2, 2, 2, 2814, 2804, 3, 2, 2, 2, 2814, 2808, 3, 2, 2, 2, 2814, 2809, 3, 2, 2, 2, 2814, 2810, 3, 2, 2, 2, 2815, 185, 3, 2, 2, 2, 2816, 2818, 7, 301, 2, 2, 2817, 2819, 7, 305, 2, 2, 2818, 2817, 3, 2, 2, 2, 2818, 2819, 3, 2, 2, 2, 2819, 2847, 3, 2, 2, 2, 2820, 2822, 7, 299, 2, 2, 2821, 2823, 7, 305, 2, 2, 2822, 2821, 3, 2, 2, 2, 2822, 2823, 3, 2, 2, 2, 2823, 2847, 3, 2, 2, 2, 2824, 2826, 7, 305, 2, 2, 2825, 2827, 7, 305, 2, 2, 2826, 2825, 3, 2, 2, 2, 2826, 2827, 3, 2, 2, 2, 2827, 2847, 3, 2, 2, 2, 2828, 2829, 7, 17, 2, 2, 2829, 2830, 7, 309, 2, 2, 2830, 2832, 7, 18, 2, 2, 2831, 2833, 7, 305, 2, 2, 2832, 2831, 3, 2, 2, 2, 2832, 2833, 3, 2, 2, 2, 2833, 2847, 3, 2, 2, 2, 2834, 2836, 7, 17, 2, 2, 2835, 2837, 7, 309, 2, 2, 2836, 2835, 3, 2, 2, 2, 2836, 2837, 3, 2, 2, 2, 2837, 2838, 3, 2, 2, 2, 2838, 2840, 7, 44, 2, 2, 2839, 2841, 7, 309, 2, 2, 2840, 2839, 3, 2, 2, 2, 2840, 2841, 3, 2, 2, 2, 2841, 2842, 3, 2, 2, 2, 2842, 2844, 7, 18, 2, 2, 2843, 2845, 7, 305, 2, 2, 2844, 2843, 3, 2, 2, 2, 2844, 2845, 3, 2, 2, 2, 2845, 2847, 3, 2, 2, 2, 2846, 2816, 3, 2, 2, 2, 2846, 2820, 3, 2, 2, 2, 2846, 2824, 3, 2, 2, 2, 2846, 2828, 3, 2, 2, 2, 2846, 2834, 3, 2, 2, 2, 2847, 187, 3, 2, 2, 2, 2848, 2849, 5, 216, 109, 2, 2849, 2850, 7, 293, 2, 2, 2850, 2851, 5, 114, 58, 2, 2851, 189, 3, 2, 2, 2, 2852, 2853, 7, 99, 2, 2, 2853, 2857, 9, 30, 2, 2, 2854, 2855, 7, 259, 2, 2, 2855, 2857, 9, 31, 2, 2, 2856, 2852, 3, 2, 2, 2, 2856, 2854, 3, 2, 2, 2, 2857, 191, 3, 2, 2, 2, 2858, 2859, 7, 127, 2, 2, 2859, 2860, 7, 142, 2, 2, 2860, 2864, 5, 194, 98, 2, 2861, 2862, 7, 206, 2, 2, 2862, 2864, 9, 32, 2, 2, 2863, 2858, 3, 2, 2, 2, 2863, 2861, 3, 2, 2, 2, 2864, 193, 3, 2, 2, 2, 2865, 2866, 7, 206, 2, 2, 2866, 2873, 7, 262, 2, 2, 2867, 2868, 7, 206, 2, 2, 2868, 2873, 7, 47, 2, 2, 2869, 2870, 7, 210, 2, 2, 2870, 2873, 7, 206, 2, 2, 2871, 2873, 7, 232, 2, 2, 2872, 2865, 3, 2, 2, 2, 2872, 2867, 3, 2, 2, 2, 2872, 2869, 3, 2, 2, 2, 2872, 2871, 3, 2, 2, 2, 2873, 195, 3, 2, 2, 2, 2874, 2880, 5, 114, 58, 2, 2875, 2876, 5, 216, 109, 2, 2876, 2877, 7, 7, 2, 2, 2877, 2878, 5, 114, 58, 2, 2878, 2880, 3, 2, 2, 2, 2879, 2874, 3, 2, 2, 2, 2879, 2875, 3, 2, 2, 2, 2880, 197, 3, 2, 2, 2, 2881, 2882, 5, 216, 109, 2, 2882, 2883, 7, 3, 2, 2, 2883, 2884, 5, 216, 109, 2, 2884, 2887, 3, 2, 2, 2, 2885, 2887, 5, 216, 109, 2, 2886, 2881, 3, 2, 2, 2, 2886, 2885, 3, 2, 2, 2, 2887, 199, 3, 2, 2, 2, 2888, 2893, 5, 198, 100, 2, 2889, 2890, 7, 44, 2, 2, 2890, 2892, 5, 198, 100, 2, 2891, 2889, 3, 2, 2, 2, 2892, 2895, 3, 2, 2, 2, 2893, 2891, 3, 2, 2, 2, 2893, 2894, 3, 2, 2, 2, 2894, 201, 3, 2, 2, 2, 2895, 2893, 3, 2, 2, 2, 2896, 2897, 9, 33, 2, 2, 2897, 203, 3, 2, 2, 2, 2898, 2903, 5, 216, 109, 2, 2899, 2900, 7, 3, 2, 2, 2900, 2902, 5, 216, 109, 2, 2901, 2899, 3, 2, 2, 2, 2902, 2905, 3, 2, 2, 2, 2903, 2901, 3, 2, 2, 2, 2903, 2904, 3, 2, 2, 2, 2904, 205, 3, 2, 2, 2, 2905, 2903, 3, 2, 2, 2, 2906, 2907, 7, 98, 2, 2, 2907, 2908, 5, 208, 105, 2, 2908, 2909, 7, 29, 2, 2, 2909, 2910, 7, 174, 2, 2, 2910, 2911, 5, 120, 61, 2, 2911, 207, 3, 2, 2, 2, 2912, 2913, 9, 34, 2, 2, 2913, 209, 3, 2, 2, 2, 2914, 2918, 5, 212, 107, 2, 2915, 2918, 7, 63, 2, 2, 2916, 2918, 7, 59, 2, 2, 2917, 2914, 3, 2, 2, 2, 2917, 2915, 3, 2, 2, 2, 2917, 2916, 3, 2, 2, 2, 2918, 211, 3, 2, 2, 2, 2919, 2925, 5, 216, 109, 2, 2920, 2921, 7, 271, 2, 2, 2921, 2925, 5, 216, 109, 2, 2922, 2923, 7, 218, 2, 2, 2923, 2925, 5, 216, 109, 2, 2924, 2919, 3, 2, 2, 2, 2924, 2920, 3, 2, 2, 2, 2924, 2922, 3, 2, 2, 2, 2925, 213, 3, 2, 2, 2, 2926, 2931, 5, 216, 109, 2, 2927, 2928, 7, 44, 2, 2, 2928, 2930, 5, 216, 109, 2, 2929, 2927, 3, 2, 2, 2, 2930, 2933, 3, 2, 2, 2, 2931, 2929, 3, 2, 2, 2, 2931, 2932, 3, 2, 2, 2, 2932, 215, 3, 2, 2, 2, 2933, 2931, 3, 2, 2, 2, 2934, 2940, 7, 312, 2, 2, 2935, 2940, 7, 314, 2, 2, 2936, 2940, 5, 220, 111, 2, 2937, 2940, 7, 315, 2, 2, 2938, 2940, 7, 313, 2, 2, 2939, 2934, 3, 2, 2, 2, 2939, 2935, 3, 2, 2, 2, 2939, 2936, 3, 2, 2, 2, 2939, 2937, 3, 2, 2, 2, 2939, 2938, 3, 2, 2, 2, 2940, 217, 3, 2, 2, 2, 2941, 2943, 7, 300, 2, 2, 2942, 2941, 3, 2, 2, 2, 2942, 2943, 3, 2, 2, 2, 2943, 2944, 3, 2, 2, 2, 2944, 2954, 7, 310, 2, 2, 2945, 2947, 7, 300, 2, 2, 2946, 2945, 3, 2, 2, 2, 2946, 2947, 3, 2, 2, 2, 2947, 2948, 3, 2, 2, 2, 2948, 2954, 7, 311, 2, 2, 2949, 2951, 7, 300, 2, 2, 2950, 2949, 3, 2, 2, 2, 2950, 2951, 3, 2, 2, 2, 2951, 2952, 3, 2, 2, 2, 2952, 2954, 7, 309, 2, 2, 2953, 2942, 3, 2, 2, 2, 2953, 2946, 3, 2, 2, 2, 2953, 2950, 3, 2, 2, 2, 2954, 219, 3, 2, 2, 2, 2955, 2956, 9, 35, 2, 2, 2956, 221, 3, 2, 2, 2, 396, 250, 255, 259, 265, 269, 290, 294, 298, 302, 310, 314, 317, 324, 333, 339, 343, 349, 356, 365, 377, 386, 395, 401, 412, 420, 428, 435, 445, 452, 460, 496, 499, 502, 506, 512, 517, 524, 530, 534, 538, 546, 552, 556, 570, 578, 597, 622, 625, 635, 639, 646, 656, 662, 667, 671, 677, 686, 692, 696, 703, 707, 715, 720, 724, 732, 740, 745, 749, 759, 766, 771, 775, 785, 788, 797, 802, 808, 832, 838, 840, 846, 852, 854, 862, 864, 870, 876, 878, 893, 898, 905, 917, 919, 927, 929, 947, 950, 954, 958, 976, 979, 995, 1005, 1010, 1016, 1019, 1028, 1030, 1033, 1039, 1046, 1051, 1057, 1061, 1065, 1071, 1082, 1091, 1101, 1104, 1109, 1111, 1118, 1124, 1126, 1130, 1140, 1146, 1149, 1151, 1163, 1170, 1174, 1178, 1182, 1191, 1194, 1198, 1203, 1207, 1215, 1218, 1225, 1229, 1236, 1247, 1250, 1260, 1263, 1274, 1279, 1287, 1290, 1294, 1303, 1312, 1315, 1324, 1327, 1330, 1334, 1345, 1348, 1355, 1358, 1377, 1381, 1385, 1389, 1393, 1397, 1399, 1410, 1415, 1424, 1433, 1436, 1442, 1454, 1457, 1466, 1469, 1477, 1480, 1483, 1488, 1491, 1503, 1506, 1514, 1519, 1523, 1525, 1527, 1542, 1544, 1555, 1576, 1586, 1597, 1601, 1603, 1611, 1618, 1631, 1637, 1653, 1662, 1665, 1673, 1676, 1683, 1688, 1699, 1702, 1706, 1708, 1716, 1726, 1732, 1734, 1741, 1745, 1747, 1754, 1758, 1760, 1762, 1771, 1782, 1786, 1796, 1806, 1810, 1818, 1820, 1833, 1841, 1850, 1856, 1864, 1870, 1874, 1879, 1884, 1890, 1904, 1906, 1936, 1947, 1955, 1960, 1965, 1978, 1984, 1991, 1996, 1999, 2002, 2007, 2014, 2017, 2026, 2029, 2033, 2036, 2039, 2054, 2057, 2076, 2080, 2088, 2092, 2117, 2120, 2129, 2135, 2141, 2147, 2156, 2159, 2162, 2181, 2190, 2212, 2215, 2225, 2234, 2240, 2246, 2257, 2259, 2264, 2271, 2273, 2279, 2285, 2296, 2305, 2310, 2315, 2317, 2319, 2325, 2327, 2337, 2346, 2348, 2354, 2356, 2359, 2369, 2371, 2383, 2386, 2391, 2396, 2408, 2412, 2416, 2419, 2421, 2429, 2432, 2442, 2450, 2456, 2458, 2466, 2476, 2482, 2496, 2505, 2512, 2517, 2524, 2534, 2539, 2546, 2572, 2577, 2579, 2586, 2590, 2597, 2601, 2618, 2633, 2640, 2649, 2659, 2664, 2673, 2678, 2686, 2694, 2697, 2703, 2706, 2713, 2721, 2724, 2732, 2735, 2761, 2772, 2777, 2784, 2786, 2799, 2814, 2818, 2822, 2826, 2832, 2836, 2840, 2844, 2846, 2856, 2863, 2872, 2879, 2886, 2893, 2903, 2917, 2924, 2931, 2939, 2942, 2946, 2950, 2953] \ No newline at end of file diff --git a/datafusion/sql/src/antlr/presto/Presto.tokens b/datafusion/sql/src/antlr/presto/Presto.tokens new file mode 100644 index 0000000000000..5bedac061207f --- /dev/null +++ b/datafusion/sql/src/antlr/presto/Presto.tokens @@ -0,0 +1,620 @@ +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 +ABSENT=17 +ADD=18 +ADMIN=19 +AFTER=20 +ALL=21 +ALTER=22 +ANALYZE=23 +AND=24 +ANY=25 +ARRAY=26 +AS=27 +ASC=28 +AT=29 +AUTHORIZATION=30 +BERNOULLI=31 +BETWEEN=32 +BOTH=33 +BY=34 +CALL=35 +CASCADE=36 +CASE=37 +CAST=38 +CATALOGS=39 +COLUMN=40 +COLUMNS=41 +COMMA=42 +COMMENT=43 +COMMIT=44 +COMMITTED=45 +CONDITIONAL=46 +CONSTRAINT=47 +COUNT=48 +COPARTITION=49 +CREATE=50 +CROSS=51 +CUBE=52 +CURRENT=53 +CURRENT_CATALOG=54 +CURRENT_DATE=55 +CURRENT_PATH=56 +CURRENT_ROLE=57 +CURRENT_SCHEMA=58 +CURRENT_TIME=59 +CURRENT_TIMESTAMP=60 +CURRENT_USER=61 +DATA=62 +DATE=63 +DAY=64 +DEALLOCATE=65 +DEFAULT=66 +DEFINE=67 +DEFINER=68 +DELETE=69 +DENY=70 +DESC=71 +DESCRIBE=72 +DESCRIPTOR=73 +DISTINCT=74 +DISTRIBUTED=75 +DOUBLE=76 +DROP=77 +ELSE=78 +EMPTY=79 +ENCODING=80 +END=81 +ERROR=82 +ESCAPE=83 +EXCEPT=84 +EXCLUDING=85 +EXECUTE=86 +EXISTS=87 +EXPLAIN=88 +EXTRACT=89 +FALSE=90 +FETCH=91 +FILTER=92 +FINAL=93 +FIRST=94 +FOLLOWING=95 +FOR=96 +FORMAT=97 +FROM=98 +FULL=99 +FUNCTIONS=100 +GRACE=101 +GRANT=102 +GRANTED=103 +GRANTS=104 +GRAPHVIZ=105 +GROUP=106 +GROUPING=107 +GROUPS=108 +HAVING=109 +HOUR=110 +IF=111 +IGNORE=112 +IN=113 +INCLUDING=114 +INITIAL=115 +INNER=116 +INPUT=117 +INSERT=118 +INTERSECT=119 +INTERVAL=120 +INTO=121 +INVOKER=122 +IO=123 +IS=124 +ISOLATION=125 +JOIN=126 +JSON=127 +JSON_ARRAY=128 +JSON_EXISTS=129 +JSON_OBJECT=130 +JSON_QUERY=131 +JSON_VALUE=132 +KEEP=133 +KEY=134 +KEYS=135 +LAST=136 +LATERAL=137 +LEADING=138 +LEFT=139 +LEVEL=140 +LIKE=141 +LIMIT=142 +LISTAGG=143 +LOCAL=144 +LOCALTIME=145 +LOCALTIMESTAMP=146 +LOGICAL=147 +MAP=148 +MATCH=149 +MATCHED=150 +MATCHES=151 +MATCH_RECOGNIZE=152 +MATERIALIZED=153 +MEASURES=154 +MERGE=155 +MINUTE=156 +MONTH=157 +NATURAL=158 +NEXT=159 +NFC=160 +NFD=161 +NFKC=162 +NFKD=163 +NO=164 +NONE=165 +NORMALIZE=166 +NOT=167 +NULL=168 +NULLIF=169 +NULLS=170 +OBJECT=171 +OF=172 +OFFSET=173 +OMIT=174 +ON=175 +ONE=176 +ONLY=177 +OPTION=178 +OR=179 +ORDER=180 +ORDINALITY=181 +OUTER=182 +OUTPUT=183 +OVER=184 +OVERFLOW=185 +PARTITION=186 +PARTITIONS=187 +PASSING=188 +PAST=189 +PATH=190 +PATTERN=191 +PER=192 +PERIOD=193 +PERMUTE=194 +POSITION=195 +PRECEDING=196 +PRECISION=197 +PREPARE=198 +PRIVILEGES=199 +PROPERTIES=200 +PRUNE=201 +QUOTES=202 +RANGE=203 +READ=204 +RECURSIVE=205 +REFRESH=206 +RENAME=207 +REPEATABLE=208 +REPLACE=209 +RESET=210 +RESPECT=211 +RESTRICT=212 +RETURNING=213 +REVOKE=214 +RIGHT=215 +ROLE=216 +ROLES=217 +ROLLBACK=218 +ROLLUP=219 +ROW=220 +ROWS=221 +RUNNING=222 +SCALAR=223 +SCHEMA=224 +SCHEMAS=225 +SECOND=226 +SECURITY=227 +SEEK=228 +SELECT=229 +SERIALIZABLE=230 +SESSION=231 +SET=232 +SETS=233 +SHOW=234 +SOME=235 +START=236 +STATS=237 +SUBSET=238 +SUBSTRING=239 +SYSTEM=240 +TABLE=241 +TABLES=242 +TABLESAMPLE=243 +TEXT=244 +TEXT_STRING=245 +THEN=246 +TIES=247 +TIME=248 +TIMESTAMP=249 +TO=250 +TRAILING=251 +TRANSACTION=252 +TRIM=253 +TRUE=254 +TRUNCATE=255 +TRY_CAST=256 +TYPE=257 +UESCAPE=258 +UNBOUNDED=259 +UNCOMMITTED=260 +UNCONDITIONAL=261 +UNION=262 +UNIQUE=263 +UNKNOWN=264 +UNMATCHED=265 +UNNEST=266 +UPDATE=267 +USE=268 +USER=269 +USING=270 +UTF16=271 +UTF32=272 +UTF8=273 +VALIDATE=274 +VALUE=275 +VALUES=276 +VERBOSE=277 +VERSION=278 +VIEW=279 +WHEN=280 +WHERE=281 +WINDOW=282 +WITH=283 +WITHIN=284 +WITHOUT=285 +WORK=286 +WRAPPER=287 +WRITE=288 +YEAR=289 +ZONE=290 +EQ=291 +NEQ=292 +LT=293 +LTE=294 +GT=295 +GTE=296 +PLUS=297 +MINUS=298 +ASTERISK=299 +SLASH=300 +PERCENT=301 +CONCAT=302 +QUESTION_MARK=303 +STRING=304 +UNICODE_STRING=305 +BINARY_LITERAL=306 +INTEGER_VALUE=307 +DECIMAL_VALUE=308 +DOUBLE_VALUE=309 +IDENTIFIER=310 +DIGIT_IDENTIFIER=311 +QUOTED_IDENTIFIER=312 +BACKQUOTED_IDENTIFIER=313 +SIMPLE_COMMENT=314 +BRACKETED_COMMENT=315 +WS=316 +UNRECOGNIZED=317 +DELIMITER=318 +'.'=1 +'('=2 +')'=3 +'SKIP'=4 +'=>'=5 +'->'=6 +'['=7 +']'=8 +':'=9 +'|'=10 +'^'=11 +'$'=12 +'{-'=13 +'-}'=14 +'{'=15 +'}'=16 +'ABSENT'=17 +'ADD'=18 +'ADMIN'=19 +'AFTER'=20 +'ALL'=21 +'ALTER'=22 +'ANALYZE'=23 +'AND'=24 +'ANY'=25 +'ARRAY'=26 +'AS'=27 +'ASC'=28 +'AT'=29 +'AUTHORIZATION'=30 +'BERNOULLI'=31 +'BETWEEN'=32 +'BOTH'=33 +'BY'=34 +'CALL'=35 +'CASCADE'=36 +'CASE'=37 +'CAST'=38 +'CATALOGS'=39 +'COLUMN'=40 +'COLUMNS'=41 +','=42 +'COMMENT'=43 +'COMMIT'=44 +'COMMITTED'=45 +'CONDITIONAL'=46 +'CONSTRAINT'=47 +'COUNT'=48 +'COPARTITION'=49 +'CREATE'=50 +'CROSS'=51 +'CUBE'=52 +'CURRENT'=53 +'CURRENT_CATALOG'=54 +'CURRENT_DATE'=55 +'CURRENT_PATH'=56 +'CURRENT_ROLE'=57 +'CURRENT_SCHEMA'=58 +'CURRENT_TIME'=59 +'CURRENT_TIMESTAMP'=60 +'CURRENT_USER'=61 +'DATA'=62 +'DATE'=63 +'DAY'=64 +'DEALLOCATE'=65 +'DEFAULT'=66 +'DEFINE'=67 +'DEFINER'=68 +'DELETE'=69 +'DENY'=70 +'DESC'=71 +'DESCRIBE'=72 +'DESCRIPTOR'=73 +'DISTINCT'=74 +'DISTRIBUTED'=75 +'DOUBLE'=76 +'DROP'=77 +'ELSE'=78 +'EMPTY'=79 +'ENCODING'=80 +'END'=81 +'ERROR'=82 +'ESCAPE'=83 +'EXCEPT'=84 +'EXCLUDING'=85 +'EXECUTE'=86 +'EXISTS'=87 +'EXPLAIN'=88 +'EXTRACT'=89 +'FALSE'=90 +'FETCH'=91 +'FILTER'=92 +'FINAL'=93 +'FIRST'=94 +'FOLLOWING'=95 +'FOR'=96 +'FORMAT'=97 +'FROM'=98 +'FULL'=99 +'FUNCTIONS'=100 +'GRACE'=101 +'GRANT'=102 +'GRANTED'=103 +'GRANTS'=104 +'GRAPHVIZ'=105 +'GROUP'=106 +'GROUPING'=107 +'GROUPS'=108 +'HAVING'=109 +'HOUR'=110 +'IF'=111 +'IGNORE'=112 +'IN'=113 +'INCLUDING'=114 +'INITIAL'=115 +'INNER'=116 +'INPUT'=117 +'INSERT'=118 +'INTERSECT'=119 +'INTERVAL'=120 +'INTO'=121 +'INVOKER'=122 +'IO'=123 +'IS'=124 +'ISOLATION'=125 +'JOIN'=126 +'JSON'=127 +'JSON_ARRAY'=128 +'JSON_EXISTS'=129 +'JSON_OBJECT'=130 +'JSON_QUERY'=131 +'JSON_VALUE'=132 +'KEEP'=133 +'KEY'=134 +'KEYS'=135 +'LAST'=136 +'LATERAL'=137 +'LEADING'=138 +'LEFT'=139 +'LEVEL'=140 +'LIKE'=141 +'LIMIT'=142 +'LISTAGG'=143 +'LOCAL'=144 +'LOCALTIME'=145 +'LOCALTIMESTAMP'=146 +'LOGICAL'=147 +'MAP'=148 +'MATCH'=149 +'MATCHED'=150 +'MATCHES'=151 +'MATCH_RECOGNIZE'=152 +'MATERIALIZED'=153 +'MEASURES'=154 +'MERGE'=155 +'MINUTE'=156 +'MONTH'=157 +'NATURAL'=158 +'NEXT'=159 +'NFC'=160 +'NFD'=161 +'NFKC'=162 +'NFKD'=163 +'NO'=164 +'NONE'=165 +'NORMALIZE'=166 +'NOT'=167 +'NULL'=168 +'NULLIF'=169 +'NULLS'=170 +'OBJECT'=171 +'OF'=172 +'OFFSET'=173 +'OMIT'=174 +'ON'=175 +'ONE'=176 +'ONLY'=177 +'OPTION'=178 +'OR'=179 +'ORDER'=180 +'ORDINALITY'=181 +'OUTER'=182 +'OUTPUT'=183 +'OVER'=184 +'OVERFLOW'=185 +'PARTITION'=186 +'PARTITIONS'=187 +'PASSING'=188 +'PAST'=189 +'PATH'=190 +'PATTERN'=191 +'PER'=192 +'PERIOD'=193 +'PERMUTE'=194 +'POSITION'=195 +'PRECEDING'=196 +'PRECISION'=197 +'PREPARE'=198 +'PRIVILEGES'=199 +'PROPERTIES'=200 +'PRUNE'=201 +'QUOTES'=202 +'RANGE'=203 +'READ'=204 +'RECURSIVE'=205 +'REFRESH'=206 +'RENAME'=207 +'REPEATABLE'=208 +'REPLACE'=209 +'RESET'=210 +'RESPECT'=211 +'RESTRICT'=212 +'RETURNING'=213 +'REVOKE'=214 +'RIGHT'=215 +'ROLE'=216 +'ROLES'=217 +'ROLLBACK'=218 +'ROLLUP'=219 +'ROW'=220 +'ROWS'=221 +'RUNNING'=222 +'SCALAR'=223 +'SCHEMA'=224 +'SCHEMAS'=225 +'SECOND'=226 +'SECURITY'=227 +'SEEK'=228 +'SELECT'=229 +'SERIALIZABLE'=230 +'SESSION'=231 +'SET'=232 +'SETS'=233 +'SHOW'=234 +'SOME'=235 +'START'=236 +'STATS'=237 +'SUBSET'=238 +'SUBSTRING'=239 +'SYSTEM'=240 +'TABLE'=241 +'TABLES'=242 +'TABLESAMPLE'=243 +'TEXT'=244 +'STRING'=245 +'THEN'=246 +'TIES'=247 +'TIME'=248 +'TIMESTAMP'=249 +'TO'=250 +'TRAILING'=251 +'TRANSACTION'=252 +'TRIM'=253 +'TRUE'=254 +'TRUNCATE'=255 +'TRY_CAST'=256 +'TYPE'=257 +'UESCAPE'=258 +'UNBOUNDED'=259 +'UNCOMMITTED'=260 +'UNCONDITIONAL'=261 +'UNION'=262 +'UNIQUE'=263 +'UNKNOWN'=264 +'UNMATCHED'=265 +'UNNEST'=266 +'UPDATE'=267 +'USE'=268 +'USER'=269 +'USING'=270 +'UTF16'=271 +'UTF32'=272 +'UTF8'=273 +'VALIDATE'=274 +'VALUE'=275 +'VALUES'=276 +'VERBOSE'=277 +'VERSION'=278 +'VIEW'=279 +'WHEN'=280 +'WHERE'=281 +'WINDOW'=282 +'WITH'=283 +'WITHIN'=284 +'WITHOUT'=285 +'WORK'=286 +'WRAPPER'=287 +'WRITE'=288 +'YEAR'=289 +'ZONE'=290 +'='=291 +'<'=293 +'<='=294 +'>'=295 +'>='=296 +'+'=297 +'-'=298 +'*'=299 +'/'=300 +'%'=301 +'||'=302 +'?'=303 diff --git a/datafusion/sql/src/antlr/presto/PrestoLexer.interp b/datafusion/sql/src/antlr/presto/PrestoLexer.interp new file mode 100644 index 0000000000000..4d74d9edbbbe7 --- /dev/null +++ b/datafusion/sql/src/antlr/presto/PrestoLexer.interp @@ -0,0 +1,971 @@ +token literal names: +null +'.' +'(' +')' +'SKIP' +'=>' +'->' +'[' +']' +':' +'|' +'^' +'$' +'{-' +'-}' +'{' +'}' +'ABSENT' +'ADD' +'ADMIN' +'AFTER' +'ALL' +'ALTER' +'ANALYZE' +'AND' +'ANY' +'ARRAY' +'AS' +'ASC' +'AT' +'AUTHORIZATION' +'BERNOULLI' +'BETWEEN' +'BOTH' +'BY' +'CALL' +'CASCADE' +'CASE' +'CAST' +'CATALOGS' +'COLUMN' +'COLUMNS' +',' +'COMMENT' +'COMMIT' +'COMMITTED' +'CONDITIONAL' +'CONSTRAINT' +'COUNT' +'COPARTITION' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURRENT_CATALOG' +'CURRENT_DATE' +'CURRENT_PATH' +'CURRENT_ROLE' +'CURRENT_SCHEMA' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURRENT_USER' +'DATA' +'DATE' +'DAY' +'DEALLOCATE' +'DEFAULT' +'DEFINE' +'DEFINER' +'DELETE' +'DENY' +'DESC' +'DESCRIBE' +'DESCRIPTOR' +'DISTINCT' +'DISTRIBUTED' +'DOUBLE' +'DROP' +'ELSE' +'EMPTY' +'ENCODING' +'END' +'ERROR' +'ESCAPE' +'EXCEPT' +'EXCLUDING' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTRACT' +'FALSE' +'FETCH' +'FILTER' +'FINAL' +'FIRST' +'FOLLOWING' +'FOR' +'FORMAT' +'FROM' +'FULL' +'FUNCTIONS' +'GRACE' +'GRANT' +'GRANTED' +'GRANTS' +'GRAPHVIZ' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IF' +'IGNORE' +'IN' +'INCLUDING' +'INITIAL' +'INNER' +'INPUT' +'INSERT' +'INTERSECT' +'INTERVAL' +'INTO' +'INVOKER' +'IO' +'IS' +'ISOLATION' +'JOIN' +'JSON' +'JSON_ARRAY' +'JSON_EXISTS' +'JSON_OBJECT' +'JSON_QUERY' +'JSON_VALUE' +'KEEP' +'KEY' +'KEYS' +'LAST' +'LATERAL' +'LEADING' +'LEFT' +'LEVEL' +'LIKE' +'LIMIT' +'LISTAGG' +'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' +'OBJECT' +'OF' +'OFFSET' +'OMIT' +'ON' +'ONE' +'ONLY' +'OPTION' +'OR' +'ORDER' +'ORDINALITY' +'OUTER' +'OUTPUT' +'OVER' +'OVERFLOW' +'PARTITION' +'PARTITIONS' +'PASSING' +'PAST' +'PATH' +'PATTERN' +'PER' +'PERIOD' +'PERMUTE' +'POSITION' +'PRECEDING' +'PRECISION' +'PREPARE' +'PRIVILEGES' +'PROPERTIES' +'PRUNE' +'QUOTES' +'RANGE' +'READ' +'RECURSIVE' +'REFRESH' +'RENAME' +'REPEATABLE' +'REPLACE' +'RESET' +'RESPECT' +'RESTRICT' +'RETURNING' +'REVOKE' +'RIGHT' +'ROLE' +'ROLES' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'RUNNING' +'SCALAR' +'SCHEMA' +'SCHEMAS' +'SECOND' +'SECURITY' +'SEEK' +'SELECT' +'SERIALIZABLE' +'SESSION' +'SET' +'SETS' +'SHOW' +'SOME' +'START' +'STATS' +'SUBSET' +'SUBSTRING' +'SYSTEM' +'TABLE' +'TABLES' +'TABLESAMPLE' +'TEXT' +'STRING' +'THEN' +'TIES' +'TIME' +'TIMESTAMP' +'TO' +'TRAILING' +'TRANSACTION' +'TRIM' +'TRUE' +'TRUNCATE' +'TRY_CAST' +'TYPE' +'UESCAPE' +'UNBOUNDED' +'UNCOMMITTED' +'UNCONDITIONAL' +'UNION' +'UNIQUE' +'UNKNOWN' +'UNMATCHED' +'UNNEST' +'UPDATE' +'USE' +'USER' +'USING' +'UTF16' +'UTF32' +'UTF8' +'VALIDATE' +'VALUE' +'VALUES' +'VERBOSE' +'VERSION' +'VIEW' +'WHEN' +'WHERE' +'WINDOW' +'WITH' +'WITHIN' +'WITHOUT' +'WORK' +'WRAPPER' +'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 +ABSENT +ADD +ADMIN +AFTER +ALL +ALTER +ANALYZE +AND +ANY +ARRAY +AS +ASC +AT +AUTHORIZATION +BERNOULLI +BETWEEN +BOTH +BY +CALL +CASCADE +CASE +CAST +CATALOGS +COLUMN +COLUMNS +COMMA +COMMENT +COMMIT +COMMITTED +CONDITIONAL +CONSTRAINT +COUNT +COPARTITION +CREATE +CROSS +CUBE +CURRENT +CURRENT_CATALOG +CURRENT_DATE +CURRENT_PATH +CURRENT_ROLE +CURRENT_SCHEMA +CURRENT_TIME +CURRENT_TIMESTAMP +CURRENT_USER +DATA +DATE +DAY +DEALLOCATE +DEFAULT +DEFINE +DEFINER +DELETE +DENY +DESC +DESCRIBE +DESCRIPTOR +DISTINCT +DISTRIBUTED +DOUBLE +DROP +ELSE +EMPTY +ENCODING +END +ERROR +ESCAPE +EXCEPT +EXCLUDING +EXECUTE +EXISTS +EXPLAIN +EXTRACT +FALSE +FETCH +FILTER +FINAL +FIRST +FOLLOWING +FOR +FORMAT +FROM +FULL +FUNCTIONS +GRACE +GRANT +GRANTED +GRANTS +GRAPHVIZ +GROUP +GROUPING +GROUPS +HAVING +HOUR +IF +IGNORE +IN +INCLUDING +INITIAL +INNER +INPUT +INSERT +INTERSECT +INTERVAL +INTO +INVOKER +IO +IS +ISOLATION +JOIN +JSON +JSON_ARRAY +JSON_EXISTS +JSON_OBJECT +JSON_QUERY +JSON_VALUE +KEEP +KEY +KEYS +LAST +LATERAL +LEADING +LEFT +LEVEL +LIKE +LIMIT +LISTAGG +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 +OBJECT +OF +OFFSET +OMIT +ON +ONE +ONLY +OPTION +OR +ORDER +ORDINALITY +OUTER +OUTPUT +OVER +OVERFLOW +PARTITION +PARTITIONS +PASSING +PAST +PATH +PATTERN +PER +PERIOD +PERMUTE +POSITION +PRECEDING +PRECISION +PREPARE +PRIVILEGES +PROPERTIES +PRUNE +QUOTES +RANGE +READ +RECURSIVE +REFRESH +RENAME +REPEATABLE +REPLACE +RESET +RESPECT +RESTRICT +RETURNING +REVOKE +RIGHT +ROLE +ROLES +ROLLBACK +ROLLUP +ROW +ROWS +RUNNING +SCALAR +SCHEMA +SCHEMAS +SECOND +SECURITY +SEEK +SELECT +SERIALIZABLE +SESSION +SET +SETS +SHOW +SOME +START +STATS +SUBSET +SUBSTRING +SYSTEM +TABLE +TABLES +TABLESAMPLE +TEXT +TEXT_STRING +THEN +TIES +TIME +TIMESTAMP +TO +TRAILING +TRANSACTION +TRIM +TRUE +TRUNCATE +TRY_CAST +TYPE +UESCAPE +UNBOUNDED +UNCOMMITTED +UNCONDITIONAL +UNION +UNIQUE +UNKNOWN +UNMATCHED +UNNEST +UPDATE +USE +USER +USING +UTF16 +UTF32 +UTF8 +VALIDATE +VALUE +VALUES +VERBOSE +VERSION +VIEW +WHEN +WHERE +WINDOW +WITH +WITHIN +WITHOUT +WORK +WRAPPER +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 +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 +ABSENT +ADD +ADMIN +AFTER +ALL +ALTER +ANALYZE +AND +ANY +ARRAY +AS +ASC +AT +AUTHORIZATION +BERNOULLI +BETWEEN +BOTH +BY +CALL +CASCADE +CASE +CAST +CATALOGS +COLUMN +COLUMNS +COMMA +COMMENT +COMMIT +COMMITTED +CONDITIONAL +CONSTRAINT +COUNT +COPARTITION +CREATE +CROSS +CUBE +CURRENT +CURRENT_CATALOG +CURRENT_DATE +CURRENT_PATH +CURRENT_ROLE +CURRENT_SCHEMA +CURRENT_TIME +CURRENT_TIMESTAMP +CURRENT_USER +DATA +DATE +DAY +DEALLOCATE +DEFAULT +DEFINE +DEFINER +DELETE +DENY +DESC +DESCRIBE +DESCRIPTOR +DISTINCT +DISTRIBUTED +DOUBLE +DROP +ELSE +EMPTY +ENCODING +END +ERROR +ESCAPE +EXCEPT +EXCLUDING +EXECUTE +EXISTS +EXPLAIN +EXTRACT +FALSE +FETCH +FILTER +FINAL +FIRST +FOLLOWING +FOR +FORMAT +FROM +FULL +FUNCTIONS +GRACE +GRANT +GRANTED +GRANTS +GRAPHVIZ +GROUP +GROUPING +GROUPS +HAVING +HOUR +IF +IGNORE +IN +INCLUDING +INITIAL +INNER +INPUT +INSERT +INTERSECT +INTERVAL +INTO +INVOKER +IO +IS +ISOLATION +JOIN +JSON +JSON_ARRAY +JSON_EXISTS +JSON_OBJECT +JSON_QUERY +JSON_VALUE +KEEP +KEY +KEYS +LAST +LATERAL +LEADING +LEFT +LEVEL +LIKE +LIMIT +LISTAGG +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 +OBJECT +OF +OFFSET +OMIT +ON +ONE +ONLY +OPTION +OR +ORDER +ORDINALITY +OUTER +OUTPUT +OVER +OVERFLOW +PARTITION +PARTITIONS +PASSING +PAST +PATH +PATTERN +PER +PERIOD +PERMUTE +POSITION +PRECEDING +PRECISION +PREPARE +PRIVILEGES +PROPERTIES +PRUNE +QUOTES +RANGE +READ +RECURSIVE +REFRESH +RENAME +REPEATABLE +REPLACE +RESET +RESPECT +RESTRICT +RETURNING +REVOKE +RIGHT +ROLE +ROLES +ROLLBACK +ROLLUP +ROW +ROWS +RUNNING +SCALAR +SCHEMA +SCHEMAS +SECOND +SECURITY +SEEK +SELECT +SERIALIZABLE +SESSION +SET +SETS +SHOW +SOME +START +STATS +SUBSET +SUBSTRING +SYSTEM +TABLE +TABLES +TABLESAMPLE +TEXT +TEXT_STRING +THEN +TIES +TIME +TIMESTAMP +TO +TRAILING +TRANSACTION +TRIM +TRUE +TRUNCATE +TRY_CAST +TYPE +UESCAPE +UNBOUNDED +UNCOMMITTED +UNCONDITIONAL +UNION +UNIQUE +UNKNOWN +UNMATCHED +UNNEST +UPDATE +USE +USER +USING +UTF16 +UTF32 +UTF8 +VALIDATE +VALUE +VALUES +VERBOSE +VERSION +VIEW +WHEN +WHERE +WINDOW +WITH +WITHIN +WITHOUT +WORK +WRAPPER +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 +EXPONENT +DIGIT +LETTER +SIMPLE_COMMENT +BRACKETED_COMMENT +WS +UNRECOGNIZED + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 319, 2872, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 4, 301, 9, 301, 4, 302, 9, 302, 4, 303, 9, 303, 4, 304, 9, 304, 4, 305, 9, 305, 4, 306, 9, 306, 4, 307, 9, 307, 4, 308, 9, 308, 4, 309, 9, 309, 4, 310, 9, 310, 4, 311, 9, 311, 4, 312, 9, 312, 4, 313, 9, 313, 4, 314, 9, 314, 4, 315, 9, 315, 4, 316, 9, 316, 4, 317, 9, 317, 4, 318, 9, 318, 4, 319, 9, 319, 4, 320, 9, 320, 4, 321, 9, 321, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 193, 3, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 233, 3, 233, 3, 233, 3, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 251, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 269, 3, 269, 3, 269, 3, 269, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 293, 3, 293, 3, 293, 3, 293, 5, 293, 2664, 10, 293, 3, 294, 3, 294, 3, 295, 3, 295, 3, 295, 3, 296, 3, 296, 3, 297, 3, 297, 3, 297, 3, 298, 3, 298, 3, 299, 3, 299, 3, 300, 3, 300, 3, 301, 3, 301, 3, 302, 3, 302, 3, 303, 3, 303, 3, 303, 3, 304, 3, 304, 3, 305, 3, 305, 3, 305, 3, 305, 7, 305, 2695, 10, 305, 12, 305, 14, 305, 2698, 11, 305, 3, 305, 3, 305, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 7, 306, 2709, 10, 306, 12, 306, 14, 306, 2712, 11, 306, 3, 306, 3, 306, 3, 307, 3, 307, 3, 307, 3, 307, 7, 307, 2720, 10, 307, 12, 307, 14, 307, 2723, 11, 307, 3, 307, 3, 307, 3, 308, 6, 308, 2728, 10, 308, 13, 308, 14, 308, 2729, 3, 309, 6, 309, 2733, 10, 309, 13, 309, 14, 309, 2734, 3, 309, 3, 309, 7, 309, 2739, 10, 309, 12, 309, 14, 309, 2742, 11, 309, 3, 309, 3, 309, 6, 309, 2746, 10, 309, 13, 309, 14, 309, 2747, 5, 309, 2750, 10, 309, 3, 310, 6, 310, 2753, 10, 310, 13, 310, 14, 310, 2754, 3, 310, 3, 310, 7, 310, 2759, 10, 310, 12, 310, 14, 310, 2762, 11, 310, 5, 310, 2764, 10, 310, 3, 310, 3, 310, 3, 310, 3, 310, 6, 310, 2770, 10, 310, 13, 310, 14, 310, 2771, 3, 310, 3, 310, 5, 310, 2776, 10, 310, 3, 311, 3, 311, 5, 311, 2780, 10, 311, 3, 311, 3, 311, 3, 311, 7, 311, 2785, 10, 311, 12, 311, 14, 311, 2788, 11, 311, 3, 312, 3, 312, 3, 312, 3, 312, 6, 312, 2794, 10, 312, 13, 312, 14, 312, 2795, 3, 313, 3, 313, 3, 313, 3, 313, 7, 313, 2802, 10, 313, 12, 313, 14, 313, 2805, 11, 313, 3, 313, 3, 313, 3, 314, 3, 314, 3, 314, 3, 314, 7, 314, 2813, 10, 314, 12, 314, 14, 314, 2816, 11, 314, 3, 314, 3, 314, 3, 315, 3, 315, 5, 315, 2822, 10, 315, 3, 315, 6, 315, 2825, 10, 315, 13, 315, 14, 315, 2826, 3, 316, 3, 316, 3, 317, 3, 317, 3, 318, 3, 318, 3, 318, 3, 318, 7, 318, 2837, 10, 318, 12, 318, 14, 318, 2840, 11, 318, 3, 318, 5, 318, 2843, 10, 318, 3, 318, 5, 318, 2846, 10, 318, 3, 318, 3, 318, 3, 319, 3, 319, 3, 319, 3, 319, 7, 319, 2854, 10, 319, 12, 319, 14, 319, 2857, 11, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 320, 6, 320, 2865, 10, 320, 13, 320, 14, 320, 2866, 3, 320, 3, 320, 3, 321, 3, 321, 3, 2855, 2, 322, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 107, 213, 108, 215, 109, 217, 110, 219, 111, 221, 112, 223, 113, 225, 114, 227, 115, 229, 116, 231, 117, 233, 118, 235, 119, 237, 120, 239, 121, 241, 122, 243, 123, 245, 124, 247, 125, 249, 126, 251, 127, 253, 128, 255, 129, 257, 130, 259, 131, 261, 132, 263, 133, 265, 134, 267, 135, 269, 136, 271, 137, 273, 138, 275, 139, 277, 140, 279, 141, 281, 142, 283, 143, 285, 144, 287, 145, 289, 146, 291, 147, 293, 148, 295, 149, 297, 150, 299, 151, 301, 152, 303, 153, 305, 154, 307, 155, 309, 156, 311, 157, 313, 158, 315, 159, 317, 160, 319, 161, 321, 162, 323, 163, 325, 164, 327, 165, 329, 166, 331, 167, 333, 168, 335, 169, 337, 170, 339, 171, 341, 172, 343, 173, 345, 174, 347, 175, 349, 176, 351, 177, 353, 178, 355, 179, 357, 180, 359, 181, 361, 182, 363, 183, 365, 184, 367, 185, 369, 186, 371, 187, 373, 188, 375, 189, 377, 190, 379, 191, 381, 192, 383, 193, 385, 194, 387, 195, 389, 196, 391, 197, 393, 198, 395, 199, 397, 200, 399, 201, 401, 202, 403, 203, 405, 204, 407, 205, 409, 206, 411, 207, 413, 208, 415, 209, 417, 210, 419, 211, 421, 212, 423, 213, 425, 214, 427, 215, 429, 216, 431, 217, 433, 218, 435, 219, 437, 220, 439, 221, 441, 222, 443, 223, 445, 224, 447, 225, 449, 226, 451, 227, 453, 228, 455, 229, 457, 230, 459, 231, 461, 232, 463, 233, 465, 234, 467, 235, 469, 236, 471, 237, 473, 238, 475, 239, 477, 240, 479, 241, 481, 242, 483, 243, 485, 244, 487, 245, 489, 246, 491, 247, 493, 248, 495, 249, 497, 250, 499, 251, 501, 252, 503, 253, 505, 254, 507, 255, 509, 256, 511, 257, 513, 258, 515, 259, 517, 260, 519, 261, 521, 262, 523, 263, 525, 264, 527, 265, 529, 266, 531, 267, 533, 268, 535, 269, 537, 270, 539, 271, 541, 272, 543, 273, 545, 274, 547, 275, 549, 276, 551, 277, 553, 278, 555, 279, 557, 280, 559, 281, 561, 282, 563, 283, 565, 284, 567, 285, 569, 286, 571, 287, 573, 288, 575, 289, 577, 290, 579, 291, 581, 292, 583, 293, 585, 294, 587, 295, 589, 296, 591, 297, 593, 298, 595, 299, 597, 300, 599, 301, 601, 302, 603, 303, 605, 304, 607, 305, 609, 306, 611, 307, 613, 308, 615, 309, 617, 310, 619, 311, 621, 312, 623, 313, 625, 314, 627, 315, 629, 2, 631, 2, 633, 2, 635, 316, 637, 317, 639, 318, 641, 319, 3, 2, 10, 3, 2, 41, 41, 3, 2, 36, 36, 3, 2, 98, 98, 4, 2, 45, 45, 47, 47, 3, 2, 50, 59, 3, 2, 67, 92, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 2902, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, 2, 387, 3, 2, 2, 2, 2, 389, 3, 2, 2, 2, 2, 391, 3, 2, 2, 2, 2, 393, 3, 2, 2, 2, 2, 395, 3, 2, 2, 2, 2, 397, 3, 2, 2, 2, 2, 399, 3, 2, 2, 2, 2, 401, 3, 2, 2, 2, 2, 403, 3, 2, 2, 2, 2, 405, 3, 2, 2, 2, 2, 407, 3, 2, 2, 2, 2, 409, 3, 2, 2, 2, 2, 411, 3, 2, 2, 2, 2, 413, 3, 2, 2, 2, 2, 415, 3, 2, 2, 2, 2, 417, 3, 2, 2, 2, 2, 419, 3, 2, 2, 2, 2, 421, 3, 2, 2, 2, 2, 423, 3, 2, 2, 2, 2, 425, 3, 2, 2, 2, 2, 427, 3, 2, 2, 2, 2, 429, 3, 2, 2, 2, 2, 431, 3, 2, 2, 2, 2, 433, 3, 2, 2, 2, 2, 435, 3, 2, 2, 2, 2, 437, 3, 2, 2, 2, 2, 439, 3, 2, 2, 2, 2, 441, 3, 2, 2, 2, 2, 443, 3, 2, 2, 2, 2, 445, 3, 2, 2, 2, 2, 447, 3, 2, 2, 2, 2, 449, 3, 2, 2, 2, 2, 451, 3, 2, 2, 2, 2, 453, 3, 2, 2, 2, 2, 455, 3, 2, 2, 2, 2, 457, 3, 2, 2, 2, 2, 459, 3, 2, 2, 2, 2, 461, 3, 2, 2, 2, 2, 463, 3, 2, 2, 2, 2, 465, 3, 2, 2, 2, 2, 467, 3, 2, 2, 2, 2, 469, 3, 2, 2, 2, 2, 471, 3, 2, 2, 2, 2, 473, 3, 2, 2, 2, 2, 475, 3, 2, 2, 2, 2, 477, 3, 2, 2, 2, 2, 479, 3, 2, 2, 2, 2, 481, 3, 2, 2, 2, 2, 483, 3, 2, 2, 2, 2, 485, 3, 2, 2, 2, 2, 487, 3, 2, 2, 2, 2, 489, 3, 2, 2, 2, 2, 491, 3, 2, 2, 2, 2, 493, 3, 2, 2, 2, 2, 495, 3, 2, 2, 2, 2, 497, 3, 2, 2, 2, 2, 499, 3, 2, 2, 2, 2, 501, 3, 2, 2, 2, 2, 503, 3, 2, 2, 2, 2, 505, 3, 2, 2, 2, 2, 507, 3, 2, 2, 2, 2, 509, 3, 2, 2, 2, 2, 511, 3, 2, 2, 2, 2, 513, 3, 2, 2, 2, 2, 515, 3, 2, 2, 2, 2, 517, 3, 2, 2, 2, 2, 519, 3, 2, 2, 2, 2, 521, 3, 2, 2, 2, 2, 523, 3, 2, 2, 2, 2, 525, 3, 2, 2, 2, 2, 527, 3, 2, 2, 2, 2, 529, 3, 2, 2, 2, 2, 531, 3, 2, 2, 2, 2, 533, 3, 2, 2, 2, 2, 535, 3, 2, 2, 2, 2, 537, 3, 2, 2, 2, 2, 539, 3, 2, 2, 2, 2, 541, 3, 2, 2, 2, 2, 543, 3, 2, 2, 2, 2, 545, 3, 2, 2, 2, 2, 547, 3, 2, 2, 2, 2, 549, 3, 2, 2, 2, 2, 551, 3, 2, 2, 2, 2, 553, 3, 2, 2, 2, 2, 555, 3, 2, 2, 2, 2, 557, 3, 2, 2, 2, 2, 559, 3, 2, 2, 2, 2, 561, 3, 2, 2, 2, 2, 563, 3, 2, 2, 2, 2, 565, 3, 2, 2, 2, 2, 567, 3, 2, 2, 2, 2, 569, 3, 2, 2, 2, 2, 571, 3, 2, 2, 2, 2, 573, 3, 2, 2, 2, 2, 575, 3, 2, 2, 2, 2, 577, 3, 2, 2, 2, 2, 579, 3, 2, 2, 2, 2, 581, 3, 2, 2, 2, 2, 583, 3, 2, 2, 2, 2, 585, 3, 2, 2, 2, 2, 587, 3, 2, 2, 2, 2, 589, 3, 2, 2, 2, 2, 591, 3, 2, 2, 2, 2, 593, 3, 2, 2, 2, 2, 595, 3, 2, 2, 2, 2, 597, 3, 2, 2, 2, 2, 599, 3, 2, 2, 2, 2, 601, 3, 2, 2, 2, 2, 603, 3, 2, 2, 2, 2, 605, 3, 2, 2, 2, 2, 607, 3, 2, 2, 2, 2, 609, 3, 2, 2, 2, 2, 611, 3, 2, 2, 2, 2, 613, 3, 2, 2, 2, 2, 615, 3, 2, 2, 2, 2, 617, 3, 2, 2, 2, 2, 619, 3, 2, 2, 2, 2, 621, 3, 2, 2, 2, 2, 623, 3, 2, 2, 2, 2, 625, 3, 2, 2, 2, 2, 627, 3, 2, 2, 2, 2, 635, 3, 2, 2, 2, 2, 637, 3, 2, 2, 2, 2, 639, 3, 2, 2, 2, 2, 641, 3, 2, 2, 2, 3, 643, 3, 2, 2, 2, 5, 645, 3, 2, 2, 2, 7, 647, 3, 2, 2, 2, 9, 649, 3, 2, 2, 2, 11, 654, 3, 2, 2, 2, 13, 657, 3, 2, 2, 2, 15, 660, 3, 2, 2, 2, 17, 662, 3, 2, 2, 2, 19, 664, 3, 2, 2, 2, 21, 666, 3, 2, 2, 2, 23, 668, 3, 2, 2, 2, 25, 670, 3, 2, 2, 2, 27, 672, 3, 2, 2, 2, 29, 675, 3, 2, 2, 2, 31, 678, 3, 2, 2, 2, 33, 680, 3, 2, 2, 2, 35, 682, 3, 2, 2, 2, 37, 689, 3, 2, 2, 2, 39, 693, 3, 2, 2, 2, 41, 699, 3, 2, 2, 2, 43, 705, 3, 2, 2, 2, 45, 709, 3, 2, 2, 2, 47, 715, 3, 2, 2, 2, 49, 723, 3, 2, 2, 2, 51, 727, 3, 2, 2, 2, 53, 731, 3, 2, 2, 2, 55, 737, 3, 2, 2, 2, 57, 740, 3, 2, 2, 2, 59, 744, 3, 2, 2, 2, 61, 747, 3, 2, 2, 2, 63, 761, 3, 2, 2, 2, 65, 771, 3, 2, 2, 2, 67, 779, 3, 2, 2, 2, 69, 784, 3, 2, 2, 2, 71, 787, 3, 2, 2, 2, 73, 792, 3, 2, 2, 2, 75, 800, 3, 2, 2, 2, 77, 805, 3, 2, 2, 2, 79, 810, 3, 2, 2, 2, 81, 819, 3, 2, 2, 2, 83, 826, 3, 2, 2, 2, 85, 834, 3, 2, 2, 2, 87, 836, 3, 2, 2, 2, 89, 844, 3, 2, 2, 2, 91, 851, 3, 2, 2, 2, 93, 861, 3, 2, 2, 2, 95, 873, 3, 2, 2, 2, 97, 884, 3, 2, 2, 2, 99, 890, 3, 2, 2, 2, 101, 902, 3, 2, 2, 2, 103, 909, 3, 2, 2, 2, 105, 915, 3, 2, 2, 2, 107, 920, 3, 2, 2, 2, 109, 928, 3, 2, 2, 2, 111, 944, 3, 2, 2, 2, 113, 957, 3, 2, 2, 2, 115, 970, 3, 2, 2, 2, 117, 983, 3, 2, 2, 2, 119, 998, 3, 2, 2, 2, 121, 1011, 3, 2, 2, 2, 123, 1029, 3, 2, 2, 2, 125, 1042, 3, 2, 2, 2, 127, 1047, 3, 2, 2, 2, 129, 1052, 3, 2, 2, 2, 131, 1056, 3, 2, 2, 2, 133, 1067, 3, 2, 2, 2, 135, 1075, 3, 2, 2, 2, 137, 1082, 3, 2, 2, 2, 139, 1090, 3, 2, 2, 2, 141, 1097, 3, 2, 2, 2, 143, 1102, 3, 2, 2, 2, 145, 1107, 3, 2, 2, 2, 147, 1116, 3, 2, 2, 2, 149, 1127, 3, 2, 2, 2, 151, 1136, 3, 2, 2, 2, 153, 1148, 3, 2, 2, 2, 155, 1155, 3, 2, 2, 2, 157, 1160, 3, 2, 2, 2, 159, 1165, 3, 2, 2, 2, 161, 1171, 3, 2, 2, 2, 163, 1180, 3, 2, 2, 2, 165, 1184, 3, 2, 2, 2, 167, 1190, 3, 2, 2, 2, 169, 1197, 3, 2, 2, 2, 171, 1204, 3, 2, 2, 2, 173, 1214, 3, 2, 2, 2, 175, 1222, 3, 2, 2, 2, 177, 1229, 3, 2, 2, 2, 179, 1237, 3, 2, 2, 2, 181, 1245, 3, 2, 2, 2, 183, 1251, 3, 2, 2, 2, 185, 1257, 3, 2, 2, 2, 187, 1264, 3, 2, 2, 2, 189, 1270, 3, 2, 2, 2, 191, 1276, 3, 2, 2, 2, 193, 1286, 3, 2, 2, 2, 195, 1290, 3, 2, 2, 2, 197, 1297, 3, 2, 2, 2, 199, 1302, 3, 2, 2, 2, 201, 1307, 3, 2, 2, 2, 203, 1317, 3, 2, 2, 2, 205, 1323, 3, 2, 2, 2, 207, 1329, 3, 2, 2, 2, 209, 1337, 3, 2, 2, 2, 211, 1344, 3, 2, 2, 2, 213, 1353, 3, 2, 2, 2, 215, 1359, 3, 2, 2, 2, 217, 1368, 3, 2, 2, 2, 219, 1375, 3, 2, 2, 2, 221, 1382, 3, 2, 2, 2, 223, 1387, 3, 2, 2, 2, 225, 1390, 3, 2, 2, 2, 227, 1397, 3, 2, 2, 2, 229, 1400, 3, 2, 2, 2, 231, 1410, 3, 2, 2, 2, 233, 1418, 3, 2, 2, 2, 235, 1424, 3, 2, 2, 2, 237, 1430, 3, 2, 2, 2, 239, 1437, 3, 2, 2, 2, 241, 1447, 3, 2, 2, 2, 243, 1456, 3, 2, 2, 2, 245, 1461, 3, 2, 2, 2, 247, 1469, 3, 2, 2, 2, 249, 1472, 3, 2, 2, 2, 251, 1475, 3, 2, 2, 2, 253, 1485, 3, 2, 2, 2, 255, 1490, 3, 2, 2, 2, 257, 1495, 3, 2, 2, 2, 259, 1506, 3, 2, 2, 2, 261, 1518, 3, 2, 2, 2, 263, 1530, 3, 2, 2, 2, 265, 1541, 3, 2, 2, 2, 267, 1552, 3, 2, 2, 2, 269, 1557, 3, 2, 2, 2, 271, 1561, 3, 2, 2, 2, 273, 1566, 3, 2, 2, 2, 275, 1571, 3, 2, 2, 2, 277, 1579, 3, 2, 2, 2, 279, 1587, 3, 2, 2, 2, 281, 1592, 3, 2, 2, 2, 283, 1598, 3, 2, 2, 2, 285, 1603, 3, 2, 2, 2, 287, 1609, 3, 2, 2, 2, 289, 1617, 3, 2, 2, 2, 291, 1623, 3, 2, 2, 2, 293, 1633, 3, 2, 2, 2, 295, 1648, 3, 2, 2, 2, 297, 1656, 3, 2, 2, 2, 299, 1660, 3, 2, 2, 2, 301, 1666, 3, 2, 2, 2, 303, 1674, 3, 2, 2, 2, 305, 1682, 3, 2, 2, 2, 307, 1698, 3, 2, 2, 2, 309, 1711, 3, 2, 2, 2, 311, 1720, 3, 2, 2, 2, 313, 1726, 3, 2, 2, 2, 315, 1733, 3, 2, 2, 2, 317, 1739, 3, 2, 2, 2, 319, 1747, 3, 2, 2, 2, 321, 1752, 3, 2, 2, 2, 323, 1756, 3, 2, 2, 2, 325, 1760, 3, 2, 2, 2, 327, 1765, 3, 2, 2, 2, 329, 1770, 3, 2, 2, 2, 331, 1773, 3, 2, 2, 2, 333, 1778, 3, 2, 2, 2, 335, 1788, 3, 2, 2, 2, 337, 1792, 3, 2, 2, 2, 339, 1797, 3, 2, 2, 2, 341, 1804, 3, 2, 2, 2, 343, 1810, 3, 2, 2, 2, 345, 1817, 3, 2, 2, 2, 347, 1820, 3, 2, 2, 2, 349, 1827, 3, 2, 2, 2, 351, 1832, 3, 2, 2, 2, 353, 1835, 3, 2, 2, 2, 355, 1839, 3, 2, 2, 2, 357, 1844, 3, 2, 2, 2, 359, 1851, 3, 2, 2, 2, 361, 1854, 3, 2, 2, 2, 363, 1860, 3, 2, 2, 2, 365, 1871, 3, 2, 2, 2, 367, 1877, 3, 2, 2, 2, 369, 1884, 3, 2, 2, 2, 371, 1889, 3, 2, 2, 2, 373, 1898, 3, 2, 2, 2, 375, 1908, 3, 2, 2, 2, 377, 1919, 3, 2, 2, 2, 379, 1927, 3, 2, 2, 2, 381, 1932, 3, 2, 2, 2, 383, 1937, 3, 2, 2, 2, 385, 1945, 3, 2, 2, 2, 387, 1949, 3, 2, 2, 2, 389, 1956, 3, 2, 2, 2, 391, 1964, 3, 2, 2, 2, 393, 1973, 3, 2, 2, 2, 395, 1983, 3, 2, 2, 2, 397, 1993, 3, 2, 2, 2, 399, 2001, 3, 2, 2, 2, 401, 2012, 3, 2, 2, 2, 403, 2023, 3, 2, 2, 2, 405, 2029, 3, 2, 2, 2, 407, 2036, 3, 2, 2, 2, 409, 2042, 3, 2, 2, 2, 411, 2047, 3, 2, 2, 2, 413, 2057, 3, 2, 2, 2, 415, 2065, 3, 2, 2, 2, 417, 2072, 3, 2, 2, 2, 419, 2083, 3, 2, 2, 2, 421, 2091, 3, 2, 2, 2, 423, 2097, 3, 2, 2, 2, 425, 2105, 3, 2, 2, 2, 427, 2114, 3, 2, 2, 2, 429, 2124, 3, 2, 2, 2, 431, 2131, 3, 2, 2, 2, 433, 2137, 3, 2, 2, 2, 435, 2142, 3, 2, 2, 2, 437, 2148, 3, 2, 2, 2, 439, 2157, 3, 2, 2, 2, 441, 2164, 3, 2, 2, 2, 443, 2168, 3, 2, 2, 2, 445, 2173, 3, 2, 2, 2, 447, 2181, 3, 2, 2, 2, 449, 2188, 3, 2, 2, 2, 451, 2195, 3, 2, 2, 2, 453, 2203, 3, 2, 2, 2, 455, 2210, 3, 2, 2, 2, 457, 2219, 3, 2, 2, 2, 459, 2224, 3, 2, 2, 2, 461, 2231, 3, 2, 2, 2, 463, 2244, 3, 2, 2, 2, 465, 2252, 3, 2, 2, 2, 467, 2256, 3, 2, 2, 2, 469, 2261, 3, 2, 2, 2, 471, 2266, 3, 2, 2, 2, 473, 2271, 3, 2, 2, 2, 475, 2277, 3, 2, 2, 2, 477, 2283, 3, 2, 2, 2, 479, 2290, 3, 2, 2, 2, 481, 2300, 3, 2, 2, 2, 483, 2307, 3, 2, 2, 2, 485, 2313, 3, 2, 2, 2, 487, 2320, 3, 2, 2, 2, 489, 2332, 3, 2, 2, 2, 491, 2337, 3, 2, 2, 2, 493, 2344, 3, 2, 2, 2, 495, 2349, 3, 2, 2, 2, 497, 2354, 3, 2, 2, 2, 499, 2359, 3, 2, 2, 2, 501, 2369, 3, 2, 2, 2, 503, 2372, 3, 2, 2, 2, 505, 2381, 3, 2, 2, 2, 507, 2393, 3, 2, 2, 2, 509, 2398, 3, 2, 2, 2, 511, 2403, 3, 2, 2, 2, 513, 2412, 3, 2, 2, 2, 515, 2421, 3, 2, 2, 2, 517, 2426, 3, 2, 2, 2, 519, 2434, 3, 2, 2, 2, 521, 2444, 3, 2, 2, 2, 523, 2456, 3, 2, 2, 2, 525, 2470, 3, 2, 2, 2, 527, 2476, 3, 2, 2, 2, 529, 2483, 3, 2, 2, 2, 531, 2491, 3, 2, 2, 2, 533, 2501, 3, 2, 2, 2, 535, 2508, 3, 2, 2, 2, 537, 2515, 3, 2, 2, 2, 539, 2519, 3, 2, 2, 2, 541, 2524, 3, 2, 2, 2, 543, 2530, 3, 2, 2, 2, 545, 2536, 3, 2, 2, 2, 547, 2542, 3, 2, 2, 2, 549, 2547, 3, 2, 2, 2, 551, 2556, 3, 2, 2, 2, 553, 2562, 3, 2, 2, 2, 555, 2569, 3, 2, 2, 2, 557, 2577, 3, 2, 2, 2, 559, 2585, 3, 2, 2, 2, 561, 2590, 3, 2, 2, 2, 563, 2595, 3, 2, 2, 2, 565, 2601, 3, 2, 2, 2, 567, 2608, 3, 2, 2, 2, 569, 2613, 3, 2, 2, 2, 571, 2620, 3, 2, 2, 2, 573, 2628, 3, 2, 2, 2, 575, 2633, 3, 2, 2, 2, 577, 2641, 3, 2, 2, 2, 579, 2647, 3, 2, 2, 2, 581, 2652, 3, 2, 2, 2, 583, 2657, 3, 2, 2, 2, 585, 2663, 3, 2, 2, 2, 587, 2665, 3, 2, 2, 2, 589, 2667, 3, 2, 2, 2, 591, 2670, 3, 2, 2, 2, 593, 2672, 3, 2, 2, 2, 595, 2675, 3, 2, 2, 2, 597, 2677, 3, 2, 2, 2, 599, 2679, 3, 2, 2, 2, 601, 2681, 3, 2, 2, 2, 603, 2683, 3, 2, 2, 2, 605, 2685, 3, 2, 2, 2, 607, 2688, 3, 2, 2, 2, 609, 2690, 3, 2, 2, 2, 611, 2701, 3, 2, 2, 2, 613, 2715, 3, 2, 2, 2, 615, 2727, 3, 2, 2, 2, 617, 2749, 3, 2, 2, 2, 619, 2775, 3, 2, 2, 2, 621, 2779, 3, 2, 2, 2, 623, 2789, 3, 2, 2, 2, 625, 2797, 3, 2, 2, 2, 627, 2808, 3, 2, 2, 2, 629, 2819, 3, 2, 2, 2, 631, 2828, 3, 2, 2, 2, 633, 2830, 3, 2, 2, 2, 635, 2832, 3, 2, 2, 2, 637, 2849, 3, 2, 2, 2, 639, 2864, 3, 2, 2, 2, 641, 2870, 3, 2, 2, 2, 643, 644, 7, 48, 2, 2, 644, 4, 3, 2, 2, 2, 645, 646, 7, 42, 2, 2, 646, 6, 3, 2, 2, 2, 647, 648, 7, 43, 2, 2, 648, 8, 3, 2, 2, 2, 649, 650, 7, 85, 2, 2, 650, 651, 7, 77, 2, 2, 651, 652, 7, 75, 2, 2, 652, 653, 7, 82, 2, 2, 653, 10, 3, 2, 2, 2, 654, 655, 7, 63, 2, 2, 655, 656, 7, 64, 2, 2, 656, 12, 3, 2, 2, 2, 657, 658, 7, 47, 2, 2, 658, 659, 7, 64, 2, 2, 659, 14, 3, 2, 2, 2, 660, 661, 7, 93, 2, 2, 661, 16, 3, 2, 2, 2, 662, 663, 7, 95, 2, 2, 663, 18, 3, 2, 2, 2, 664, 665, 7, 60, 2, 2, 665, 20, 3, 2, 2, 2, 666, 667, 7, 126, 2, 2, 667, 22, 3, 2, 2, 2, 668, 669, 7, 96, 2, 2, 669, 24, 3, 2, 2, 2, 670, 671, 7, 38, 2, 2, 671, 26, 3, 2, 2, 2, 672, 673, 7, 125, 2, 2, 673, 674, 7, 47, 2, 2, 674, 28, 3, 2, 2, 2, 675, 676, 7, 47, 2, 2, 676, 677, 7, 127, 2, 2, 677, 30, 3, 2, 2, 2, 678, 679, 7, 125, 2, 2, 679, 32, 3, 2, 2, 2, 680, 681, 7, 127, 2, 2, 681, 34, 3, 2, 2, 2, 682, 683, 7, 67, 2, 2, 683, 684, 7, 68, 2, 2, 684, 685, 7, 85, 2, 2, 685, 686, 7, 71, 2, 2, 686, 687, 7, 80, 2, 2, 687, 688, 7, 86, 2, 2, 688, 36, 3, 2, 2, 2, 689, 690, 7, 67, 2, 2, 690, 691, 7, 70, 2, 2, 691, 692, 7, 70, 2, 2, 692, 38, 3, 2, 2, 2, 693, 694, 7, 67, 2, 2, 694, 695, 7, 70, 2, 2, 695, 696, 7, 79, 2, 2, 696, 697, 7, 75, 2, 2, 697, 698, 7, 80, 2, 2, 698, 40, 3, 2, 2, 2, 699, 700, 7, 67, 2, 2, 700, 701, 7, 72, 2, 2, 701, 702, 7, 86, 2, 2, 702, 703, 7, 71, 2, 2, 703, 704, 7, 84, 2, 2, 704, 42, 3, 2, 2, 2, 705, 706, 7, 67, 2, 2, 706, 707, 7, 78, 2, 2, 707, 708, 7, 78, 2, 2, 708, 44, 3, 2, 2, 2, 709, 710, 7, 67, 2, 2, 710, 711, 7, 78, 2, 2, 711, 712, 7, 86, 2, 2, 712, 713, 7, 71, 2, 2, 713, 714, 7, 84, 2, 2, 714, 46, 3, 2, 2, 2, 715, 716, 7, 67, 2, 2, 716, 717, 7, 80, 2, 2, 717, 718, 7, 67, 2, 2, 718, 719, 7, 78, 2, 2, 719, 720, 7, 91, 2, 2, 720, 721, 7, 92, 2, 2, 721, 722, 7, 71, 2, 2, 722, 48, 3, 2, 2, 2, 723, 724, 7, 67, 2, 2, 724, 725, 7, 80, 2, 2, 725, 726, 7, 70, 2, 2, 726, 50, 3, 2, 2, 2, 727, 728, 7, 67, 2, 2, 728, 729, 7, 80, 2, 2, 729, 730, 7, 91, 2, 2, 730, 52, 3, 2, 2, 2, 731, 732, 7, 67, 2, 2, 732, 733, 7, 84, 2, 2, 733, 734, 7, 84, 2, 2, 734, 735, 7, 67, 2, 2, 735, 736, 7, 91, 2, 2, 736, 54, 3, 2, 2, 2, 737, 738, 7, 67, 2, 2, 738, 739, 7, 85, 2, 2, 739, 56, 3, 2, 2, 2, 740, 741, 7, 67, 2, 2, 741, 742, 7, 85, 2, 2, 742, 743, 7, 69, 2, 2, 743, 58, 3, 2, 2, 2, 744, 745, 7, 67, 2, 2, 745, 746, 7, 86, 2, 2, 746, 60, 3, 2, 2, 2, 747, 748, 7, 67, 2, 2, 748, 749, 7, 87, 2, 2, 749, 750, 7, 86, 2, 2, 750, 751, 7, 74, 2, 2, 751, 752, 7, 81, 2, 2, 752, 753, 7, 84, 2, 2, 753, 754, 7, 75, 2, 2, 754, 755, 7, 92, 2, 2, 755, 756, 7, 67, 2, 2, 756, 757, 7, 86, 2, 2, 757, 758, 7, 75, 2, 2, 758, 759, 7, 81, 2, 2, 759, 760, 7, 80, 2, 2, 760, 62, 3, 2, 2, 2, 761, 762, 7, 68, 2, 2, 762, 763, 7, 71, 2, 2, 763, 764, 7, 84, 2, 2, 764, 765, 7, 80, 2, 2, 765, 766, 7, 81, 2, 2, 766, 767, 7, 87, 2, 2, 767, 768, 7, 78, 2, 2, 768, 769, 7, 78, 2, 2, 769, 770, 7, 75, 2, 2, 770, 64, 3, 2, 2, 2, 771, 772, 7, 68, 2, 2, 772, 773, 7, 71, 2, 2, 773, 774, 7, 86, 2, 2, 774, 775, 7, 89, 2, 2, 775, 776, 7, 71, 2, 2, 776, 777, 7, 71, 2, 2, 777, 778, 7, 80, 2, 2, 778, 66, 3, 2, 2, 2, 779, 780, 7, 68, 2, 2, 780, 781, 7, 81, 2, 2, 781, 782, 7, 86, 2, 2, 782, 783, 7, 74, 2, 2, 783, 68, 3, 2, 2, 2, 784, 785, 7, 68, 2, 2, 785, 786, 7, 91, 2, 2, 786, 70, 3, 2, 2, 2, 787, 788, 7, 69, 2, 2, 788, 789, 7, 67, 2, 2, 789, 790, 7, 78, 2, 2, 790, 791, 7, 78, 2, 2, 791, 72, 3, 2, 2, 2, 792, 793, 7, 69, 2, 2, 793, 794, 7, 67, 2, 2, 794, 795, 7, 85, 2, 2, 795, 796, 7, 69, 2, 2, 796, 797, 7, 67, 2, 2, 797, 798, 7, 70, 2, 2, 798, 799, 7, 71, 2, 2, 799, 74, 3, 2, 2, 2, 800, 801, 7, 69, 2, 2, 801, 802, 7, 67, 2, 2, 802, 803, 7, 85, 2, 2, 803, 804, 7, 71, 2, 2, 804, 76, 3, 2, 2, 2, 805, 806, 7, 69, 2, 2, 806, 807, 7, 67, 2, 2, 807, 808, 7, 85, 2, 2, 808, 809, 7, 86, 2, 2, 809, 78, 3, 2, 2, 2, 810, 811, 7, 69, 2, 2, 811, 812, 7, 67, 2, 2, 812, 813, 7, 86, 2, 2, 813, 814, 7, 67, 2, 2, 814, 815, 7, 78, 2, 2, 815, 816, 7, 81, 2, 2, 816, 817, 7, 73, 2, 2, 817, 818, 7, 85, 2, 2, 818, 80, 3, 2, 2, 2, 819, 820, 7, 69, 2, 2, 820, 821, 7, 81, 2, 2, 821, 822, 7, 78, 2, 2, 822, 823, 7, 87, 2, 2, 823, 824, 7, 79, 2, 2, 824, 825, 7, 80, 2, 2, 825, 82, 3, 2, 2, 2, 826, 827, 7, 69, 2, 2, 827, 828, 7, 81, 2, 2, 828, 829, 7, 78, 2, 2, 829, 830, 7, 87, 2, 2, 830, 831, 7, 79, 2, 2, 831, 832, 7, 80, 2, 2, 832, 833, 7, 85, 2, 2, 833, 84, 3, 2, 2, 2, 834, 835, 7, 46, 2, 2, 835, 86, 3, 2, 2, 2, 836, 837, 7, 69, 2, 2, 837, 838, 7, 81, 2, 2, 838, 839, 7, 79, 2, 2, 839, 840, 7, 79, 2, 2, 840, 841, 7, 71, 2, 2, 841, 842, 7, 80, 2, 2, 842, 843, 7, 86, 2, 2, 843, 88, 3, 2, 2, 2, 844, 845, 7, 69, 2, 2, 845, 846, 7, 81, 2, 2, 846, 847, 7, 79, 2, 2, 847, 848, 7, 79, 2, 2, 848, 849, 7, 75, 2, 2, 849, 850, 7, 86, 2, 2, 850, 90, 3, 2, 2, 2, 851, 852, 7, 69, 2, 2, 852, 853, 7, 81, 2, 2, 853, 854, 7, 79, 2, 2, 854, 855, 7, 79, 2, 2, 855, 856, 7, 75, 2, 2, 856, 857, 7, 86, 2, 2, 857, 858, 7, 86, 2, 2, 858, 859, 7, 71, 2, 2, 859, 860, 7, 70, 2, 2, 860, 92, 3, 2, 2, 2, 861, 862, 7, 69, 2, 2, 862, 863, 7, 81, 2, 2, 863, 864, 7, 80, 2, 2, 864, 865, 7, 70, 2, 2, 865, 866, 7, 75, 2, 2, 866, 867, 7, 86, 2, 2, 867, 868, 7, 75, 2, 2, 868, 869, 7, 81, 2, 2, 869, 870, 7, 80, 2, 2, 870, 871, 7, 67, 2, 2, 871, 872, 7, 78, 2, 2, 872, 94, 3, 2, 2, 2, 873, 874, 7, 69, 2, 2, 874, 875, 7, 81, 2, 2, 875, 876, 7, 80, 2, 2, 876, 877, 7, 85, 2, 2, 877, 878, 7, 86, 2, 2, 878, 879, 7, 84, 2, 2, 879, 880, 7, 67, 2, 2, 880, 881, 7, 75, 2, 2, 881, 882, 7, 80, 2, 2, 882, 883, 7, 86, 2, 2, 883, 96, 3, 2, 2, 2, 884, 885, 7, 69, 2, 2, 885, 886, 7, 81, 2, 2, 886, 887, 7, 87, 2, 2, 887, 888, 7, 80, 2, 2, 888, 889, 7, 86, 2, 2, 889, 98, 3, 2, 2, 2, 890, 891, 7, 69, 2, 2, 891, 892, 7, 81, 2, 2, 892, 893, 7, 82, 2, 2, 893, 894, 7, 67, 2, 2, 894, 895, 7, 84, 2, 2, 895, 896, 7, 86, 2, 2, 896, 897, 7, 75, 2, 2, 897, 898, 7, 86, 2, 2, 898, 899, 7, 75, 2, 2, 899, 900, 7, 81, 2, 2, 900, 901, 7, 80, 2, 2, 901, 100, 3, 2, 2, 2, 902, 903, 7, 69, 2, 2, 903, 904, 7, 84, 2, 2, 904, 905, 7, 71, 2, 2, 905, 906, 7, 67, 2, 2, 906, 907, 7, 86, 2, 2, 907, 908, 7, 71, 2, 2, 908, 102, 3, 2, 2, 2, 909, 910, 7, 69, 2, 2, 910, 911, 7, 84, 2, 2, 911, 912, 7, 81, 2, 2, 912, 913, 7, 85, 2, 2, 913, 914, 7, 85, 2, 2, 914, 104, 3, 2, 2, 2, 915, 916, 7, 69, 2, 2, 916, 917, 7, 87, 2, 2, 917, 918, 7, 68, 2, 2, 918, 919, 7, 71, 2, 2, 919, 106, 3, 2, 2, 2, 920, 921, 7, 69, 2, 2, 921, 922, 7, 87, 2, 2, 922, 923, 7, 84, 2, 2, 923, 924, 7, 84, 2, 2, 924, 925, 7, 71, 2, 2, 925, 926, 7, 80, 2, 2, 926, 927, 7, 86, 2, 2, 927, 108, 3, 2, 2, 2, 928, 929, 7, 69, 2, 2, 929, 930, 7, 87, 2, 2, 930, 931, 7, 84, 2, 2, 931, 932, 7, 84, 2, 2, 932, 933, 7, 71, 2, 2, 933, 934, 7, 80, 2, 2, 934, 935, 7, 86, 2, 2, 935, 936, 7, 97, 2, 2, 936, 937, 7, 69, 2, 2, 937, 938, 7, 67, 2, 2, 938, 939, 7, 86, 2, 2, 939, 940, 7, 67, 2, 2, 940, 941, 7, 78, 2, 2, 941, 942, 7, 81, 2, 2, 942, 943, 7, 73, 2, 2, 943, 110, 3, 2, 2, 2, 944, 945, 7, 69, 2, 2, 945, 946, 7, 87, 2, 2, 946, 947, 7, 84, 2, 2, 947, 948, 7, 84, 2, 2, 948, 949, 7, 71, 2, 2, 949, 950, 7, 80, 2, 2, 950, 951, 7, 86, 2, 2, 951, 952, 7, 97, 2, 2, 952, 953, 7, 70, 2, 2, 953, 954, 7, 67, 2, 2, 954, 955, 7, 86, 2, 2, 955, 956, 7, 71, 2, 2, 956, 112, 3, 2, 2, 2, 957, 958, 7, 69, 2, 2, 958, 959, 7, 87, 2, 2, 959, 960, 7, 84, 2, 2, 960, 961, 7, 84, 2, 2, 961, 962, 7, 71, 2, 2, 962, 963, 7, 80, 2, 2, 963, 964, 7, 86, 2, 2, 964, 965, 7, 97, 2, 2, 965, 966, 7, 82, 2, 2, 966, 967, 7, 67, 2, 2, 967, 968, 7, 86, 2, 2, 968, 969, 7, 74, 2, 2, 969, 114, 3, 2, 2, 2, 970, 971, 7, 69, 2, 2, 971, 972, 7, 87, 2, 2, 972, 973, 7, 84, 2, 2, 973, 974, 7, 84, 2, 2, 974, 975, 7, 71, 2, 2, 975, 976, 7, 80, 2, 2, 976, 977, 7, 86, 2, 2, 977, 978, 7, 97, 2, 2, 978, 979, 7, 84, 2, 2, 979, 980, 7, 81, 2, 2, 980, 981, 7, 78, 2, 2, 981, 982, 7, 71, 2, 2, 982, 116, 3, 2, 2, 2, 983, 984, 7, 69, 2, 2, 984, 985, 7, 87, 2, 2, 985, 986, 7, 84, 2, 2, 986, 987, 7, 84, 2, 2, 987, 988, 7, 71, 2, 2, 988, 989, 7, 80, 2, 2, 989, 990, 7, 86, 2, 2, 990, 991, 7, 97, 2, 2, 991, 992, 7, 85, 2, 2, 992, 993, 7, 69, 2, 2, 993, 994, 7, 74, 2, 2, 994, 995, 7, 71, 2, 2, 995, 996, 7, 79, 2, 2, 996, 997, 7, 67, 2, 2, 997, 118, 3, 2, 2, 2, 998, 999, 7, 69, 2, 2, 999, 1000, 7, 87, 2, 2, 1000, 1001, 7, 84, 2, 2, 1001, 1002, 7, 84, 2, 2, 1002, 1003, 7, 71, 2, 2, 1003, 1004, 7, 80, 2, 2, 1004, 1005, 7, 86, 2, 2, 1005, 1006, 7, 97, 2, 2, 1006, 1007, 7, 86, 2, 2, 1007, 1008, 7, 75, 2, 2, 1008, 1009, 7, 79, 2, 2, 1009, 1010, 7, 71, 2, 2, 1010, 120, 3, 2, 2, 2, 1011, 1012, 7, 69, 2, 2, 1012, 1013, 7, 87, 2, 2, 1013, 1014, 7, 84, 2, 2, 1014, 1015, 7, 84, 2, 2, 1015, 1016, 7, 71, 2, 2, 1016, 1017, 7, 80, 2, 2, 1017, 1018, 7, 86, 2, 2, 1018, 1019, 7, 97, 2, 2, 1019, 1020, 7, 86, 2, 2, 1020, 1021, 7, 75, 2, 2, 1021, 1022, 7, 79, 2, 2, 1022, 1023, 7, 71, 2, 2, 1023, 1024, 7, 85, 2, 2, 1024, 1025, 7, 86, 2, 2, 1025, 1026, 7, 67, 2, 2, 1026, 1027, 7, 79, 2, 2, 1027, 1028, 7, 82, 2, 2, 1028, 122, 3, 2, 2, 2, 1029, 1030, 7, 69, 2, 2, 1030, 1031, 7, 87, 2, 2, 1031, 1032, 7, 84, 2, 2, 1032, 1033, 7, 84, 2, 2, 1033, 1034, 7, 71, 2, 2, 1034, 1035, 7, 80, 2, 2, 1035, 1036, 7, 86, 2, 2, 1036, 1037, 7, 97, 2, 2, 1037, 1038, 7, 87, 2, 2, 1038, 1039, 7, 85, 2, 2, 1039, 1040, 7, 71, 2, 2, 1040, 1041, 7, 84, 2, 2, 1041, 124, 3, 2, 2, 2, 1042, 1043, 7, 70, 2, 2, 1043, 1044, 7, 67, 2, 2, 1044, 1045, 7, 86, 2, 2, 1045, 1046, 7, 67, 2, 2, 1046, 126, 3, 2, 2, 2, 1047, 1048, 7, 70, 2, 2, 1048, 1049, 7, 67, 2, 2, 1049, 1050, 7, 86, 2, 2, 1050, 1051, 7, 71, 2, 2, 1051, 128, 3, 2, 2, 2, 1052, 1053, 7, 70, 2, 2, 1053, 1054, 7, 67, 2, 2, 1054, 1055, 7, 91, 2, 2, 1055, 130, 3, 2, 2, 2, 1056, 1057, 7, 70, 2, 2, 1057, 1058, 7, 71, 2, 2, 1058, 1059, 7, 67, 2, 2, 1059, 1060, 7, 78, 2, 2, 1060, 1061, 7, 78, 2, 2, 1061, 1062, 7, 81, 2, 2, 1062, 1063, 7, 69, 2, 2, 1063, 1064, 7, 67, 2, 2, 1064, 1065, 7, 86, 2, 2, 1065, 1066, 7, 71, 2, 2, 1066, 132, 3, 2, 2, 2, 1067, 1068, 7, 70, 2, 2, 1068, 1069, 7, 71, 2, 2, 1069, 1070, 7, 72, 2, 2, 1070, 1071, 7, 67, 2, 2, 1071, 1072, 7, 87, 2, 2, 1072, 1073, 7, 78, 2, 2, 1073, 1074, 7, 86, 2, 2, 1074, 134, 3, 2, 2, 2, 1075, 1076, 7, 70, 2, 2, 1076, 1077, 7, 71, 2, 2, 1077, 1078, 7, 72, 2, 2, 1078, 1079, 7, 75, 2, 2, 1079, 1080, 7, 80, 2, 2, 1080, 1081, 7, 71, 2, 2, 1081, 136, 3, 2, 2, 2, 1082, 1083, 7, 70, 2, 2, 1083, 1084, 7, 71, 2, 2, 1084, 1085, 7, 72, 2, 2, 1085, 1086, 7, 75, 2, 2, 1086, 1087, 7, 80, 2, 2, 1087, 1088, 7, 71, 2, 2, 1088, 1089, 7, 84, 2, 2, 1089, 138, 3, 2, 2, 2, 1090, 1091, 7, 70, 2, 2, 1091, 1092, 7, 71, 2, 2, 1092, 1093, 7, 78, 2, 2, 1093, 1094, 7, 71, 2, 2, 1094, 1095, 7, 86, 2, 2, 1095, 1096, 7, 71, 2, 2, 1096, 140, 3, 2, 2, 2, 1097, 1098, 7, 70, 2, 2, 1098, 1099, 7, 71, 2, 2, 1099, 1100, 7, 80, 2, 2, 1100, 1101, 7, 91, 2, 2, 1101, 142, 3, 2, 2, 2, 1102, 1103, 7, 70, 2, 2, 1103, 1104, 7, 71, 2, 2, 1104, 1105, 7, 85, 2, 2, 1105, 1106, 7, 69, 2, 2, 1106, 144, 3, 2, 2, 2, 1107, 1108, 7, 70, 2, 2, 1108, 1109, 7, 71, 2, 2, 1109, 1110, 7, 85, 2, 2, 1110, 1111, 7, 69, 2, 2, 1111, 1112, 7, 84, 2, 2, 1112, 1113, 7, 75, 2, 2, 1113, 1114, 7, 68, 2, 2, 1114, 1115, 7, 71, 2, 2, 1115, 146, 3, 2, 2, 2, 1116, 1117, 7, 70, 2, 2, 1117, 1118, 7, 71, 2, 2, 1118, 1119, 7, 85, 2, 2, 1119, 1120, 7, 69, 2, 2, 1120, 1121, 7, 84, 2, 2, 1121, 1122, 7, 75, 2, 2, 1122, 1123, 7, 82, 2, 2, 1123, 1124, 7, 86, 2, 2, 1124, 1125, 7, 81, 2, 2, 1125, 1126, 7, 84, 2, 2, 1126, 148, 3, 2, 2, 2, 1127, 1128, 7, 70, 2, 2, 1128, 1129, 7, 75, 2, 2, 1129, 1130, 7, 85, 2, 2, 1130, 1131, 7, 86, 2, 2, 1131, 1132, 7, 75, 2, 2, 1132, 1133, 7, 80, 2, 2, 1133, 1134, 7, 69, 2, 2, 1134, 1135, 7, 86, 2, 2, 1135, 150, 3, 2, 2, 2, 1136, 1137, 7, 70, 2, 2, 1137, 1138, 7, 75, 2, 2, 1138, 1139, 7, 85, 2, 2, 1139, 1140, 7, 86, 2, 2, 1140, 1141, 7, 84, 2, 2, 1141, 1142, 7, 75, 2, 2, 1142, 1143, 7, 68, 2, 2, 1143, 1144, 7, 87, 2, 2, 1144, 1145, 7, 86, 2, 2, 1145, 1146, 7, 71, 2, 2, 1146, 1147, 7, 70, 2, 2, 1147, 152, 3, 2, 2, 2, 1148, 1149, 7, 70, 2, 2, 1149, 1150, 7, 81, 2, 2, 1150, 1151, 7, 87, 2, 2, 1151, 1152, 7, 68, 2, 2, 1152, 1153, 7, 78, 2, 2, 1153, 1154, 7, 71, 2, 2, 1154, 154, 3, 2, 2, 2, 1155, 1156, 7, 70, 2, 2, 1156, 1157, 7, 84, 2, 2, 1157, 1158, 7, 81, 2, 2, 1158, 1159, 7, 82, 2, 2, 1159, 156, 3, 2, 2, 2, 1160, 1161, 7, 71, 2, 2, 1161, 1162, 7, 78, 2, 2, 1162, 1163, 7, 85, 2, 2, 1163, 1164, 7, 71, 2, 2, 1164, 158, 3, 2, 2, 2, 1165, 1166, 7, 71, 2, 2, 1166, 1167, 7, 79, 2, 2, 1167, 1168, 7, 82, 2, 2, 1168, 1169, 7, 86, 2, 2, 1169, 1170, 7, 91, 2, 2, 1170, 160, 3, 2, 2, 2, 1171, 1172, 7, 71, 2, 2, 1172, 1173, 7, 80, 2, 2, 1173, 1174, 7, 69, 2, 2, 1174, 1175, 7, 81, 2, 2, 1175, 1176, 7, 70, 2, 2, 1176, 1177, 7, 75, 2, 2, 1177, 1178, 7, 80, 2, 2, 1178, 1179, 7, 73, 2, 2, 1179, 162, 3, 2, 2, 2, 1180, 1181, 7, 71, 2, 2, 1181, 1182, 7, 80, 2, 2, 1182, 1183, 7, 70, 2, 2, 1183, 164, 3, 2, 2, 2, 1184, 1185, 7, 71, 2, 2, 1185, 1186, 7, 84, 2, 2, 1186, 1187, 7, 84, 2, 2, 1187, 1188, 7, 81, 2, 2, 1188, 1189, 7, 84, 2, 2, 1189, 166, 3, 2, 2, 2, 1190, 1191, 7, 71, 2, 2, 1191, 1192, 7, 85, 2, 2, 1192, 1193, 7, 69, 2, 2, 1193, 1194, 7, 67, 2, 2, 1194, 1195, 7, 82, 2, 2, 1195, 1196, 7, 71, 2, 2, 1196, 168, 3, 2, 2, 2, 1197, 1198, 7, 71, 2, 2, 1198, 1199, 7, 90, 2, 2, 1199, 1200, 7, 69, 2, 2, 1200, 1201, 7, 71, 2, 2, 1201, 1202, 7, 82, 2, 2, 1202, 1203, 7, 86, 2, 2, 1203, 170, 3, 2, 2, 2, 1204, 1205, 7, 71, 2, 2, 1205, 1206, 7, 90, 2, 2, 1206, 1207, 7, 69, 2, 2, 1207, 1208, 7, 78, 2, 2, 1208, 1209, 7, 87, 2, 2, 1209, 1210, 7, 70, 2, 2, 1210, 1211, 7, 75, 2, 2, 1211, 1212, 7, 80, 2, 2, 1212, 1213, 7, 73, 2, 2, 1213, 172, 3, 2, 2, 2, 1214, 1215, 7, 71, 2, 2, 1215, 1216, 7, 90, 2, 2, 1216, 1217, 7, 71, 2, 2, 1217, 1218, 7, 69, 2, 2, 1218, 1219, 7, 87, 2, 2, 1219, 1220, 7, 86, 2, 2, 1220, 1221, 7, 71, 2, 2, 1221, 174, 3, 2, 2, 2, 1222, 1223, 7, 71, 2, 2, 1223, 1224, 7, 90, 2, 2, 1224, 1225, 7, 75, 2, 2, 1225, 1226, 7, 85, 2, 2, 1226, 1227, 7, 86, 2, 2, 1227, 1228, 7, 85, 2, 2, 1228, 176, 3, 2, 2, 2, 1229, 1230, 7, 71, 2, 2, 1230, 1231, 7, 90, 2, 2, 1231, 1232, 7, 82, 2, 2, 1232, 1233, 7, 78, 2, 2, 1233, 1234, 7, 67, 2, 2, 1234, 1235, 7, 75, 2, 2, 1235, 1236, 7, 80, 2, 2, 1236, 178, 3, 2, 2, 2, 1237, 1238, 7, 71, 2, 2, 1238, 1239, 7, 90, 2, 2, 1239, 1240, 7, 86, 2, 2, 1240, 1241, 7, 84, 2, 2, 1241, 1242, 7, 67, 2, 2, 1242, 1243, 7, 69, 2, 2, 1243, 1244, 7, 86, 2, 2, 1244, 180, 3, 2, 2, 2, 1245, 1246, 7, 72, 2, 2, 1246, 1247, 7, 67, 2, 2, 1247, 1248, 7, 78, 2, 2, 1248, 1249, 7, 85, 2, 2, 1249, 1250, 7, 71, 2, 2, 1250, 182, 3, 2, 2, 2, 1251, 1252, 7, 72, 2, 2, 1252, 1253, 7, 71, 2, 2, 1253, 1254, 7, 86, 2, 2, 1254, 1255, 7, 69, 2, 2, 1255, 1256, 7, 74, 2, 2, 1256, 184, 3, 2, 2, 2, 1257, 1258, 7, 72, 2, 2, 1258, 1259, 7, 75, 2, 2, 1259, 1260, 7, 78, 2, 2, 1260, 1261, 7, 86, 2, 2, 1261, 1262, 7, 71, 2, 2, 1262, 1263, 7, 84, 2, 2, 1263, 186, 3, 2, 2, 2, 1264, 1265, 7, 72, 2, 2, 1265, 1266, 7, 75, 2, 2, 1266, 1267, 7, 80, 2, 2, 1267, 1268, 7, 67, 2, 2, 1268, 1269, 7, 78, 2, 2, 1269, 188, 3, 2, 2, 2, 1270, 1271, 7, 72, 2, 2, 1271, 1272, 7, 75, 2, 2, 1272, 1273, 7, 84, 2, 2, 1273, 1274, 7, 85, 2, 2, 1274, 1275, 7, 86, 2, 2, 1275, 190, 3, 2, 2, 2, 1276, 1277, 7, 72, 2, 2, 1277, 1278, 7, 81, 2, 2, 1278, 1279, 7, 78, 2, 2, 1279, 1280, 7, 78, 2, 2, 1280, 1281, 7, 81, 2, 2, 1281, 1282, 7, 89, 2, 2, 1282, 1283, 7, 75, 2, 2, 1283, 1284, 7, 80, 2, 2, 1284, 1285, 7, 73, 2, 2, 1285, 192, 3, 2, 2, 2, 1286, 1287, 7, 72, 2, 2, 1287, 1288, 7, 81, 2, 2, 1288, 1289, 7, 84, 2, 2, 1289, 194, 3, 2, 2, 2, 1290, 1291, 7, 72, 2, 2, 1291, 1292, 7, 81, 2, 2, 1292, 1293, 7, 84, 2, 2, 1293, 1294, 7, 79, 2, 2, 1294, 1295, 7, 67, 2, 2, 1295, 1296, 7, 86, 2, 2, 1296, 196, 3, 2, 2, 2, 1297, 1298, 7, 72, 2, 2, 1298, 1299, 7, 84, 2, 2, 1299, 1300, 7, 81, 2, 2, 1300, 1301, 7, 79, 2, 2, 1301, 198, 3, 2, 2, 2, 1302, 1303, 7, 72, 2, 2, 1303, 1304, 7, 87, 2, 2, 1304, 1305, 7, 78, 2, 2, 1305, 1306, 7, 78, 2, 2, 1306, 200, 3, 2, 2, 2, 1307, 1308, 7, 72, 2, 2, 1308, 1309, 7, 87, 2, 2, 1309, 1310, 7, 80, 2, 2, 1310, 1311, 7, 69, 2, 2, 1311, 1312, 7, 86, 2, 2, 1312, 1313, 7, 75, 2, 2, 1313, 1314, 7, 81, 2, 2, 1314, 1315, 7, 80, 2, 2, 1315, 1316, 7, 85, 2, 2, 1316, 202, 3, 2, 2, 2, 1317, 1318, 7, 73, 2, 2, 1318, 1319, 7, 84, 2, 2, 1319, 1320, 7, 67, 2, 2, 1320, 1321, 7, 69, 2, 2, 1321, 1322, 7, 71, 2, 2, 1322, 204, 3, 2, 2, 2, 1323, 1324, 7, 73, 2, 2, 1324, 1325, 7, 84, 2, 2, 1325, 1326, 7, 67, 2, 2, 1326, 1327, 7, 80, 2, 2, 1327, 1328, 7, 86, 2, 2, 1328, 206, 3, 2, 2, 2, 1329, 1330, 7, 73, 2, 2, 1330, 1331, 7, 84, 2, 2, 1331, 1332, 7, 67, 2, 2, 1332, 1333, 7, 80, 2, 2, 1333, 1334, 7, 86, 2, 2, 1334, 1335, 7, 71, 2, 2, 1335, 1336, 7, 70, 2, 2, 1336, 208, 3, 2, 2, 2, 1337, 1338, 7, 73, 2, 2, 1338, 1339, 7, 84, 2, 2, 1339, 1340, 7, 67, 2, 2, 1340, 1341, 7, 80, 2, 2, 1341, 1342, 7, 86, 2, 2, 1342, 1343, 7, 85, 2, 2, 1343, 210, 3, 2, 2, 2, 1344, 1345, 7, 73, 2, 2, 1345, 1346, 7, 84, 2, 2, 1346, 1347, 7, 67, 2, 2, 1347, 1348, 7, 82, 2, 2, 1348, 1349, 7, 74, 2, 2, 1349, 1350, 7, 88, 2, 2, 1350, 1351, 7, 75, 2, 2, 1351, 1352, 7, 92, 2, 2, 1352, 212, 3, 2, 2, 2, 1353, 1354, 7, 73, 2, 2, 1354, 1355, 7, 84, 2, 2, 1355, 1356, 7, 81, 2, 2, 1356, 1357, 7, 87, 2, 2, 1357, 1358, 7, 82, 2, 2, 1358, 214, 3, 2, 2, 2, 1359, 1360, 7, 73, 2, 2, 1360, 1361, 7, 84, 2, 2, 1361, 1362, 7, 81, 2, 2, 1362, 1363, 7, 87, 2, 2, 1363, 1364, 7, 82, 2, 2, 1364, 1365, 7, 75, 2, 2, 1365, 1366, 7, 80, 2, 2, 1366, 1367, 7, 73, 2, 2, 1367, 216, 3, 2, 2, 2, 1368, 1369, 7, 73, 2, 2, 1369, 1370, 7, 84, 2, 2, 1370, 1371, 7, 81, 2, 2, 1371, 1372, 7, 87, 2, 2, 1372, 1373, 7, 82, 2, 2, 1373, 1374, 7, 85, 2, 2, 1374, 218, 3, 2, 2, 2, 1375, 1376, 7, 74, 2, 2, 1376, 1377, 7, 67, 2, 2, 1377, 1378, 7, 88, 2, 2, 1378, 1379, 7, 75, 2, 2, 1379, 1380, 7, 80, 2, 2, 1380, 1381, 7, 73, 2, 2, 1381, 220, 3, 2, 2, 2, 1382, 1383, 7, 74, 2, 2, 1383, 1384, 7, 81, 2, 2, 1384, 1385, 7, 87, 2, 2, 1385, 1386, 7, 84, 2, 2, 1386, 222, 3, 2, 2, 2, 1387, 1388, 7, 75, 2, 2, 1388, 1389, 7, 72, 2, 2, 1389, 224, 3, 2, 2, 2, 1390, 1391, 7, 75, 2, 2, 1391, 1392, 7, 73, 2, 2, 1392, 1393, 7, 80, 2, 2, 1393, 1394, 7, 81, 2, 2, 1394, 1395, 7, 84, 2, 2, 1395, 1396, 7, 71, 2, 2, 1396, 226, 3, 2, 2, 2, 1397, 1398, 7, 75, 2, 2, 1398, 1399, 7, 80, 2, 2, 1399, 228, 3, 2, 2, 2, 1400, 1401, 7, 75, 2, 2, 1401, 1402, 7, 80, 2, 2, 1402, 1403, 7, 69, 2, 2, 1403, 1404, 7, 78, 2, 2, 1404, 1405, 7, 87, 2, 2, 1405, 1406, 7, 70, 2, 2, 1406, 1407, 7, 75, 2, 2, 1407, 1408, 7, 80, 2, 2, 1408, 1409, 7, 73, 2, 2, 1409, 230, 3, 2, 2, 2, 1410, 1411, 7, 75, 2, 2, 1411, 1412, 7, 80, 2, 2, 1412, 1413, 7, 75, 2, 2, 1413, 1414, 7, 86, 2, 2, 1414, 1415, 7, 75, 2, 2, 1415, 1416, 7, 67, 2, 2, 1416, 1417, 7, 78, 2, 2, 1417, 232, 3, 2, 2, 2, 1418, 1419, 7, 75, 2, 2, 1419, 1420, 7, 80, 2, 2, 1420, 1421, 7, 80, 2, 2, 1421, 1422, 7, 71, 2, 2, 1422, 1423, 7, 84, 2, 2, 1423, 234, 3, 2, 2, 2, 1424, 1425, 7, 75, 2, 2, 1425, 1426, 7, 80, 2, 2, 1426, 1427, 7, 82, 2, 2, 1427, 1428, 7, 87, 2, 2, 1428, 1429, 7, 86, 2, 2, 1429, 236, 3, 2, 2, 2, 1430, 1431, 7, 75, 2, 2, 1431, 1432, 7, 80, 2, 2, 1432, 1433, 7, 85, 2, 2, 1433, 1434, 7, 71, 2, 2, 1434, 1435, 7, 84, 2, 2, 1435, 1436, 7, 86, 2, 2, 1436, 238, 3, 2, 2, 2, 1437, 1438, 7, 75, 2, 2, 1438, 1439, 7, 80, 2, 2, 1439, 1440, 7, 86, 2, 2, 1440, 1441, 7, 71, 2, 2, 1441, 1442, 7, 84, 2, 2, 1442, 1443, 7, 85, 2, 2, 1443, 1444, 7, 71, 2, 2, 1444, 1445, 7, 69, 2, 2, 1445, 1446, 7, 86, 2, 2, 1446, 240, 3, 2, 2, 2, 1447, 1448, 7, 75, 2, 2, 1448, 1449, 7, 80, 2, 2, 1449, 1450, 7, 86, 2, 2, 1450, 1451, 7, 71, 2, 2, 1451, 1452, 7, 84, 2, 2, 1452, 1453, 7, 88, 2, 2, 1453, 1454, 7, 67, 2, 2, 1454, 1455, 7, 78, 2, 2, 1455, 242, 3, 2, 2, 2, 1456, 1457, 7, 75, 2, 2, 1457, 1458, 7, 80, 2, 2, 1458, 1459, 7, 86, 2, 2, 1459, 1460, 7, 81, 2, 2, 1460, 244, 3, 2, 2, 2, 1461, 1462, 7, 75, 2, 2, 1462, 1463, 7, 80, 2, 2, 1463, 1464, 7, 88, 2, 2, 1464, 1465, 7, 81, 2, 2, 1465, 1466, 7, 77, 2, 2, 1466, 1467, 7, 71, 2, 2, 1467, 1468, 7, 84, 2, 2, 1468, 246, 3, 2, 2, 2, 1469, 1470, 7, 75, 2, 2, 1470, 1471, 7, 81, 2, 2, 1471, 248, 3, 2, 2, 2, 1472, 1473, 7, 75, 2, 2, 1473, 1474, 7, 85, 2, 2, 1474, 250, 3, 2, 2, 2, 1475, 1476, 7, 75, 2, 2, 1476, 1477, 7, 85, 2, 2, 1477, 1478, 7, 81, 2, 2, 1478, 1479, 7, 78, 2, 2, 1479, 1480, 7, 67, 2, 2, 1480, 1481, 7, 86, 2, 2, 1481, 1482, 7, 75, 2, 2, 1482, 1483, 7, 81, 2, 2, 1483, 1484, 7, 80, 2, 2, 1484, 252, 3, 2, 2, 2, 1485, 1486, 7, 76, 2, 2, 1486, 1487, 7, 81, 2, 2, 1487, 1488, 7, 75, 2, 2, 1488, 1489, 7, 80, 2, 2, 1489, 254, 3, 2, 2, 2, 1490, 1491, 7, 76, 2, 2, 1491, 1492, 7, 85, 2, 2, 1492, 1493, 7, 81, 2, 2, 1493, 1494, 7, 80, 2, 2, 1494, 256, 3, 2, 2, 2, 1495, 1496, 7, 76, 2, 2, 1496, 1497, 7, 85, 2, 2, 1497, 1498, 7, 81, 2, 2, 1498, 1499, 7, 80, 2, 2, 1499, 1500, 7, 97, 2, 2, 1500, 1501, 7, 67, 2, 2, 1501, 1502, 7, 84, 2, 2, 1502, 1503, 7, 84, 2, 2, 1503, 1504, 7, 67, 2, 2, 1504, 1505, 7, 91, 2, 2, 1505, 258, 3, 2, 2, 2, 1506, 1507, 7, 76, 2, 2, 1507, 1508, 7, 85, 2, 2, 1508, 1509, 7, 81, 2, 2, 1509, 1510, 7, 80, 2, 2, 1510, 1511, 7, 97, 2, 2, 1511, 1512, 7, 71, 2, 2, 1512, 1513, 7, 90, 2, 2, 1513, 1514, 7, 75, 2, 2, 1514, 1515, 7, 85, 2, 2, 1515, 1516, 7, 86, 2, 2, 1516, 1517, 7, 85, 2, 2, 1517, 260, 3, 2, 2, 2, 1518, 1519, 7, 76, 2, 2, 1519, 1520, 7, 85, 2, 2, 1520, 1521, 7, 81, 2, 2, 1521, 1522, 7, 80, 2, 2, 1522, 1523, 7, 97, 2, 2, 1523, 1524, 7, 81, 2, 2, 1524, 1525, 7, 68, 2, 2, 1525, 1526, 7, 76, 2, 2, 1526, 1527, 7, 71, 2, 2, 1527, 1528, 7, 69, 2, 2, 1528, 1529, 7, 86, 2, 2, 1529, 262, 3, 2, 2, 2, 1530, 1531, 7, 76, 2, 2, 1531, 1532, 7, 85, 2, 2, 1532, 1533, 7, 81, 2, 2, 1533, 1534, 7, 80, 2, 2, 1534, 1535, 7, 97, 2, 2, 1535, 1536, 7, 83, 2, 2, 1536, 1537, 7, 87, 2, 2, 1537, 1538, 7, 71, 2, 2, 1538, 1539, 7, 84, 2, 2, 1539, 1540, 7, 91, 2, 2, 1540, 264, 3, 2, 2, 2, 1541, 1542, 7, 76, 2, 2, 1542, 1543, 7, 85, 2, 2, 1543, 1544, 7, 81, 2, 2, 1544, 1545, 7, 80, 2, 2, 1545, 1546, 7, 97, 2, 2, 1546, 1547, 7, 88, 2, 2, 1547, 1548, 7, 67, 2, 2, 1548, 1549, 7, 78, 2, 2, 1549, 1550, 7, 87, 2, 2, 1550, 1551, 7, 71, 2, 2, 1551, 266, 3, 2, 2, 2, 1552, 1553, 7, 77, 2, 2, 1553, 1554, 7, 71, 2, 2, 1554, 1555, 7, 71, 2, 2, 1555, 1556, 7, 82, 2, 2, 1556, 268, 3, 2, 2, 2, 1557, 1558, 7, 77, 2, 2, 1558, 1559, 7, 71, 2, 2, 1559, 1560, 7, 91, 2, 2, 1560, 270, 3, 2, 2, 2, 1561, 1562, 7, 77, 2, 2, 1562, 1563, 7, 71, 2, 2, 1563, 1564, 7, 91, 2, 2, 1564, 1565, 7, 85, 2, 2, 1565, 272, 3, 2, 2, 2, 1566, 1567, 7, 78, 2, 2, 1567, 1568, 7, 67, 2, 2, 1568, 1569, 7, 85, 2, 2, 1569, 1570, 7, 86, 2, 2, 1570, 274, 3, 2, 2, 2, 1571, 1572, 7, 78, 2, 2, 1572, 1573, 7, 67, 2, 2, 1573, 1574, 7, 86, 2, 2, 1574, 1575, 7, 71, 2, 2, 1575, 1576, 7, 84, 2, 2, 1576, 1577, 7, 67, 2, 2, 1577, 1578, 7, 78, 2, 2, 1578, 276, 3, 2, 2, 2, 1579, 1580, 7, 78, 2, 2, 1580, 1581, 7, 71, 2, 2, 1581, 1582, 7, 67, 2, 2, 1582, 1583, 7, 70, 2, 2, 1583, 1584, 7, 75, 2, 2, 1584, 1585, 7, 80, 2, 2, 1585, 1586, 7, 73, 2, 2, 1586, 278, 3, 2, 2, 2, 1587, 1588, 7, 78, 2, 2, 1588, 1589, 7, 71, 2, 2, 1589, 1590, 7, 72, 2, 2, 1590, 1591, 7, 86, 2, 2, 1591, 280, 3, 2, 2, 2, 1592, 1593, 7, 78, 2, 2, 1593, 1594, 7, 71, 2, 2, 1594, 1595, 7, 88, 2, 2, 1595, 1596, 7, 71, 2, 2, 1596, 1597, 7, 78, 2, 2, 1597, 282, 3, 2, 2, 2, 1598, 1599, 7, 78, 2, 2, 1599, 1600, 7, 75, 2, 2, 1600, 1601, 7, 77, 2, 2, 1601, 1602, 7, 71, 2, 2, 1602, 284, 3, 2, 2, 2, 1603, 1604, 7, 78, 2, 2, 1604, 1605, 7, 75, 2, 2, 1605, 1606, 7, 79, 2, 2, 1606, 1607, 7, 75, 2, 2, 1607, 1608, 7, 86, 2, 2, 1608, 286, 3, 2, 2, 2, 1609, 1610, 7, 78, 2, 2, 1610, 1611, 7, 75, 2, 2, 1611, 1612, 7, 85, 2, 2, 1612, 1613, 7, 86, 2, 2, 1613, 1614, 7, 67, 2, 2, 1614, 1615, 7, 73, 2, 2, 1615, 1616, 7, 73, 2, 2, 1616, 288, 3, 2, 2, 2, 1617, 1618, 7, 78, 2, 2, 1618, 1619, 7, 81, 2, 2, 1619, 1620, 7, 69, 2, 2, 1620, 1621, 7, 67, 2, 2, 1621, 1622, 7, 78, 2, 2, 1622, 290, 3, 2, 2, 2, 1623, 1624, 7, 78, 2, 2, 1624, 1625, 7, 81, 2, 2, 1625, 1626, 7, 69, 2, 2, 1626, 1627, 7, 67, 2, 2, 1627, 1628, 7, 78, 2, 2, 1628, 1629, 7, 86, 2, 2, 1629, 1630, 7, 75, 2, 2, 1630, 1631, 7, 79, 2, 2, 1631, 1632, 7, 71, 2, 2, 1632, 292, 3, 2, 2, 2, 1633, 1634, 7, 78, 2, 2, 1634, 1635, 7, 81, 2, 2, 1635, 1636, 7, 69, 2, 2, 1636, 1637, 7, 67, 2, 2, 1637, 1638, 7, 78, 2, 2, 1638, 1639, 7, 86, 2, 2, 1639, 1640, 7, 75, 2, 2, 1640, 1641, 7, 79, 2, 2, 1641, 1642, 7, 71, 2, 2, 1642, 1643, 7, 85, 2, 2, 1643, 1644, 7, 86, 2, 2, 1644, 1645, 7, 67, 2, 2, 1645, 1646, 7, 79, 2, 2, 1646, 1647, 7, 82, 2, 2, 1647, 294, 3, 2, 2, 2, 1648, 1649, 7, 78, 2, 2, 1649, 1650, 7, 81, 2, 2, 1650, 1651, 7, 73, 2, 2, 1651, 1652, 7, 75, 2, 2, 1652, 1653, 7, 69, 2, 2, 1653, 1654, 7, 67, 2, 2, 1654, 1655, 7, 78, 2, 2, 1655, 296, 3, 2, 2, 2, 1656, 1657, 7, 79, 2, 2, 1657, 1658, 7, 67, 2, 2, 1658, 1659, 7, 82, 2, 2, 1659, 298, 3, 2, 2, 2, 1660, 1661, 7, 79, 2, 2, 1661, 1662, 7, 67, 2, 2, 1662, 1663, 7, 86, 2, 2, 1663, 1664, 7, 69, 2, 2, 1664, 1665, 7, 74, 2, 2, 1665, 300, 3, 2, 2, 2, 1666, 1667, 7, 79, 2, 2, 1667, 1668, 7, 67, 2, 2, 1668, 1669, 7, 86, 2, 2, 1669, 1670, 7, 69, 2, 2, 1670, 1671, 7, 74, 2, 2, 1671, 1672, 7, 71, 2, 2, 1672, 1673, 7, 70, 2, 2, 1673, 302, 3, 2, 2, 2, 1674, 1675, 7, 79, 2, 2, 1675, 1676, 7, 67, 2, 2, 1676, 1677, 7, 86, 2, 2, 1677, 1678, 7, 69, 2, 2, 1678, 1679, 7, 74, 2, 2, 1679, 1680, 7, 71, 2, 2, 1680, 1681, 7, 85, 2, 2, 1681, 304, 3, 2, 2, 2, 1682, 1683, 7, 79, 2, 2, 1683, 1684, 7, 67, 2, 2, 1684, 1685, 7, 86, 2, 2, 1685, 1686, 7, 69, 2, 2, 1686, 1687, 7, 74, 2, 2, 1687, 1688, 7, 97, 2, 2, 1688, 1689, 7, 84, 2, 2, 1689, 1690, 7, 71, 2, 2, 1690, 1691, 7, 69, 2, 2, 1691, 1692, 7, 81, 2, 2, 1692, 1693, 7, 73, 2, 2, 1693, 1694, 7, 80, 2, 2, 1694, 1695, 7, 75, 2, 2, 1695, 1696, 7, 92, 2, 2, 1696, 1697, 7, 71, 2, 2, 1697, 306, 3, 2, 2, 2, 1698, 1699, 7, 79, 2, 2, 1699, 1700, 7, 67, 2, 2, 1700, 1701, 7, 86, 2, 2, 1701, 1702, 7, 71, 2, 2, 1702, 1703, 7, 84, 2, 2, 1703, 1704, 7, 75, 2, 2, 1704, 1705, 7, 67, 2, 2, 1705, 1706, 7, 78, 2, 2, 1706, 1707, 7, 75, 2, 2, 1707, 1708, 7, 92, 2, 2, 1708, 1709, 7, 71, 2, 2, 1709, 1710, 7, 70, 2, 2, 1710, 308, 3, 2, 2, 2, 1711, 1712, 7, 79, 2, 2, 1712, 1713, 7, 71, 2, 2, 1713, 1714, 7, 67, 2, 2, 1714, 1715, 7, 85, 2, 2, 1715, 1716, 7, 87, 2, 2, 1716, 1717, 7, 84, 2, 2, 1717, 1718, 7, 71, 2, 2, 1718, 1719, 7, 85, 2, 2, 1719, 310, 3, 2, 2, 2, 1720, 1721, 7, 79, 2, 2, 1721, 1722, 7, 71, 2, 2, 1722, 1723, 7, 84, 2, 2, 1723, 1724, 7, 73, 2, 2, 1724, 1725, 7, 71, 2, 2, 1725, 312, 3, 2, 2, 2, 1726, 1727, 7, 79, 2, 2, 1727, 1728, 7, 75, 2, 2, 1728, 1729, 7, 80, 2, 2, 1729, 1730, 7, 87, 2, 2, 1730, 1731, 7, 86, 2, 2, 1731, 1732, 7, 71, 2, 2, 1732, 314, 3, 2, 2, 2, 1733, 1734, 7, 79, 2, 2, 1734, 1735, 7, 81, 2, 2, 1735, 1736, 7, 80, 2, 2, 1736, 1737, 7, 86, 2, 2, 1737, 1738, 7, 74, 2, 2, 1738, 316, 3, 2, 2, 2, 1739, 1740, 7, 80, 2, 2, 1740, 1741, 7, 67, 2, 2, 1741, 1742, 7, 86, 2, 2, 1742, 1743, 7, 87, 2, 2, 1743, 1744, 7, 84, 2, 2, 1744, 1745, 7, 67, 2, 2, 1745, 1746, 7, 78, 2, 2, 1746, 318, 3, 2, 2, 2, 1747, 1748, 7, 80, 2, 2, 1748, 1749, 7, 71, 2, 2, 1749, 1750, 7, 90, 2, 2, 1750, 1751, 7, 86, 2, 2, 1751, 320, 3, 2, 2, 2, 1752, 1753, 7, 80, 2, 2, 1753, 1754, 7, 72, 2, 2, 1754, 1755, 7, 69, 2, 2, 1755, 322, 3, 2, 2, 2, 1756, 1757, 7, 80, 2, 2, 1757, 1758, 7, 72, 2, 2, 1758, 1759, 7, 70, 2, 2, 1759, 324, 3, 2, 2, 2, 1760, 1761, 7, 80, 2, 2, 1761, 1762, 7, 72, 2, 2, 1762, 1763, 7, 77, 2, 2, 1763, 1764, 7, 69, 2, 2, 1764, 326, 3, 2, 2, 2, 1765, 1766, 7, 80, 2, 2, 1766, 1767, 7, 72, 2, 2, 1767, 1768, 7, 77, 2, 2, 1768, 1769, 7, 70, 2, 2, 1769, 328, 3, 2, 2, 2, 1770, 1771, 7, 80, 2, 2, 1771, 1772, 7, 81, 2, 2, 1772, 330, 3, 2, 2, 2, 1773, 1774, 7, 80, 2, 2, 1774, 1775, 7, 81, 2, 2, 1775, 1776, 7, 80, 2, 2, 1776, 1777, 7, 71, 2, 2, 1777, 332, 3, 2, 2, 2, 1778, 1779, 7, 80, 2, 2, 1779, 1780, 7, 81, 2, 2, 1780, 1781, 7, 84, 2, 2, 1781, 1782, 7, 79, 2, 2, 1782, 1783, 7, 67, 2, 2, 1783, 1784, 7, 78, 2, 2, 1784, 1785, 7, 75, 2, 2, 1785, 1786, 7, 92, 2, 2, 1786, 1787, 7, 71, 2, 2, 1787, 334, 3, 2, 2, 2, 1788, 1789, 7, 80, 2, 2, 1789, 1790, 7, 81, 2, 2, 1790, 1791, 7, 86, 2, 2, 1791, 336, 3, 2, 2, 2, 1792, 1793, 7, 80, 2, 2, 1793, 1794, 7, 87, 2, 2, 1794, 1795, 7, 78, 2, 2, 1795, 1796, 7, 78, 2, 2, 1796, 338, 3, 2, 2, 2, 1797, 1798, 7, 80, 2, 2, 1798, 1799, 7, 87, 2, 2, 1799, 1800, 7, 78, 2, 2, 1800, 1801, 7, 78, 2, 2, 1801, 1802, 7, 75, 2, 2, 1802, 1803, 7, 72, 2, 2, 1803, 340, 3, 2, 2, 2, 1804, 1805, 7, 80, 2, 2, 1805, 1806, 7, 87, 2, 2, 1806, 1807, 7, 78, 2, 2, 1807, 1808, 7, 78, 2, 2, 1808, 1809, 7, 85, 2, 2, 1809, 342, 3, 2, 2, 2, 1810, 1811, 7, 81, 2, 2, 1811, 1812, 7, 68, 2, 2, 1812, 1813, 7, 76, 2, 2, 1813, 1814, 7, 71, 2, 2, 1814, 1815, 7, 69, 2, 2, 1815, 1816, 7, 86, 2, 2, 1816, 344, 3, 2, 2, 2, 1817, 1818, 7, 81, 2, 2, 1818, 1819, 7, 72, 2, 2, 1819, 346, 3, 2, 2, 2, 1820, 1821, 7, 81, 2, 2, 1821, 1822, 7, 72, 2, 2, 1822, 1823, 7, 72, 2, 2, 1823, 1824, 7, 85, 2, 2, 1824, 1825, 7, 71, 2, 2, 1825, 1826, 7, 86, 2, 2, 1826, 348, 3, 2, 2, 2, 1827, 1828, 7, 81, 2, 2, 1828, 1829, 7, 79, 2, 2, 1829, 1830, 7, 75, 2, 2, 1830, 1831, 7, 86, 2, 2, 1831, 350, 3, 2, 2, 2, 1832, 1833, 7, 81, 2, 2, 1833, 1834, 7, 80, 2, 2, 1834, 352, 3, 2, 2, 2, 1835, 1836, 7, 81, 2, 2, 1836, 1837, 7, 80, 2, 2, 1837, 1838, 7, 71, 2, 2, 1838, 354, 3, 2, 2, 2, 1839, 1840, 7, 81, 2, 2, 1840, 1841, 7, 80, 2, 2, 1841, 1842, 7, 78, 2, 2, 1842, 1843, 7, 91, 2, 2, 1843, 356, 3, 2, 2, 2, 1844, 1845, 7, 81, 2, 2, 1845, 1846, 7, 82, 2, 2, 1846, 1847, 7, 86, 2, 2, 1847, 1848, 7, 75, 2, 2, 1848, 1849, 7, 81, 2, 2, 1849, 1850, 7, 80, 2, 2, 1850, 358, 3, 2, 2, 2, 1851, 1852, 7, 81, 2, 2, 1852, 1853, 7, 84, 2, 2, 1853, 360, 3, 2, 2, 2, 1854, 1855, 7, 81, 2, 2, 1855, 1856, 7, 84, 2, 2, 1856, 1857, 7, 70, 2, 2, 1857, 1858, 7, 71, 2, 2, 1858, 1859, 7, 84, 2, 2, 1859, 362, 3, 2, 2, 2, 1860, 1861, 7, 81, 2, 2, 1861, 1862, 7, 84, 2, 2, 1862, 1863, 7, 70, 2, 2, 1863, 1864, 7, 75, 2, 2, 1864, 1865, 7, 80, 2, 2, 1865, 1866, 7, 67, 2, 2, 1866, 1867, 7, 78, 2, 2, 1867, 1868, 7, 75, 2, 2, 1868, 1869, 7, 86, 2, 2, 1869, 1870, 7, 91, 2, 2, 1870, 364, 3, 2, 2, 2, 1871, 1872, 7, 81, 2, 2, 1872, 1873, 7, 87, 2, 2, 1873, 1874, 7, 86, 2, 2, 1874, 1875, 7, 71, 2, 2, 1875, 1876, 7, 84, 2, 2, 1876, 366, 3, 2, 2, 2, 1877, 1878, 7, 81, 2, 2, 1878, 1879, 7, 87, 2, 2, 1879, 1880, 7, 86, 2, 2, 1880, 1881, 7, 82, 2, 2, 1881, 1882, 7, 87, 2, 2, 1882, 1883, 7, 86, 2, 2, 1883, 368, 3, 2, 2, 2, 1884, 1885, 7, 81, 2, 2, 1885, 1886, 7, 88, 2, 2, 1886, 1887, 7, 71, 2, 2, 1887, 1888, 7, 84, 2, 2, 1888, 370, 3, 2, 2, 2, 1889, 1890, 7, 81, 2, 2, 1890, 1891, 7, 88, 2, 2, 1891, 1892, 7, 71, 2, 2, 1892, 1893, 7, 84, 2, 2, 1893, 1894, 7, 72, 2, 2, 1894, 1895, 7, 78, 2, 2, 1895, 1896, 7, 81, 2, 2, 1896, 1897, 7, 89, 2, 2, 1897, 372, 3, 2, 2, 2, 1898, 1899, 7, 82, 2, 2, 1899, 1900, 7, 67, 2, 2, 1900, 1901, 7, 84, 2, 2, 1901, 1902, 7, 86, 2, 2, 1902, 1903, 7, 75, 2, 2, 1903, 1904, 7, 86, 2, 2, 1904, 1905, 7, 75, 2, 2, 1905, 1906, 7, 81, 2, 2, 1906, 1907, 7, 80, 2, 2, 1907, 374, 3, 2, 2, 2, 1908, 1909, 7, 82, 2, 2, 1909, 1910, 7, 67, 2, 2, 1910, 1911, 7, 84, 2, 2, 1911, 1912, 7, 86, 2, 2, 1912, 1913, 7, 75, 2, 2, 1913, 1914, 7, 86, 2, 2, 1914, 1915, 7, 75, 2, 2, 1915, 1916, 7, 81, 2, 2, 1916, 1917, 7, 80, 2, 2, 1917, 1918, 7, 85, 2, 2, 1918, 376, 3, 2, 2, 2, 1919, 1920, 7, 82, 2, 2, 1920, 1921, 7, 67, 2, 2, 1921, 1922, 7, 85, 2, 2, 1922, 1923, 7, 85, 2, 2, 1923, 1924, 7, 75, 2, 2, 1924, 1925, 7, 80, 2, 2, 1925, 1926, 7, 73, 2, 2, 1926, 378, 3, 2, 2, 2, 1927, 1928, 7, 82, 2, 2, 1928, 1929, 7, 67, 2, 2, 1929, 1930, 7, 85, 2, 2, 1930, 1931, 7, 86, 2, 2, 1931, 380, 3, 2, 2, 2, 1932, 1933, 7, 82, 2, 2, 1933, 1934, 7, 67, 2, 2, 1934, 1935, 7, 86, 2, 2, 1935, 1936, 7, 74, 2, 2, 1936, 382, 3, 2, 2, 2, 1937, 1938, 7, 82, 2, 2, 1938, 1939, 7, 67, 2, 2, 1939, 1940, 7, 86, 2, 2, 1940, 1941, 7, 86, 2, 2, 1941, 1942, 7, 71, 2, 2, 1942, 1943, 7, 84, 2, 2, 1943, 1944, 7, 80, 2, 2, 1944, 384, 3, 2, 2, 2, 1945, 1946, 7, 82, 2, 2, 1946, 1947, 7, 71, 2, 2, 1947, 1948, 7, 84, 2, 2, 1948, 386, 3, 2, 2, 2, 1949, 1950, 7, 82, 2, 2, 1950, 1951, 7, 71, 2, 2, 1951, 1952, 7, 84, 2, 2, 1952, 1953, 7, 75, 2, 2, 1953, 1954, 7, 81, 2, 2, 1954, 1955, 7, 70, 2, 2, 1955, 388, 3, 2, 2, 2, 1956, 1957, 7, 82, 2, 2, 1957, 1958, 7, 71, 2, 2, 1958, 1959, 7, 84, 2, 2, 1959, 1960, 7, 79, 2, 2, 1960, 1961, 7, 87, 2, 2, 1961, 1962, 7, 86, 2, 2, 1962, 1963, 7, 71, 2, 2, 1963, 390, 3, 2, 2, 2, 1964, 1965, 7, 82, 2, 2, 1965, 1966, 7, 81, 2, 2, 1966, 1967, 7, 85, 2, 2, 1967, 1968, 7, 75, 2, 2, 1968, 1969, 7, 86, 2, 2, 1969, 1970, 7, 75, 2, 2, 1970, 1971, 7, 81, 2, 2, 1971, 1972, 7, 80, 2, 2, 1972, 392, 3, 2, 2, 2, 1973, 1974, 7, 82, 2, 2, 1974, 1975, 7, 84, 2, 2, 1975, 1976, 7, 71, 2, 2, 1976, 1977, 7, 69, 2, 2, 1977, 1978, 7, 71, 2, 2, 1978, 1979, 7, 70, 2, 2, 1979, 1980, 7, 75, 2, 2, 1980, 1981, 7, 80, 2, 2, 1981, 1982, 7, 73, 2, 2, 1982, 394, 3, 2, 2, 2, 1983, 1984, 7, 82, 2, 2, 1984, 1985, 7, 84, 2, 2, 1985, 1986, 7, 71, 2, 2, 1986, 1987, 7, 69, 2, 2, 1987, 1988, 7, 75, 2, 2, 1988, 1989, 7, 85, 2, 2, 1989, 1990, 7, 75, 2, 2, 1990, 1991, 7, 81, 2, 2, 1991, 1992, 7, 80, 2, 2, 1992, 396, 3, 2, 2, 2, 1993, 1994, 7, 82, 2, 2, 1994, 1995, 7, 84, 2, 2, 1995, 1996, 7, 71, 2, 2, 1996, 1997, 7, 82, 2, 2, 1997, 1998, 7, 67, 2, 2, 1998, 1999, 7, 84, 2, 2, 1999, 2000, 7, 71, 2, 2, 2000, 398, 3, 2, 2, 2, 2001, 2002, 7, 82, 2, 2, 2002, 2003, 7, 84, 2, 2, 2003, 2004, 7, 75, 2, 2, 2004, 2005, 7, 88, 2, 2, 2005, 2006, 7, 75, 2, 2, 2006, 2007, 7, 78, 2, 2, 2007, 2008, 7, 71, 2, 2, 2008, 2009, 7, 73, 2, 2, 2009, 2010, 7, 71, 2, 2, 2010, 2011, 7, 85, 2, 2, 2011, 400, 3, 2, 2, 2, 2012, 2013, 7, 82, 2, 2, 2013, 2014, 7, 84, 2, 2, 2014, 2015, 7, 81, 2, 2, 2015, 2016, 7, 82, 2, 2, 2016, 2017, 7, 71, 2, 2, 2017, 2018, 7, 84, 2, 2, 2018, 2019, 7, 86, 2, 2, 2019, 2020, 7, 75, 2, 2, 2020, 2021, 7, 71, 2, 2, 2021, 2022, 7, 85, 2, 2, 2022, 402, 3, 2, 2, 2, 2023, 2024, 7, 82, 2, 2, 2024, 2025, 7, 84, 2, 2, 2025, 2026, 7, 87, 2, 2, 2026, 2027, 7, 80, 2, 2, 2027, 2028, 7, 71, 2, 2, 2028, 404, 3, 2, 2, 2, 2029, 2030, 7, 83, 2, 2, 2030, 2031, 7, 87, 2, 2, 2031, 2032, 7, 81, 2, 2, 2032, 2033, 7, 86, 2, 2, 2033, 2034, 7, 71, 2, 2, 2034, 2035, 7, 85, 2, 2, 2035, 406, 3, 2, 2, 2, 2036, 2037, 7, 84, 2, 2, 2037, 2038, 7, 67, 2, 2, 2038, 2039, 7, 80, 2, 2, 2039, 2040, 7, 73, 2, 2, 2040, 2041, 7, 71, 2, 2, 2041, 408, 3, 2, 2, 2, 2042, 2043, 7, 84, 2, 2, 2043, 2044, 7, 71, 2, 2, 2044, 2045, 7, 67, 2, 2, 2045, 2046, 7, 70, 2, 2, 2046, 410, 3, 2, 2, 2, 2047, 2048, 7, 84, 2, 2, 2048, 2049, 7, 71, 2, 2, 2049, 2050, 7, 69, 2, 2, 2050, 2051, 7, 87, 2, 2, 2051, 2052, 7, 84, 2, 2, 2052, 2053, 7, 85, 2, 2, 2053, 2054, 7, 75, 2, 2, 2054, 2055, 7, 88, 2, 2, 2055, 2056, 7, 71, 2, 2, 2056, 412, 3, 2, 2, 2, 2057, 2058, 7, 84, 2, 2, 2058, 2059, 7, 71, 2, 2, 2059, 2060, 7, 72, 2, 2, 2060, 2061, 7, 84, 2, 2, 2061, 2062, 7, 71, 2, 2, 2062, 2063, 7, 85, 2, 2, 2063, 2064, 7, 74, 2, 2, 2064, 414, 3, 2, 2, 2, 2065, 2066, 7, 84, 2, 2, 2066, 2067, 7, 71, 2, 2, 2067, 2068, 7, 80, 2, 2, 2068, 2069, 7, 67, 2, 2, 2069, 2070, 7, 79, 2, 2, 2070, 2071, 7, 71, 2, 2, 2071, 416, 3, 2, 2, 2, 2072, 2073, 7, 84, 2, 2, 2073, 2074, 7, 71, 2, 2, 2074, 2075, 7, 82, 2, 2, 2075, 2076, 7, 71, 2, 2, 2076, 2077, 7, 67, 2, 2, 2077, 2078, 7, 86, 2, 2, 2078, 2079, 7, 67, 2, 2, 2079, 2080, 7, 68, 2, 2, 2080, 2081, 7, 78, 2, 2, 2081, 2082, 7, 71, 2, 2, 2082, 418, 3, 2, 2, 2, 2083, 2084, 7, 84, 2, 2, 2084, 2085, 7, 71, 2, 2, 2085, 2086, 7, 82, 2, 2, 2086, 2087, 7, 78, 2, 2, 2087, 2088, 7, 67, 2, 2, 2088, 2089, 7, 69, 2, 2, 2089, 2090, 7, 71, 2, 2, 2090, 420, 3, 2, 2, 2, 2091, 2092, 7, 84, 2, 2, 2092, 2093, 7, 71, 2, 2, 2093, 2094, 7, 85, 2, 2, 2094, 2095, 7, 71, 2, 2, 2095, 2096, 7, 86, 2, 2, 2096, 422, 3, 2, 2, 2, 2097, 2098, 7, 84, 2, 2, 2098, 2099, 7, 71, 2, 2, 2099, 2100, 7, 85, 2, 2, 2100, 2101, 7, 82, 2, 2, 2101, 2102, 7, 71, 2, 2, 2102, 2103, 7, 69, 2, 2, 2103, 2104, 7, 86, 2, 2, 2104, 424, 3, 2, 2, 2, 2105, 2106, 7, 84, 2, 2, 2106, 2107, 7, 71, 2, 2, 2107, 2108, 7, 85, 2, 2, 2108, 2109, 7, 86, 2, 2, 2109, 2110, 7, 84, 2, 2, 2110, 2111, 7, 75, 2, 2, 2111, 2112, 7, 69, 2, 2, 2112, 2113, 7, 86, 2, 2, 2113, 426, 3, 2, 2, 2, 2114, 2115, 7, 84, 2, 2, 2115, 2116, 7, 71, 2, 2, 2116, 2117, 7, 86, 2, 2, 2117, 2118, 7, 87, 2, 2, 2118, 2119, 7, 84, 2, 2, 2119, 2120, 7, 80, 2, 2, 2120, 2121, 7, 75, 2, 2, 2121, 2122, 7, 80, 2, 2, 2122, 2123, 7, 73, 2, 2, 2123, 428, 3, 2, 2, 2, 2124, 2125, 7, 84, 2, 2, 2125, 2126, 7, 71, 2, 2, 2126, 2127, 7, 88, 2, 2, 2127, 2128, 7, 81, 2, 2, 2128, 2129, 7, 77, 2, 2, 2129, 2130, 7, 71, 2, 2, 2130, 430, 3, 2, 2, 2, 2131, 2132, 7, 84, 2, 2, 2132, 2133, 7, 75, 2, 2, 2133, 2134, 7, 73, 2, 2, 2134, 2135, 7, 74, 2, 2, 2135, 2136, 7, 86, 2, 2, 2136, 432, 3, 2, 2, 2, 2137, 2138, 7, 84, 2, 2, 2138, 2139, 7, 81, 2, 2, 2139, 2140, 7, 78, 2, 2, 2140, 2141, 7, 71, 2, 2, 2141, 434, 3, 2, 2, 2, 2142, 2143, 7, 84, 2, 2, 2143, 2144, 7, 81, 2, 2, 2144, 2145, 7, 78, 2, 2, 2145, 2146, 7, 71, 2, 2, 2146, 2147, 7, 85, 2, 2, 2147, 436, 3, 2, 2, 2, 2148, 2149, 7, 84, 2, 2, 2149, 2150, 7, 81, 2, 2, 2150, 2151, 7, 78, 2, 2, 2151, 2152, 7, 78, 2, 2, 2152, 2153, 7, 68, 2, 2, 2153, 2154, 7, 67, 2, 2, 2154, 2155, 7, 69, 2, 2, 2155, 2156, 7, 77, 2, 2, 2156, 438, 3, 2, 2, 2, 2157, 2158, 7, 84, 2, 2, 2158, 2159, 7, 81, 2, 2, 2159, 2160, 7, 78, 2, 2, 2160, 2161, 7, 78, 2, 2, 2161, 2162, 7, 87, 2, 2, 2162, 2163, 7, 82, 2, 2, 2163, 440, 3, 2, 2, 2, 2164, 2165, 7, 84, 2, 2, 2165, 2166, 7, 81, 2, 2, 2166, 2167, 7, 89, 2, 2, 2167, 442, 3, 2, 2, 2, 2168, 2169, 7, 84, 2, 2, 2169, 2170, 7, 81, 2, 2, 2170, 2171, 7, 89, 2, 2, 2171, 2172, 7, 85, 2, 2, 2172, 444, 3, 2, 2, 2, 2173, 2174, 7, 84, 2, 2, 2174, 2175, 7, 87, 2, 2, 2175, 2176, 7, 80, 2, 2, 2176, 2177, 7, 80, 2, 2, 2177, 2178, 7, 75, 2, 2, 2178, 2179, 7, 80, 2, 2, 2179, 2180, 7, 73, 2, 2, 2180, 446, 3, 2, 2, 2, 2181, 2182, 7, 85, 2, 2, 2182, 2183, 7, 69, 2, 2, 2183, 2184, 7, 67, 2, 2, 2184, 2185, 7, 78, 2, 2, 2185, 2186, 7, 67, 2, 2, 2186, 2187, 7, 84, 2, 2, 2187, 448, 3, 2, 2, 2, 2188, 2189, 7, 85, 2, 2, 2189, 2190, 7, 69, 2, 2, 2190, 2191, 7, 74, 2, 2, 2191, 2192, 7, 71, 2, 2, 2192, 2193, 7, 79, 2, 2, 2193, 2194, 7, 67, 2, 2, 2194, 450, 3, 2, 2, 2, 2195, 2196, 7, 85, 2, 2, 2196, 2197, 7, 69, 2, 2, 2197, 2198, 7, 74, 2, 2, 2198, 2199, 7, 71, 2, 2, 2199, 2200, 7, 79, 2, 2, 2200, 2201, 7, 67, 2, 2, 2201, 2202, 7, 85, 2, 2, 2202, 452, 3, 2, 2, 2, 2203, 2204, 7, 85, 2, 2, 2204, 2205, 7, 71, 2, 2, 2205, 2206, 7, 69, 2, 2, 2206, 2207, 7, 81, 2, 2, 2207, 2208, 7, 80, 2, 2, 2208, 2209, 7, 70, 2, 2, 2209, 454, 3, 2, 2, 2, 2210, 2211, 7, 85, 2, 2, 2211, 2212, 7, 71, 2, 2, 2212, 2213, 7, 69, 2, 2, 2213, 2214, 7, 87, 2, 2, 2214, 2215, 7, 84, 2, 2, 2215, 2216, 7, 75, 2, 2, 2216, 2217, 7, 86, 2, 2, 2217, 2218, 7, 91, 2, 2, 2218, 456, 3, 2, 2, 2, 2219, 2220, 7, 85, 2, 2, 2220, 2221, 7, 71, 2, 2, 2221, 2222, 7, 71, 2, 2, 2222, 2223, 7, 77, 2, 2, 2223, 458, 3, 2, 2, 2, 2224, 2225, 7, 85, 2, 2, 2225, 2226, 7, 71, 2, 2, 2226, 2227, 7, 78, 2, 2, 2227, 2228, 7, 71, 2, 2, 2228, 2229, 7, 69, 2, 2, 2229, 2230, 7, 86, 2, 2, 2230, 460, 3, 2, 2, 2, 2231, 2232, 7, 85, 2, 2, 2232, 2233, 7, 71, 2, 2, 2233, 2234, 7, 84, 2, 2, 2234, 2235, 7, 75, 2, 2, 2235, 2236, 7, 67, 2, 2, 2236, 2237, 7, 78, 2, 2, 2237, 2238, 7, 75, 2, 2, 2238, 2239, 7, 92, 2, 2, 2239, 2240, 7, 67, 2, 2, 2240, 2241, 7, 68, 2, 2, 2241, 2242, 7, 78, 2, 2, 2242, 2243, 7, 71, 2, 2, 2243, 462, 3, 2, 2, 2, 2244, 2245, 7, 85, 2, 2, 2245, 2246, 7, 71, 2, 2, 2246, 2247, 7, 85, 2, 2, 2247, 2248, 7, 85, 2, 2, 2248, 2249, 7, 75, 2, 2, 2249, 2250, 7, 81, 2, 2, 2250, 2251, 7, 80, 2, 2, 2251, 464, 3, 2, 2, 2, 2252, 2253, 7, 85, 2, 2, 2253, 2254, 7, 71, 2, 2, 2254, 2255, 7, 86, 2, 2, 2255, 466, 3, 2, 2, 2, 2256, 2257, 7, 85, 2, 2, 2257, 2258, 7, 71, 2, 2, 2258, 2259, 7, 86, 2, 2, 2259, 2260, 7, 85, 2, 2, 2260, 468, 3, 2, 2, 2, 2261, 2262, 7, 85, 2, 2, 2262, 2263, 7, 74, 2, 2, 2263, 2264, 7, 81, 2, 2, 2264, 2265, 7, 89, 2, 2, 2265, 470, 3, 2, 2, 2, 2266, 2267, 7, 85, 2, 2, 2267, 2268, 7, 81, 2, 2, 2268, 2269, 7, 79, 2, 2, 2269, 2270, 7, 71, 2, 2, 2270, 472, 3, 2, 2, 2, 2271, 2272, 7, 85, 2, 2, 2272, 2273, 7, 86, 2, 2, 2273, 2274, 7, 67, 2, 2, 2274, 2275, 7, 84, 2, 2, 2275, 2276, 7, 86, 2, 2, 2276, 474, 3, 2, 2, 2, 2277, 2278, 7, 85, 2, 2, 2278, 2279, 7, 86, 2, 2, 2279, 2280, 7, 67, 2, 2, 2280, 2281, 7, 86, 2, 2, 2281, 2282, 7, 85, 2, 2, 2282, 476, 3, 2, 2, 2, 2283, 2284, 7, 85, 2, 2, 2284, 2285, 7, 87, 2, 2, 2285, 2286, 7, 68, 2, 2, 2286, 2287, 7, 85, 2, 2, 2287, 2288, 7, 71, 2, 2, 2288, 2289, 7, 86, 2, 2, 2289, 478, 3, 2, 2, 2, 2290, 2291, 7, 85, 2, 2, 2291, 2292, 7, 87, 2, 2, 2292, 2293, 7, 68, 2, 2, 2293, 2294, 7, 85, 2, 2, 2294, 2295, 7, 86, 2, 2, 2295, 2296, 7, 84, 2, 2, 2296, 2297, 7, 75, 2, 2, 2297, 2298, 7, 80, 2, 2, 2298, 2299, 7, 73, 2, 2, 2299, 480, 3, 2, 2, 2, 2300, 2301, 7, 85, 2, 2, 2301, 2302, 7, 91, 2, 2, 2302, 2303, 7, 85, 2, 2, 2303, 2304, 7, 86, 2, 2, 2304, 2305, 7, 71, 2, 2, 2305, 2306, 7, 79, 2, 2, 2306, 482, 3, 2, 2, 2, 2307, 2308, 7, 86, 2, 2, 2308, 2309, 7, 67, 2, 2, 2309, 2310, 7, 68, 2, 2, 2310, 2311, 7, 78, 2, 2, 2311, 2312, 7, 71, 2, 2, 2312, 484, 3, 2, 2, 2, 2313, 2314, 7, 86, 2, 2, 2314, 2315, 7, 67, 2, 2, 2315, 2316, 7, 68, 2, 2, 2316, 2317, 7, 78, 2, 2, 2317, 2318, 7, 71, 2, 2, 2318, 2319, 7, 85, 2, 2, 2319, 486, 3, 2, 2, 2, 2320, 2321, 7, 86, 2, 2, 2321, 2322, 7, 67, 2, 2, 2322, 2323, 7, 68, 2, 2, 2323, 2324, 7, 78, 2, 2, 2324, 2325, 7, 71, 2, 2, 2325, 2326, 7, 85, 2, 2, 2326, 2327, 7, 67, 2, 2, 2327, 2328, 7, 79, 2, 2, 2328, 2329, 7, 82, 2, 2, 2329, 2330, 7, 78, 2, 2, 2330, 2331, 7, 71, 2, 2, 2331, 488, 3, 2, 2, 2, 2332, 2333, 7, 86, 2, 2, 2333, 2334, 7, 71, 2, 2, 2334, 2335, 7, 90, 2, 2, 2335, 2336, 7, 86, 2, 2, 2336, 490, 3, 2, 2, 2, 2337, 2338, 7, 85, 2, 2, 2338, 2339, 7, 86, 2, 2, 2339, 2340, 7, 84, 2, 2, 2340, 2341, 7, 75, 2, 2, 2341, 2342, 7, 80, 2, 2, 2342, 2343, 7, 73, 2, 2, 2343, 492, 3, 2, 2, 2, 2344, 2345, 7, 86, 2, 2, 2345, 2346, 7, 74, 2, 2, 2346, 2347, 7, 71, 2, 2, 2347, 2348, 7, 80, 2, 2, 2348, 494, 3, 2, 2, 2, 2349, 2350, 7, 86, 2, 2, 2350, 2351, 7, 75, 2, 2, 2351, 2352, 7, 71, 2, 2, 2352, 2353, 7, 85, 2, 2, 2353, 496, 3, 2, 2, 2, 2354, 2355, 7, 86, 2, 2, 2355, 2356, 7, 75, 2, 2, 2356, 2357, 7, 79, 2, 2, 2357, 2358, 7, 71, 2, 2, 2358, 498, 3, 2, 2, 2, 2359, 2360, 7, 86, 2, 2, 2360, 2361, 7, 75, 2, 2, 2361, 2362, 7, 79, 2, 2, 2362, 2363, 7, 71, 2, 2, 2363, 2364, 7, 85, 2, 2, 2364, 2365, 7, 86, 2, 2, 2365, 2366, 7, 67, 2, 2, 2366, 2367, 7, 79, 2, 2, 2367, 2368, 7, 82, 2, 2, 2368, 500, 3, 2, 2, 2, 2369, 2370, 7, 86, 2, 2, 2370, 2371, 7, 81, 2, 2, 2371, 502, 3, 2, 2, 2, 2372, 2373, 7, 86, 2, 2, 2373, 2374, 7, 84, 2, 2, 2374, 2375, 7, 67, 2, 2, 2375, 2376, 7, 75, 2, 2, 2376, 2377, 7, 78, 2, 2, 2377, 2378, 7, 75, 2, 2, 2378, 2379, 7, 80, 2, 2, 2379, 2380, 7, 73, 2, 2, 2380, 504, 3, 2, 2, 2, 2381, 2382, 7, 86, 2, 2, 2382, 2383, 7, 84, 2, 2, 2383, 2384, 7, 67, 2, 2, 2384, 2385, 7, 80, 2, 2, 2385, 2386, 7, 85, 2, 2, 2386, 2387, 7, 67, 2, 2, 2387, 2388, 7, 69, 2, 2, 2388, 2389, 7, 86, 2, 2, 2389, 2390, 7, 75, 2, 2, 2390, 2391, 7, 81, 2, 2, 2391, 2392, 7, 80, 2, 2, 2392, 506, 3, 2, 2, 2, 2393, 2394, 7, 86, 2, 2, 2394, 2395, 7, 84, 2, 2, 2395, 2396, 7, 75, 2, 2, 2396, 2397, 7, 79, 2, 2, 2397, 508, 3, 2, 2, 2, 2398, 2399, 7, 86, 2, 2, 2399, 2400, 7, 84, 2, 2, 2400, 2401, 7, 87, 2, 2, 2401, 2402, 7, 71, 2, 2, 2402, 510, 3, 2, 2, 2, 2403, 2404, 7, 86, 2, 2, 2404, 2405, 7, 84, 2, 2, 2405, 2406, 7, 87, 2, 2, 2406, 2407, 7, 80, 2, 2, 2407, 2408, 7, 69, 2, 2, 2408, 2409, 7, 67, 2, 2, 2409, 2410, 7, 86, 2, 2, 2410, 2411, 7, 71, 2, 2, 2411, 512, 3, 2, 2, 2, 2412, 2413, 7, 86, 2, 2, 2413, 2414, 7, 84, 2, 2, 2414, 2415, 7, 91, 2, 2, 2415, 2416, 7, 97, 2, 2, 2416, 2417, 7, 69, 2, 2, 2417, 2418, 7, 67, 2, 2, 2418, 2419, 7, 85, 2, 2, 2419, 2420, 7, 86, 2, 2, 2420, 514, 3, 2, 2, 2, 2421, 2422, 7, 86, 2, 2, 2422, 2423, 7, 91, 2, 2, 2423, 2424, 7, 82, 2, 2, 2424, 2425, 7, 71, 2, 2, 2425, 516, 3, 2, 2, 2, 2426, 2427, 7, 87, 2, 2, 2427, 2428, 7, 71, 2, 2, 2428, 2429, 7, 85, 2, 2, 2429, 2430, 7, 69, 2, 2, 2430, 2431, 7, 67, 2, 2, 2431, 2432, 7, 82, 2, 2, 2432, 2433, 7, 71, 2, 2, 2433, 518, 3, 2, 2, 2, 2434, 2435, 7, 87, 2, 2, 2435, 2436, 7, 80, 2, 2, 2436, 2437, 7, 68, 2, 2, 2437, 2438, 7, 81, 2, 2, 2438, 2439, 7, 87, 2, 2, 2439, 2440, 7, 80, 2, 2, 2440, 2441, 7, 70, 2, 2, 2441, 2442, 7, 71, 2, 2, 2442, 2443, 7, 70, 2, 2, 2443, 520, 3, 2, 2, 2, 2444, 2445, 7, 87, 2, 2, 2445, 2446, 7, 80, 2, 2, 2446, 2447, 7, 69, 2, 2, 2447, 2448, 7, 81, 2, 2, 2448, 2449, 7, 79, 2, 2, 2449, 2450, 7, 79, 2, 2, 2450, 2451, 7, 75, 2, 2, 2451, 2452, 7, 86, 2, 2, 2452, 2453, 7, 86, 2, 2, 2453, 2454, 7, 71, 2, 2, 2454, 2455, 7, 70, 2, 2, 2455, 522, 3, 2, 2, 2, 2456, 2457, 7, 87, 2, 2, 2457, 2458, 7, 80, 2, 2, 2458, 2459, 7, 69, 2, 2, 2459, 2460, 7, 81, 2, 2, 2460, 2461, 7, 80, 2, 2, 2461, 2462, 7, 70, 2, 2, 2462, 2463, 7, 75, 2, 2, 2463, 2464, 7, 86, 2, 2, 2464, 2465, 7, 75, 2, 2, 2465, 2466, 7, 81, 2, 2, 2466, 2467, 7, 80, 2, 2, 2467, 2468, 7, 67, 2, 2, 2468, 2469, 7, 78, 2, 2, 2469, 524, 3, 2, 2, 2, 2470, 2471, 7, 87, 2, 2, 2471, 2472, 7, 80, 2, 2, 2472, 2473, 7, 75, 2, 2, 2473, 2474, 7, 81, 2, 2, 2474, 2475, 7, 80, 2, 2, 2475, 526, 3, 2, 2, 2, 2476, 2477, 7, 87, 2, 2, 2477, 2478, 7, 80, 2, 2, 2478, 2479, 7, 75, 2, 2, 2479, 2480, 7, 83, 2, 2, 2480, 2481, 7, 87, 2, 2, 2481, 2482, 7, 71, 2, 2, 2482, 528, 3, 2, 2, 2, 2483, 2484, 7, 87, 2, 2, 2484, 2485, 7, 80, 2, 2, 2485, 2486, 7, 77, 2, 2, 2486, 2487, 7, 80, 2, 2, 2487, 2488, 7, 81, 2, 2, 2488, 2489, 7, 89, 2, 2, 2489, 2490, 7, 80, 2, 2, 2490, 530, 3, 2, 2, 2, 2491, 2492, 7, 87, 2, 2, 2492, 2493, 7, 80, 2, 2, 2493, 2494, 7, 79, 2, 2, 2494, 2495, 7, 67, 2, 2, 2495, 2496, 7, 86, 2, 2, 2496, 2497, 7, 69, 2, 2, 2497, 2498, 7, 74, 2, 2, 2498, 2499, 7, 71, 2, 2, 2499, 2500, 7, 70, 2, 2, 2500, 532, 3, 2, 2, 2, 2501, 2502, 7, 87, 2, 2, 2502, 2503, 7, 80, 2, 2, 2503, 2504, 7, 80, 2, 2, 2504, 2505, 7, 71, 2, 2, 2505, 2506, 7, 85, 2, 2, 2506, 2507, 7, 86, 2, 2, 2507, 534, 3, 2, 2, 2, 2508, 2509, 7, 87, 2, 2, 2509, 2510, 7, 82, 2, 2, 2510, 2511, 7, 70, 2, 2, 2511, 2512, 7, 67, 2, 2, 2512, 2513, 7, 86, 2, 2, 2513, 2514, 7, 71, 2, 2, 2514, 536, 3, 2, 2, 2, 2515, 2516, 7, 87, 2, 2, 2516, 2517, 7, 85, 2, 2, 2517, 2518, 7, 71, 2, 2, 2518, 538, 3, 2, 2, 2, 2519, 2520, 7, 87, 2, 2, 2520, 2521, 7, 85, 2, 2, 2521, 2522, 7, 71, 2, 2, 2522, 2523, 7, 84, 2, 2, 2523, 540, 3, 2, 2, 2, 2524, 2525, 7, 87, 2, 2, 2525, 2526, 7, 85, 2, 2, 2526, 2527, 7, 75, 2, 2, 2527, 2528, 7, 80, 2, 2, 2528, 2529, 7, 73, 2, 2, 2529, 542, 3, 2, 2, 2, 2530, 2531, 7, 87, 2, 2, 2531, 2532, 7, 86, 2, 2, 2532, 2533, 7, 72, 2, 2, 2533, 2534, 7, 51, 2, 2, 2534, 2535, 7, 56, 2, 2, 2535, 544, 3, 2, 2, 2, 2536, 2537, 7, 87, 2, 2, 2537, 2538, 7, 86, 2, 2, 2538, 2539, 7, 72, 2, 2, 2539, 2540, 7, 53, 2, 2, 2540, 2541, 7, 52, 2, 2, 2541, 546, 3, 2, 2, 2, 2542, 2543, 7, 87, 2, 2, 2543, 2544, 7, 86, 2, 2, 2544, 2545, 7, 72, 2, 2, 2545, 2546, 7, 58, 2, 2, 2546, 548, 3, 2, 2, 2, 2547, 2548, 7, 88, 2, 2, 2548, 2549, 7, 67, 2, 2, 2549, 2550, 7, 78, 2, 2, 2550, 2551, 7, 75, 2, 2, 2551, 2552, 7, 70, 2, 2, 2552, 2553, 7, 67, 2, 2, 2553, 2554, 7, 86, 2, 2, 2554, 2555, 7, 71, 2, 2, 2555, 550, 3, 2, 2, 2, 2556, 2557, 7, 88, 2, 2, 2557, 2558, 7, 67, 2, 2, 2558, 2559, 7, 78, 2, 2, 2559, 2560, 7, 87, 2, 2, 2560, 2561, 7, 71, 2, 2, 2561, 552, 3, 2, 2, 2, 2562, 2563, 7, 88, 2, 2, 2563, 2564, 7, 67, 2, 2, 2564, 2565, 7, 78, 2, 2, 2565, 2566, 7, 87, 2, 2, 2566, 2567, 7, 71, 2, 2, 2567, 2568, 7, 85, 2, 2, 2568, 554, 3, 2, 2, 2, 2569, 2570, 7, 88, 2, 2, 2570, 2571, 7, 71, 2, 2, 2571, 2572, 7, 84, 2, 2, 2572, 2573, 7, 68, 2, 2, 2573, 2574, 7, 81, 2, 2, 2574, 2575, 7, 85, 2, 2, 2575, 2576, 7, 71, 2, 2, 2576, 556, 3, 2, 2, 2, 2577, 2578, 7, 88, 2, 2, 2578, 2579, 7, 71, 2, 2, 2579, 2580, 7, 84, 2, 2, 2580, 2581, 7, 85, 2, 2, 2581, 2582, 7, 75, 2, 2, 2582, 2583, 7, 81, 2, 2, 2583, 2584, 7, 80, 2, 2, 2584, 558, 3, 2, 2, 2, 2585, 2586, 7, 88, 2, 2, 2586, 2587, 7, 75, 2, 2, 2587, 2588, 7, 71, 2, 2, 2588, 2589, 7, 89, 2, 2, 2589, 560, 3, 2, 2, 2, 2590, 2591, 7, 89, 2, 2, 2591, 2592, 7, 74, 2, 2, 2592, 2593, 7, 71, 2, 2, 2593, 2594, 7, 80, 2, 2, 2594, 562, 3, 2, 2, 2, 2595, 2596, 7, 89, 2, 2, 2596, 2597, 7, 74, 2, 2, 2597, 2598, 7, 71, 2, 2, 2598, 2599, 7, 84, 2, 2, 2599, 2600, 7, 71, 2, 2, 2600, 564, 3, 2, 2, 2, 2601, 2602, 7, 89, 2, 2, 2602, 2603, 7, 75, 2, 2, 2603, 2604, 7, 80, 2, 2, 2604, 2605, 7, 70, 2, 2, 2605, 2606, 7, 81, 2, 2, 2606, 2607, 7, 89, 2, 2, 2607, 566, 3, 2, 2, 2, 2608, 2609, 7, 89, 2, 2, 2609, 2610, 7, 75, 2, 2, 2610, 2611, 7, 86, 2, 2, 2611, 2612, 7, 74, 2, 2, 2612, 568, 3, 2, 2, 2, 2613, 2614, 7, 89, 2, 2, 2614, 2615, 7, 75, 2, 2, 2615, 2616, 7, 86, 2, 2, 2616, 2617, 7, 74, 2, 2, 2617, 2618, 7, 75, 2, 2, 2618, 2619, 7, 80, 2, 2, 2619, 570, 3, 2, 2, 2, 2620, 2621, 7, 89, 2, 2, 2621, 2622, 7, 75, 2, 2, 2622, 2623, 7, 86, 2, 2, 2623, 2624, 7, 74, 2, 2, 2624, 2625, 7, 81, 2, 2, 2625, 2626, 7, 87, 2, 2, 2626, 2627, 7, 86, 2, 2, 2627, 572, 3, 2, 2, 2, 2628, 2629, 7, 89, 2, 2, 2629, 2630, 7, 81, 2, 2, 2630, 2631, 7, 84, 2, 2, 2631, 2632, 7, 77, 2, 2, 2632, 574, 3, 2, 2, 2, 2633, 2634, 7, 89, 2, 2, 2634, 2635, 7, 84, 2, 2, 2635, 2636, 7, 67, 2, 2, 2636, 2637, 7, 82, 2, 2, 2637, 2638, 7, 82, 2, 2, 2638, 2639, 7, 71, 2, 2, 2639, 2640, 7, 84, 2, 2, 2640, 576, 3, 2, 2, 2, 2641, 2642, 7, 89, 2, 2, 2642, 2643, 7, 84, 2, 2, 2643, 2644, 7, 75, 2, 2, 2644, 2645, 7, 86, 2, 2, 2645, 2646, 7, 71, 2, 2, 2646, 578, 3, 2, 2, 2, 2647, 2648, 7, 91, 2, 2, 2648, 2649, 7, 71, 2, 2, 2649, 2650, 7, 67, 2, 2, 2650, 2651, 7, 84, 2, 2, 2651, 580, 3, 2, 2, 2, 2652, 2653, 7, 92, 2, 2, 2653, 2654, 7, 81, 2, 2, 2654, 2655, 7, 80, 2, 2, 2655, 2656, 7, 71, 2, 2, 2656, 582, 3, 2, 2, 2, 2657, 2658, 7, 63, 2, 2, 2658, 584, 3, 2, 2, 2, 2659, 2660, 7, 62, 2, 2, 2660, 2664, 7, 64, 2, 2, 2661, 2662, 7, 35, 2, 2, 2662, 2664, 7, 63, 2, 2, 2663, 2659, 3, 2, 2, 2, 2663, 2661, 3, 2, 2, 2, 2664, 586, 3, 2, 2, 2, 2665, 2666, 7, 62, 2, 2, 2666, 588, 3, 2, 2, 2, 2667, 2668, 7, 62, 2, 2, 2668, 2669, 7, 63, 2, 2, 2669, 590, 3, 2, 2, 2, 2670, 2671, 7, 64, 2, 2, 2671, 592, 3, 2, 2, 2, 2672, 2673, 7, 64, 2, 2, 2673, 2674, 7, 63, 2, 2, 2674, 594, 3, 2, 2, 2, 2675, 2676, 7, 45, 2, 2, 2676, 596, 3, 2, 2, 2, 2677, 2678, 7, 47, 2, 2, 2678, 598, 3, 2, 2, 2, 2679, 2680, 7, 44, 2, 2, 2680, 600, 3, 2, 2, 2, 2681, 2682, 7, 49, 2, 2, 2682, 602, 3, 2, 2, 2, 2683, 2684, 7, 39, 2, 2, 2684, 604, 3, 2, 2, 2, 2685, 2686, 7, 126, 2, 2, 2686, 2687, 7, 126, 2, 2, 2687, 606, 3, 2, 2, 2, 2688, 2689, 7, 65, 2, 2, 2689, 608, 3, 2, 2, 2, 2690, 2696, 7, 41, 2, 2, 2691, 2695, 10, 2, 2, 2, 2692, 2693, 7, 41, 2, 2, 2693, 2695, 7, 41, 2, 2, 2694, 2691, 3, 2, 2, 2, 2694, 2692, 3, 2, 2, 2, 2695, 2698, 3, 2, 2, 2, 2696, 2694, 3, 2, 2, 2, 2696, 2697, 3, 2, 2, 2, 2697, 2699, 3, 2, 2, 2, 2698, 2696, 3, 2, 2, 2, 2699, 2700, 7, 41, 2, 2, 2700, 610, 3, 2, 2, 2, 2701, 2702, 7, 87, 2, 2, 2702, 2703, 7, 40, 2, 2, 2703, 2704, 7, 41, 2, 2, 2704, 2710, 3, 2, 2, 2, 2705, 2709, 10, 2, 2, 2, 2706, 2707, 7, 41, 2, 2, 2707, 2709, 7, 41, 2, 2, 2708, 2705, 3, 2, 2, 2, 2708, 2706, 3, 2, 2, 2, 2709, 2712, 3, 2, 2, 2, 2710, 2708, 3, 2, 2, 2, 2710, 2711, 3, 2, 2, 2, 2711, 2713, 3, 2, 2, 2, 2712, 2710, 3, 2, 2, 2, 2713, 2714, 7, 41, 2, 2, 2714, 612, 3, 2, 2, 2, 2715, 2716, 7, 90, 2, 2, 2716, 2717, 7, 41, 2, 2, 2717, 2721, 3, 2, 2, 2, 2718, 2720, 10, 2, 2, 2, 2719, 2718, 3, 2, 2, 2, 2720, 2723, 3, 2, 2, 2, 2721, 2719, 3, 2, 2, 2, 2721, 2722, 3, 2, 2, 2, 2722, 2724, 3, 2, 2, 2, 2723, 2721, 3, 2, 2, 2, 2724, 2725, 7, 41, 2, 2, 2725, 614, 3, 2, 2, 2, 2726, 2728, 5, 631, 316, 2, 2727, 2726, 3, 2, 2, 2, 2728, 2729, 3, 2, 2, 2, 2729, 2727, 3, 2, 2, 2, 2729, 2730, 3, 2, 2, 2, 2730, 616, 3, 2, 2, 2, 2731, 2733, 5, 631, 316, 2, 2732, 2731, 3, 2, 2, 2, 2733, 2734, 3, 2, 2, 2, 2734, 2732, 3, 2, 2, 2, 2734, 2735, 3, 2, 2, 2, 2735, 2736, 3, 2, 2, 2, 2736, 2740, 7, 48, 2, 2, 2737, 2739, 5, 631, 316, 2, 2738, 2737, 3, 2, 2, 2, 2739, 2742, 3, 2, 2, 2, 2740, 2738, 3, 2, 2, 2, 2740, 2741, 3, 2, 2, 2, 2741, 2750, 3, 2, 2, 2, 2742, 2740, 3, 2, 2, 2, 2743, 2745, 7, 48, 2, 2, 2744, 2746, 5, 631, 316, 2, 2745, 2744, 3, 2, 2, 2, 2746, 2747, 3, 2, 2, 2, 2747, 2745, 3, 2, 2, 2, 2747, 2748, 3, 2, 2, 2, 2748, 2750, 3, 2, 2, 2, 2749, 2732, 3, 2, 2, 2, 2749, 2743, 3, 2, 2, 2, 2750, 618, 3, 2, 2, 2, 2751, 2753, 5, 631, 316, 2, 2752, 2751, 3, 2, 2, 2, 2753, 2754, 3, 2, 2, 2, 2754, 2752, 3, 2, 2, 2, 2754, 2755, 3, 2, 2, 2, 2755, 2763, 3, 2, 2, 2, 2756, 2760, 7, 48, 2, 2, 2757, 2759, 5, 631, 316, 2, 2758, 2757, 3, 2, 2, 2, 2759, 2762, 3, 2, 2, 2, 2760, 2758, 3, 2, 2, 2, 2760, 2761, 3, 2, 2, 2, 2761, 2764, 3, 2, 2, 2, 2762, 2760, 3, 2, 2, 2, 2763, 2756, 3, 2, 2, 2, 2763, 2764, 3, 2, 2, 2, 2764, 2765, 3, 2, 2, 2, 2765, 2766, 5, 629, 315, 2, 2766, 2776, 3, 2, 2, 2, 2767, 2769, 7, 48, 2, 2, 2768, 2770, 5, 631, 316, 2, 2769, 2768, 3, 2, 2, 2, 2770, 2771, 3, 2, 2, 2, 2771, 2769, 3, 2, 2, 2, 2771, 2772, 3, 2, 2, 2, 2772, 2773, 3, 2, 2, 2, 2773, 2774, 5, 629, 315, 2, 2774, 2776, 3, 2, 2, 2, 2775, 2752, 3, 2, 2, 2, 2775, 2767, 3, 2, 2, 2, 2776, 620, 3, 2, 2, 2, 2777, 2780, 5, 633, 317, 2, 2778, 2780, 7, 97, 2, 2, 2779, 2777, 3, 2, 2, 2, 2779, 2778, 3, 2, 2, 2, 2780, 2786, 3, 2, 2, 2, 2781, 2785, 5, 633, 317, 2, 2782, 2785, 5, 631, 316, 2, 2783, 2785, 7, 97, 2, 2, 2784, 2781, 3, 2, 2, 2, 2784, 2782, 3, 2, 2, 2, 2784, 2783, 3, 2, 2, 2, 2785, 2788, 3, 2, 2, 2, 2786, 2784, 3, 2, 2, 2, 2786, 2787, 3, 2, 2, 2, 2787, 622, 3, 2, 2, 2, 2788, 2786, 3, 2, 2, 2, 2789, 2793, 5, 631, 316, 2, 2790, 2794, 5, 633, 317, 2, 2791, 2794, 5, 631, 316, 2, 2792, 2794, 7, 97, 2, 2, 2793, 2790, 3, 2, 2, 2, 2793, 2791, 3, 2, 2, 2, 2793, 2792, 3, 2, 2, 2, 2794, 2795, 3, 2, 2, 2, 2795, 2793, 3, 2, 2, 2, 2795, 2796, 3, 2, 2, 2, 2796, 624, 3, 2, 2, 2, 2797, 2803, 7, 36, 2, 2, 2798, 2802, 10, 3, 2, 2, 2799, 2800, 7, 36, 2, 2, 2800, 2802, 7, 36, 2, 2, 2801, 2798, 3, 2, 2, 2, 2801, 2799, 3, 2, 2, 2, 2802, 2805, 3, 2, 2, 2, 2803, 2801, 3, 2, 2, 2, 2803, 2804, 3, 2, 2, 2, 2804, 2806, 3, 2, 2, 2, 2805, 2803, 3, 2, 2, 2, 2806, 2807, 7, 36, 2, 2, 2807, 626, 3, 2, 2, 2, 2808, 2814, 7, 98, 2, 2, 2809, 2813, 10, 4, 2, 2, 2810, 2811, 7, 98, 2, 2, 2811, 2813, 7, 98, 2, 2, 2812, 2809, 3, 2, 2, 2, 2812, 2810, 3, 2, 2, 2, 2813, 2816, 3, 2, 2, 2, 2814, 2812, 3, 2, 2, 2, 2814, 2815, 3, 2, 2, 2, 2815, 2817, 3, 2, 2, 2, 2816, 2814, 3, 2, 2, 2, 2817, 2818, 7, 98, 2, 2, 2818, 628, 3, 2, 2, 2, 2819, 2821, 7, 71, 2, 2, 2820, 2822, 9, 5, 2, 2, 2821, 2820, 3, 2, 2, 2, 2821, 2822, 3, 2, 2, 2, 2822, 2824, 3, 2, 2, 2, 2823, 2825, 5, 631, 316, 2, 2824, 2823, 3, 2, 2, 2, 2825, 2826, 3, 2, 2, 2, 2826, 2824, 3, 2, 2, 2, 2826, 2827, 3, 2, 2, 2, 2827, 630, 3, 2, 2, 2, 2828, 2829, 9, 6, 2, 2, 2829, 632, 3, 2, 2, 2, 2830, 2831, 9, 7, 2, 2, 2831, 634, 3, 2, 2, 2, 2832, 2833, 7, 47, 2, 2, 2833, 2834, 7, 47, 2, 2, 2834, 2838, 3, 2, 2, 2, 2835, 2837, 10, 8, 2, 2, 2836, 2835, 3, 2, 2, 2, 2837, 2840, 3, 2, 2, 2, 2838, 2836, 3, 2, 2, 2, 2838, 2839, 3, 2, 2, 2, 2839, 2842, 3, 2, 2, 2, 2840, 2838, 3, 2, 2, 2, 2841, 2843, 7, 15, 2, 2, 2842, 2841, 3, 2, 2, 2, 2842, 2843, 3, 2, 2, 2, 2843, 2845, 3, 2, 2, 2, 2844, 2846, 7, 12, 2, 2, 2845, 2844, 3, 2, 2, 2, 2845, 2846, 3, 2, 2, 2, 2846, 2847, 3, 2, 2, 2, 2847, 2848, 8, 318, 2, 2, 2848, 636, 3, 2, 2, 2, 2849, 2850, 7, 49, 2, 2, 2850, 2851, 7, 44, 2, 2, 2851, 2855, 3, 2, 2, 2, 2852, 2854, 11, 2, 2, 2, 2853, 2852, 3, 2, 2, 2, 2854, 2857, 3, 2, 2, 2, 2855, 2856, 3, 2, 2, 2, 2855, 2853, 3, 2, 2, 2, 2856, 2858, 3, 2, 2, 2, 2857, 2855, 3, 2, 2, 2, 2858, 2859, 7, 44, 2, 2, 2859, 2860, 7, 49, 2, 2, 2860, 2861, 3, 2, 2, 2, 2861, 2862, 8, 319, 2, 2, 2862, 638, 3, 2, 2, 2, 2863, 2865, 9, 9, 2, 2, 2864, 2863, 3, 2, 2, 2, 2865, 2866, 3, 2, 2, 2, 2866, 2864, 3, 2, 2, 2, 2866, 2867, 3, 2, 2, 2, 2867, 2868, 3, 2, 2, 2, 2868, 2869, 8, 320, 2, 2, 2869, 640, 3, 2, 2, 2, 2870, 2871, 11, 2, 2, 2, 2871, 642, 3, 2, 2, 2, 35, 2, 2663, 2694, 2696, 2708, 2710, 2721, 2729, 2734, 2740, 2747, 2749, 2754, 2760, 2763, 2771, 2775, 2779, 2784, 2786, 2793, 2795, 2801, 2803, 2812, 2814, 2821, 2826, 2838, 2842, 2845, 2855, 2866, 3, 2, 3, 2] \ No newline at end of file diff --git a/datafusion/sql/src/antlr/presto/PrestoLexer.tokens b/datafusion/sql/src/antlr/presto/PrestoLexer.tokens new file mode 100644 index 0000000000000..67defc30afff2 --- /dev/null +++ b/datafusion/sql/src/antlr/presto/PrestoLexer.tokens @@ -0,0 +1,619 @@ +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 +ABSENT=17 +ADD=18 +ADMIN=19 +AFTER=20 +ALL=21 +ALTER=22 +ANALYZE=23 +AND=24 +ANY=25 +ARRAY=26 +AS=27 +ASC=28 +AT=29 +AUTHORIZATION=30 +BERNOULLI=31 +BETWEEN=32 +BOTH=33 +BY=34 +CALL=35 +CASCADE=36 +CASE=37 +CAST=38 +CATALOGS=39 +COLUMN=40 +COLUMNS=41 +COMMA=42 +COMMENT=43 +COMMIT=44 +COMMITTED=45 +CONDITIONAL=46 +CONSTRAINT=47 +COUNT=48 +COPARTITION=49 +CREATE=50 +CROSS=51 +CUBE=52 +CURRENT=53 +CURRENT_CATALOG=54 +CURRENT_DATE=55 +CURRENT_PATH=56 +CURRENT_ROLE=57 +CURRENT_SCHEMA=58 +CURRENT_TIME=59 +CURRENT_TIMESTAMP=60 +CURRENT_USER=61 +DATA=62 +DATE=63 +DAY=64 +DEALLOCATE=65 +DEFAULT=66 +DEFINE=67 +DEFINER=68 +DELETE=69 +DENY=70 +DESC=71 +DESCRIBE=72 +DESCRIPTOR=73 +DISTINCT=74 +DISTRIBUTED=75 +DOUBLE=76 +DROP=77 +ELSE=78 +EMPTY=79 +ENCODING=80 +END=81 +ERROR=82 +ESCAPE=83 +EXCEPT=84 +EXCLUDING=85 +EXECUTE=86 +EXISTS=87 +EXPLAIN=88 +EXTRACT=89 +FALSE=90 +FETCH=91 +FILTER=92 +FINAL=93 +FIRST=94 +FOLLOWING=95 +FOR=96 +FORMAT=97 +FROM=98 +FULL=99 +FUNCTIONS=100 +GRACE=101 +GRANT=102 +GRANTED=103 +GRANTS=104 +GRAPHVIZ=105 +GROUP=106 +GROUPING=107 +GROUPS=108 +HAVING=109 +HOUR=110 +IF=111 +IGNORE=112 +IN=113 +INCLUDING=114 +INITIAL=115 +INNER=116 +INPUT=117 +INSERT=118 +INTERSECT=119 +INTERVAL=120 +INTO=121 +INVOKER=122 +IO=123 +IS=124 +ISOLATION=125 +JOIN=126 +JSON=127 +JSON_ARRAY=128 +JSON_EXISTS=129 +JSON_OBJECT=130 +JSON_QUERY=131 +JSON_VALUE=132 +KEEP=133 +KEY=134 +KEYS=135 +LAST=136 +LATERAL=137 +LEADING=138 +LEFT=139 +LEVEL=140 +LIKE=141 +LIMIT=142 +LISTAGG=143 +LOCAL=144 +LOCALTIME=145 +LOCALTIMESTAMP=146 +LOGICAL=147 +MAP=148 +MATCH=149 +MATCHED=150 +MATCHES=151 +MATCH_RECOGNIZE=152 +MATERIALIZED=153 +MEASURES=154 +MERGE=155 +MINUTE=156 +MONTH=157 +NATURAL=158 +NEXT=159 +NFC=160 +NFD=161 +NFKC=162 +NFKD=163 +NO=164 +NONE=165 +NORMALIZE=166 +NOT=167 +NULL=168 +NULLIF=169 +NULLS=170 +OBJECT=171 +OF=172 +OFFSET=173 +OMIT=174 +ON=175 +ONE=176 +ONLY=177 +OPTION=178 +OR=179 +ORDER=180 +ORDINALITY=181 +OUTER=182 +OUTPUT=183 +OVER=184 +OVERFLOW=185 +PARTITION=186 +PARTITIONS=187 +PASSING=188 +PAST=189 +PATH=190 +PATTERN=191 +PER=192 +PERIOD=193 +PERMUTE=194 +POSITION=195 +PRECEDING=196 +PRECISION=197 +PREPARE=198 +PRIVILEGES=199 +PROPERTIES=200 +PRUNE=201 +QUOTES=202 +RANGE=203 +READ=204 +RECURSIVE=205 +REFRESH=206 +RENAME=207 +REPEATABLE=208 +REPLACE=209 +RESET=210 +RESPECT=211 +RESTRICT=212 +RETURNING=213 +REVOKE=214 +RIGHT=215 +ROLE=216 +ROLES=217 +ROLLBACK=218 +ROLLUP=219 +ROW=220 +ROWS=221 +RUNNING=222 +SCALAR=223 +SCHEMA=224 +SCHEMAS=225 +SECOND=226 +SECURITY=227 +SEEK=228 +SELECT=229 +SERIALIZABLE=230 +SESSION=231 +SET=232 +SETS=233 +SHOW=234 +SOME=235 +START=236 +STATS=237 +SUBSET=238 +SUBSTRING=239 +SYSTEM=240 +TABLE=241 +TABLES=242 +TABLESAMPLE=243 +TEXT=244 +TEXT_STRING=245 +THEN=246 +TIES=247 +TIME=248 +TIMESTAMP=249 +TO=250 +TRAILING=251 +TRANSACTION=252 +TRIM=253 +TRUE=254 +TRUNCATE=255 +TRY_CAST=256 +TYPE=257 +UESCAPE=258 +UNBOUNDED=259 +UNCOMMITTED=260 +UNCONDITIONAL=261 +UNION=262 +UNIQUE=263 +UNKNOWN=264 +UNMATCHED=265 +UNNEST=266 +UPDATE=267 +USE=268 +USER=269 +USING=270 +UTF16=271 +UTF32=272 +UTF8=273 +VALIDATE=274 +VALUE=275 +VALUES=276 +VERBOSE=277 +VERSION=278 +VIEW=279 +WHEN=280 +WHERE=281 +WINDOW=282 +WITH=283 +WITHIN=284 +WITHOUT=285 +WORK=286 +WRAPPER=287 +WRITE=288 +YEAR=289 +ZONE=290 +EQ=291 +NEQ=292 +LT=293 +LTE=294 +GT=295 +GTE=296 +PLUS=297 +MINUS=298 +ASTERISK=299 +SLASH=300 +PERCENT=301 +CONCAT=302 +QUESTION_MARK=303 +STRING=304 +UNICODE_STRING=305 +BINARY_LITERAL=306 +INTEGER_VALUE=307 +DECIMAL_VALUE=308 +DOUBLE_VALUE=309 +IDENTIFIER=310 +DIGIT_IDENTIFIER=311 +QUOTED_IDENTIFIER=312 +BACKQUOTED_IDENTIFIER=313 +SIMPLE_COMMENT=314 +BRACKETED_COMMENT=315 +WS=316 +UNRECOGNIZED=317 +'.'=1 +'('=2 +')'=3 +'SKIP'=4 +'=>'=5 +'->'=6 +'['=7 +']'=8 +':'=9 +'|'=10 +'^'=11 +'$'=12 +'{-'=13 +'-}'=14 +'{'=15 +'}'=16 +'ABSENT'=17 +'ADD'=18 +'ADMIN'=19 +'AFTER'=20 +'ALL'=21 +'ALTER'=22 +'ANALYZE'=23 +'AND'=24 +'ANY'=25 +'ARRAY'=26 +'AS'=27 +'ASC'=28 +'AT'=29 +'AUTHORIZATION'=30 +'BERNOULLI'=31 +'BETWEEN'=32 +'BOTH'=33 +'BY'=34 +'CALL'=35 +'CASCADE'=36 +'CASE'=37 +'CAST'=38 +'CATALOGS'=39 +'COLUMN'=40 +'COLUMNS'=41 +','=42 +'COMMENT'=43 +'COMMIT'=44 +'COMMITTED'=45 +'CONDITIONAL'=46 +'CONSTRAINT'=47 +'COUNT'=48 +'COPARTITION'=49 +'CREATE'=50 +'CROSS'=51 +'CUBE'=52 +'CURRENT'=53 +'CURRENT_CATALOG'=54 +'CURRENT_DATE'=55 +'CURRENT_PATH'=56 +'CURRENT_ROLE'=57 +'CURRENT_SCHEMA'=58 +'CURRENT_TIME'=59 +'CURRENT_TIMESTAMP'=60 +'CURRENT_USER'=61 +'DATA'=62 +'DATE'=63 +'DAY'=64 +'DEALLOCATE'=65 +'DEFAULT'=66 +'DEFINE'=67 +'DEFINER'=68 +'DELETE'=69 +'DENY'=70 +'DESC'=71 +'DESCRIBE'=72 +'DESCRIPTOR'=73 +'DISTINCT'=74 +'DISTRIBUTED'=75 +'DOUBLE'=76 +'DROP'=77 +'ELSE'=78 +'EMPTY'=79 +'ENCODING'=80 +'END'=81 +'ERROR'=82 +'ESCAPE'=83 +'EXCEPT'=84 +'EXCLUDING'=85 +'EXECUTE'=86 +'EXISTS'=87 +'EXPLAIN'=88 +'EXTRACT'=89 +'FALSE'=90 +'FETCH'=91 +'FILTER'=92 +'FINAL'=93 +'FIRST'=94 +'FOLLOWING'=95 +'FOR'=96 +'FORMAT'=97 +'FROM'=98 +'FULL'=99 +'FUNCTIONS'=100 +'GRACE'=101 +'GRANT'=102 +'GRANTED'=103 +'GRANTS'=104 +'GRAPHVIZ'=105 +'GROUP'=106 +'GROUPING'=107 +'GROUPS'=108 +'HAVING'=109 +'HOUR'=110 +'IF'=111 +'IGNORE'=112 +'IN'=113 +'INCLUDING'=114 +'INITIAL'=115 +'INNER'=116 +'INPUT'=117 +'INSERT'=118 +'INTERSECT'=119 +'INTERVAL'=120 +'INTO'=121 +'INVOKER'=122 +'IO'=123 +'IS'=124 +'ISOLATION'=125 +'JOIN'=126 +'JSON'=127 +'JSON_ARRAY'=128 +'JSON_EXISTS'=129 +'JSON_OBJECT'=130 +'JSON_QUERY'=131 +'JSON_VALUE'=132 +'KEEP'=133 +'KEY'=134 +'KEYS'=135 +'LAST'=136 +'LATERAL'=137 +'LEADING'=138 +'LEFT'=139 +'LEVEL'=140 +'LIKE'=141 +'LIMIT'=142 +'LISTAGG'=143 +'LOCAL'=144 +'LOCALTIME'=145 +'LOCALTIMESTAMP'=146 +'LOGICAL'=147 +'MAP'=148 +'MATCH'=149 +'MATCHED'=150 +'MATCHES'=151 +'MATCH_RECOGNIZE'=152 +'MATERIALIZED'=153 +'MEASURES'=154 +'MERGE'=155 +'MINUTE'=156 +'MONTH'=157 +'NATURAL'=158 +'NEXT'=159 +'NFC'=160 +'NFD'=161 +'NFKC'=162 +'NFKD'=163 +'NO'=164 +'NONE'=165 +'NORMALIZE'=166 +'NOT'=167 +'NULL'=168 +'NULLIF'=169 +'NULLS'=170 +'OBJECT'=171 +'OF'=172 +'OFFSET'=173 +'OMIT'=174 +'ON'=175 +'ONE'=176 +'ONLY'=177 +'OPTION'=178 +'OR'=179 +'ORDER'=180 +'ORDINALITY'=181 +'OUTER'=182 +'OUTPUT'=183 +'OVER'=184 +'OVERFLOW'=185 +'PARTITION'=186 +'PARTITIONS'=187 +'PASSING'=188 +'PAST'=189 +'PATH'=190 +'PATTERN'=191 +'PER'=192 +'PERIOD'=193 +'PERMUTE'=194 +'POSITION'=195 +'PRECEDING'=196 +'PRECISION'=197 +'PREPARE'=198 +'PRIVILEGES'=199 +'PROPERTIES'=200 +'PRUNE'=201 +'QUOTES'=202 +'RANGE'=203 +'READ'=204 +'RECURSIVE'=205 +'REFRESH'=206 +'RENAME'=207 +'REPEATABLE'=208 +'REPLACE'=209 +'RESET'=210 +'RESPECT'=211 +'RESTRICT'=212 +'RETURNING'=213 +'REVOKE'=214 +'RIGHT'=215 +'ROLE'=216 +'ROLES'=217 +'ROLLBACK'=218 +'ROLLUP'=219 +'ROW'=220 +'ROWS'=221 +'RUNNING'=222 +'SCALAR'=223 +'SCHEMA'=224 +'SCHEMAS'=225 +'SECOND'=226 +'SECURITY'=227 +'SEEK'=228 +'SELECT'=229 +'SERIALIZABLE'=230 +'SESSION'=231 +'SET'=232 +'SETS'=233 +'SHOW'=234 +'SOME'=235 +'START'=236 +'STATS'=237 +'SUBSET'=238 +'SUBSTRING'=239 +'SYSTEM'=240 +'TABLE'=241 +'TABLES'=242 +'TABLESAMPLE'=243 +'TEXT'=244 +'STRING'=245 +'THEN'=246 +'TIES'=247 +'TIME'=248 +'TIMESTAMP'=249 +'TO'=250 +'TRAILING'=251 +'TRANSACTION'=252 +'TRIM'=253 +'TRUE'=254 +'TRUNCATE'=255 +'TRY_CAST'=256 +'TYPE'=257 +'UESCAPE'=258 +'UNBOUNDED'=259 +'UNCOMMITTED'=260 +'UNCONDITIONAL'=261 +'UNION'=262 +'UNIQUE'=263 +'UNKNOWN'=264 +'UNMATCHED'=265 +'UNNEST'=266 +'UPDATE'=267 +'USE'=268 +'USER'=269 +'USING'=270 +'UTF16'=271 +'UTF32'=272 +'UTF8'=273 +'VALIDATE'=274 +'VALUE'=275 +'VALUES'=276 +'VERBOSE'=277 +'VERSION'=278 +'VIEW'=279 +'WHEN'=280 +'WHERE'=281 +'WINDOW'=282 +'WITH'=283 +'WITHIN'=284 +'WITHOUT'=285 +'WORK'=286 +'WRAPPER'=287 +'WRITE'=288 +'YEAR'=289 +'ZONE'=290 +'='=291 +'<'=293 +'<='=294 +'>'=295 +'>='=296 +'+'=297 +'-'=298 +'*'=299 +'/'=300 +'%'=301 +'||'=302 +'?'=303 diff --git a/datafusion/sql/src/antlr/presto/prestolexer.rs b/datafusion/sql/src/antlr/presto/prestolexer.rs new file mode 100644 index 0000000000000..0a034442da18a --- /dev/null +++ b/datafusion/sql/src/antlr/presto/prestolexer.rs @@ -0,0 +1,2315 @@ +// Generated from Presto.g4 by ANTLR 4.8 +#![allow(dead_code)] +#![allow(nonstandard_style)] +#![allow(unused_imports)] +#![allow(unused_variables)] +use antlr_rust::atn::ATN; +use antlr_rust::char_stream::CharStream; +use antlr_rust::int_stream::IntStream; +use antlr_rust::lexer::{BaseLexer, Lexer, LexerRecog}; +use antlr_rust::atn_deserializer::ATNDeserializer; +use antlr_rust::dfa::DFA; +use antlr_rust::lexer_atn_simulator::{LexerATNSimulator, ILexerATNSimulator}; +use antlr_rust::PredictionContextCache; +use antlr_rust::recognizer::{Recognizer,Actions}; +use antlr_rust::error_listener::ErrorListener; +use antlr_rust::TokenSource; +use antlr_rust::token_factory::{TokenFactory,CommonTokenFactory,TokenAware}; +use antlr_rust::token::*; +use antlr_rust::rule_context::{BaseRuleContext,EmptyCustomRuleContext,EmptyContext}; +use antlr_rust::parser_rule_context::{ParserRuleContext,BaseParserRuleContext,cast}; +use antlr_rust::vocabulary::{Vocabulary,VocabularyImpl}; + +use antlr_rust::{lazy_static,Tid,TidAble,TidExt}; + +use std::sync::Arc; +use std::cell::RefCell; +use std::rc::Rc; +use std::marker::PhantomData; +use std::ops::{Deref, DerefMut}; + + + pub const T__0:isize=1; + pub const T__1:isize=2; + pub const T__2:isize=3; + pub const T__3:isize=4; + pub const T__4:isize=5; + pub const T__5:isize=6; + pub const T__6:isize=7; + pub const T__7:isize=8; + pub const T__8:isize=9; + pub const T__9:isize=10; + pub const T__10:isize=11; + pub const T__11:isize=12; + pub const T__12:isize=13; + pub const T__13:isize=14; + pub const T__14:isize=15; + pub const T__15:isize=16; + pub const ABSENT:isize=17; + pub const ADD:isize=18; + pub const ADMIN:isize=19; + pub const AFTER:isize=20; + pub const ALL:isize=21; + pub const ALTER:isize=22; + pub const ANALYZE:isize=23; + pub const AND:isize=24; + pub const ANY:isize=25; + pub const ARRAY:isize=26; + pub const AS:isize=27; + pub const ASC:isize=28; + pub const AT:isize=29; + pub const AUTHORIZATION:isize=30; + pub const BERNOULLI:isize=31; + pub const BETWEEN:isize=32; + pub const BOTH:isize=33; + pub const BY:isize=34; + pub const CALL:isize=35; + pub const CASCADE:isize=36; + pub const CASE:isize=37; + pub const CAST:isize=38; + pub const CATALOGS:isize=39; + pub const COLUMN:isize=40; + pub const COLUMNS:isize=41; + pub const COMMA:isize=42; + pub const COMMENT:isize=43; + pub const COMMIT:isize=44; + pub const COMMITTED:isize=45; + pub const CONDITIONAL:isize=46; + pub const CONSTRAINT:isize=47; + pub const COUNT:isize=48; + pub const COPARTITION:isize=49; + pub const CREATE:isize=50; + pub const CROSS:isize=51; + pub const CUBE:isize=52; + pub const CURRENT:isize=53; + pub const CURRENT_CATALOG:isize=54; + pub const CURRENT_DATE:isize=55; + pub const CURRENT_PATH:isize=56; + pub const CURRENT_ROLE:isize=57; + pub const CURRENT_SCHEMA:isize=58; + pub const CURRENT_TIME:isize=59; + pub const CURRENT_TIMESTAMP:isize=60; + pub const CURRENT_USER:isize=61; + pub const DATA:isize=62; + pub const DATE:isize=63; + pub const DAY:isize=64; + pub const DEALLOCATE:isize=65; + pub const DEFAULT:isize=66; + pub const DEFINE:isize=67; + pub const DEFINER:isize=68; + pub const DELETE:isize=69; + pub const DENY:isize=70; + pub const DESC:isize=71; + pub const DESCRIBE:isize=72; + pub const DESCRIPTOR:isize=73; + pub const DISTINCT:isize=74; + pub const DISTRIBUTED:isize=75; + pub const DOUBLE:isize=76; + pub const DROP:isize=77; + pub const ELSE:isize=78; + pub const EMPTY:isize=79; + pub const ENCODING:isize=80; + pub const END:isize=81; + pub const ERROR:isize=82; + pub const ESCAPE:isize=83; + pub const EXCEPT:isize=84; + pub const EXCLUDING:isize=85; + pub const EXECUTE:isize=86; + pub const EXISTS:isize=87; + pub const EXPLAIN:isize=88; + pub const EXTRACT:isize=89; + pub const FALSE:isize=90; + pub const FETCH:isize=91; + pub const FILTER:isize=92; + pub const FINAL:isize=93; + pub const FIRST:isize=94; + pub const FOLLOWING:isize=95; + pub const FOR:isize=96; + pub const FORMAT:isize=97; + pub const FROM:isize=98; + pub const FULL:isize=99; + pub const FUNCTIONS:isize=100; + pub const GRACE:isize=101; + pub const GRANT:isize=102; + pub const GRANTED:isize=103; + pub const GRANTS:isize=104; + pub const GRAPHVIZ:isize=105; + pub const GROUP:isize=106; + pub const GROUPING:isize=107; + pub const GROUPS:isize=108; + pub const HAVING:isize=109; + pub const HOUR:isize=110; + pub const IF:isize=111; + pub const IGNORE:isize=112; + pub const IN:isize=113; + pub const INCLUDING:isize=114; + pub const INITIAL:isize=115; + pub const INNER:isize=116; + pub const INPUT:isize=117; + pub const INSERT:isize=118; + pub const INTERSECT:isize=119; + pub const INTERVAL:isize=120; + pub const INTO:isize=121; + pub const INVOKER:isize=122; + pub const IO:isize=123; + pub const IS:isize=124; + pub const ISOLATION:isize=125; + pub const JOIN:isize=126; + pub const JSON:isize=127; + pub const JSON_ARRAY:isize=128; + pub const JSON_EXISTS:isize=129; + pub const JSON_OBJECT:isize=130; + pub const JSON_QUERY:isize=131; + pub const JSON_VALUE:isize=132; + pub const KEEP:isize=133; + pub const KEY:isize=134; + pub const KEYS:isize=135; + pub const LAST:isize=136; + pub const LATERAL:isize=137; + pub const LEADING:isize=138; + pub const LEFT:isize=139; + pub const LEVEL:isize=140; + pub const LIKE:isize=141; + pub const LIMIT:isize=142; + pub const LISTAGG:isize=143; + pub const LOCAL:isize=144; + pub const LOCALTIME:isize=145; + pub const LOCALTIMESTAMP:isize=146; + pub const LOGICAL:isize=147; + pub const MAP:isize=148; + pub const MATCH:isize=149; + pub const MATCHED:isize=150; + pub const MATCHES:isize=151; + pub const MATCH_RECOGNIZE:isize=152; + pub const MATERIALIZED:isize=153; + pub const MEASURES:isize=154; + pub const MERGE:isize=155; + pub const MINUTE:isize=156; + pub const MONTH:isize=157; + pub const NATURAL:isize=158; + pub const NEXT:isize=159; + pub const NFC:isize=160; + pub const NFD:isize=161; + pub const NFKC:isize=162; + pub const NFKD:isize=163; + pub const NO:isize=164; + pub const NONE:isize=165; + pub const NORMALIZE:isize=166; + pub const NOT:isize=167; + pub const NULL:isize=168; + pub const NULLIF:isize=169; + pub const NULLS:isize=170; + pub const OBJECT:isize=171; + pub const OF:isize=172; + pub const OFFSET:isize=173; + pub const OMIT:isize=174; + pub const ON:isize=175; + pub const ONE:isize=176; + pub const ONLY:isize=177; + pub const OPTION:isize=178; + pub const OR:isize=179; + pub const ORDER:isize=180; + pub const ORDINALITY:isize=181; + pub const OUTER:isize=182; + pub const OUTPUT:isize=183; + pub const OVER:isize=184; + pub const OVERFLOW:isize=185; + pub const PARTITION:isize=186; + pub const PARTITIONS:isize=187; + pub const PASSING:isize=188; + pub const PAST:isize=189; + pub const PATH:isize=190; + pub const PATTERN:isize=191; + pub const PER:isize=192; + pub const PERIOD:isize=193; + pub const PERMUTE:isize=194; + pub const POSITION:isize=195; + pub const PRECEDING:isize=196; + pub const PRECISION:isize=197; + pub const PREPARE:isize=198; + pub const PRIVILEGES:isize=199; + pub const PROPERTIES:isize=200; + pub const PRUNE:isize=201; + pub const QUOTES:isize=202; + pub const RANGE:isize=203; + pub const READ:isize=204; + pub const RECURSIVE:isize=205; + pub const REFRESH:isize=206; + pub const RENAME:isize=207; + pub const REPEATABLE:isize=208; + pub const REPLACE:isize=209; + pub const RESET:isize=210; + pub const RESPECT:isize=211; + pub const RESTRICT:isize=212; + pub const RETURNING:isize=213; + pub const REVOKE:isize=214; + pub const RIGHT:isize=215; + pub const ROLE:isize=216; + pub const ROLES:isize=217; + pub const ROLLBACK:isize=218; + pub const ROLLUP:isize=219; + pub const ROW:isize=220; + pub const ROWS:isize=221; + pub const RUNNING:isize=222; + pub const SCALAR:isize=223; + pub const SCHEMA:isize=224; + pub const SCHEMAS:isize=225; + pub const SECOND:isize=226; + pub const SECURITY:isize=227; + pub const SEEK:isize=228; + pub const SELECT:isize=229; + pub const SERIALIZABLE:isize=230; + pub const SESSION:isize=231; + pub const SET:isize=232; + pub const SETS:isize=233; + pub const SHOW:isize=234; + pub const SOME:isize=235; + pub const START:isize=236; + pub const STATS:isize=237; + pub const SUBSET:isize=238; + pub const SUBSTRING:isize=239; + pub const SYSTEM:isize=240; + pub const TABLE:isize=241; + pub const TABLES:isize=242; + pub const TABLESAMPLE:isize=243; + pub const TEXT:isize=244; + pub const TEXT_STRING:isize=245; + pub const THEN:isize=246; + pub const TIES:isize=247; + pub const TIME:isize=248; + pub const TIMESTAMP:isize=249; + pub const TO:isize=250; + pub const TRAILING:isize=251; + pub const TRANSACTION:isize=252; + pub const TRIM:isize=253; + pub const TRUE:isize=254; + pub const TRUNCATE:isize=255; + pub const TRY_CAST:isize=256; + pub const TYPE:isize=257; + pub const UESCAPE:isize=258; + pub const UNBOUNDED:isize=259; + pub const UNCOMMITTED:isize=260; + pub const UNCONDITIONAL:isize=261; + pub const UNION:isize=262; + pub const UNIQUE:isize=263; + pub const UNKNOWN:isize=264; + pub const UNMATCHED:isize=265; + pub const UNNEST:isize=266; + pub const UPDATE:isize=267; + pub const USE:isize=268; + pub const USER:isize=269; + pub const USING:isize=270; + pub const UTF16:isize=271; + pub const UTF32:isize=272; + pub const UTF8:isize=273; + pub const VALIDATE:isize=274; + pub const VALUE:isize=275; + pub const VALUES:isize=276; + pub const VERBOSE:isize=277; + pub const VERSION:isize=278; + pub const VIEW:isize=279; + pub const WHEN:isize=280; + pub const WHERE:isize=281; + pub const WINDOW:isize=282; + pub const WITH:isize=283; + pub const WITHIN:isize=284; + pub const WITHOUT:isize=285; + pub const WORK:isize=286; + pub const WRAPPER:isize=287; + pub const WRITE:isize=288; + pub const YEAR:isize=289; + pub const ZONE:isize=290; + pub const EQ:isize=291; + pub const NEQ:isize=292; + pub const LT:isize=293; + pub const LTE:isize=294; + pub const GT:isize=295; + pub const GTE:isize=296; + pub const PLUS:isize=297; + pub const MINUS:isize=298; + pub const ASTERISK:isize=299; + pub const SLASH:isize=300; + pub const PERCENT:isize=301; + pub const CONCAT:isize=302; + pub const QUESTION_MARK:isize=303; + pub const STRING:isize=304; + pub const UNICODE_STRING:isize=305; + pub const BINARY_LITERAL:isize=306; + pub const INTEGER_VALUE:isize=307; + pub const DECIMAL_VALUE:isize=308; + pub const DOUBLE_VALUE:isize=309; + pub const IDENTIFIER:isize=310; + pub const DIGIT_IDENTIFIER:isize=311; + pub const QUOTED_IDENTIFIER:isize=312; + pub const BACKQUOTED_IDENTIFIER:isize=313; + pub const SIMPLE_COMMENT:isize=314; + pub const BRACKETED_COMMENT:isize=315; + pub const WS:isize=316; + pub const UNRECOGNIZED:isize=317; + pub const channelNames: [&'static str;0+2] = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + ]; + + pub const modeNames: [&'static str;1] = [ + "DEFAULT_MODE" + ]; + + pub const ruleNames: [&'static str;320] = [ + "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", "ABSENT", + "ADD", "ADMIN", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "ANY", "ARRAY", + "AS", "ASC", "AT", "AUTHORIZATION", "BERNOULLI", "BETWEEN", "BOTH", "BY", + "CALL", "CASCADE", "CASE", "CAST", "CATALOGS", "COLUMN", "COLUMNS", "COMMA", + "COMMENT", "COMMIT", "COMMITTED", "CONDITIONAL", "CONSTRAINT", "COUNT", + "COPARTITION", "CREATE", "CROSS", "CUBE", "CURRENT", "CURRENT_CATALOG", + "CURRENT_DATE", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_TIME", + "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", "DATE", "DAY", "DEALLOCATE", + "DEFAULT", "DEFINE", "DEFINER", "DELETE", "DENY", "DESC", "DESCRIBE", + "DESCRIPTOR", "DISTINCT", "DISTRIBUTED", "DOUBLE", "DROP", "ELSE", "EMPTY", + "ENCODING", "END", "ERROR", "ESCAPE", "EXCEPT", "EXCLUDING", "EXECUTE", + "EXISTS", "EXPLAIN", "EXTRACT", "FALSE", "FETCH", "FILTER", "FINAL", "FIRST", + "FOLLOWING", "FOR", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRACE", "GRANT", + "GRANTED", "GRANTS", "GRAPHVIZ", "GROUP", "GROUPING", "GROUPS", "HAVING", + "HOUR", "IF", "IGNORE", "IN", "INCLUDING", "INITIAL", "INNER", "INPUT", + "INSERT", "INTERSECT", "INTERVAL", "INTO", "INVOKER", "IO", "IS", "ISOLATION", + "JOIN", "JSON", "JSON_ARRAY", "JSON_EXISTS", "JSON_OBJECT", "JSON_QUERY", + "JSON_VALUE", "KEEP", "KEY", "KEYS", "LAST", "LATERAL", "LEADING", "LEFT", + "LEVEL", "LIKE", "LIMIT", "LISTAGG", "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", + "OBJECT", "OF", "OFFSET", "OMIT", "ON", "ONE", "ONLY", "OPTION", "OR", + "ORDER", "ORDINALITY", "OUTER", "OUTPUT", "OVER", "OVERFLOW", "PARTITION", + "PARTITIONS", "PASSING", "PAST", "PATH", "PATTERN", "PER", "PERIOD", "PERMUTE", + "POSITION", "PRECEDING", "PRECISION", "PREPARE", "PRIVILEGES", "PROPERTIES", + "PRUNE", "QUOTES", "RANGE", "READ", "RECURSIVE", "REFRESH", "RENAME", + "REPEATABLE", "REPLACE", "RESET", "RESPECT", "RESTRICT", "RETURNING", + "REVOKE", "RIGHT", "ROLE", "ROLES", "ROLLBACK", "ROLLUP", "ROW", "ROWS", + "RUNNING", "SCALAR", "SCHEMA", "SCHEMAS", "SECOND", "SECURITY", "SEEK", + "SELECT", "SERIALIZABLE", "SESSION", "SET", "SETS", "SHOW", "SOME", "START", + "STATS", "SUBSET", "SUBSTRING", "SYSTEM", "TABLE", "TABLES", "TABLESAMPLE", + "TEXT", "TEXT_STRING", "THEN", "TIES", "TIME", "TIMESTAMP", "TO", "TRAILING", + "TRANSACTION", "TRIM", "TRUE", "TRUNCATE", "TRY_CAST", "TYPE", "UESCAPE", + "UNBOUNDED", "UNCOMMITTED", "UNCONDITIONAL", "UNION", "UNIQUE", "UNKNOWN", + "UNMATCHED", "UNNEST", "UPDATE", "USE", "USER", "USING", "UTF16", "UTF32", + "UTF8", "VALIDATE", "VALUE", "VALUES", "VERBOSE", "VERSION", "VIEW", "WHEN", + "WHERE", "WINDOW", "WITH", "WITHIN", "WITHOUT", "WORK", "WRAPPER", "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", "EXPONENT", + "DIGIT", "LETTER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" + ]; + + + pub const _LITERAL_NAMES: [Option<&'static str>;304] = [ + None, Some("'.'"), Some("'('"), Some("')'"), Some("'SKIP'"), Some("'=>'"), + Some("'->'"), Some("'['"), Some("']'"), Some("':'"), Some("'|'"), Some("'^'"), + Some("'$'"), Some("'{-'"), Some("'-}'"), Some("'{'"), Some("'}'"), Some("'ABSENT'"), + Some("'ADD'"), Some("'ADMIN'"), Some("'AFTER'"), Some("'ALL'"), Some("'ALTER'"), + Some("'ANALYZE'"), Some("'AND'"), Some("'ANY'"), Some("'ARRAY'"), Some("'AS'"), + Some("'ASC'"), Some("'AT'"), Some("'AUTHORIZATION'"), Some("'BERNOULLI'"), + Some("'BETWEEN'"), Some("'BOTH'"), Some("'BY'"), Some("'CALL'"), Some("'CASCADE'"), + Some("'CASE'"), Some("'CAST'"), Some("'CATALOGS'"), Some("'COLUMN'"), + Some("'COLUMNS'"), Some("','"), Some("'COMMENT'"), Some("'COMMIT'"), Some("'COMMITTED'"), + Some("'CONDITIONAL'"), Some("'CONSTRAINT'"), Some("'COUNT'"), Some("'COPARTITION'"), + Some("'CREATE'"), Some("'CROSS'"), Some("'CUBE'"), Some("'CURRENT'"), + Some("'CURRENT_CATALOG'"), Some("'CURRENT_DATE'"), Some("'CURRENT_PATH'"), + Some("'CURRENT_ROLE'"), Some("'CURRENT_SCHEMA'"), Some("'CURRENT_TIME'"), + Some("'CURRENT_TIMESTAMP'"), Some("'CURRENT_USER'"), Some("'DATA'"), Some("'DATE'"), + Some("'DAY'"), Some("'DEALLOCATE'"), Some("'DEFAULT'"), Some("'DEFINE'"), + Some("'DEFINER'"), Some("'DELETE'"), Some("'DENY'"), Some("'DESC'"), Some("'DESCRIBE'"), + Some("'DESCRIPTOR'"), Some("'DISTINCT'"), Some("'DISTRIBUTED'"), Some("'DOUBLE'"), + Some("'DROP'"), Some("'ELSE'"), Some("'EMPTY'"), Some("'ENCODING'"), Some("'END'"), + Some("'ERROR'"), Some("'ESCAPE'"), Some("'EXCEPT'"), Some("'EXCLUDING'"), + Some("'EXECUTE'"), Some("'EXISTS'"), Some("'EXPLAIN'"), Some("'EXTRACT'"), + Some("'FALSE'"), Some("'FETCH'"), Some("'FILTER'"), Some("'FINAL'"), Some("'FIRST'"), + Some("'FOLLOWING'"), Some("'FOR'"), Some("'FORMAT'"), Some("'FROM'"), + Some("'FULL'"), Some("'FUNCTIONS'"), Some("'GRACE'"), Some("'GRANT'"), + Some("'GRANTED'"), Some("'GRANTS'"), Some("'GRAPHVIZ'"), Some("'GROUP'"), + Some("'GROUPING'"), Some("'GROUPS'"), Some("'HAVING'"), Some("'HOUR'"), + Some("'IF'"), Some("'IGNORE'"), Some("'IN'"), Some("'INCLUDING'"), Some("'INITIAL'"), + Some("'INNER'"), Some("'INPUT'"), Some("'INSERT'"), Some("'INTERSECT'"), + Some("'INTERVAL'"), Some("'INTO'"), Some("'INVOKER'"), Some("'IO'"), Some("'IS'"), + Some("'ISOLATION'"), Some("'JOIN'"), Some("'JSON'"), Some("'JSON_ARRAY'"), + Some("'JSON_EXISTS'"), Some("'JSON_OBJECT'"), Some("'JSON_QUERY'"), Some("'JSON_VALUE'"), + Some("'KEEP'"), Some("'KEY'"), Some("'KEYS'"), Some("'LAST'"), Some("'LATERAL'"), + Some("'LEADING'"), Some("'LEFT'"), Some("'LEVEL'"), Some("'LIKE'"), Some("'LIMIT'"), + Some("'LISTAGG'"), Some("'LOCAL'"), Some("'LOCALTIME'"), Some("'LOCALTIMESTAMP'"), + Some("'LOGICAL'"), Some("'MAP'"), Some("'MATCH'"), Some("'MATCHED'"), + Some("'MATCHES'"), Some("'MATCH_RECOGNIZE'"), Some("'MATERIALIZED'"), + Some("'MEASURES'"), Some("'MERGE'"), Some("'MINUTE'"), Some("'MONTH'"), + Some("'NATURAL'"), Some("'NEXT'"), Some("'NFC'"), Some("'NFD'"), Some("'NFKC'"), + Some("'NFKD'"), Some("'NO'"), Some("'NONE'"), Some("'NORMALIZE'"), Some("'NOT'"), + Some("'NULL'"), Some("'NULLIF'"), Some("'NULLS'"), Some("'OBJECT'"), Some("'OF'"), + Some("'OFFSET'"), Some("'OMIT'"), Some("'ON'"), Some("'ONE'"), Some("'ONLY'"), + Some("'OPTION'"), Some("'OR'"), Some("'ORDER'"), Some("'ORDINALITY'"), + Some("'OUTER'"), Some("'OUTPUT'"), Some("'OVER'"), Some("'OVERFLOW'"), + Some("'PARTITION'"), Some("'PARTITIONS'"), Some("'PASSING'"), Some("'PAST'"), + Some("'PATH'"), Some("'PATTERN'"), Some("'PER'"), Some("'PERIOD'"), Some("'PERMUTE'"), + Some("'POSITION'"), Some("'PRECEDING'"), Some("'PRECISION'"), Some("'PREPARE'"), + Some("'PRIVILEGES'"), Some("'PROPERTIES'"), Some("'PRUNE'"), Some("'QUOTES'"), + Some("'RANGE'"), Some("'READ'"), Some("'RECURSIVE'"), Some("'REFRESH'"), + Some("'RENAME'"), Some("'REPEATABLE'"), Some("'REPLACE'"), Some("'RESET'"), + Some("'RESPECT'"), Some("'RESTRICT'"), Some("'RETURNING'"), Some("'REVOKE'"), + Some("'RIGHT'"), Some("'ROLE'"), Some("'ROLES'"), Some("'ROLLBACK'"), + Some("'ROLLUP'"), Some("'ROW'"), Some("'ROWS'"), Some("'RUNNING'"), Some("'SCALAR'"), + Some("'SCHEMA'"), Some("'SCHEMAS'"), Some("'SECOND'"), Some("'SECURITY'"), + Some("'SEEK'"), Some("'SELECT'"), Some("'SERIALIZABLE'"), Some("'SESSION'"), + Some("'SET'"), Some("'SETS'"), Some("'SHOW'"), Some("'SOME'"), Some("'START'"), + Some("'STATS'"), Some("'SUBSET'"), Some("'SUBSTRING'"), Some("'SYSTEM'"), + Some("'TABLE'"), Some("'TABLES'"), Some("'TABLESAMPLE'"), Some("'TEXT'"), + Some("'STRING'"), Some("'THEN'"), Some("'TIES'"), Some("'TIME'"), Some("'TIMESTAMP'"), + Some("'TO'"), Some("'TRAILING'"), Some("'TRANSACTION'"), Some("'TRIM'"), + Some("'TRUE'"), Some("'TRUNCATE'"), Some("'TRY_CAST'"), Some("'TYPE'"), + Some("'UESCAPE'"), Some("'UNBOUNDED'"), Some("'UNCOMMITTED'"), Some("'UNCONDITIONAL'"), + Some("'UNION'"), Some("'UNIQUE'"), Some("'UNKNOWN'"), Some("'UNMATCHED'"), + Some("'UNNEST'"), Some("'UPDATE'"), Some("'USE'"), Some("'USER'"), Some("'USING'"), + Some("'UTF16'"), Some("'UTF32'"), Some("'UTF8'"), Some("'VALIDATE'"), + Some("'VALUE'"), Some("'VALUES'"), Some("'VERBOSE'"), Some("'VERSION'"), + Some("'VIEW'"), Some("'WHEN'"), Some("'WHERE'"), Some("'WINDOW'"), Some("'WITH'"), + Some("'WITHIN'"), Some("'WITHOUT'"), Some("'WORK'"), Some("'WRAPPER'"), + Some("'WRITE'"), Some("'YEAR'"), Some("'ZONE'"), Some("'='"), None, Some("'<'"), + Some("'<='"), Some("'>'"), Some("'>='"), Some("'+'"), Some("'-'"), Some("'*'"), + Some("'/'"), Some("'%'"), Some("'||'"), Some("'?'") + ]; + pub const _SYMBOLIC_NAMES: [Option<&'static str>;318] = [ + None, None, None, None, None, None, None, None, None, None, None, None, + None, None, None, None, None, Some("ABSENT"), Some("ADD"), Some("ADMIN"), + Some("AFTER"), Some("ALL"), Some("ALTER"), Some("ANALYZE"), Some("AND"), + Some("ANY"), Some("ARRAY"), Some("AS"), Some("ASC"), Some("AT"), Some("AUTHORIZATION"), + Some("BERNOULLI"), Some("BETWEEN"), Some("BOTH"), Some("BY"), Some("CALL"), + Some("CASCADE"), Some("CASE"), Some("CAST"), Some("CATALOGS"), Some("COLUMN"), + Some("COLUMNS"), Some("COMMA"), Some("COMMENT"), Some("COMMIT"), Some("COMMITTED"), + Some("CONDITIONAL"), Some("CONSTRAINT"), Some("COUNT"), Some("COPARTITION"), + Some("CREATE"), Some("CROSS"), Some("CUBE"), Some("CURRENT"), Some("CURRENT_CATALOG"), + Some("CURRENT_DATE"), Some("CURRENT_PATH"), Some("CURRENT_ROLE"), Some("CURRENT_SCHEMA"), + Some("CURRENT_TIME"), Some("CURRENT_TIMESTAMP"), Some("CURRENT_USER"), + Some("DATA"), Some("DATE"), Some("DAY"), Some("DEALLOCATE"), Some("DEFAULT"), + Some("DEFINE"), Some("DEFINER"), Some("DELETE"), Some("DENY"), Some("DESC"), + Some("DESCRIBE"), Some("DESCRIPTOR"), Some("DISTINCT"), Some("DISTRIBUTED"), + Some("DOUBLE"), Some("DROP"), Some("ELSE"), Some("EMPTY"), Some("ENCODING"), + Some("END"), Some("ERROR"), Some("ESCAPE"), Some("EXCEPT"), Some("EXCLUDING"), + Some("EXECUTE"), Some("EXISTS"), Some("EXPLAIN"), Some("EXTRACT"), Some("FALSE"), + Some("FETCH"), Some("FILTER"), Some("FINAL"), Some("FIRST"), Some("FOLLOWING"), + Some("FOR"), Some("FORMAT"), Some("FROM"), Some("FULL"), Some("FUNCTIONS"), + Some("GRACE"), Some("GRANT"), Some("GRANTED"), Some("GRANTS"), Some("GRAPHVIZ"), + Some("GROUP"), Some("GROUPING"), Some("GROUPS"), Some("HAVING"), Some("HOUR"), + Some("IF"), Some("IGNORE"), Some("IN"), Some("INCLUDING"), Some("INITIAL"), + Some("INNER"), Some("INPUT"), Some("INSERT"), Some("INTERSECT"), Some("INTERVAL"), + Some("INTO"), Some("INVOKER"), Some("IO"), Some("IS"), Some("ISOLATION"), + Some("JOIN"), Some("JSON"), Some("JSON_ARRAY"), Some("JSON_EXISTS"), Some("JSON_OBJECT"), + Some("JSON_QUERY"), Some("JSON_VALUE"), Some("KEEP"), Some("KEY"), Some("KEYS"), + Some("LAST"), Some("LATERAL"), Some("LEADING"), Some("LEFT"), Some("LEVEL"), + Some("LIKE"), Some("LIMIT"), Some("LISTAGG"), Some("LOCAL"), Some("LOCALTIME"), + Some("LOCALTIMESTAMP"), Some("LOGICAL"), Some("MAP"), Some("MATCH"), Some("MATCHED"), + Some("MATCHES"), Some("MATCH_RECOGNIZE"), Some("MATERIALIZED"), Some("MEASURES"), + Some("MERGE"), Some("MINUTE"), Some("MONTH"), Some("NATURAL"), Some("NEXT"), + Some("NFC"), Some("NFD"), Some("NFKC"), Some("NFKD"), Some("NO"), Some("NONE"), + Some("NORMALIZE"), Some("NOT"), Some("NULL"), Some("NULLIF"), Some("NULLS"), + Some("OBJECT"), Some("OF"), Some("OFFSET"), Some("OMIT"), Some("ON"), + Some("ONE"), Some("ONLY"), Some("OPTION"), Some("OR"), Some("ORDER"), + Some("ORDINALITY"), Some("OUTER"), Some("OUTPUT"), Some("OVER"), Some("OVERFLOW"), + Some("PARTITION"), Some("PARTITIONS"), Some("PASSING"), Some("PAST"), + Some("PATH"), Some("PATTERN"), Some("PER"), Some("PERIOD"), Some("PERMUTE"), + Some("POSITION"), Some("PRECEDING"), Some("PRECISION"), Some("PREPARE"), + Some("PRIVILEGES"), Some("PROPERTIES"), Some("PRUNE"), Some("QUOTES"), + Some("RANGE"), Some("READ"), Some("RECURSIVE"), Some("REFRESH"), Some("RENAME"), + Some("REPEATABLE"), Some("REPLACE"), Some("RESET"), Some("RESPECT"), Some("RESTRICT"), + Some("RETURNING"), Some("REVOKE"), Some("RIGHT"), Some("ROLE"), Some("ROLES"), + Some("ROLLBACK"), Some("ROLLUP"), Some("ROW"), Some("ROWS"), Some("RUNNING"), + Some("SCALAR"), Some("SCHEMA"), Some("SCHEMAS"), Some("SECOND"), Some("SECURITY"), + Some("SEEK"), Some("SELECT"), Some("SERIALIZABLE"), Some("SESSION"), Some("SET"), + Some("SETS"), Some("SHOW"), Some("SOME"), Some("START"), Some("STATS"), + Some("SUBSET"), Some("SUBSTRING"), Some("SYSTEM"), Some("TABLE"), Some("TABLES"), + Some("TABLESAMPLE"), Some("TEXT"), Some("TEXT_STRING"), Some("THEN"), + Some("TIES"), Some("TIME"), Some("TIMESTAMP"), Some("TO"), Some("TRAILING"), + Some("TRANSACTION"), Some("TRIM"), Some("TRUE"), Some("TRUNCATE"), Some("TRY_CAST"), + Some("TYPE"), Some("UESCAPE"), Some("UNBOUNDED"), Some("UNCOMMITTED"), + Some("UNCONDITIONAL"), Some("UNION"), Some("UNIQUE"), Some("UNKNOWN"), + Some("UNMATCHED"), Some("UNNEST"), Some("UPDATE"), Some("USE"), Some("USER"), + Some("USING"), Some("UTF16"), Some("UTF32"), Some("UTF8"), Some("VALIDATE"), + Some("VALUE"), Some("VALUES"), Some("VERBOSE"), Some("VERSION"), Some("VIEW"), + Some("WHEN"), Some("WHERE"), Some("WINDOW"), Some("WITH"), Some("WITHIN"), + Some("WITHOUT"), Some("WORK"), Some("WRAPPER"), Some("WRITE"), Some("YEAR"), + Some("ZONE"), Some("EQ"), Some("NEQ"), Some("LT"), Some("LTE"), Some("GT"), + Some("GTE"), Some("PLUS"), Some("MINUS"), Some("ASTERISK"), Some("SLASH"), + Some("PERCENT"), Some("CONCAT"), Some("QUESTION_MARK"), Some("STRING"), + Some("UNICODE_STRING"), Some("BINARY_LITERAL"), Some("INTEGER_VALUE"), + Some("DECIMAL_VALUE"), Some("DOUBLE_VALUE"), Some("IDENTIFIER"), Some("DIGIT_IDENTIFIER"), + Some("QUOTED_IDENTIFIER"), Some("BACKQUOTED_IDENTIFIER"), Some("SIMPLE_COMMENT"), + Some("BRACKETED_COMMENT"), Some("WS"), Some("UNRECOGNIZED") + ]; + lazy_static!{ + static ref _shared_context_cache: Arc = Arc::new(PredictionContextCache::new()); + static ref VOCABULARY: Box = Box::new(VocabularyImpl::new(_LITERAL_NAMES.iter(), _SYMBOLIC_NAMES.iter(), None)); + } + + +pub type LexerContext<'input> = BaseRuleContext<'input,EmptyCustomRuleContext<'input,LocalTokenFactory<'input> >>; + +pub type LocalTokenFactory<'input> = antlr_rust::token_factory::ArenaCommonFactory<'input>; + +type From<'a> = as TokenFactory<'a> >::From; + +pub struct PrestoLexer<'input, Input:CharStream >> { + base: BaseLexer<'input,PrestoLexerActions,Input,LocalTokenFactory<'input>>, +} + +antlr_rust::tid! { impl<'input,Input> TidAble<'input> for PrestoLexer<'input,Input> where Input:CharStream > } + +impl<'input, Input:CharStream >> Deref for PrestoLexer<'input,Input>{ + type Target = BaseLexer<'input,PrestoLexerActions,Input,LocalTokenFactory<'input>>; + + fn deref(&self) -> &Self::Target { + &self.base + } +} + +impl<'input, Input:CharStream >> DerefMut for PrestoLexer<'input,Input>{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.base + } +} + + +impl<'input, Input:CharStream >> PrestoLexer<'input,Input>{ + fn get_rule_names(&self) -> &'static [&'static str] { + &ruleNames + } + fn get_literal_names(&self) -> &[Option<&str>] { + &_LITERAL_NAMES + } + + fn get_symbolic_names(&self) -> &[Option<&str>] { + &_SYMBOLIC_NAMES + } + + fn get_grammar_file_name(&self) -> &'static str { + "PrestoLexer.g4" + } + + pub fn new_with_token_factory(input: Input, tf: &'input LocalTokenFactory<'input>) -> Self { + antlr_rust::recognizer::check_version("0","3"); + Self { + base: BaseLexer::new_base_lexer( + input, + LexerATNSimulator::new_lexer_atnsimulator( + _ATN.clone(), + _decision_to_DFA.clone(), + _shared_context_cache.clone(), + ), + PrestoLexerActions{}, + tf + ) + } + } +} + +impl<'input, Input:CharStream >> PrestoLexer<'input,Input> where &'input LocalTokenFactory<'input>:Default{ + pub fn new(input: Input) -> Self{ + PrestoLexer::new_with_token_factory(input, <&LocalTokenFactory<'input> as Default>::default()) + } +} + +pub struct PrestoLexerActions { +} + +impl PrestoLexerActions{ +} + +impl<'input, Input:CharStream >> Actions<'input,BaseLexer<'input,PrestoLexerActions,Input,LocalTokenFactory<'input>>> for PrestoLexerActions{ + } + + impl<'input, Input:CharStream >> PrestoLexer<'input,Input>{ + +} + +impl<'input, Input:CharStream >> LexerRecog<'input,BaseLexer<'input,PrestoLexerActions,Input,LocalTokenFactory<'input>>> for PrestoLexerActions{ +} +impl<'input> TokenAware<'input> for PrestoLexerActions{ + type TF = LocalTokenFactory<'input>; +} + +impl<'input, Input:CharStream >> TokenSource<'input> for PrestoLexer<'input,Input>{ + type TF = LocalTokenFactory<'input>; + + fn next_token(&mut self) -> >::Tok { + self.base.next_token() + } + + fn get_line(&self) -> isize { + self.base.get_line() + } + + fn get_char_position_in_line(&self) -> isize { + self.base.get_char_position_in_line() + } + + fn get_input_stream(&mut self) -> Option<&mut dyn IntStream> { + self.base.get_input_stream() + } + + fn get_source_name(&self) -> String { + self.base.get_source_name() + } + + fn get_token_factory(&self) -> &'input Self::TF { + self.base.get_token_factory() + } +} + + + + lazy_static! { + static ref _ATN: Arc = + Arc::new(ATNDeserializer::new(None).deserialize(_serializedATN.chars())); + static ref _decision_to_DFA: Arc>> = { + let mut dfa = Vec::new(); + let size = _ATN.decision_to_state.len(); + for i in 0..size { + dfa.push(DFA::new( + _ATN.clone(), + _ATN.get_decision_state(i), + i as isize, + ).into()) + } + Arc::new(dfa) + }; + } + + + + const _serializedATN:&'static str = + "\x03\u{608b}\u{a72a}\u{8133}\u{b9ed}\u{417c}\u{3be7}\u{7786}\u{5964}\x02\ + \u{13f}\u{b38}\x08\x01\x04\x02\x09\x02\x04\x03\x09\x03\x04\x04\x09\x04\ + \x04\x05\x09\x05\x04\x06\x09\x06\x04\x07\x09\x07\x04\x08\x09\x08\x04\x09\ + \x09\x09\x04\x0a\x09\x0a\x04\x0b\x09\x0b\x04\x0c\x09\x0c\x04\x0d\x09\x0d\ + \x04\x0e\x09\x0e\x04\x0f\x09\x0f\x04\x10\x09\x10\x04\x11\x09\x11\x04\x12\ + \x09\x12\x04\x13\x09\x13\x04\x14\x09\x14\x04\x15\x09\x15\x04\x16\x09\x16\ + \x04\x17\x09\x17\x04\x18\x09\x18\x04\x19\x09\x19\x04\x1a\x09\x1a\x04\x1b\ + \x09\x1b\x04\x1c\x09\x1c\x04\x1d\x09\x1d\x04\x1e\x09\x1e\x04\x1f\x09\x1f\ + \x04\x20\x09\x20\x04\x21\x09\x21\x04\x22\x09\x22\x04\x23\x09\x23\x04\x24\ + \x09\x24\x04\x25\x09\x25\x04\x26\x09\x26\x04\x27\x09\x27\x04\x28\x09\x28\ + \x04\x29\x09\x29\x04\x2a\x09\x2a\x04\x2b\x09\x2b\x04\x2c\x09\x2c\x04\x2d\ + \x09\x2d\x04\x2e\x09\x2e\x04\x2f\x09\x2f\x04\x30\x09\x30\x04\x31\x09\x31\ + \x04\x32\x09\x32\x04\x33\x09\x33\x04\x34\x09\x34\x04\x35\x09\x35\x04\x36\ + \x09\x36\x04\x37\x09\x37\x04\x38\x09\x38\x04\x39\x09\x39\x04\x3a\x09\x3a\ + \x04\x3b\x09\x3b\x04\x3c\x09\x3c\x04\x3d\x09\x3d\x04\x3e\x09\x3e\x04\x3f\ + \x09\x3f\x04\x40\x09\x40\x04\x41\x09\x41\x04\x42\x09\x42\x04\x43\x09\x43\ + \x04\x44\x09\x44\x04\x45\x09\x45\x04\x46\x09\x46\x04\x47\x09\x47\x04\x48\ + \x09\x48\x04\x49\x09\x49\x04\x4a\x09\x4a\x04\x4b\x09\x4b\x04\x4c\x09\x4c\ + \x04\x4d\x09\x4d\x04\x4e\x09\x4e\x04\x4f\x09\x4f\x04\x50\x09\x50\x04\x51\ + \x09\x51\x04\x52\x09\x52\x04\x53\x09\x53\x04\x54\x09\x54\x04\x55\x09\x55\ + \x04\x56\x09\x56\x04\x57\x09\x57\x04\x58\x09\x58\x04\x59\x09\x59\x04\x5a\ + \x09\x5a\x04\x5b\x09\x5b\x04\x5c\x09\x5c\x04\x5d\x09\x5d\x04\x5e\x09\x5e\ + \x04\x5f\x09\x5f\x04\x60\x09\x60\x04\x61\x09\x61\x04\x62\x09\x62\x04\x63\ + \x09\x63\x04\x64\x09\x64\x04\x65\x09\x65\x04\x66\x09\x66\x04\x67\x09\x67\ + \x04\x68\x09\x68\x04\x69\x09\x69\x04\x6a\x09\x6a\x04\x6b\x09\x6b\x04\x6c\ + \x09\x6c\x04\x6d\x09\x6d\x04\x6e\x09\x6e\x04\x6f\x09\x6f\x04\x70\x09\x70\ + \x04\x71\x09\x71\x04\x72\x09\x72\x04\x73\x09\x73\x04\x74\x09\x74\x04\x75\ + \x09\x75\x04\x76\x09\x76\x04\x77\x09\x77\x04\x78\x09\x78\x04\x79\x09\x79\ + \x04\x7a\x09\x7a\x04\x7b\x09\x7b\x04\x7c\x09\x7c\x04\x7d\x09\x7d\x04\x7e\ + \x09\x7e\x04\x7f\x09\x7f\x04\u{80}\x09\u{80}\x04\u{81}\x09\u{81}\x04\u{82}\ + \x09\u{82}\x04\u{83}\x09\u{83}\x04\u{84}\x09\u{84}\x04\u{85}\x09\u{85}\ + \x04\u{86}\x09\u{86}\x04\u{87}\x09\u{87}\x04\u{88}\x09\u{88}\x04\u{89}\ + \x09\u{89}\x04\u{8a}\x09\u{8a}\x04\u{8b}\x09\u{8b}\x04\u{8c}\x09\u{8c}\ + \x04\u{8d}\x09\u{8d}\x04\u{8e}\x09\u{8e}\x04\u{8f}\x09\u{8f}\x04\u{90}\ + \x09\u{90}\x04\u{91}\x09\u{91}\x04\u{92}\x09\u{92}\x04\u{93}\x09\u{93}\ + \x04\u{94}\x09\u{94}\x04\u{95}\x09\u{95}\x04\u{96}\x09\u{96}\x04\u{97}\ + \x09\u{97}\x04\u{98}\x09\u{98}\x04\u{99}\x09\u{99}\x04\u{9a}\x09\u{9a}\ + \x04\u{9b}\x09\u{9b}\x04\u{9c}\x09\u{9c}\x04\u{9d}\x09\u{9d}\x04\u{9e}\ + \x09\u{9e}\x04\u{9f}\x09\u{9f}\x04\u{a0}\x09\u{a0}\x04\u{a1}\x09\u{a1}\ + \x04\u{a2}\x09\u{a2}\x04\u{a3}\x09\u{a3}\x04\u{a4}\x09\u{a4}\x04\u{a5}\ + \x09\u{a5}\x04\u{a6}\x09\u{a6}\x04\u{a7}\x09\u{a7}\x04\u{a8}\x09\u{a8}\ + \x04\u{a9}\x09\u{a9}\x04\u{aa}\x09\u{aa}\x04\u{ab}\x09\u{ab}\x04\u{ac}\ + \x09\u{ac}\x04\u{ad}\x09\u{ad}\x04\u{ae}\x09\u{ae}\x04\u{af}\x09\u{af}\ + \x04\u{b0}\x09\u{b0}\x04\u{b1}\x09\u{b1}\x04\u{b2}\x09\u{b2}\x04\u{b3}\ + \x09\u{b3}\x04\u{b4}\x09\u{b4}\x04\u{b5}\x09\u{b5}\x04\u{b6}\x09\u{b6}\ + \x04\u{b7}\x09\u{b7}\x04\u{b8}\x09\u{b8}\x04\u{b9}\x09\u{b9}\x04\u{ba}\ + \x09\u{ba}\x04\u{bb}\x09\u{bb}\x04\u{bc}\x09\u{bc}\x04\u{bd}\x09\u{bd}\ + \x04\u{be}\x09\u{be}\x04\u{bf}\x09\u{bf}\x04\u{c0}\x09\u{c0}\x04\u{c1}\ + \x09\u{c1}\x04\u{c2}\x09\u{c2}\x04\u{c3}\x09\u{c3}\x04\u{c4}\x09\u{c4}\ + \x04\u{c5}\x09\u{c5}\x04\u{c6}\x09\u{c6}\x04\u{c7}\x09\u{c7}\x04\u{c8}\ + \x09\u{c8}\x04\u{c9}\x09\u{c9}\x04\u{ca}\x09\u{ca}\x04\u{cb}\x09\u{cb}\ + \x04\u{cc}\x09\u{cc}\x04\u{cd}\x09\u{cd}\x04\u{ce}\x09\u{ce}\x04\u{cf}\ + \x09\u{cf}\x04\u{d0}\x09\u{d0}\x04\u{d1}\x09\u{d1}\x04\u{d2}\x09\u{d2}\ + \x04\u{d3}\x09\u{d3}\x04\u{d4}\x09\u{d4}\x04\u{d5}\x09\u{d5}\x04\u{d6}\ + \x09\u{d6}\x04\u{d7}\x09\u{d7}\x04\u{d8}\x09\u{d8}\x04\u{d9}\x09\u{d9}\ + \x04\u{da}\x09\u{da}\x04\u{db}\x09\u{db}\x04\u{dc}\x09\u{dc}\x04\u{dd}\ + \x09\u{dd}\x04\u{de}\x09\u{de}\x04\u{df}\x09\u{df}\x04\u{e0}\x09\u{e0}\ + \x04\u{e1}\x09\u{e1}\x04\u{e2}\x09\u{e2}\x04\u{e3}\x09\u{e3}\x04\u{e4}\ + \x09\u{e4}\x04\u{e5}\x09\u{e5}\x04\u{e6}\x09\u{e6}\x04\u{e7}\x09\u{e7}\ + \x04\u{e8}\x09\u{e8}\x04\u{e9}\x09\u{e9}\x04\u{ea}\x09\u{ea}\x04\u{eb}\ + \x09\u{eb}\x04\u{ec}\x09\u{ec}\x04\u{ed}\x09\u{ed}\x04\u{ee}\x09\u{ee}\ + \x04\u{ef}\x09\u{ef}\x04\u{f0}\x09\u{f0}\x04\u{f1}\x09\u{f1}\x04\u{f2}\ + \x09\u{f2}\x04\u{f3}\x09\u{f3}\x04\u{f4}\x09\u{f4}\x04\u{f5}\x09\u{f5}\ + \x04\u{f6}\x09\u{f6}\x04\u{f7}\x09\u{f7}\x04\u{f8}\x09\u{f8}\x04\u{f9}\ + \x09\u{f9}\x04\u{fa}\x09\u{fa}\x04\u{fb}\x09\u{fb}\x04\u{fc}\x09\u{fc}\ + \x04\u{fd}\x09\u{fd}\x04\u{fe}\x09\u{fe}\x04\u{ff}\x09\u{ff}\x04\u{100}\ + \x09\u{100}\x04\u{101}\x09\u{101}\x04\u{102}\x09\u{102}\x04\u{103}\x09\ + \u{103}\x04\u{104}\x09\u{104}\x04\u{105}\x09\u{105}\x04\u{106}\x09\u{106}\ + \x04\u{107}\x09\u{107}\x04\u{108}\x09\u{108}\x04\u{109}\x09\u{109}\x04\ + \u{10a}\x09\u{10a}\x04\u{10b}\x09\u{10b}\x04\u{10c}\x09\u{10c}\x04\u{10d}\ + \x09\u{10d}\x04\u{10e}\x09\u{10e}\x04\u{10f}\x09\u{10f}\x04\u{110}\x09\ + \u{110}\x04\u{111}\x09\u{111}\x04\u{112}\x09\u{112}\x04\u{113}\x09\u{113}\ + \x04\u{114}\x09\u{114}\x04\u{115}\x09\u{115}\x04\u{116}\x09\u{116}\x04\ + \u{117}\x09\u{117}\x04\u{118}\x09\u{118}\x04\u{119}\x09\u{119}\x04\u{11a}\ + \x09\u{11a}\x04\u{11b}\x09\u{11b}\x04\u{11c}\x09\u{11c}\x04\u{11d}\x09\ + \u{11d}\x04\u{11e}\x09\u{11e}\x04\u{11f}\x09\u{11f}\x04\u{120}\x09\u{120}\ + \x04\u{121}\x09\u{121}\x04\u{122}\x09\u{122}\x04\u{123}\x09\u{123}\x04\ + \u{124}\x09\u{124}\x04\u{125}\x09\u{125}\x04\u{126}\x09\u{126}\x04\u{127}\ + \x09\u{127}\x04\u{128}\x09\u{128}\x04\u{129}\x09\u{129}\x04\u{12a}\x09\ + \u{12a}\x04\u{12b}\x09\u{12b}\x04\u{12c}\x09\u{12c}\x04\u{12d}\x09\u{12d}\ + \x04\u{12e}\x09\u{12e}\x04\u{12f}\x09\u{12f}\x04\u{130}\x09\u{130}\x04\ + \u{131}\x09\u{131}\x04\u{132}\x09\u{132}\x04\u{133}\x09\u{133}\x04\u{134}\ + \x09\u{134}\x04\u{135}\x09\u{135}\x04\u{136}\x09\u{136}\x04\u{137}\x09\ + \u{137}\x04\u{138}\x09\u{138}\x04\u{139}\x09\u{139}\x04\u{13a}\x09\u{13a}\ + \x04\u{13b}\x09\u{13b}\x04\u{13c}\x09\u{13c}\x04\u{13d}\x09\u{13d}\x04\ + \u{13e}\x09\u{13e}\x04\u{13f}\x09\u{13f}\x04\u{140}\x09\u{140}\x04\u{141}\ + \x09\u{141}\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04\x03\x05\x03\ + \x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07\x03\ + \x07\x03\x08\x03\x08\x03\x09\x03\x09\x03\x0a\x03\x0a\x03\x0b\x03\x0b\x03\ + \x0c\x03\x0c\x03\x0d\x03\x0d\x03\x0e\x03\x0e\x03\x0e\x03\x0f\x03\x0f\x03\ + \x0f\x03\x10\x03\x10\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\ + \x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\ + \x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\ + \x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\ + \x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\ + \x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x1a\x03\x1a\x03\x1a\x03\x1a\x03\ + \x1b\x03\x1b\x03\x1b\x03\x1b\x03\x1b\x03\x1b\x03\x1c\x03\x1c\x03\x1c\x03\ + \x1d\x03\x1d\x03\x1d\x03\x1d\x03\x1e\x03\x1e\x03\x1e\x03\x1f\x03\x1f\x03\ + \x1f\x03\x1f\x03\x1f\x03\x1f\x03\x1f\x03\x1f\x03\x1f\x03\x1f\x03\x1f\x03\ + \x1f\x03\x1f\x03\x1f\x03\x20\x03\x20\x03\x20\x03\x20\x03\x20\x03\x20\x03\ + \x20\x03\x20\x03\x20\x03\x20\x03\x21\x03\x21\x03\x21\x03\x21\x03\x21\x03\ + \x21\x03\x21\x03\x21\x03\x22\x03\x22\x03\x22\x03\x22\x03\x22\x03\x23\x03\ + \x23\x03\x23\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x25\x03\x25\x03\ + \x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x26\x03\x26\x03\x26\x03\ + \x26\x03\x26\x03\x27\x03\x27\x03\x27\x03\x27\x03\x27\x03\x28\x03\x28\x03\ + \x28\x03\x28\x03\x28\x03\x28\x03\x28\x03\x28\x03\x28\x03\x29\x03\x29\x03\ + \x29\x03\x29\x03\x29\x03\x29\x03\x29\x03\x2a\x03\x2a\x03\x2a\x03\x2a\x03\ + \x2a\x03\x2a\x03\x2a\x03\x2a\x03\x2b\x03\x2b\x03\x2c\x03\x2c\x03\x2c\x03\ + \x2c\x03\x2c\x03\x2c\x03\x2c\x03\x2c\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\ + \x2d\x03\x2d\x03\x2d\x03\x2e\x03\x2e\x03\x2e\x03\x2e\x03\x2e\x03\x2e\x03\ + \x2e\x03\x2e\x03\x2e\x03\x2e\x03\x2f\x03\x2f\x03\x2f\x03\x2f\x03\x2f\x03\ + \x2f\x03\x2f\x03\x2f\x03\x2f\x03\x2f\x03\x2f\x03\x2f\x03\x30\x03\x30\x03\ + \x30\x03\x30\x03\x30\x03\x30\x03\x30\x03\x30\x03\x30\x03\x30\x03\x30\x03\ + \x31\x03\x31\x03\x31\x03\x31\x03\x31\x03\x31\x03\x32\x03\x32\x03\x32\x03\ + \x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\ + \x33\x03\x33\x03\x33\x03\x33\x03\x33\x03\x33\x03\x33\x03\x34\x03\x34\x03\ + \x34\x03\x34\x03\x34\x03\x34\x03\x35\x03\x35\x03\x35\x03\x35\x03\x35\x03\ + \x36\x03\x36\x03\x36\x03\x36\x03\x36\x03\x36\x03\x36\x03\x36\x03\x37\x03\ + \x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\ + \x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x38\x03\x38\x03\x38\x03\ + \x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\ + \x38\x03\x39\x03\x39\x03\x39\x03\x39\x03\x39\x03\x39\x03\x39\x03\x39\x03\ + \x39\x03\x39\x03\x39\x03\x39\x03\x39\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\ + \x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\x3a\x03\ + \x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\ + \x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3c\x03\x3c\x03\x3c\x03\ + \x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\ + \x3c\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\ + \x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\ + \x3d\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3f\x03\x3f\x03\x3f\x03\x3f\x03\ + \x3f\x03\x40\x03\x40\x03\x40\x03\x40\x03\x40\x03\x41\x03\x41\x03\x41\x03\ + \x41\x03\x42\x03\x42\x03\x42\x03\x42\x03\x42\x03\x42\x03\x42\x03\x42\x03\ + \x42\x03\x42\x03\x42\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\x43\x03\ + \x43\x03\x43\x03\x44\x03\x44\x03\x44\x03\x44\x03\x44\x03\x44\x03\x44\x03\ + \x45\x03\x45\x03\x45\x03\x45\x03\x45\x03\x45\x03\x45\x03\x45\x03\x46\x03\ + \x46\x03\x46\x03\x46\x03\x46\x03\x46\x03\x46\x03\x47\x03\x47\x03\x47\x03\ + \x47\x03\x47\x03\x48\x03\x48\x03\x48\x03\x48\x03\x48\x03\x49\x03\x49\x03\ + \x49\x03\x49\x03\x49\x03\x49\x03\x49\x03\x49\x03\x49\x03\x4a\x03\x4a\x03\ + \x4a\x03\x4a\x03\x4a\x03\x4a\x03\x4a\x03\x4a\x03\x4a\x03\x4a\x03\x4a\x03\ + \x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\ + \x4c\x03\x4c\x03\x4c\x03\x4c\x03\x4c\x03\x4c\x03\x4c\x03\x4c\x03\x4c\x03\ + \x4c\x03\x4c\x03\x4c\x03\x4d\x03\x4d\x03\x4d\x03\x4d\x03\x4d\x03\x4d\x03\ + \x4d\x03\x4e\x03\x4e\x03\x4e\x03\x4e\x03\x4e\x03\x4f\x03\x4f\x03\x4f\x03\ + \x4f\x03\x4f\x03\x50\x03\x50\x03\x50\x03\x50\x03\x50\x03\x50\x03\x51\x03\ + \x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x51\x03\x52\x03\ + \x52\x03\x52\x03\x52\x03\x53\x03\x53\x03\x53\x03\x53\x03\x53\x03\x53\x03\ + \x54\x03\x54\x03\x54\x03\x54\x03\x54\x03\x54\x03\x54\x03\x55\x03\x55\x03\ + \x55\x03\x55\x03\x55\x03\x55\x03\x55\x03\x56\x03\x56\x03\x56\x03\x56\x03\ + \x56\x03\x56\x03\x56\x03\x56\x03\x56\x03\x56\x03\x57\x03\x57\x03\x57\x03\ + \x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x58\x03\x58\x03\x58\x03\x58\x03\ + \x58\x03\x58\x03\x58\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\x59\x03\ + \x59\x03\x59\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\ + \x5a\x03\x5b\x03\x5b\x03\x5b\x03\x5b\x03\x5b\x03\x5b\x03\x5c\x03\x5c\x03\ + \x5c\x03\x5c\x03\x5c\x03\x5c\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\ + \x5d\x03\x5d\x03\x5e\x03\x5e\x03\x5e\x03\x5e\x03\x5e\x03\x5e\x03\x5f\x03\ + \x5f\x03\x5f\x03\x5f\x03\x5f\x03\x5f\x03\x60\x03\x60\x03\x60\x03\x60\x03\ + \x60\x03\x60\x03\x60\x03\x60\x03\x60\x03\x60\x03\x61\x03\x61\x03\x61\x03\ + \x61\x03\x62\x03\x62\x03\x62\x03\x62\x03\x62\x03\x62\x03\x62\x03\x63\x03\ + \x63\x03\x63\x03\x63\x03\x63\x03\x64\x03\x64\x03\x64\x03\x64\x03\x64\x03\ + \x65\x03\x65\x03\x65\x03\x65\x03\x65\x03\x65\x03\x65\x03\x65\x03\x65\x03\ + \x65\x03\x66\x03\x66\x03\x66\x03\x66\x03\x66\x03\x66\x03\x67\x03\x67\x03\ + \x67\x03\x67\x03\x67\x03\x67\x03\x68\x03\x68\x03\x68\x03\x68\x03\x68\x03\ + \x68\x03\x68\x03\x68\x03\x69\x03\x69\x03\x69\x03\x69\x03\x69\x03\x69\x03\ + \x69\x03\x6a\x03\x6a\x03\x6a\x03\x6a\x03\x6a\x03\x6a\x03\x6a\x03\x6a\x03\ + \x6a\x03\x6b\x03\x6b\x03\x6b\x03\x6b\x03\x6b\x03\x6b\x03\x6c\x03\x6c\x03\ + \x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6c\x03\x6d\x03\x6d\x03\ + \x6d\x03\x6d\x03\x6d\x03\x6d\x03\x6d\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\ + \x6e\x03\x6e\x03\x6e\x03\x6f\x03\x6f\x03\x6f\x03\x6f\x03\x6f\x03\x70\x03\ + \x70\x03\x70\x03\x71\x03\x71\x03\x71\x03\x71\x03\x71\x03\x71\x03\x71\x03\ + \x72\x03\x72\x03\x72\x03\x73\x03\x73\x03\x73\x03\x73\x03\x73\x03\x73\x03\ + \x73\x03\x73\x03\x73\x03\x73\x03\x74\x03\x74\x03\x74\x03\x74\x03\x74\x03\ + \x74\x03\x74\x03\x74\x03\x75\x03\x75\x03\x75\x03\x75\x03\x75\x03\x75\x03\ + \x76\x03\x76\x03\x76\x03\x76\x03\x76\x03\x76\x03\x77\x03\x77\x03\x77\x03\ + \x77\x03\x77\x03\x77\x03\x77\x03\x78\x03\x78\x03\x78\x03\x78\x03\x78\x03\ + \x78\x03\x78\x03\x78\x03\x78\x03\x78\x03\x79\x03\x79\x03\x79\x03\x79\x03\ + \x79\x03\x79\x03\x79\x03\x79\x03\x79\x03\x7a\x03\x7a\x03\x7a\x03\x7a\x03\ + \x7a\x03\x7b\x03\x7b\x03\x7b\x03\x7b\x03\x7b\x03\x7b\x03\x7b\x03\x7b\x03\ + \x7c\x03\x7c\x03\x7c\x03\x7d\x03\x7d\x03\x7d\x03\x7e\x03\x7e\x03\x7e\x03\ + \x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7e\x03\x7f\x03\x7f\x03\ + \x7f\x03\x7f\x03\x7f\x03\u{80}\x03\u{80}\x03\u{80}\x03\u{80}\x03\u{80}\ + \x03\u{81}\x03\u{81}\x03\u{81}\x03\u{81}\x03\u{81}\x03\u{81}\x03\u{81}\ + \x03\u{81}\x03\u{81}\x03\u{81}\x03\u{81}\x03\u{82}\x03\u{82}\x03\u{82}\ + \x03\u{82}\x03\u{82}\x03\u{82}\x03\u{82}\x03\u{82}\x03\u{82}\x03\u{82}\ + \x03\u{82}\x03\u{82}\x03\u{83}\x03\u{83}\x03\u{83}\x03\u{83}\x03\u{83}\ + \x03\u{83}\x03\u{83}\x03\u{83}\x03\u{83}\x03\u{83}\x03\u{83}\x03\u{83}\ + \x03\u{84}\x03\u{84}\x03\u{84}\x03\u{84}\x03\u{84}\x03\u{84}\x03\u{84}\ + \x03\u{84}\x03\u{84}\x03\u{84}\x03\u{84}\x03\u{85}\x03\u{85}\x03\u{85}\ + \x03\u{85}\x03\u{85}\x03\u{85}\x03\u{85}\x03\u{85}\x03\u{85}\x03\u{85}\ + \x03\u{85}\x03\u{86}\x03\u{86}\x03\u{86}\x03\u{86}\x03\u{86}\x03\u{87}\ + \x03\u{87}\x03\u{87}\x03\u{87}\x03\u{88}\x03\u{88}\x03\u{88}\x03\u{88}\ + \x03\u{88}\x03\u{89}\x03\u{89}\x03\u{89}\x03\u{89}\x03\u{89}\x03\u{8a}\ + \x03\u{8a}\x03\u{8a}\x03\u{8a}\x03\u{8a}\x03\u{8a}\x03\u{8a}\x03\u{8a}\ + \x03\u{8b}\x03\u{8b}\x03\u{8b}\x03\u{8b}\x03\u{8b}\x03\u{8b}\x03\u{8b}\ + \x03\u{8b}\x03\u{8c}\x03\u{8c}\x03\u{8c}\x03\u{8c}\x03\u{8c}\x03\u{8d}\ + \x03\u{8d}\x03\u{8d}\x03\u{8d}\x03\u{8d}\x03\u{8d}\x03\u{8e}\x03\u{8e}\ + \x03\u{8e}\x03\u{8e}\x03\u{8e}\x03\u{8f}\x03\u{8f}\x03\u{8f}\x03\u{8f}\ + \x03\u{8f}\x03\u{8f}\x03\u{90}\x03\u{90}\x03\u{90}\x03\u{90}\x03\u{90}\ + \x03\u{90}\x03\u{90}\x03\u{90}\x03\u{91}\x03\u{91}\x03\u{91}\x03\u{91}\ + \x03\u{91}\x03\u{91}\x03\u{92}\x03\u{92}\x03\u{92}\x03\u{92}\x03\u{92}\ + \x03\u{92}\x03\u{92}\x03\u{92}\x03\u{92}\x03\u{92}\x03\u{93}\x03\u{93}\ + \x03\u{93}\x03\u{93}\x03\u{93}\x03\u{93}\x03\u{93}\x03\u{93}\x03\u{93}\ + \x03\u{93}\x03\u{93}\x03\u{93}\x03\u{93}\x03\u{93}\x03\u{93}\x03\u{94}\ + \x03\u{94}\x03\u{94}\x03\u{94}\x03\u{94}\x03\u{94}\x03\u{94}\x03\u{94}\ + \x03\u{95}\x03\u{95}\x03\u{95}\x03\u{95}\x03\u{96}\x03\u{96}\x03\u{96}\ + \x03\u{96}\x03\u{96}\x03\u{96}\x03\u{97}\x03\u{97}\x03\u{97}\x03\u{97}\ + \x03\u{97}\x03\u{97}\x03\u{97}\x03\u{97}\x03\u{98}\x03\u{98}\x03\u{98}\ + \x03\u{98}\x03\u{98}\x03\u{98}\x03\u{98}\x03\u{98}\x03\u{99}\x03\u{99}\ + \x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\ + \x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\x03\u{99}\ + \x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9a}\ + \x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9a}\x03\u{9b}\ + \x03\u{9b}\x03\u{9b}\x03\u{9b}\x03\u{9b}\x03\u{9b}\x03\u{9b}\x03\u{9b}\ + \x03\u{9b}\x03\u{9c}\x03\u{9c}\x03\u{9c}\x03\u{9c}\x03\u{9c}\x03\u{9c}\ + \x03\u{9d}\x03\u{9d}\x03\u{9d}\x03\u{9d}\x03\u{9d}\x03\u{9d}\x03\u{9d}\ + \x03\u{9e}\x03\u{9e}\x03\u{9e}\x03\u{9e}\x03\u{9e}\x03\u{9e}\x03\u{9f}\ + \x03\u{9f}\x03\u{9f}\x03\u{9f}\x03\u{9f}\x03\u{9f}\x03\u{9f}\x03\u{9f}\ + \x03\u{a0}\x03\u{a0}\x03\u{a0}\x03\u{a0}\x03\u{a0}\x03\u{a1}\x03\u{a1}\ + \x03\u{a1}\x03\u{a1}\x03\u{a2}\x03\u{a2}\x03\u{a2}\x03\u{a2}\x03\u{a3}\ + \x03\u{a3}\x03\u{a3}\x03\u{a3}\x03\u{a3}\x03\u{a4}\x03\u{a4}\x03\u{a4}\ + \x03\u{a4}\x03\u{a4}\x03\u{a5}\x03\u{a5}\x03\u{a5}\x03\u{a6}\x03\u{a6}\ + \x03\u{a6}\x03\u{a6}\x03\u{a6}\x03\u{a7}\x03\u{a7}\x03\u{a7}\x03\u{a7}\ + \x03\u{a7}\x03\u{a7}\x03\u{a7}\x03\u{a7}\x03\u{a7}\x03\u{a7}\x03\u{a8}\ + \x03\u{a8}\x03\u{a8}\x03\u{a8}\x03\u{a9}\x03\u{a9}\x03\u{a9}\x03\u{a9}\ + \x03\u{a9}\x03\u{aa}\x03\u{aa}\x03\u{aa}\x03\u{aa}\x03\u{aa}\x03\u{aa}\ + \x03\u{aa}\x03\u{ab}\x03\u{ab}\x03\u{ab}\x03\u{ab}\x03\u{ab}\x03\u{ab}\ + \x03\u{ac}\x03\u{ac}\x03\u{ac}\x03\u{ac}\x03\u{ac}\x03\u{ac}\x03\u{ac}\ + \x03\u{ad}\x03\u{ad}\x03\u{ad}\x03\u{ae}\x03\u{ae}\x03\u{ae}\x03\u{ae}\ + \x03\u{ae}\x03\u{ae}\x03\u{ae}\x03\u{af}\x03\u{af}\x03\u{af}\x03\u{af}\ + \x03\u{af}\x03\u{b0}\x03\u{b0}\x03\u{b0}\x03\u{b1}\x03\u{b1}\x03\u{b1}\ + \x03\u{b1}\x03\u{b2}\x03\u{b2}\x03\u{b2}\x03\u{b2}\x03\u{b2}\x03\u{b3}\ + \x03\u{b3}\x03\u{b3}\x03\u{b3}\x03\u{b3}\x03\u{b3}\x03\u{b3}\x03\u{b4}\ + \x03\u{b4}\x03\u{b4}\x03\u{b5}\x03\u{b5}\x03\u{b5}\x03\u{b5}\x03\u{b5}\ + \x03\u{b5}\x03\u{b6}\x03\u{b6}\x03\u{b6}\x03\u{b6}\x03\u{b6}\x03\u{b6}\ + \x03\u{b6}\x03\u{b6}\x03\u{b6}\x03\u{b6}\x03\u{b6}\x03\u{b7}\x03\u{b7}\ + \x03\u{b7}\x03\u{b7}\x03\u{b7}\x03\u{b7}\x03\u{b8}\x03\u{b8}\x03\u{b8}\ + \x03\u{b8}\x03\u{b8}\x03\u{b8}\x03\u{b8}\x03\u{b9}\x03\u{b9}\x03\u{b9}\ + \x03\u{b9}\x03\u{b9}\x03\u{ba}\x03\u{ba}\x03\u{ba}\x03\u{ba}\x03\u{ba}\ + \x03\u{ba}\x03\u{ba}\x03\u{ba}\x03\u{ba}\x03\u{bb}\x03\u{bb}\x03\u{bb}\ + \x03\u{bb}\x03\u{bb}\x03\u{bb}\x03\u{bb}\x03\u{bb}\x03\u{bb}\x03\u{bb}\ + \x03\u{bc}\x03\u{bc}\x03\u{bc}\x03\u{bc}\x03\u{bc}\x03\u{bc}\x03\u{bc}\ + \x03\u{bc}\x03\u{bc}\x03\u{bc}\x03\u{bc}\x03\u{bd}\x03\u{bd}\x03\u{bd}\ + \x03\u{bd}\x03\u{bd}\x03\u{bd}\x03\u{bd}\x03\u{bd}\x03\u{be}\x03\u{be}\ + \x03\u{be}\x03\u{be}\x03\u{be}\x03\u{bf}\x03\u{bf}\x03\u{bf}\x03\u{bf}\ + \x03\u{bf}\x03\u{c0}\x03\u{c0}\x03\u{c0}\x03\u{c0}\x03\u{c0}\x03\u{c0}\ + \x03\u{c0}\x03\u{c0}\x03\u{c1}\x03\u{c1}\x03\u{c1}\x03\u{c1}\x03\u{c2}\ + \x03\u{c2}\x03\u{c2}\x03\u{c2}\x03\u{c2}\x03\u{c2}\x03\u{c2}\x03\u{c3}\ + \x03\u{c3}\x03\u{c3}\x03\u{c3}\x03\u{c3}\x03\u{c3}\x03\u{c3}\x03\u{c3}\ + \x03\u{c4}\x03\u{c4}\x03\u{c4}\x03\u{c4}\x03\u{c4}\x03\u{c4}\x03\u{c4}\ + \x03\u{c4}\x03\u{c4}\x03\u{c5}\x03\u{c5}\x03\u{c5}\x03\u{c5}\x03\u{c5}\ + \x03\u{c5}\x03\u{c5}\x03\u{c5}\x03\u{c5}\x03\u{c5}\x03\u{c6}\x03\u{c6}\ + \x03\u{c6}\x03\u{c6}\x03\u{c6}\x03\u{c6}\x03\u{c6}\x03\u{c6}\x03\u{c6}\ + \x03\u{c6}\x03\u{c7}\x03\u{c7}\x03\u{c7}\x03\u{c7}\x03\u{c7}\x03\u{c7}\ + \x03\u{c7}\x03\u{c7}\x03\u{c8}\x03\u{c8}\x03\u{c8}\x03\u{c8}\x03\u{c8}\ + \x03\u{c8}\x03\u{c8}\x03\u{c8}\x03\u{c8}\x03\u{c8}\x03\u{c8}\x03\u{c9}\ + \x03\u{c9}\x03\u{c9}\x03\u{c9}\x03\u{c9}\x03\u{c9}\x03\u{c9}\x03\u{c9}\ + \x03\u{c9}\x03\u{c9}\x03\u{c9}\x03\u{ca}\x03\u{ca}\x03\u{ca}\x03\u{ca}\ + \x03\u{ca}\x03\u{ca}\x03\u{cb}\x03\u{cb}\x03\u{cb}\x03\u{cb}\x03\u{cb}\ + \x03\u{cb}\x03\u{cb}\x03\u{cc}\x03\u{cc}\x03\u{cc}\x03\u{cc}\x03\u{cc}\ + \x03\u{cc}\x03\u{cd}\x03\u{cd}\x03\u{cd}\x03\u{cd}\x03\u{cd}\x03\u{ce}\ + \x03\u{ce}\x03\u{ce}\x03\u{ce}\x03\u{ce}\x03\u{ce}\x03\u{ce}\x03\u{ce}\ + \x03\u{ce}\x03\u{ce}\x03\u{cf}\x03\u{cf}\x03\u{cf}\x03\u{cf}\x03\u{cf}\ + \x03\u{cf}\x03\u{cf}\x03\u{cf}\x03\u{d0}\x03\u{d0}\x03\u{d0}\x03\u{d0}\ + \x03\u{d0}\x03\u{d0}\x03\u{d0}\x03\u{d1}\x03\u{d1}\x03\u{d1}\x03\u{d1}\ + \x03\u{d1}\x03\u{d1}\x03\u{d1}\x03\u{d1}\x03\u{d1}\x03\u{d1}\x03\u{d1}\ + \x03\u{d2}\x03\u{d2}\x03\u{d2}\x03\u{d2}\x03\u{d2}\x03\u{d2}\x03\u{d2}\ + \x03\u{d2}\x03\u{d3}\x03\u{d3}\x03\u{d3}\x03\u{d3}\x03\u{d3}\x03\u{d3}\ + \x03\u{d4}\x03\u{d4}\x03\u{d4}\x03\u{d4}\x03\u{d4}\x03\u{d4}\x03\u{d4}\ + \x03\u{d4}\x03\u{d5}\x03\u{d5}\x03\u{d5}\x03\u{d5}\x03\u{d5}\x03\u{d5}\ + \x03\u{d5}\x03\u{d5}\x03\u{d5}\x03\u{d6}\x03\u{d6}\x03\u{d6}\x03\u{d6}\ + \x03\u{d6}\x03\u{d6}\x03\u{d6}\x03\u{d6}\x03\u{d6}\x03\u{d6}\x03\u{d7}\ + \x03\u{d7}\x03\u{d7}\x03\u{d7}\x03\u{d7}\x03\u{d7}\x03\u{d7}\x03\u{d8}\ + \x03\u{d8}\x03\u{d8}\x03\u{d8}\x03\u{d8}\x03\u{d8}\x03\u{d9}\x03\u{d9}\ + \x03\u{d9}\x03\u{d9}\x03\u{d9}\x03\u{da}\x03\u{da}\x03\u{da}\x03\u{da}\ + \x03\u{da}\x03\u{da}\x03\u{db}\x03\u{db}\x03\u{db}\x03\u{db}\x03\u{db}\ + \x03\u{db}\x03\u{db}\x03\u{db}\x03\u{db}\x03\u{dc}\x03\u{dc}\x03\u{dc}\ + \x03\u{dc}\x03\u{dc}\x03\u{dc}\x03\u{dc}\x03\u{dd}\x03\u{dd}\x03\u{dd}\ + \x03\u{dd}\x03\u{de}\x03\u{de}\x03\u{de}\x03\u{de}\x03\u{de}\x03\u{df}\ + \x03\u{df}\x03\u{df}\x03\u{df}\x03\u{df}\x03\u{df}\x03\u{df}\x03\u{df}\ + \x03\u{e0}\x03\u{e0}\x03\u{e0}\x03\u{e0}\x03\u{e0}\x03\u{e0}\x03\u{e0}\ + \x03\u{e1}\x03\u{e1}\x03\u{e1}\x03\u{e1}\x03\u{e1}\x03\u{e1}\x03\u{e1}\ + \x03\u{e2}\x03\u{e2}\x03\u{e2}\x03\u{e2}\x03\u{e2}\x03\u{e2}\x03\u{e2}\ + \x03\u{e2}\x03\u{e3}\x03\u{e3}\x03\u{e3}\x03\u{e3}\x03\u{e3}\x03\u{e3}\ + \x03\u{e3}\x03\u{e4}\x03\u{e4}\x03\u{e4}\x03\u{e4}\x03\u{e4}\x03\u{e4}\ + \x03\u{e4}\x03\u{e4}\x03\u{e4}\x03\u{e5}\x03\u{e5}\x03\u{e5}\x03\u{e5}\ + \x03\u{e5}\x03\u{e6}\x03\u{e6}\x03\u{e6}\x03\u{e6}\x03\u{e6}\x03\u{e6}\ + \x03\u{e6}\x03\u{e7}\x03\u{e7}\x03\u{e7}\x03\u{e7}\x03\u{e7}\x03\u{e7}\ + \x03\u{e7}\x03\u{e7}\x03\u{e7}\x03\u{e7}\x03\u{e7}\x03\u{e7}\x03\u{e7}\ + \x03\u{e8}\x03\u{e8}\x03\u{e8}\x03\u{e8}\x03\u{e8}\x03\u{e8}\x03\u{e8}\ + \x03\u{e8}\x03\u{e9}\x03\u{e9}\x03\u{e9}\x03\u{e9}\x03\u{ea}\x03\u{ea}\ + \x03\u{ea}\x03\u{ea}\x03\u{ea}\x03\u{eb}\x03\u{eb}\x03\u{eb}\x03\u{eb}\ + \x03\u{eb}\x03\u{ec}\x03\u{ec}\x03\u{ec}\x03\u{ec}\x03\u{ec}\x03\u{ed}\ + \x03\u{ed}\x03\u{ed}\x03\u{ed}\x03\u{ed}\x03\u{ed}\x03\u{ee}\x03\u{ee}\ + \x03\u{ee}\x03\u{ee}\x03\u{ee}\x03\u{ee}\x03\u{ef}\x03\u{ef}\x03\u{ef}\ + \x03\u{ef}\x03\u{ef}\x03\u{ef}\x03\u{ef}\x03\u{f0}\x03\u{f0}\x03\u{f0}\ + \x03\u{f0}\x03\u{f0}\x03\u{f0}\x03\u{f0}\x03\u{f0}\x03\u{f0}\x03\u{f0}\ + \x03\u{f1}\x03\u{f1}\x03\u{f1}\x03\u{f1}\x03\u{f1}\x03\u{f1}\x03\u{f1}\ + \x03\u{f2}\x03\u{f2}\x03\u{f2}\x03\u{f2}\x03\u{f2}\x03\u{f2}\x03\u{f3}\ + \x03\u{f3}\x03\u{f3}\x03\u{f3}\x03\u{f3}\x03\u{f3}\x03\u{f3}\x03\u{f4}\ + \x03\u{f4}\x03\u{f4}\x03\u{f4}\x03\u{f4}\x03\u{f4}\x03\u{f4}\x03\u{f4}\ + \x03\u{f4}\x03\u{f4}\x03\u{f4}\x03\u{f4}\x03\u{f5}\x03\u{f5}\x03\u{f5}\ + \x03\u{f5}\x03\u{f5}\x03\u{f6}\x03\u{f6}\x03\u{f6}\x03\u{f6}\x03\u{f6}\ + \x03\u{f6}\x03\u{f6}\x03\u{f7}\x03\u{f7}\x03\u{f7}\x03\u{f7}\x03\u{f7}\ + \x03\u{f8}\x03\u{f8}\x03\u{f8}\x03\u{f8}\x03\u{f8}\x03\u{f9}\x03\u{f9}\ + \x03\u{f9}\x03\u{f9}\x03\u{f9}\x03\u{fa}\x03\u{fa}\x03\u{fa}\x03\u{fa}\ + \x03\u{fa}\x03\u{fa}\x03\u{fa}\x03\u{fa}\x03\u{fa}\x03\u{fa}\x03\u{fb}\ + \x03\u{fb}\x03\u{fb}\x03\u{fc}\x03\u{fc}\x03\u{fc}\x03\u{fc}\x03\u{fc}\ + \x03\u{fc}\x03\u{fc}\x03\u{fc}\x03\u{fc}\x03\u{fd}\x03\u{fd}\x03\u{fd}\ + \x03\u{fd}\x03\u{fd}\x03\u{fd}\x03\u{fd}\x03\u{fd}\x03\u{fd}\x03\u{fd}\ + \x03\u{fd}\x03\u{fd}\x03\u{fe}\x03\u{fe}\x03\u{fe}\x03\u{fe}\x03\u{fe}\ + \x03\u{ff}\x03\u{ff}\x03\u{ff}\x03\u{ff}\x03\u{ff}\x03\u{100}\x03\u{100}\ + \x03\u{100}\x03\u{100}\x03\u{100}\x03\u{100}\x03\u{100}\x03\u{100}\x03\ + \u{100}\x03\u{101}\x03\u{101}\x03\u{101}\x03\u{101}\x03\u{101}\x03\u{101}\ + \x03\u{101}\x03\u{101}\x03\u{101}\x03\u{102}\x03\u{102}\x03\u{102}\x03\ + \u{102}\x03\u{102}\x03\u{103}\x03\u{103}\x03\u{103}\x03\u{103}\x03\u{103}\ + \x03\u{103}\x03\u{103}\x03\u{103}\x03\u{104}\x03\u{104}\x03\u{104}\x03\ + \u{104}\x03\u{104}\x03\u{104}\x03\u{104}\x03\u{104}\x03\u{104}\x03\u{104}\ + \x03\u{105}\x03\u{105}\x03\u{105}\x03\u{105}\x03\u{105}\x03\u{105}\x03\ + \u{105}\x03\u{105}\x03\u{105}\x03\u{105}\x03\u{105}\x03\u{105}\x03\u{106}\ + \x03\u{106}\x03\u{106}\x03\u{106}\x03\u{106}\x03\u{106}\x03\u{106}\x03\ + \u{106}\x03\u{106}\x03\u{106}\x03\u{106}\x03\u{106}\x03\u{106}\x03\u{106}\ + \x03\u{107}\x03\u{107}\x03\u{107}\x03\u{107}\x03\u{107}\x03\u{107}\x03\ + \u{108}\x03\u{108}\x03\u{108}\x03\u{108}\x03\u{108}\x03\u{108}\x03\u{108}\ + \x03\u{109}\x03\u{109}\x03\u{109}\x03\u{109}\x03\u{109}\x03\u{109}\x03\ + \u{109}\x03\u{109}\x03\u{10a}\x03\u{10a}\x03\u{10a}\x03\u{10a}\x03\u{10a}\ + \x03\u{10a}\x03\u{10a}\x03\u{10a}\x03\u{10a}\x03\u{10a}\x03\u{10b}\x03\ + \u{10b}\x03\u{10b}\x03\u{10b}\x03\u{10b}\x03\u{10b}\x03\u{10b}\x03\u{10c}\ + \x03\u{10c}\x03\u{10c}\x03\u{10c}\x03\u{10c}\x03\u{10c}\x03\u{10c}\x03\ + \u{10d}\x03\u{10d}\x03\u{10d}\x03\u{10d}\x03\u{10e}\x03\u{10e}\x03\u{10e}\ + \x03\u{10e}\x03\u{10e}\x03\u{10f}\x03\u{10f}\x03\u{10f}\x03\u{10f}\x03\ + \u{10f}\x03\u{10f}\x03\u{110}\x03\u{110}\x03\u{110}\x03\u{110}\x03\u{110}\ + \x03\u{110}\x03\u{111}\x03\u{111}\x03\u{111}\x03\u{111}\x03\u{111}\x03\ + \u{111}\x03\u{112}\x03\u{112}\x03\u{112}\x03\u{112}\x03\u{112}\x03\u{113}\ + \x03\u{113}\x03\u{113}\x03\u{113}\x03\u{113}\x03\u{113}\x03\u{113}\x03\ + \u{113}\x03\u{113}\x03\u{114}\x03\u{114}\x03\u{114}\x03\u{114}\x03\u{114}\ + \x03\u{114}\x03\u{115}\x03\u{115}\x03\u{115}\x03\u{115}\x03\u{115}\x03\ + \u{115}\x03\u{115}\x03\u{116}\x03\u{116}\x03\u{116}\x03\u{116}\x03\u{116}\ + \x03\u{116}\x03\u{116}\x03\u{116}\x03\u{117}\x03\u{117}\x03\u{117}\x03\ + \u{117}\x03\u{117}\x03\u{117}\x03\u{117}\x03\u{117}\x03\u{118}\x03\u{118}\ + \x03\u{118}\x03\u{118}\x03\u{118}\x03\u{119}\x03\u{119}\x03\u{119}\x03\ + \u{119}\x03\u{119}\x03\u{11a}\x03\u{11a}\x03\u{11a}\x03\u{11a}\x03\u{11a}\ + \x03\u{11a}\x03\u{11b}\x03\u{11b}\x03\u{11b}\x03\u{11b}\x03\u{11b}\x03\ + \u{11b}\x03\u{11b}\x03\u{11c}\x03\u{11c}\x03\u{11c}\x03\u{11c}\x03\u{11c}\ + \x03\u{11d}\x03\u{11d}\x03\u{11d}\x03\u{11d}\x03\u{11d}\x03\u{11d}\x03\ + \u{11d}\x03\u{11e}\x03\u{11e}\x03\u{11e}\x03\u{11e}\x03\u{11e}\x03\u{11e}\ + \x03\u{11e}\x03\u{11e}\x03\u{11f}\x03\u{11f}\x03\u{11f}\x03\u{11f}\x03\ + \u{11f}\x03\u{120}\x03\u{120}\x03\u{120}\x03\u{120}\x03\u{120}\x03\u{120}\ + \x03\u{120}\x03\u{120}\x03\u{121}\x03\u{121}\x03\u{121}\x03\u{121}\x03\ + \u{121}\x03\u{121}\x03\u{122}\x03\u{122}\x03\u{122}\x03\u{122}\x03\u{122}\ + \x03\u{123}\x03\u{123}\x03\u{123}\x03\u{123}\x03\u{123}\x03\u{124}\x03\ + \u{124}\x03\u{125}\x03\u{125}\x03\u{125}\x03\u{125}\x05\u{125}\u{a68}\x0a\ + \u{125}\x03\u{126}\x03\u{126}\x03\u{127}\x03\u{127}\x03\u{127}\x03\u{128}\ + \x03\u{128}\x03\u{129}\x03\u{129}\x03\u{129}\x03\u{12a}\x03\u{12a}\x03\ + \u{12b}\x03\u{12b}\x03\u{12c}\x03\u{12c}\x03\u{12d}\x03\u{12d}\x03\u{12e}\ + \x03\u{12e}\x03\u{12f}\x03\u{12f}\x03\u{12f}\x03\u{130}\x03\u{130}\x03\ + \u{131}\x03\u{131}\x03\u{131}\x03\u{131}\x07\u{131}\u{a87}\x0a\u{131}\x0c\ + \u{131}\x0e\u{131}\u{a8a}\x0b\u{131}\x03\u{131}\x03\u{131}\x03\u{132}\x03\ + \u{132}\x03\u{132}\x03\u{132}\x03\u{132}\x03\u{132}\x03\u{132}\x07\u{132}\ + \u{a95}\x0a\u{132}\x0c\u{132}\x0e\u{132}\u{a98}\x0b\u{132}\x03\u{132}\x03\ + \u{132}\x03\u{133}\x03\u{133}\x03\u{133}\x03\u{133}\x07\u{133}\u{aa0}\x0a\ + \u{133}\x0c\u{133}\x0e\u{133}\u{aa3}\x0b\u{133}\x03\u{133}\x03\u{133}\x03\ + \u{134}\x06\u{134}\u{aa8}\x0a\u{134}\x0d\u{134}\x0e\u{134}\u{aa9}\x03\u{135}\ + \x06\u{135}\u{aad}\x0a\u{135}\x0d\u{135}\x0e\u{135}\u{aae}\x03\u{135}\x03\ + \u{135}\x07\u{135}\u{ab3}\x0a\u{135}\x0c\u{135}\x0e\u{135}\u{ab6}\x0b\u{135}\ + \x03\u{135}\x03\u{135}\x06\u{135}\u{aba}\x0a\u{135}\x0d\u{135}\x0e\u{135}\ + \u{abb}\x05\u{135}\u{abe}\x0a\u{135}\x03\u{136}\x06\u{136}\u{ac1}\x0a\u{136}\ + \x0d\u{136}\x0e\u{136}\u{ac2}\x03\u{136}\x03\u{136}\x07\u{136}\u{ac7}\x0a\ + \u{136}\x0c\u{136}\x0e\u{136}\u{aca}\x0b\u{136}\x05\u{136}\u{acc}\x0a\u{136}\ + \x03\u{136}\x03\u{136}\x03\u{136}\x03\u{136}\x06\u{136}\u{ad2}\x0a\u{136}\ + \x0d\u{136}\x0e\u{136}\u{ad3}\x03\u{136}\x03\u{136}\x05\u{136}\u{ad8}\x0a\ + \u{136}\x03\u{137}\x03\u{137}\x05\u{137}\u{adc}\x0a\u{137}\x03\u{137}\x03\ + \u{137}\x03\u{137}\x07\u{137}\u{ae1}\x0a\u{137}\x0c\u{137}\x0e\u{137}\u{ae4}\ + \x0b\u{137}\x03\u{138}\x03\u{138}\x03\u{138}\x03\u{138}\x06\u{138}\u{aea}\ + \x0a\u{138}\x0d\u{138}\x0e\u{138}\u{aeb}\x03\u{139}\x03\u{139}\x03\u{139}\ + \x03\u{139}\x07\u{139}\u{af2}\x0a\u{139}\x0c\u{139}\x0e\u{139}\u{af5}\x0b\ + \u{139}\x03\u{139}\x03\u{139}\x03\u{13a}\x03\u{13a}\x03\u{13a}\x03\u{13a}\ + \x07\u{13a}\u{afd}\x0a\u{13a}\x0c\u{13a}\x0e\u{13a}\u{b00}\x0b\u{13a}\x03\ + \u{13a}\x03\u{13a}\x03\u{13b}\x03\u{13b}\x05\u{13b}\u{b06}\x0a\u{13b}\x03\ + \u{13b}\x06\u{13b}\u{b09}\x0a\u{13b}\x0d\u{13b}\x0e\u{13b}\u{b0a}\x03\u{13c}\ + \x03\u{13c}\x03\u{13d}\x03\u{13d}\x03\u{13e}\x03\u{13e}\x03\u{13e}\x03\ + \u{13e}\x07\u{13e}\u{b15}\x0a\u{13e}\x0c\u{13e}\x0e\u{13e}\u{b18}\x0b\u{13e}\ + \x03\u{13e}\x05\u{13e}\u{b1b}\x0a\u{13e}\x03\u{13e}\x05\u{13e}\u{b1e}\x0a\ + \u{13e}\x03\u{13e}\x03\u{13e}\x03\u{13f}\x03\u{13f}\x03\u{13f}\x03\u{13f}\ + \x07\u{13f}\u{b26}\x0a\u{13f}\x0c\u{13f}\x0e\u{13f}\u{b29}\x0b\u{13f}\x03\ + \u{13f}\x03\u{13f}\x03\u{13f}\x03\u{13f}\x03\u{13f}\x03\u{140}\x06\u{140}\ + \u{b31}\x0a\u{140}\x0d\u{140}\x0e\u{140}\u{b32}\x03\u{140}\x03\u{140}\x03\ + \u{141}\x03\u{141}\x03\u{b27}\x02\u{142}\x03\x03\x05\x04\x07\x05\x09\x06\ + \x0b\x07\x0d\x08\x0f\x09\x11\x0a\x13\x0b\x15\x0c\x17\x0d\x19\x0e\x1b\x0f\ + \x1d\x10\x1f\x11\x21\x12\x23\x13\x25\x14\x27\x15\x29\x16\x2b\x17\x2d\x18\ + \x2f\x19\x31\x1a\x33\x1b\x35\x1c\x37\x1d\x39\x1e\x3b\x1f\x3d\x20\x3f\x21\ + \x41\x22\x43\x23\x45\x24\x47\x25\x49\x26\x4b\x27\x4d\x28\x4f\x29\x51\x2a\ + \x53\x2b\x55\x2c\x57\x2d\x59\x2e\x5b\x2f\x5d\x30\x5f\x31\x61\x32\x63\x33\ + \x65\x34\x67\x35\x69\x36\x6b\x37\x6d\x38\x6f\x39\x71\x3a\x73\x3b\x75\x3c\ + \x77\x3d\x79\x3e\x7b\x3f\x7d\x40\x7f\x41\u{81}\x42\u{83}\x43\u{85}\x44\ + \u{87}\x45\u{89}\x46\u{8b}\x47\u{8d}\x48\u{8f}\x49\u{91}\x4a\u{93}\x4b\ + \u{95}\x4c\u{97}\x4d\u{99}\x4e\u{9b}\x4f\u{9d}\x50\u{9f}\x51\u{a1}\x52\ + \u{a3}\x53\u{a5}\x54\u{a7}\x55\u{a9}\x56\u{ab}\x57\u{ad}\x58\u{af}\x59\ + \u{b1}\x5a\u{b3}\x5b\u{b5}\x5c\u{b7}\x5d\u{b9}\x5e\u{bb}\x5f\u{bd}\x60\ + \u{bf}\x61\u{c1}\x62\u{c3}\x63\u{c5}\x64\u{c7}\x65\u{c9}\x66\u{cb}\x67\ + \u{cd}\x68\u{cf}\x69\u{d1}\x6a\u{d3}\x6b\u{d5}\x6c\u{d7}\x6d\u{d9}\x6e\ + \u{db}\x6f\u{dd}\x70\u{df}\x71\u{e1}\x72\u{e3}\x73\u{e5}\x74\u{e7}\x75\ + \u{e9}\x76\u{eb}\x77\u{ed}\x78\u{ef}\x79\u{f1}\x7a\u{f3}\x7b\u{f5}\x7c\ + \u{f7}\x7d\u{f9}\x7e\u{fb}\x7f\u{fd}\u{80}\u{ff}\u{81}\u{101}\u{82}\u{103}\ + \u{83}\u{105}\u{84}\u{107}\u{85}\u{109}\u{86}\u{10b}\u{87}\u{10d}\u{88}\ + \u{10f}\u{89}\u{111}\u{8a}\u{113}\u{8b}\u{115}\u{8c}\u{117}\u{8d}\u{119}\ + \u{8e}\u{11b}\u{8f}\u{11d}\u{90}\u{11f}\u{91}\u{121}\u{92}\u{123}\u{93}\ + \u{125}\u{94}\u{127}\u{95}\u{129}\u{96}\u{12b}\u{97}\u{12d}\u{98}\u{12f}\ + \u{99}\u{131}\u{9a}\u{133}\u{9b}\u{135}\u{9c}\u{137}\u{9d}\u{139}\u{9e}\ + \u{13b}\u{9f}\u{13d}\u{a0}\u{13f}\u{a1}\u{141}\u{a2}\u{143}\u{a3}\u{145}\ + \u{a4}\u{147}\u{a5}\u{149}\u{a6}\u{14b}\u{a7}\u{14d}\u{a8}\u{14f}\u{a9}\ + \u{151}\u{aa}\u{153}\u{ab}\u{155}\u{ac}\u{157}\u{ad}\u{159}\u{ae}\u{15b}\ + \u{af}\u{15d}\u{b0}\u{15f}\u{b1}\u{161}\u{b2}\u{163}\u{b3}\u{165}\u{b4}\ + \u{167}\u{b5}\u{169}\u{b6}\u{16b}\u{b7}\u{16d}\u{b8}\u{16f}\u{b9}\u{171}\ + \u{ba}\u{173}\u{bb}\u{175}\u{bc}\u{177}\u{bd}\u{179}\u{be}\u{17b}\u{bf}\ + \u{17d}\u{c0}\u{17f}\u{c1}\u{181}\u{c2}\u{183}\u{c3}\u{185}\u{c4}\u{187}\ + \u{c5}\u{189}\u{c6}\u{18b}\u{c7}\u{18d}\u{c8}\u{18f}\u{c9}\u{191}\u{ca}\ + \u{193}\u{cb}\u{195}\u{cc}\u{197}\u{cd}\u{199}\u{ce}\u{19b}\u{cf}\u{19d}\ + \u{d0}\u{19f}\u{d1}\u{1a1}\u{d2}\u{1a3}\u{d3}\u{1a5}\u{d4}\u{1a7}\u{d5}\ + \u{1a9}\u{d6}\u{1ab}\u{d7}\u{1ad}\u{d8}\u{1af}\u{d9}\u{1b1}\u{da}\u{1b3}\ + \u{db}\u{1b5}\u{dc}\u{1b7}\u{dd}\u{1b9}\u{de}\u{1bb}\u{df}\u{1bd}\u{e0}\ + \u{1bf}\u{e1}\u{1c1}\u{e2}\u{1c3}\u{e3}\u{1c5}\u{e4}\u{1c7}\u{e5}\u{1c9}\ + \u{e6}\u{1cb}\u{e7}\u{1cd}\u{e8}\u{1cf}\u{e9}\u{1d1}\u{ea}\u{1d3}\u{eb}\ + \u{1d5}\u{ec}\u{1d7}\u{ed}\u{1d9}\u{ee}\u{1db}\u{ef}\u{1dd}\u{f0}\u{1df}\ + \u{f1}\u{1e1}\u{f2}\u{1e3}\u{f3}\u{1e5}\u{f4}\u{1e7}\u{f5}\u{1e9}\u{f6}\ + \u{1eb}\u{f7}\u{1ed}\u{f8}\u{1ef}\u{f9}\u{1f1}\u{fa}\u{1f3}\u{fb}\u{1f5}\ + \u{fc}\u{1f7}\u{fd}\u{1f9}\u{fe}\u{1fb}\u{ff}\u{1fd}\u{100}\u{1ff}\u{101}\ + \u{201}\u{102}\u{203}\u{103}\u{205}\u{104}\u{207}\u{105}\u{209}\u{106}\ + \u{20b}\u{107}\u{20d}\u{108}\u{20f}\u{109}\u{211}\u{10a}\u{213}\u{10b}\ + \u{215}\u{10c}\u{217}\u{10d}\u{219}\u{10e}\u{21b}\u{10f}\u{21d}\u{110}\ + \u{21f}\u{111}\u{221}\u{112}\u{223}\u{113}\u{225}\u{114}\u{227}\u{115}\ + \u{229}\u{116}\u{22b}\u{117}\u{22d}\u{118}\u{22f}\u{119}\u{231}\u{11a}\ + \u{233}\u{11b}\u{235}\u{11c}\u{237}\u{11d}\u{239}\u{11e}\u{23b}\u{11f}\ + \u{23d}\u{120}\u{23f}\u{121}\u{241}\u{122}\u{243}\u{123}\u{245}\u{124}\ + \u{247}\u{125}\u{249}\u{126}\u{24b}\u{127}\u{24d}\u{128}\u{24f}\u{129}\ + \u{251}\u{12a}\u{253}\u{12b}\u{255}\u{12c}\u{257}\u{12d}\u{259}\u{12e}\ + \u{25b}\u{12f}\u{25d}\u{130}\u{25f}\u{131}\u{261}\u{132}\u{263}\u{133}\ + \u{265}\u{134}\u{267}\u{135}\u{269}\u{136}\u{26b}\u{137}\u{26d}\u{138}\ + \u{26f}\u{139}\u{271}\u{13a}\u{273}\u{13b}\u{275}\x02\u{277}\x02\u{279}\ + \x02\u{27b}\u{13c}\u{27d}\u{13d}\u{27f}\u{13e}\u{281}\u{13f}\x03\x02\x0a\ + \x03\x02\x29\x29\x03\x02\x24\x24\x03\x02\x62\x62\x04\x02\x2d\x2d\x2f\x2f\ + \x03\x02\x32\x3b\x03\x02\x43\x5c\x04\x02\x0c\x0c\x0f\x0f\x05\x02\x0b\x0c\ + \x0f\x0f\x22\x22\x02\u{b56}\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\ + \x02\x02\x07\x03\x02\x02\x02\x02\x09\x03\x02\x02\x02\x02\x0b\x03\x02\x02\ + \x02\x02\x0d\x03\x02\x02\x02\x02\x0f\x03\x02\x02\x02\x02\x11\x03\x02\x02\ + \x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\ + \x02\x02\x19\x03\x02\x02\x02\x02\x1b\x03\x02\x02\x02\x02\x1d\x03\x02\x02\ + \x02\x02\x1f\x03\x02\x02\x02\x02\x21\x03\x02\x02\x02\x02\x23\x03\x02\x02\ + \x02\x02\x25\x03\x02\x02\x02\x02\x27\x03\x02\x02\x02\x02\x29\x03\x02\x02\ + \x02\x02\x2b\x03\x02\x02\x02\x02\x2d\x03\x02\x02\x02\x02\x2f\x03\x02\x02\ + \x02\x02\x31\x03\x02\x02\x02\x02\x33\x03\x02\x02\x02\x02\x35\x03\x02\x02\ + \x02\x02\x37\x03\x02\x02\x02\x02\x39\x03\x02\x02\x02\x02\x3b\x03\x02\x02\ + \x02\x02\x3d\x03\x02\x02\x02\x02\x3f\x03\x02\x02\x02\x02\x41\x03\x02\x02\ + \x02\x02\x43\x03\x02\x02\x02\x02\x45\x03\x02\x02\x02\x02\x47\x03\x02\x02\ + \x02\x02\x49\x03\x02\x02\x02\x02\x4b\x03\x02\x02\x02\x02\x4d\x03\x02\x02\ + \x02\x02\x4f\x03\x02\x02\x02\x02\x51\x03\x02\x02\x02\x02\x53\x03\x02\x02\ + \x02\x02\x55\x03\x02\x02\x02\x02\x57\x03\x02\x02\x02\x02\x59\x03\x02\x02\ + \x02\x02\x5b\x03\x02\x02\x02\x02\x5d\x03\x02\x02\x02\x02\x5f\x03\x02\x02\ + \x02\x02\x61\x03\x02\x02\x02\x02\x63\x03\x02\x02\x02\x02\x65\x03\x02\x02\ + \x02\x02\x67\x03\x02\x02\x02\x02\x69\x03\x02\x02\x02\x02\x6b\x03\x02\x02\ + \x02\x02\x6d\x03\x02\x02\x02\x02\x6f\x03\x02\x02\x02\x02\x71\x03\x02\x02\ + \x02\x02\x73\x03\x02\x02\x02\x02\x75\x03\x02\x02\x02\x02\x77\x03\x02\x02\ + \x02\x02\x79\x03\x02\x02\x02\x02\x7b\x03\x02\x02\x02\x02\x7d\x03\x02\x02\ + \x02\x02\x7f\x03\x02\x02\x02\x02\u{81}\x03\x02\x02\x02\x02\u{83}\x03\x02\ + \x02\x02\x02\u{85}\x03\x02\x02\x02\x02\u{87}\x03\x02\x02\x02\x02\u{89}\ + \x03\x02\x02\x02\x02\u{8b}\x03\x02\x02\x02\x02\u{8d}\x03\x02\x02\x02\x02\ + \u{8f}\x03\x02\x02\x02\x02\u{91}\x03\x02\x02\x02\x02\u{93}\x03\x02\x02\ + \x02\x02\u{95}\x03\x02\x02\x02\x02\u{97}\x03\x02\x02\x02\x02\u{99}\x03\ + \x02\x02\x02\x02\u{9b}\x03\x02\x02\x02\x02\u{9d}\x03\x02\x02\x02\x02\u{9f}\ + \x03\x02\x02\x02\x02\u{a1}\x03\x02\x02\x02\x02\u{a3}\x03\x02\x02\x02\x02\ + \u{a5}\x03\x02\x02\x02\x02\u{a7}\x03\x02\x02\x02\x02\u{a9}\x03\x02\x02\ + \x02\x02\u{ab}\x03\x02\x02\x02\x02\u{ad}\x03\x02\x02\x02\x02\u{af}\x03\ + \x02\x02\x02\x02\u{b1}\x03\x02\x02\x02\x02\u{b3}\x03\x02\x02\x02\x02\u{b5}\ + \x03\x02\x02\x02\x02\u{b7}\x03\x02\x02\x02\x02\u{b9}\x03\x02\x02\x02\x02\ + \u{bb}\x03\x02\x02\x02\x02\u{bd}\x03\x02\x02\x02\x02\u{bf}\x03\x02\x02\ + \x02\x02\u{c1}\x03\x02\x02\x02\x02\u{c3}\x03\x02\x02\x02\x02\u{c5}\x03\ + \x02\x02\x02\x02\u{c7}\x03\x02\x02\x02\x02\u{c9}\x03\x02\x02\x02\x02\u{cb}\ + \x03\x02\x02\x02\x02\u{cd}\x03\x02\x02\x02\x02\u{cf}\x03\x02\x02\x02\x02\ + \u{d1}\x03\x02\x02\x02\x02\u{d3}\x03\x02\x02\x02\x02\u{d5}\x03\x02\x02\ + \x02\x02\u{d7}\x03\x02\x02\x02\x02\u{d9}\x03\x02\x02\x02\x02\u{db}\x03\ + \x02\x02\x02\x02\u{dd}\x03\x02\x02\x02\x02\u{df}\x03\x02\x02\x02\x02\u{e1}\ + \x03\x02\x02\x02\x02\u{e3}\x03\x02\x02\x02\x02\u{e5}\x03\x02\x02\x02\x02\ + \u{e7}\x03\x02\x02\x02\x02\u{e9}\x03\x02\x02\x02\x02\u{eb}\x03\x02\x02\ + \x02\x02\u{ed}\x03\x02\x02\x02\x02\u{ef}\x03\x02\x02\x02\x02\u{f1}\x03\ + \x02\x02\x02\x02\u{f3}\x03\x02\x02\x02\x02\u{f5}\x03\x02\x02\x02\x02\u{f7}\ + \x03\x02\x02\x02\x02\u{f9}\x03\x02\x02\x02\x02\u{fb}\x03\x02\x02\x02\x02\ + \u{fd}\x03\x02\x02\x02\x02\u{ff}\x03\x02\x02\x02\x02\u{101}\x03\x02\x02\ + \x02\x02\u{103}\x03\x02\x02\x02\x02\u{105}\x03\x02\x02\x02\x02\u{107}\x03\ + \x02\x02\x02\x02\u{109}\x03\x02\x02\x02\x02\u{10b}\x03\x02\x02\x02\x02\ + \u{10d}\x03\x02\x02\x02\x02\u{10f}\x03\x02\x02\x02\x02\u{111}\x03\x02\x02\ + \x02\x02\u{113}\x03\x02\x02\x02\x02\u{115}\x03\x02\x02\x02\x02\u{117}\x03\ + \x02\x02\x02\x02\u{119}\x03\x02\x02\x02\x02\u{11b}\x03\x02\x02\x02\x02\ + \u{11d}\x03\x02\x02\x02\x02\u{11f}\x03\x02\x02\x02\x02\u{121}\x03\x02\x02\ + \x02\x02\u{123}\x03\x02\x02\x02\x02\u{125}\x03\x02\x02\x02\x02\u{127}\x03\ + \x02\x02\x02\x02\u{129}\x03\x02\x02\x02\x02\u{12b}\x03\x02\x02\x02\x02\ + \u{12d}\x03\x02\x02\x02\x02\u{12f}\x03\x02\x02\x02\x02\u{131}\x03\x02\x02\ + \x02\x02\u{133}\x03\x02\x02\x02\x02\u{135}\x03\x02\x02\x02\x02\u{137}\x03\ + \x02\x02\x02\x02\u{139}\x03\x02\x02\x02\x02\u{13b}\x03\x02\x02\x02\x02\ + \u{13d}\x03\x02\x02\x02\x02\u{13f}\x03\x02\x02\x02\x02\u{141}\x03\x02\x02\ + \x02\x02\u{143}\x03\x02\x02\x02\x02\u{145}\x03\x02\x02\x02\x02\u{147}\x03\ + \x02\x02\x02\x02\u{149}\x03\x02\x02\x02\x02\u{14b}\x03\x02\x02\x02\x02\ + \u{14d}\x03\x02\x02\x02\x02\u{14f}\x03\x02\x02\x02\x02\u{151}\x03\x02\x02\ + \x02\x02\u{153}\x03\x02\x02\x02\x02\u{155}\x03\x02\x02\x02\x02\u{157}\x03\ + \x02\x02\x02\x02\u{159}\x03\x02\x02\x02\x02\u{15b}\x03\x02\x02\x02\x02\ + \u{15d}\x03\x02\x02\x02\x02\u{15f}\x03\x02\x02\x02\x02\u{161}\x03\x02\x02\ + \x02\x02\u{163}\x03\x02\x02\x02\x02\u{165}\x03\x02\x02\x02\x02\u{167}\x03\ + \x02\x02\x02\x02\u{169}\x03\x02\x02\x02\x02\u{16b}\x03\x02\x02\x02\x02\ + \u{16d}\x03\x02\x02\x02\x02\u{16f}\x03\x02\x02\x02\x02\u{171}\x03\x02\x02\ + \x02\x02\u{173}\x03\x02\x02\x02\x02\u{175}\x03\x02\x02\x02\x02\u{177}\x03\ + \x02\x02\x02\x02\u{179}\x03\x02\x02\x02\x02\u{17b}\x03\x02\x02\x02\x02\ + \u{17d}\x03\x02\x02\x02\x02\u{17f}\x03\x02\x02\x02\x02\u{181}\x03\x02\x02\ + \x02\x02\u{183}\x03\x02\x02\x02\x02\u{185}\x03\x02\x02\x02\x02\u{187}\x03\ + \x02\x02\x02\x02\u{189}\x03\x02\x02\x02\x02\u{18b}\x03\x02\x02\x02\x02\ + \u{18d}\x03\x02\x02\x02\x02\u{18f}\x03\x02\x02\x02\x02\u{191}\x03\x02\x02\ + \x02\x02\u{193}\x03\x02\x02\x02\x02\u{195}\x03\x02\x02\x02\x02\u{197}\x03\ + \x02\x02\x02\x02\u{199}\x03\x02\x02\x02\x02\u{19b}\x03\x02\x02\x02\x02\ + \u{19d}\x03\x02\x02\x02\x02\u{19f}\x03\x02\x02\x02\x02\u{1a1}\x03\x02\x02\ + \x02\x02\u{1a3}\x03\x02\x02\x02\x02\u{1a5}\x03\x02\x02\x02\x02\u{1a7}\x03\ + \x02\x02\x02\x02\u{1a9}\x03\x02\x02\x02\x02\u{1ab}\x03\x02\x02\x02\x02\ + \u{1ad}\x03\x02\x02\x02\x02\u{1af}\x03\x02\x02\x02\x02\u{1b1}\x03\x02\x02\ + \x02\x02\u{1b3}\x03\x02\x02\x02\x02\u{1b5}\x03\x02\x02\x02\x02\u{1b7}\x03\ + \x02\x02\x02\x02\u{1b9}\x03\x02\x02\x02\x02\u{1bb}\x03\x02\x02\x02\x02\ + \u{1bd}\x03\x02\x02\x02\x02\u{1bf}\x03\x02\x02\x02\x02\u{1c1}\x03\x02\x02\ + \x02\x02\u{1c3}\x03\x02\x02\x02\x02\u{1c5}\x03\x02\x02\x02\x02\u{1c7}\x03\ + \x02\x02\x02\x02\u{1c9}\x03\x02\x02\x02\x02\u{1cb}\x03\x02\x02\x02\x02\ + \u{1cd}\x03\x02\x02\x02\x02\u{1cf}\x03\x02\x02\x02\x02\u{1d1}\x03\x02\x02\ + \x02\x02\u{1d3}\x03\x02\x02\x02\x02\u{1d5}\x03\x02\x02\x02\x02\u{1d7}\x03\ + \x02\x02\x02\x02\u{1d9}\x03\x02\x02\x02\x02\u{1db}\x03\x02\x02\x02\x02\ + \u{1dd}\x03\x02\x02\x02\x02\u{1df}\x03\x02\x02\x02\x02\u{1e1}\x03\x02\x02\ + \x02\x02\u{1e3}\x03\x02\x02\x02\x02\u{1e5}\x03\x02\x02\x02\x02\u{1e7}\x03\ + \x02\x02\x02\x02\u{1e9}\x03\x02\x02\x02\x02\u{1eb}\x03\x02\x02\x02\x02\ + \u{1ed}\x03\x02\x02\x02\x02\u{1ef}\x03\x02\x02\x02\x02\u{1f1}\x03\x02\x02\ + \x02\x02\u{1f3}\x03\x02\x02\x02\x02\u{1f5}\x03\x02\x02\x02\x02\u{1f7}\x03\ + \x02\x02\x02\x02\u{1f9}\x03\x02\x02\x02\x02\u{1fb}\x03\x02\x02\x02\x02\ + \u{1fd}\x03\x02\x02\x02\x02\u{1ff}\x03\x02\x02\x02\x02\u{201}\x03\x02\x02\ + \x02\x02\u{203}\x03\x02\x02\x02\x02\u{205}\x03\x02\x02\x02\x02\u{207}\x03\ + \x02\x02\x02\x02\u{209}\x03\x02\x02\x02\x02\u{20b}\x03\x02\x02\x02\x02\ + \u{20d}\x03\x02\x02\x02\x02\u{20f}\x03\x02\x02\x02\x02\u{211}\x03\x02\x02\ + \x02\x02\u{213}\x03\x02\x02\x02\x02\u{215}\x03\x02\x02\x02\x02\u{217}\x03\ + \x02\x02\x02\x02\u{219}\x03\x02\x02\x02\x02\u{21b}\x03\x02\x02\x02\x02\ + \u{21d}\x03\x02\x02\x02\x02\u{21f}\x03\x02\x02\x02\x02\u{221}\x03\x02\x02\ + \x02\x02\u{223}\x03\x02\x02\x02\x02\u{225}\x03\x02\x02\x02\x02\u{227}\x03\ + \x02\x02\x02\x02\u{229}\x03\x02\x02\x02\x02\u{22b}\x03\x02\x02\x02\x02\ + \u{22d}\x03\x02\x02\x02\x02\u{22f}\x03\x02\x02\x02\x02\u{231}\x03\x02\x02\ + \x02\x02\u{233}\x03\x02\x02\x02\x02\u{235}\x03\x02\x02\x02\x02\u{237}\x03\ + \x02\x02\x02\x02\u{239}\x03\x02\x02\x02\x02\u{23b}\x03\x02\x02\x02\x02\ + \u{23d}\x03\x02\x02\x02\x02\u{23f}\x03\x02\x02\x02\x02\u{241}\x03\x02\x02\ + \x02\x02\u{243}\x03\x02\x02\x02\x02\u{245}\x03\x02\x02\x02\x02\u{247}\x03\ + \x02\x02\x02\x02\u{249}\x03\x02\x02\x02\x02\u{24b}\x03\x02\x02\x02\x02\ + \u{24d}\x03\x02\x02\x02\x02\u{24f}\x03\x02\x02\x02\x02\u{251}\x03\x02\x02\ + \x02\x02\u{253}\x03\x02\x02\x02\x02\u{255}\x03\x02\x02\x02\x02\u{257}\x03\ + \x02\x02\x02\x02\u{259}\x03\x02\x02\x02\x02\u{25b}\x03\x02\x02\x02\x02\ + \u{25d}\x03\x02\x02\x02\x02\u{25f}\x03\x02\x02\x02\x02\u{261}\x03\x02\x02\ + \x02\x02\u{263}\x03\x02\x02\x02\x02\u{265}\x03\x02\x02\x02\x02\u{267}\x03\ + \x02\x02\x02\x02\u{269}\x03\x02\x02\x02\x02\u{26b}\x03\x02\x02\x02\x02\ + \u{26d}\x03\x02\x02\x02\x02\u{26f}\x03\x02\x02\x02\x02\u{271}\x03\x02\x02\ + \x02\x02\u{273}\x03\x02\x02\x02\x02\u{27b}\x03\x02\x02\x02\x02\u{27d}\x03\ + \x02\x02\x02\x02\u{27f}\x03\x02\x02\x02\x02\u{281}\x03\x02\x02\x02\x03\ + \u{283}\x03\x02\x02\x02\x05\u{285}\x03\x02\x02\x02\x07\u{287}\x03\x02\x02\ + \x02\x09\u{289}\x03\x02\x02\x02\x0b\u{28e}\x03\x02\x02\x02\x0d\u{291}\x03\ + \x02\x02\x02\x0f\u{294}\x03\x02\x02\x02\x11\u{296}\x03\x02\x02\x02\x13\ + \u{298}\x03\x02\x02\x02\x15\u{29a}\x03\x02\x02\x02\x17\u{29c}\x03\x02\x02\ + \x02\x19\u{29e}\x03\x02\x02\x02\x1b\u{2a0}\x03\x02\x02\x02\x1d\u{2a3}\x03\ + \x02\x02\x02\x1f\u{2a6}\x03\x02\x02\x02\x21\u{2a8}\x03\x02\x02\x02\x23\ + \u{2aa}\x03\x02\x02\x02\x25\u{2b1}\x03\x02\x02\x02\x27\u{2b5}\x03\x02\x02\ + \x02\x29\u{2bb}\x03\x02\x02\x02\x2b\u{2c1}\x03\x02\x02\x02\x2d\u{2c5}\x03\ + \x02\x02\x02\x2f\u{2cb}\x03\x02\x02\x02\x31\u{2d3}\x03\x02\x02\x02\x33\ + \u{2d7}\x03\x02\x02\x02\x35\u{2db}\x03\x02\x02\x02\x37\u{2e1}\x03\x02\x02\ + \x02\x39\u{2e4}\x03\x02\x02\x02\x3b\u{2e8}\x03\x02\x02\x02\x3d\u{2eb}\x03\ + \x02\x02\x02\x3f\u{2f9}\x03\x02\x02\x02\x41\u{303}\x03\x02\x02\x02\x43\ + \u{30b}\x03\x02\x02\x02\x45\u{310}\x03\x02\x02\x02\x47\u{313}\x03\x02\x02\ + \x02\x49\u{318}\x03\x02\x02\x02\x4b\u{320}\x03\x02\x02\x02\x4d\u{325}\x03\ + \x02\x02\x02\x4f\u{32a}\x03\x02\x02\x02\x51\u{333}\x03\x02\x02\x02\x53\ + \u{33a}\x03\x02\x02\x02\x55\u{342}\x03\x02\x02\x02\x57\u{344}\x03\x02\x02\ + \x02\x59\u{34c}\x03\x02\x02\x02\x5b\u{353}\x03\x02\x02\x02\x5d\u{35d}\x03\ + \x02\x02\x02\x5f\u{369}\x03\x02\x02\x02\x61\u{374}\x03\x02\x02\x02\x63\ + \u{37a}\x03\x02\x02\x02\x65\u{386}\x03\x02\x02\x02\x67\u{38d}\x03\x02\x02\ + \x02\x69\u{393}\x03\x02\x02\x02\x6b\u{398}\x03\x02\x02\x02\x6d\u{3a0}\x03\ + \x02\x02\x02\x6f\u{3b0}\x03\x02\x02\x02\x71\u{3bd}\x03\x02\x02\x02\x73\ + \u{3ca}\x03\x02\x02\x02\x75\u{3d7}\x03\x02\x02\x02\x77\u{3e6}\x03\x02\x02\ + \x02\x79\u{3f3}\x03\x02\x02\x02\x7b\u{405}\x03\x02\x02\x02\x7d\u{412}\x03\ + \x02\x02\x02\x7f\u{417}\x03\x02\x02\x02\u{81}\u{41c}\x03\x02\x02\x02\u{83}\ + \u{420}\x03\x02\x02\x02\u{85}\u{42b}\x03\x02\x02\x02\u{87}\u{433}\x03\x02\ + \x02\x02\u{89}\u{43a}\x03\x02\x02\x02\u{8b}\u{442}\x03\x02\x02\x02\u{8d}\ + \u{449}\x03\x02\x02\x02\u{8f}\u{44e}\x03\x02\x02\x02\u{91}\u{453}\x03\x02\ + \x02\x02\u{93}\u{45c}\x03\x02\x02\x02\u{95}\u{467}\x03\x02\x02\x02\u{97}\ + \u{470}\x03\x02\x02\x02\u{99}\u{47c}\x03\x02\x02\x02\u{9b}\u{483}\x03\x02\ + \x02\x02\u{9d}\u{488}\x03\x02\x02\x02\u{9f}\u{48d}\x03\x02\x02\x02\u{a1}\ + \u{493}\x03\x02\x02\x02\u{a3}\u{49c}\x03\x02\x02\x02\u{a5}\u{4a0}\x03\x02\ + \x02\x02\u{a7}\u{4a6}\x03\x02\x02\x02\u{a9}\u{4ad}\x03\x02\x02\x02\u{ab}\ + \u{4b4}\x03\x02\x02\x02\u{ad}\u{4be}\x03\x02\x02\x02\u{af}\u{4c6}\x03\x02\ + \x02\x02\u{b1}\u{4cd}\x03\x02\x02\x02\u{b3}\u{4d5}\x03\x02\x02\x02\u{b5}\ + \u{4dd}\x03\x02\x02\x02\u{b7}\u{4e3}\x03\x02\x02\x02\u{b9}\u{4e9}\x03\x02\ + \x02\x02\u{bb}\u{4f0}\x03\x02\x02\x02\u{bd}\u{4f6}\x03\x02\x02\x02\u{bf}\ + \u{4fc}\x03\x02\x02\x02\u{c1}\u{506}\x03\x02\x02\x02\u{c3}\u{50a}\x03\x02\ + \x02\x02\u{c5}\u{511}\x03\x02\x02\x02\u{c7}\u{516}\x03\x02\x02\x02\u{c9}\ + \u{51b}\x03\x02\x02\x02\u{cb}\u{525}\x03\x02\x02\x02\u{cd}\u{52b}\x03\x02\ + \x02\x02\u{cf}\u{531}\x03\x02\x02\x02\u{d1}\u{539}\x03\x02\x02\x02\u{d3}\ + \u{540}\x03\x02\x02\x02\u{d5}\u{549}\x03\x02\x02\x02\u{d7}\u{54f}\x03\x02\ + \x02\x02\u{d9}\u{558}\x03\x02\x02\x02\u{db}\u{55f}\x03\x02\x02\x02\u{dd}\ + \u{566}\x03\x02\x02\x02\u{df}\u{56b}\x03\x02\x02\x02\u{e1}\u{56e}\x03\x02\ + \x02\x02\u{e3}\u{575}\x03\x02\x02\x02\u{e5}\u{578}\x03\x02\x02\x02\u{e7}\ + \u{582}\x03\x02\x02\x02\u{e9}\u{58a}\x03\x02\x02\x02\u{eb}\u{590}\x03\x02\ + \x02\x02\u{ed}\u{596}\x03\x02\x02\x02\u{ef}\u{59d}\x03\x02\x02\x02\u{f1}\ + \u{5a7}\x03\x02\x02\x02\u{f3}\u{5b0}\x03\x02\x02\x02\u{f5}\u{5b5}\x03\x02\ + \x02\x02\u{f7}\u{5bd}\x03\x02\x02\x02\u{f9}\u{5c0}\x03\x02\x02\x02\u{fb}\ + \u{5c3}\x03\x02\x02\x02\u{fd}\u{5cd}\x03\x02\x02\x02\u{ff}\u{5d2}\x03\x02\ + \x02\x02\u{101}\u{5d7}\x03\x02\x02\x02\u{103}\u{5e2}\x03\x02\x02\x02\u{105}\ + \u{5ee}\x03\x02\x02\x02\u{107}\u{5fa}\x03\x02\x02\x02\u{109}\u{605}\x03\ + \x02\x02\x02\u{10b}\u{610}\x03\x02\x02\x02\u{10d}\u{615}\x03\x02\x02\x02\ + \u{10f}\u{619}\x03\x02\x02\x02\u{111}\u{61e}\x03\x02\x02\x02\u{113}\u{623}\ + \x03\x02\x02\x02\u{115}\u{62b}\x03\x02\x02\x02\u{117}\u{633}\x03\x02\x02\ + \x02\u{119}\u{638}\x03\x02\x02\x02\u{11b}\u{63e}\x03\x02\x02\x02\u{11d}\ + \u{643}\x03\x02\x02\x02\u{11f}\u{649}\x03\x02\x02\x02\u{121}\u{651}\x03\ + \x02\x02\x02\u{123}\u{657}\x03\x02\x02\x02\u{125}\u{661}\x03\x02\x02\x02\ + \u{127}\u{670}\x03\x02\x02\x02\u{129}\u{678}\x03\x02\x02\x02\u{12b}\u{67c}\ + \x03\x02\x02\x02\u{12d}\u{682}\x03\x02\x02\x02\u{12f}\u{68a}\x03\x02\x02\ + \x02\u{131}\u{692}\x03\x02\x02\x02\u{133}\u{6a2}\x03\x02\x02\x02\u{135}\ + \u{6af}\x03\x02\x02\x02\u{137}\u{6b8}\x03\x02\x02\x02\u{139}\u{6be}\x03\ + \x02\x02\x02\u{13b}\u{6c5}\x03\x02\x02\x02\u{13d}\u{6cb}\x03\x02\x02\x02\ + \u{13f}\u{6d3}\x03\x02\x02\x02\u{141}\u{6d8}\x03\x02\x02\x02\u{143}\u{6dc}\ + \x03\x02\x02\x02\u{145}\u{6e0}\x03\x02\x02\x02\u{147}\u{6e5}\x03\x02\x02\ + \x02\u{149}\u{6ea}\x03\x02\x02\x02\u{14b}\u{6ed}\x03\x02\x02\x02\u{14d}\ + \u{6f2}\x03\x02\x02\x02\u{14f}\u{6fc}\x03\x02\x02\x02\u{151}\u{700}\x03\ + \x02\x02\x02\u{153}\u{705}\x03\x02\x02\x02\u{155}\u{70c}\x03\x02\x02\x02\ + \u{157}\u{712}\x03\x02\x02\x02\u{159}\u{719}\x03\x02\x02\x02\u{15b}\u{71c}\ + \x03\x02\x02\x02\u{15d}\u{723}\x03\x02\x02\x02\u{15f}\u{728}\x03\x02\x02\ + \x02\u{161}\u{72b}\x03\x02\x02\x02\u{163}\u{72f}\x03\x02\x02\x02\u{165}\ + \u{734}\x03\x02\x02\x02\u{167}\u{73b}\x03\x02\x02\x02\u{169}\u{73e}\x03\ + \x02\x02\x02\u{16b}\u{744}\x03\x02\x02\x02\u{16d}\u{74f}\x03\x02\x02\x02\ + \u{16f}\u{755}\x03\x02\x02\x02\u{171}\u{75c}\x03\x02\x02\x02\u{173}\u{761}\ + \x03\x02\x02\x02\u{175}\u{76a}\x03\x02\x02\x02\u{177}\u{774}\x03\x02\x02\ + \x02\u{179}\u{77f}\x03\x02\x02\x02\u{17b}\u{787}\x03\x02\x02\x02\u{17d}\ + \u{78c}\x03\x02\x02\x02\u{17f}\u{791}\x03\x02\x02\x02\u{181}\u{799}\x03\ + \x02\x02\x02\u{183}\u{79d}\x03\x02\x02\x02\u{185}\u{7a4}\x03\x02\x02\x02\ + \u{187}\u{7ac}\x03\x02\x02\x02\u{189}\u{7b5}\x03\x02\x02\x02\u{18b}\u{7bf}\ + \x03\x02\x02\x02\u{18d}\u{7c9}\x03\x02\x02\x02\u{18f}\u{7d1}\x03\x02\x02\ + \x02\u{191}\u{7dc}\x03\x02\x02\x02\u{193}\u{7e7}\x03\x02\x02\x02\u{195}\ + \u{7ed}\x03\x02\x02\x02\u{197}\u{7f4}\x03\x02\x02\x02\u{199}\u{7fa}\x03\ + \x02\x02\x02\u{19b}\u{7ff}\x03\x02\x02\x02\u{19d}\u{809}\x03\x02\x02\x02\ + \u{19f}\u{811}\x03\x02\x02\x02\u{1a1}\u{818}\x03\x02\x02\x02\u{1a3}\u{823}\ + \x03\x02\x02\x02\u{1a5}\u{82b}\x03\x02\x02\x02\u{1a7}\u{831}\x03\x02\x02\ + \x02\u{1a9}\u{839}\x03\x02\x02\x02\u{1ab}\u{842}\x03\x02\x02\x02\u{1ad}\ + \u{84c}\x03\x02\x02\x02\u{1af}\u{853}\x03\x02\x02\x02\u{1b1}\u{859}\x03\ + \x02\x02\x02\u{1b3}\u{85e}\x03\x02\x02\x02\u{1b5}\u{864}\x03\x02\x02\x02\ + \u{1b7}\u{86d}\x03\x02\x02\x02\u{1b9}\u{874}\x03\x02\x02\x02\u{1bb}\u{878}\ + \x03\x02\x02\x02\u{1bd}\u{87d}\x03\x02\x02\x02\u{1bf}\u{885}\x03\x02\x02\ + \x02\u{1c1}\u{88c}\x03\x02\x02\x02\u{1c3}\u{893}\x03\x02\x02\x02\u{1c5}\ + \u{89b}\x03\x02\x02\x02\u{1c7}\u{8a2}\x03\x02\x02\x02\u{1c9}\u{8ab}\x03\ + \x02\x02\x02\u{1cb}\u{8b0}\x03\x02\x02\x02\u{1cd}\u{8b7}\x03\x02\x02\x02\ + \u{1cf}\u{8c4}\x03\x02\x02\x02\u{1d1}\u{8cc}\x03\x02\x02\x02\u{1d3}\u{8d0}\ + \x03\x02\x02\x02\u{1d5}\u{8d5}\x03\x02\x02\x02\u{1d7}\u{8da}\x03\x02\x02\ + \x02\u{1d9}\u{8df}\x03\x02\x02\x02\u{1db}\u{8e5}\x03\x02\x02\x02\u{1dd}\ + \u{8eb}\x03\x02\x02\x02\u{1df}\u{8f2}\x03\x02\x02\x02\u{1e1}\u{8fc}\x03\ + \x02\x02\x02\u{1e3}\u{903}\x03\x02\x02\x02\u{1e5}\u{909}\x03\x02\x02\x02\ + \u{1e7}\u{910}\x03\x02\x02\x02\u{1e9}\u{91c}\x03\x02\x02\x02\u{1eb}\u{921}\ + \x03\x02\x02\x02\u{1ed}\u{928}\x03\x02\x02\x02\u{1ef}\u{92d}\x03\x02\x02\ + \x02\u{1f1}\u{932}\x03\x02\x02\x02\u{1f3}\u{937}\x03\x02\x02\x02\u{1f5}\ + \u{941}\x03\x02\x02\x02\u{1f7}\u{944}\x03\x02\x02\x02\u{1f9}\u{94d}\x03\ + \x02\x02\x02\u{1fb}\u{959}\x03\x02\x02\x02\u{1fd}\u{95e}\x03\x02\x02\x02\ + \u{1ff}\u{963}\x03\x02\x02\x02\u{201}\u{96c}\x03\x02\x02\x02\u{203}\u{975}\ + \x03\x02\x02\x02\u{205}\u{97a}\x03\x02\x02\x02\u{207}\u{982}\x03\x02\x02\ + \x02\u{209}\u{98c}\x03\x02\x02\x02\u{20b}\u{998}\x03\x02\x02\x02\u{20d}\ + \u{9a6}\x03\x02\x02\x02\u{20f}\u{9ac}\x03\x02\x02\x02\u{211}\u{9b3}\x03\ + \x02\x02\x02\u{213}\u{9bb}\x03\x02\x02\x02\u{215}\u{9c5}\x03\x02\x02\x02\ + \u{217}\u{9cc}\x03\x02\x02\x02\u{219}\u{9d3}\x03\x02\x02\x02\u{21b}\u{9d7}\ + \x03\x02\x02\x02\u{21d}\u{9dc}\x03\x02\x02\x02\u{21f}\u{9e2}\x03\x02\x02\ + \x02\u{221}\u{9e8}\x03\x02\x02\x02\u{223}\u{9ee}\x03\x02\x02\x02\u{225}\ + \u{9f3}\x03\x02\x02\x02\u{227}\u{9fc}\x03\x02\x02\x02\u{229}\u{a02}\x03\ + \x02\x02\x02\u{22b}\u{a09}\x03\x02\x02\x02\u{22d}\u{a11}\x03\x02\x02\x02\ + \u{22f}\u{a19}\x03\x02\x02\x02\u{231}\u{a1e}\x03\x02\x02\x02\u{233}\u{a23}\ + \x03\x02\x02\x02\u{235}\u{a29}\x03\x02\x02\x02\u{237}\u{a30}\x03\x02\x02\ + \x02\u{239}\u{a35}\x03\x02\x02\x02\u{23b}\u{a3c}\x03\x02\x02\x02\u{23d}\ + \u{a44}\x03\x02\x02\x02\u{23f}\u{a49}\x03\x02\x02\x02\u{241}\u{a51}\x03\ + \x02\x02\x02\u{243}\u{a57}\x03\x02\x02\x02\u{245}\u{a5c}\x03\x02\x02\x02\ + \u{247}\u{a61}\x03\x02\x02\x02\u{249}\u{a67}\x03\x02\x02\x02\u{24b}\u{a69}\ + \x03\x02\x02\x02\u{24d}\u{a6b}\x03\x02\x02\x02\u{24f}\u{a6e}\x03\x02\x02\ + \x02\u{251}\u{a70}\x03\x02\x02\x02\u{253}\u{a73}\x03\x02\x02\x02\u{255}\ + \u{a75}\x03\x02\x02\x02\u{257}\u{a77}\x03\x02\x02\x02\u{259}\u{a79}\x03\ + \x02\x02\x02\u{25b}\u{a7b}\x03\x02\x02\x02\u{25d}\u{a7d}\x03\x02\x02\x02\ + \u{25f}\u{a80}\x03\x02\x02\x02\u{261}\u{a82}\x03\x02\x02\x02\u{263}\u{a8d}\ + \x03\x02\x02\x02\u{265}\u{a9b}\x03\x02\x02\x02\u{267}\u{aa7}\x03\x02\x02\ + \x02\u{269}\u{abd}\x03\x02\x02\x02\u{26b}\u{ad7}\x03\x02\x02\x02\u{26d}\ + \u{adb}\x03\x02\x02\x02\u{26f}\u{ae5}\x03\x02\x02\x02\u{271}\u{aed}\x03\ + \x02\x02\x02\u{273}\u{af8}\x03\x02\x02\x02\u{275}\u{b03}\x03\x02\x02\x02\ + \u{277}\u{b0c}\x03\x02\x02\x02\u{279}\u{b0e}\x03\x02\x02\x02\u{27b}\u{b10}\ + \x03\x02\x02\x02\u{27d}\u{b21}\x03\x02\x02\x02\u{27f}\u{b30}\x03\x02\x02\ + \x02\u{281}\u{b36}\x03\x02\x02\x02\u{283}\u{284}\x07\x30\x02\x02\u{284}\ + \x04\x03\x02\x02\x02\u{285}\u{286}\x07\x2a\x02\x02\u{286}\x06\x03\x02\x02\ + \x02\u{287}\u{288}\x07\x2b\x02\x02\u{288}\x08\x03\x02\x02\x02\u{289}\u{28a}\ + \x07\x55\x02\x02\u{28a}\u{28b}\x07\x4d\x02\x02\u{28b}\u{28c}\x07\x4b\x02\ + \x02\u{28c}\u{28d}\x07\x52\x02\x02\u{28d}\x0a\x03\x02\x02\x02\u{28e}\u{28f}\ + \x07\x3f\x02\x02\u{28f}\u{290}\x07\x40\x02\x02\u{290}\x0c\x03\x02\x02\x02\ + \u{291}\u{292}\x07\x2f\x02\x02\u{292}\u{293}\x07\x40\x02\x02\u{293}\x0e\ + \x03\x02\x02\x02\u{294}\u{295}\x07\x5d\x02\x02\u{295}\x10\x03\x02\x02\x02\ + \u{296}\u{297}\x07\x5f\x02\x02\u{297}\x12\x03\x02\x02\x02\u{298}\u{299}\ + \x07\x3c\x02\x02\u{299}\x14\x03\x02\x02\x02\u{29a}\u{29b}\x07\x7e\x02\x02\ + \u{29b}\x16\x03\x02\x02\x02\u{29c}\u{29d}\x07\x60\x02\x02\u{29d}\x18\x03\ + \x02\x02\x02\u{29e}\u{29f}\x07\x26\x02\x02\u{29f}\x1a\x03\x02\x02\x02\u{2a0}\ + \u{2a1}\x07\x7d\x02\x02\u{2a1}\u{2a2}\x07\x2f\x02\x02\u{2a2}\x1c\x03\x02\ + \x02\x02\u{2a3}\u{2a4}\x07\x2f\x02\x02\u{2a4}\u{2a5}\x07\x7f\x02\x02\u{2a5}\ + \x1e\x03\x02\x02\x02\u{2a6}\u{2a7}\x07\x7d\x02\x02\u{2a7}\x20\x03\x02\x02\ + \x02\u{2a8}\u{2a9}\x07\x7f\x02\x02\u{2a9}\x22\x03\x02\x02\x02\u{2aa}\u{2ab}\ + \x07\x43\x02\x02\u{2ab}\u{2ac}\x07\x44\x02\x02\u{2ac}\u{2ad}\x07\x55\x02\ + \x02\u{2ad}\u{2ae}\x07\x47\x02\x02\u{2ae}\u{2af}\x07\x50\x02\x02\u{2af}\ + \u{2b0}\x07\x56\x02\x02\u{2b0}\x24\x03\x02\x02\x02\u{2b1}\u{2b2}\x07\x43\ + \x02\x02\u{2b2}\u{2b3}\x07\x46\x02\x02\u{2b3}\u{2b4}\x07\x46\x02\x02\u{2b4}\ + \x26\x03\x02\x02\x02\u{2b5}\u{2b6}\x07\x43\x02\x02\u{2b6}\u{2b7}\x07\x46\ + \x02\x02\u{2b7}\u{2b8}\x07\x4f\x02\x02\u{2b8}\u{2b9}\x07\x4b\x02\x02\u{2b9}\ + \u{2ba}\x07\x50\x02\x02\u{2ba}\x28\x03\x02\x02\x02\u{2bb}\u{2bc}\x07\x43\ + \x02\x02\u{2bc}\u{2bd}\x07\x48\x02\x02\u{2bd}\u{2be}\x07\x56\x02\x02\u{2be}\ + \u{2bf}\x07\x47\x02\x02\u{2bf}\u{2c0}\x07\x54\x02\x02\u{2c0}\x2a\x03\x02\ + \x02\x02\u{2c1}\u{2c2}\x07\x43\x02\x02\u{2c2}\u{2c3}\x07\x4e\x02\x02\u{2c3}\ + \u{2c4}\x07\x4e\x02\x02\u{2c4}\x2c\x03\x02\x02\x02\u{2c5}\u{2c6}\x07\x43\ + \x02\x02\u{2c6}\u{2c7}\x07\x4e\x02\x02\u{2c7}\u{2c8}\x07\x56\x02\x02\u{2c8}\ + \u{2c9}\x07\x47\x02\x02\u{2c9}\u{2ca}\x07\x54\x02\x02\u{2ca}\x2e\x03\x02\ + \x02\x02\u{2cb}\u{2cc}\x07\x43\x02\x02\u{2cc}\u{2cd}\x07\x50\x02\x02\u{2cd}\ + \u{2ce}\x07\x43\x02\x02\u{2ce}\u{2cf}\x07\x4e\x02\x02\u{2cf}\u{2d0}\x07\ + \x5b\x02\x02\u{2d0}\u{2d1}\x07\x5c\x02\x02\u{2d1}\u{2d2}\x07\x47\x02\x02\ + \u{2d2}\x30\x03\x02\x02\x02\u{2d3}\u{2d4}\x07\x43\x02\x02\u{2d4}\u{2d5}\ + \x07\x50\x02\x02\u{2d5}\u{2d6}\x07\x46\x02\x02\u{2d6}\x32\x03\x02\x02\x02\ + \u{2d7}\u{2d8}\x07\x43\x02\x02\u{2d8}\u{2d9}\x07\x50\x02\x02\u{2d9}\u{2da}\ + \x07\x5b\x02\x02\u{2da}\x34\x03\x02\x02\x02\u{2db}\u{2dc}\x07\x43\x02\x02\ + \u{2dc}\u{2dd}\x07\x54\x02\x02\u{2dd}\u{2de}\x07\x54\x02\x02\u{2de}\u{2df}\ + \x07\x43\x02\x02\u{2df}\u{2e0}\x07\x5b\x02\x02\u{2e0}\x36\x03\x02\x02\x02\ + \u{2e1}\u{2e2}\x07\x43\x02\x02\u{2e2}\u{2e3}\x07\x55\x02\x02\u{2e3}\x38\ + \x03\x02\x02\x02\u{2e4}\u{2e5}\x07\x43\x02\x02\u{2e5}\u{2e6}\x07\x55\x02\ + \x02\u{2e6}\u{2e7}\x07\x45\x02\x02\u{2e7}\x3a\x03\x02\x02\x02\u{2e8}\u{2e9}\ + \x07\x43\x02\x02\u{2e9}\u{2ea}\x07\x56\x02\x02\u{2ea}\x3c\x03\x02\x02\x02\ + \u{2eb}\u{2ec}\x07\x43\x02\x02\u{2ec}\u{2ed}\x07\x57\x02\x02\u{2ed}\u{2ee}\ + \x07\x56\x02\x02\u{2ee}\u{2ef}\x07\x4a\x02\x02\u{2ef}\u{2f0}\x07\x51\x02\ + \x02\u{2f0}\u{2f1}\x07\x54\x02\x02\u{2f1}\u{2f2}\x07\x4b\x02\x02\u{2f2}\ + \u{2f3}\x07\x5c\x02\x02\u{2f3}\u{2f4}\x07\x43\x02\x02\u{2f4}\u{2f5}\x07\ + \x56\x02\x02\u{2f5}\u{2f6}\x07\x4b\x02\x02\u{2f6}\u{2f7}\x07\x51\x02\x02\ + \u{2f7}\u{2f8}\x07\x50\x02\x02\u{2f8}\x3e\x03\x02\x02\x02\u{2f9}\u{2fa}\ + \x07\x44\x02\x02\u{2fa}\u{2fb}\x07\x47\x02\x02\u{2fb}\u{2fc}\x07\x54\x02\ + \x02\u{2fc}\u{2fd}\x07\x50\x02\x02\u{2fd}\u{2fe}\x07\x51\x02\x02\u{2fe}\ + \u{2ff}\x07\x57\x02\x02\u{2ff}\u{300}\x07\x4e\x02\x02\u{300}\u{301}\x07\ + \x4e\x02\x02\u{301}\u{302}\x07\x4b\x02\x02\u{302}\x40\x03\x02\x02\x02\u{303}\ + \u{304}\x07\x44\x02\x02\u{304}\u{305}\x07\x47\x02\x02\u{305}\u{306}\x07\ + \x56\x02\x02\u{306}\u{307}\x07\x59\x02\x02\u{307}\u{308}\x07\x47\x02\x02\ + \u{308}\u{309}\x07\x47\x02\x02\u{309}\u{30a}\x07\x50\x02\x02\u{30a}\x42\ + \x03\x02\x02\x02\u{30b}\u{30c}\x07\x44\x02\x02\u{30c}\u{30d}\x07\x51\x02\ + \x02\u{30d}\u{30e}\x07\x56\x02\x02\u{30e}\u{30f}\x07\x4a\x02\x02\u{30f}\ + \x44\x03\x02\x02\x02\u{310}\u{311}\x07\x44\x02\x02\u{311}\u{312}\x07\x5b\ + \x02\x02\u{312}\x46\x03\x02\x02\x02\u{313}\u{314}\x07\x45\x02\x02\u{314}\ + \u{315}\x07\x43\x02\x02\u{315}\u{316}\x07\x4e\x02\x02\u{316}\u{317}\x07\ + \x4e\x02\x02\u{317}\x48\x03\x02\x02\x02\u{318}\u{319}\x07\x45\x02\x02\u{319}\ + \u{31a}\x07\x43\x02\x02\u{31a}\u{31b}\x07\x55\x02\x02\u{31b}\u{31c}\x07\ + \x45\x02\x02\u{31c}\u{31d}\x07\x43\x02\x02\u{31d}\u{31e}\x07\x46\x02\x02\ + \u{31e}\u{31f}\x07\x47\x02\x02\u{31f}\x4a\x03\x02\x02\x02\u{320}\u{321}\ + \x07\x45\x02\x02\u{321}\u{322}\x07\x43\x02\x02\u{322}\u{323}\x07\x55\x02\ + \x02\u{323}\u{324}\x07\x47\x02\x02\u{324}\x4c\x03\x02\x02\x02\u{325}\u{326}\ + \x07\x45\x02\x02\u{326}\u{327}\x07\x43\x02\x02\u{327}\u{328}\x07\x55\x02\ + \x02\u{328}\u{329}\x07\x56\x02\x02\u{329}\x4e\x03\x02\x02\x02\u{32a}\u{32b}\ + \x07\x45\x02\x02\u{32b}\u{32c}\x07\x43\x02\x02\u{32c}\u{32d}\x07\x56\x02\ + \x02\u{32d}\u{32e}\x07\x43\x02\x02\u{32e}\u{32f}\x07\x4e\x02\x02\u{32f}\ + \u{330}\x07\x51\x02\x02\u{330}\u{331}\x07\x49\x02\x02\u{331}\u{332}\x07\ + \x55\x02\x02\u{332}\x50\x03\x02\x02\x02\u{333}\u{334}\x07\x45\x02\x02\u{334}\ + \u{335}\x07\x51\x02\x02\u{335}\u{336}\x07\x4e\x02\x02\u{336}\u{337}\x07\ + \x57\x02\x02\u{337}\u{338}\x07\x4f\x02\x02\u{338}\u{339}\x07\x50\x02\x02\ + \u{339}\x52\x03\x02\x02\x02\u{33a}\u{33b}\x07\x45\x02\x02\u{33b}\u{33c}\ + \x07\x51\x02\x02\u{33c}\u{33d}\x07\x4e\x02\x02\u{33d}\u{33e}\x07\x57\x02\ + \x02\u{33e}\u{33f}\x07\x4f\x02\x02\u{33f}\u{340}\x07\x50\x02\x02\u{340}\ + \u{341}\x07\x55\x02\x02\u{341}\x54\x03\x02\x02\x02\u{342}\u{343}\x07\x2e\ + \x02\x02\u{343}\x56\x03\x02\x02\x02\u{344}\u{345}\x07\x45\x02\x02\u{345}\ + \u{346}\x07\x51\x02\x02\u{346}\u{347}\x07\x4f\x02\x02\u{347}\u{348}\x07\ + \x4f\x02\x02\u{348}\u{349}\x07\x47\x02\x02\u{349}\u{34a}\x07\x50\x02\x02\ + \u{34a}\u{34b}\x07\x56\x02\x02\u{34b}\x58\x03\x02\x02\x02\u{34c}\u{34d}\ + \x07\x45\x02\x02\u{34d}\u{34e}\x07\x51\x02\x02\u{34e}\u{34f}\x07\x4f\x02\ + \x02\u{34f}\u{350}\x07\x4f\x02\x02\u{350}\u{351}\x07\x4b\x02\x02\u{351}\ + \u{352}\x07\x56\x02\x02\u{352}\x5a\x03\x02\x02\x02\u{353}\u{354}\x07\x45\ + \x02\x02\u{354}\u{355}\x07\x51\x02\x02\u{355}\u{356}\x07\x4f\x02\x02\u{356}\ + \u{357}\x07\x4f\x02\x02\u{357}\u{358}\x07\x4b\x02\x02\u{358}\u{359}\x07\ + \x56\x02\x02\u{359}\u{35a}\x07\x56\x02\x02\u{35a}\u{35b}\x07\x47\x02\x02\ + \u{35b}\u{35c}\x07\x46\x02\x02\u{35c}\x5c\x03\x02\x02\x02\u{35d}\u{35e}\ + \x07\x45\x02\x02\u{35e}\u{35f}\x07\x51\x02\x02\u{35f}\u{360}\x07\x50\x02\ + \x02\u{360}\u{361}\x07\x46\x02\x02\u{361}\u{362}\x07\x4b\x02\x02\u{362}\ + \u{363}\x07\x56\x02\x02\u{363}\u{364}\x07\x4b\x02\x02\u{364}\u{365}\x07\ + \x51\x02\x02\u{365}\u{366}\x07\x50\x02\x02\u{366}\u{367}\x07\x43\x02\x02\ + \u{367}\u{368}\x07\x4e\x02\x02\u{368}\x5e\x03\x02\x02\x02\u{369}\u{36a}\ + \x07\x45\x02\x02\u{36a}\u{36b}\x07\x51\x02\x02\u{36b}\u{36c}\x07\x50\x02\ + \x02\u{36c}\u{36d}\x07\x55\x02\x02\u{36d}\u{36e}\x07\x56\x02\x02\u{36e}\ + \u{36f}\x07\x54\x02\x02\u{36f}\u{370}\x07\x43\x02\x02\u{370}\u{371}\x07\ + \x4b\x02\x02\u{371}\u{372}\x07\x50\x02\x02\u{372}\u{373}\x07\x56\x02\x02\ + \u{373}\x60\x03\x02\x02\x02\u{374}\u{375}\x07\x45\x02\x02\u{375}\u{376}\ + \x07\x51\x02\x02\u{376}\u{377}\x07\x57\x02\x02\u{377}\u{378}\x07\x50\x02\ + \x02\u{378}\u{379}\x07\x56\x02\x02\u{379}\x62\x03\x02\x02\x02\u{37a}\u{37b}\ + \x07\x45\x02\x02\u{37b}\u{37c}\x07\x51\x02\x02\u{37c}\u{37d}\x07\x52\x02\ + \x02\u{37d}\u{37e}\x07\x43\x02\x02\u{37e}\u{37f}\x07\x54\x02\x02\u{37f}\ + \u{380}\x07\x56\x02\x02\u{380}\u{381}\x07\x4b\x02\x02\u{381}\u{382}\x07\ + \x56\x02\x02\u{382}\u{383}\x07\x4b\x02\x02\u{383}\u{384}\x07\x51\x02\x02\ + \u{384}\u{385}\x07\x50\x02\x02\u{385}\x64\x03\x02\x02\x02\u{386}\u{387}\ + \x07\x45\x02\x02\u{387}\u{388}\x07\x54\x02\x02\u{388}\u{389}\x07\x47\x02\ + \x02\u{389}\u{38a}\x07\x43\x02\x02\u{38a}\u{38b}\x07\x56\x02\x02\u{38b}\ + \u{38c}\x07\x47\x02\x02\u{38c}\x66\x03\x02\x02\x02\u{38d}\u{38e}\x07\x45\ + \x02\x02\u{38e}\u{38f}\x07\x54\x02\x02\u{38f}\u{390}\x07\x51\x02\x02\u{390}\ + \u{391}\x07\x55\x02\x02\u{391}\u{392}\x07\x55\x02\x02\u{392}\x68\x03\x02\ + \x02\x02\u{393}\u{394}\x07\x45\x02\x02\u{394}\u{395}\x07\x57\x02\x02\u{395}\ + \u{396}\x07\x44\x02\x02\u{396}\u{397}\x07\x47\x02\x02\u{397}\x6a\x03\x02\ + \x02\x02\u{398}\u{399}\x07\x45\x02\x02\u{399}\u{39a}\x07\x57\x02\x02\u{39a}\ + \u{39b}\x07\x54\x02\x02\u{39b}\u{39c}\x07\x54\x02\x02\u{39c}\u{39d}\x07\ + \x47\x02\x02\u{39d}\u{39e}\x07\x50\x02\x02\u{39e}\u{39f}\x07\x56\x02\x02\ + \u{39f}\x6c\x03\x02\x02\x02\u{3a0}\u{3a1}\x07\x45\x02\x02\u{3a1}\u{3a2}\ + \x07\x57\x02\x02\u{3a2}\u{3a3}\x07\x54\x02\x02\u{3a3}\u{3a4}\x07\x54\x02\ + \x02\u{3a4}\u{3a5}\x07\x47\x02\x02\u{3a5}\u{3a6}\x07\x50\x02\x02\u{3a6}\ + \u{3a7}\x07\x56\x02\x02\u{3a7}\u{3a8}\x07\x61\x02\x02\u{3a8}\u{3a9}\x07\ + \x45\x02\x02\u{3a9}\u{3aa}\x07\x43\x02\x02\u{3aa}\u{3ab}\x07\x56\x02\x02\ + \u{3ab}\u{3ac}\x07\x43\x02\x02\u{3ac}\u{3ad}\x07\x4e\x02\x02\u{3ad}\u{3ae}\ + \x07\x51\x02\x02\u{3ae}\u{3af}\x07\x49\x02\x02\u{3af}\x6e\x03\x02\x02\x02\ + \u{3b0}\u{3b1}\x07\x45\x02\x02\u{3b1}\u{3b2}\x07\x57\x02\x02\u{3b2}\u{3b3}\ + \x07\x54\x02\x02\u{3b3}\u{3b4}\x07\x54\x02\x02\u{3b4}\u{3b5}\x07\x47\x02\ + \x02\u{3b5}\u{3b6}\x07\x50\x02\x02\u{3b6}\u{3b7}\x07\x56\x02\x02\u{3b7}\ + \u{3b8}\x07\x61\x02\x02\u{3b8}\u{3b9}\x07\x46\x02\x02\u{3b9}\u{3ba}\x07\ + \x43\x02\x02\u{3ba}\u{3bb}\x07\x56\x02\x02\u{3bb}\u{3bc}\x07\x47\x02\x02\ + \u{3bc}\x70\x03\x02\x02\x02\u{3bd}\u{3be}\x07\x45\x02\x02\u{3be}\u{3bf}\ + \x07\x57\x02\x02\u{3bf}\u{3c0}\x07\x54\x02\x02\u{3c0}\u{3c1}\x07\x54\x02\ + \x02\u{3c1}\u{3c2}\x07\x47\x02\x02\u{3c2}\u{3c3}\x07\x50\x02\x02\u{3c3}\ + \u{3c4}\x07\x56\x02\x02\u{3c4}\u{3c5}\x07\x61\x02\x02\u{3c5}\u{3c6}\x07\ + \x52\x02\x02\u{3c6}\u{3c7}\x07\x43\x02\x02\u{3c7}\u{3c8}\x07\x56\x02\x02\ + \u{3c8}\u{3c9}\x07\x4a\x02\x02\u{3c9}\x72\x03\x02\x02\x02\u{3ca}\u{3cb}\ + \x07\x45\x02\x02\u{3cb}\u{3cc}\x07\x57\x02\x02\u{3cc}\u{3cd}\x07\x54\x02\ + \x02\u{3cd}\u{3ce}\x07\x54\x02\x02\u{3ce}\u{3cf}\x07\x47\x02\x02\u{3cf}\ + \u{3d0}\x07\x50\x02\x02\u{3d0}\u{3d1}\x07\x56\x02\x02\u{3d1}\u{3d2}\x07\ + \x61\x02\x02\u{3d2}\u{3d3}\x07\x54\x02\x02\u{3d3}\u{3d4}\x07\x51\x02\x02\ + \u{3d4}\u{3d5}\x07\x4e\x02\x02\u{3d5}\u{3d6}\x07\x47\x02\x02\u{3d6}\x74\ + \x03\x02\x02\x02\u{3d7}\u{3d8}\x07\x45\x02\x02\u{3d8}\u{3d9}\x07\x57\x02\ + \x02\u{3d9}\u{3da}\x07\x54\x02\x02\u{3da}\u{3db}\x07\x54\x02\x02\u{3db}\ + \u{3dc}\x07\x47\x02\x02\u{3dc}\u{3dd}\x07\x50\x02\x02\u{3dd}\u{3de}\x07\ + \x56\x02\x02\u{3de}\u{3df}\x07\x61\x02\x02\u{3df}\u{3e0}\x07\x55\x02\x02\ + \u{3e0}\u{3e1}\x07\x45\x02\x02\u{3e1}\u{3e2}\x07\x4a\x02\x02\u{3e2}\u{3e3}\ + \x07\x47\x02\x02\u{3e3}\u{3e4}\x07\x4f\x02\x02\u{3e4}\u{3e5}\x07\x43\x02\ + \x02\u{3e5}\x76\x03\x02\x02\x02\u{3e6}\u{3e7}\x07\x45\x02\x02\u{3e7}\u{3e8}\ + \x07\x57\x02\x02\u{3e8}\u{3e9}\x07\x54\x02\x02\u{3e9}\u{3ea}\x07\x54\x02\ + \x02\u{3ea}\u{3eb}\x07\x47\x02\x02\u{3eb}\u{3ec}\x07\x50\x02\x02\u{3ec}\ + \u{3ed}\x07\x56\x02\x02\u{3ed}\u{3ee}\x07\x61\x02\x02\u{3ee}\u{3ef}\x07\ + \x56\x02\x02\u{3ef}\u{3f0}\x07\x4b\x02\x02\u{3f0}\u{3f1}\x07\x4f\x02\x02\ + \u{3f1}\u{3f2}\x07\x47\x02\x02\u{3f2}\x78\x03\x02\x02\x02\u{3f3}\u{3f4}\ + \x07\x45\x02\x02\u{3f4}\u{3f5}\x07\x57\x02\x02\u{3f5}\u{3f6}\x07\x54\x02\ + \x02\u{3f6}\u{3f7}\x07\x54\x02\x02\u{3f7}\u{3f8}\x07\x47\x02\x02\u{3f8}\ + \u{3f9}\x07\x50\x02\x02\u{3f9}\u{3fa}\x07\x56\x02\x02\u{3fa}\u{3fb}\x07\ + \x61\x02\x02\u{3fb}\u{3fc}\x07\x56\x02\x02\u{3fc}\u{3fd}\x07\x4b\x02\x02\ + \u{3fd}\u{3fe}\x07\x4f\x02\x02\u{3fe}\u{3ff}\x07\x47\x02\x02\u{3ff}\u{400}\ + \x07\x55\x02\x02\u{400}\u{401}\x07\x56\x02\x02\u{401}\u{402}\x07\x43\x02\ + \x02\u{402}\u{403}\x07\x4f\x02\x02\u{403}\u{404}\x07\x52\x02\x02\u{404}\ + \x7a\x03\x02\x02\x02\u{405}\u{406}\x07\x45\x02\x02\u{406}\u{407}\x07\x57\ + \x02\x02\u{407}\u{408}\x07\x54\x02\x02\u{408}\u{409}\x07\x54\x02\x02\u{409}\ + \u{40a}\x07\x47\x02\x02\u{40a}\u{40b}\x07\x50\x02\x02\u{40b}\u{40c}\x07\ + \x56\x02\x02\u{40c}\u{40d}\x07\x61\x02\x02\u{40d}\u{40e}\x07\x57\x02\x02\ + \u{40e}\u{40f}\x07\x55\x02\x02\u{40f}\u{410}\x07\x47\x02\x02\u{410}\u{411}\ + \x07\x54\x02\x02\u{411}\x7c\x03\x02\x02\x02\u{412}\u{413}\x07\x46\x02\x02\ + \u{413}\u{414}\x07\x43\x02\x02\u{414}\u{415}\x07\x56\x02\x02\u{415}\u{416}\ + \x07\x43\x02\x02\u{416}\x7e\x03\x02\x02\x02\u{417}\u{418}\x07\x46\x02\x02\ + \u{418}\u{419}\x07\x43\x02\x02\u{419}\u{41a}\x07\x56\x02\x02\u{41a}\u{41b}\ + \x07\x47\x02\x02\u{41b}\u{80}\x03\x02\x02\x02\u{41c}\u{41d}\x07\x46\x02\ + \x02\u{41d}\u{41e}\x07\x43\x02\x02\u{41e}\u{41f}\x07\x5b\x02\x02\u{41f}\ + \u{82}\x03\x02\x02\x02\u{420}\u{421}\x07\x46\x02\x02\u{421}\u{422}\x07\ + \x47\x02\x02\u{422}\u{423}\x07\x43\x02\x02\u{423}\u{424}\x07\x4e\x02\x02\ + \u{424}\u{425}\x07\x4e\x02\x02\u{425}\u{426}\x07\x51\x02\x02\u{426}\u{427}\ + \x07\x45\x02\x02\u{427}\u{428}\x07\x43\x02\x02\u{428}\u{429}\x07\x56\x02\ + \x02\u{429}\u{42a}\x07\x47\x02\x02\u{42a}\u{84}\x03\x02\x02\x02\u{42b}\ + \u{42c}\x07\x46\x02\x02\u{42c}\u{42d}\x07\x47\x02\x02\u{42d}\u{42e}\x07\ + \x48\x02\x02\u{42e}\u{42f}\x07\x43\x02\x02\u{42f}\u{430}\x07\x57\x02\x02\ + \u{430}\u{431}\x07\x4e\x02\x02\u{431}\u{432}\x07\x56\x02\x02\u{432}\u{86}\ + \x03\x02\x02\x02\u{433}\u{434}\x07\x46\x02\x02\u{434}\u{435}\x07\x47\x02\ + \x02\u{435}\u{436}\x07\x48\x02\x02\u{436}\u{437}\x07\x4b\x02\x02\u{437}\ + \u{438}\x07\x50\x02\x02\u{438}\u{439}\x07\x47\x02\x02\u{439}\u{88}\x03\ + \x02\x02\x02\u{43a}\u{43b}\x07\x46\x02\x02\u{43b}\u{43c}\x07\x47\x02\x02\ + \u{43c}\u{43d}\x07\x48\x02\x02\u{43d}\u{43e}\x07\x4b\x02\x02\u{43e}\u{43f}\ + \x07\x50\x02\x02\u{43f}\u{440}\x07\x47\x02\x02\u{440}\u{441}\x07\x54\x02\ + \x02\u{441}\u{8a}\x03\x02\x02\x02\u{442}\u{443}\x07\x46\x02\x02\u{443}\ + \u{444}\x07\x47\x02\x02\u{444}\u{445}\x07\x4e\x02\x02\u{445}\u{446}\x07\ + \x47\x02\x02\u{446}\u{447}\x07\x56\x02\x02\u{447}\u{448}\x07\x47\x02\x02\ + \u{448}\u{8c}\x03\x02\x02\x02\u{449}\u{44a}\x07\x46\x02\x02\u{44a}\u{44b}\ + \x07\x47\x02\x02\u{44b}\u{44c}\x07\x50\x02\x02\u{44c}\u{44d}\x07\x5b\x02\ + \x02\u{44d}\u{8e}\x03\x02\x02\x02\u{44e}\u{44f}\x07\x46\x02\x02\u{44f}\ + \u{450}\x07\x47\x02\x02\u{450}\u{451}\x07\x55\x02\x02\u{451}\u{452}\x07\ + \x45\x02\x02\u{452}\u{90}\x03\x02\x02\x02\u{453}\u{454}\x07\x46\x02\x02\ + \u{454}\u{455}\x07\x47\x02\x02\u{455}\u{456}\x07\x55\x02\x02\u{456}\u{457}\ + \x07\x45\x02\x02\u{457}\u{458}\x07\x54\x02\x02\u{458}\u{459}\x07\x4b\x02\ + \x02\u{459}\u{45a}\x07\x44\x02\x02\u{45a}\u{45b}\x07\x47\x02\x02\u{45b}\ + \u{92}\x03\x02\x02\x02\u{45c}\u{45d}\x07\x46\x02\x02\u{45d}\u{45e}\x07\ + \x47\x02\x02\u{45e}\u{45f}\x07\x55\x02\x02\u{45f}\u{460}\x07\x45\x02\x02\ + \u{460}\u{461}\x07\x54\x02\x02\u{461}\u{462}\x07\x4b\x02\x02\u{462}\u{463}\ + \x07\x52\x02\x02\u{463}\u{464}\x07\x56\x02\x02\u{464}\u{465}\x07\x51\x02\ + \x02\u{465}\u{466}\x07\x54\x02\x02\u{466}\u{94}\x03\x02\x02\x02\u{467}\ + \u{468}\x07\x46\x02\x02\u{468}\u{469}\x07\x4b\x02\x02\u{469}\u{46a}\x07\ + \x55\x02\x02\u{46a}\u{46b}\x07\x56\x02\x02\u{46b}\u{46c}\x07\x4b\x02\x02\ + \u{46c}\u{46d}\x07\x50\x02\x02\u{46d}\u{46e}\x07\x45\x02\x02\u{46e}\u{46f}\ + \x07\x56\x02\x02\u{46f}\u{96}\x03\x02\x02\x02\u{470}\u{471}\x07\x46\x02\ + \x02\u{471}\u{472}\x07\x4b\x02\x02\u{472}\u{473}\x07\x55\x02\x02\u{473}\ + \u{474}\x07\x56\x02\x02\u{474}\u{475}\x07\x54\x02\x02\u{475}\u{476}\x07\ + \x4b\x02\x02\u{476}\u{477}\x07\x44\x02\x02\u{477}\u{478}\x07\x57\x02\x02\ + \u{478}\u{479}\x07\x56\x02\x02\u{479}\u{47a}\x07\x47\x02\x02\u{47a}\u{47b}\ + \x07\x46\x02\x02\u{47b}\u{98}\x03\x02\x02\x02\u{47c}\u{47d}\x07\x46\x02\ + \x02\u{47d}\u{47e}\x07\x51\x02\x02\u{47e}\u{47f}\x07\x57\x02\x02\u{47f}\ + \u{480}\x07\x44\x02\x02\u{480}\u{481}\x07\x4e\x02\x02\u{481}\u{482}\x07\ + \x47\x02\x02\u{482}\u{9a}\x03\x02\x02\x02\u{483}\u{484}\x07\x46\x02\x02\ + \u{484}\u{485}\x07\x54\x02\x02\u{485}\u{486}\x07\x51\x02\x02\u{486}\u{487}\ + \x07\x52\x02\x02\u{487}\u{9c}\x03\x02\x02\x02\u{488}\u{489}\x07\x47\x02\ + \x02\u{489}\u{48a}\x07\x4e\x02\x02\u{48a}\u{48b}\x07\x55\x02\x02\u{48b}\ + \u{48c}\x07\x47\x02\x02\u{48c}\u{9e}\x03\x02\x02\x02\u{48d}\u{48e}\x07\ + \x47\x02\x02\u{48e}\u{48f}\x07\x4f\x02\x02\u{48f}\u{490}\x07\x52\x02\x02\ + \u{490}\u{491}\x07\x56\x02\x02\u{491}\u{492}\x07\x5b\x02\x02\u{492}\u{a0}\ + \x03\x02\x02\x02\u{493}\u{494}\x07\x47\x02\x02\u{494}\u{495}\x07\x50\x02\ + \x02\u{495}\u{496}\x07\x45\x02\x02\u{496}\u{497}\x07\x51\x02\x02\u{497}\ + \u{498}\x07\x46\x02\x02\u{498}\u{499}\x07\x4b\x02\x02\u{499}\u{49a}\x07\ + \x50\x02\x02\u{49a}\u{49b}\x07\x49\x02\x02\u{49b}\u{a2}\x03\x02\x02\x02\ + \u{49c}\u{49d}\x07\x47\x02\x02\u{49d}\u{49e}\x07\x50\x02\x02\u{49e}\u{49f}\ + \x07\x46\x02\x02\u{49f}\u{a4}\x03\x02\x02\x02\u{4a0}\u{4a1}\x07\x47\x02\ + \x02\u{4a1}\u{4a2}\x07\x54\x02\x02\u{4a2}\u{4a3}\x07\x54\x02\x02\u{4a3}\ + \u{4a4}\x07\x51\x02\x02\u{4a4}\u{4a5}\x07\x54\x02\x02\u{4a5}\u{a6}\x03\ + \x02\x02\x02\u{4a6}\u{4a7}\x07\x47\x02\x02\u{4a7}\u{4a8}\x07\x55\x02\x02\ + \u{4a8}\u{4a9}\x07\x45\x02\x02\u{4a9}\u{4aa}\x07\x43\x02\x02\u{4aa}\u{4ab}\ + \x07\x52\x02\x02\u{4ab}\u{4ac}\x07\x47\x02\x02\u{4ac}\u{a8}\x03\x02\x02\ + \x02\u{4ad}\u{4ae}\x07\x47\x02\x02\u{4ae}\u{4af}\x07\x5a\x02\x02\u{4af}\ + \u{4b0}\x07\x45\x02\x02\u{4b0}\u{4b1}\x07\x47\x02\x02\u{4b1}\u{4b2}\x07\ + \x52\x02\x02\u{4b2}\u{4b3}\x07\x56\x02\x02\u{4b3}\u{aa}\x03\x02\x02\x02\ + \u{4b4}\u{4b5}\x07\x47\x02\x02\u{4b5}\u{4b6}\x07\x5a\x02\x02\u{4b6}\u{4b7}\ + \x07\x45\x02\x02\u{4b7}\u{4b8}\x07\x4e\x02\x02\u{4b8}\u{4b9}\x07\x57\x02\ + \x02\u{4b9}\u{4ba}\x07\x46\x02\x02\u{4ba}\u{4bb}\x07\x4b\x02\x02\u{4bb}\ + \u{4bc}\x07\x50\x02\x02\u{4bc}\u{4bd}\x07\x49\x02\x02\u{4bd}\u{ac}\x03\ + \x02\x02\x02\u{4be}\u{4bf}\x07\x47\x02\x02\u{4bf}\u{4c0}\x07\x5a\x02\x02\ + \u{4c0}\u{4c1}\x07\x47\x02\x02\u{4c1}\u{4c2}\x07\x45\x02\x02\u{4c2}\u{4c3}\ + \x07\x57\x02\x02\u{4c3}\u{4c4}\x07\x56\x02\x02\u{4c4}\u{4c5}\x07\x47\x02\ + \x02\u{4c5}\u{ae}\x03\x02\x02\x02\u{4c6}\u{4c7}\x07\x47\x02\x02\u{4c7}\ + \u{4c8}\x07\x5a\x02\x02\u{4c8}\u{4c9}\x07\x4b\x02\x02\u{4c9}\u{4ca}\x07\ + \x55\x02\x02\u{4ca}\u{4cb}\x07\x56\x02\x02\u{4cb}\u{4cc}\x07\x55\x02\x02\ + \u{4cc}\u{b0}\x03\x02\x02\x02\u{4cd}\u{4ce}\x07\x47\x02\x02\u{4ce}\u{4cf}\ + \x07\x5a\x02\x02\u{4cf}\u{4d0}\x07\x52\x02\x02\u{4d0}\u{4d1}\x07\x4e\x02\ + \x02\u{4d1}\u{4d2}\x07\x43\x02\x02\u{4d2}\u{4d3}\x07\x4b\x02\x02\u{4d3}\ + \u{4d4}\x07\x50\x02\x02\u{4d4}\u{b2}\x03\x02\x02\x02\u{4d5}\u{4d6}\x07\ + \x47\x02\x02\u{4d6}\u{4d7}\x07\x5a\x02\x02\u{4d7}\u{4d8}\x07\x56\x02\x02\ + \u{4d8}\u{4d9}\x07\x54\x02\x02\u{4d9}\u{4da}\x07\x43\x02\x02\u{4da}\u{4db}\ + \x07\x45\x02\x02\u{4db}\u{4dc}\x07\x56\x02\x02\u{4dc}\u{b4}\x03\x02\x02\ + \x02\u{4dd}\u{4de}\x07\x48\x02\x02\u{4de}\u{4df}\x07\x43\x02\x02\u{4df}\ + \u{4e0}\x07\x4e\x02\x02\u{4e0}\u{4e1}\x07\x55\x02\x02\u{4e1}\u{4e2}\x07\ + \x47\x02\x02\u{4e2}\u{b6}\x03\x02\x02\x02\u{4e3}\u{4e4}\x07\x48\x02\x02\ + \u{4e4}\u{4e5}\x07\x47\x02\x02\u{4e5}\u{4e6}\x07\x56\x02\x02\u{4e6}\u{4e7}\ + \x07\x45\x02\x02\u{4e7}\u{4e8}\x07\x4a\x02\x02\u{4e8}\u{b8}\x03\x02\x02\ + \x02\u{4e9}\u{4ea}\x07\x48\x02\x02\u{4ea}\u{4eb}\x07\x4b\x02\x02\u{4eb}\ + \u{4ec}\x07\x4e\x02\x02\u{4ec}\u{4ed}\x07\x56\x02\x02\u{4ed}\u{4ee}\x07\ + \x47\x02\x02\u{4ee}\u{4ef}\x07\x54\x02\x02\u{4ef}\u{ba}\x03\x02\x02\x02\ + \u{4f0}\u{4f1}\x07\x48\x02\x02\u{4f1}\u{4f2}\x07\x4b\x02\x02\u{4f2}\u{4f3}\ + \x07\x50\x02\x02\u{4f3}\u{4f4}\x07\x43\x02\x02\u{4f4}\u{4f5}\x07\x4e\x02\ + \x02\u{4f5}\u{bc}\x03\x02\x02\x02\u{4f6}\u{4f7}\x07\x48\x02\x02\u{4f7}\ + \u{4f8}\x07\x4b\x02\x02\u{4f8}\u{4f9}\x07\x54\x02\x02\u{4f9}\u{4fa}\x07\ + \x55\x02\x02\u{4fa}\u{4fb}\x07\x56\x02\x02\u{4fb}\u{be}\x03\x02\x02\x02\ + \u{4fc}\u{4fd}\x07\x48\x02\x02\u{4fd}\u{4fe}\x07\x51\x02\x02\u{4fe}\u{4ff}\ + \x07\x4e\x02\x02\u{4ff}\u{500}\x07\x4e\x02\x02\u{500}\u{501}\x07\x51\x02\ + \x02\u{501}\u{502}\x07\x59\x02\x02\u{502}\u{503}\x07\x4b\x02\x02\u{503}\ + \u{504}\x07\x50\x02\x02\u{504}\u{505}\x07\x49\x02\x02\u{505}\u{c0}\x03\ + \x02\x02\x02\u{506}\u{507}\x07\x48\x02\x02\u{507}\u{508}\x07\x51\x02\x02\ + \u{508}\u{509}\x07\x54\x02\x02\u{509}\u{c2}\x03\x02\x02\x02\u{50a}\u{50b}\ + \x07\x48\x02\x02\u{50b}\u{50c}\x07\x51\x02\x02\u{50c}\u{50d}\x07\x54\x02\ + \x02\u{50d}\u{50e}\x07\x4f\x02\x02\u{50e}\u{50f}\x07\x43\x02\x02\u{50f}\ + \u{510}\x07\x56\x02\x02\u{510}\u{c4}\x03\x02\x02\x02\u{511}\u{512}\x07\ + \x48\x02\x02\u{512}\u{513}\x07\x54\x02\x02\u{513}\u{514}\x07\x51\x02\x02\ + \u{514}\u{515}\x07\x4f\x02\x02\u{515}\u{c6}\x03\x02\x02\x02\u{516}\u{517}\ + \x07\x48\x02\x02\u{517}\u{518}\x07\x57\x02\x02\u{518}\u{519}\x07\x4e\x02\ + \x02\u{519}\u{51a}\x07\x4e\x02\x02\u{51a}\u{c8}\x03\x02\x02\x02\u{51b}\ + \u{51c}\x07\x48\x02\x02\u{51c}\u{51d}\x07\x57\x02\x02\u{51d}\u{51e}\x07\ + \x50\x02\x02\u{51e}\u{51f}\x07\x45\x02\x02\u{51f}\u{520}\x07\x56\x02\x02\ + \u{520}\u{521}\x07\x4b\x02\x02\u{521}\u{522}\x07\x51\x02\x02\u{522}\u{523}\ + \x07\x50\x02\x02\u{523}\u{524}\x07\x55\x02\x02\u{524}\u{ca}\x03\x02\x02\ + \x02\u{525}\u{526}\x07\x49\x02\x02\u{526}\u{527}\x07\x54\x02\x02\u{527}\ + \u{528}\x07\x43\x02\x02\u{528}\u{529}\x07\x45\x02\x02\u{529}\u{52a}\x07\ + \x47\x02\x02\u{52a}\u{cc}\x03\x02\x02\x02\u{52b}\u{52c}\x07\x49\x02\x02\ + \u{52c}\u{52d}\x07\x54\x02\x02\u{52d}\u{52e}\x07\x43\x02\x02\u{52e}\u{52f}\ + \x07\x50\x02\x02\u{52f}\u{530}\x07\x56\x02\x02\u{530}\u{ce}\x03\x02\x02\ + \x02\u{531}\u{532}\x07\x49\x02\x02\u{532}\u{533}\x07\x54\x02\x02\u{533}\ + \u{534}\x07\x43\x02\x02\u{534}\u{535}\x07\x50\x02\x02\u{535}\u{536}\x07\ + \x56\x02\x02\u{536}\u{537}\x07\x47\x02\x02\u{537}\u{538}\x07\x46\x02\x02\ + \u{538}\u{d0}\x03\x02\x02\x02\u{539}\u{53a}\x07\x49\x02\x02\u{53a}\u{53b}\ + \x07\x54\x02\x02\u{53b}\u{53c}\x07\x43\x02\x02\u{53c}\u{53d}\x07\x50\x02\ + \x02\u{53d}\u{53e}\x07\x56\x02\x02\u{53e}\u{53f}\x07\x55\x02\x02\u{53f}\ + \u{d2}\x03\x02\x02\x02\u{540}\u{541}\x07\x49\x02\x02\u{541}\u{542}\x07\ + \x54\x02\x02\u{542}\u{543}\x07\x43\x02\x02\u{543}\u{544}\x07\x52\x02\x02\ + \u{544}\u{545}\x07\x4a\x02\x02\u{545}\u{546}\x07\x58\x02\x02\u{546}\u{547}\ + \x07\x4b\x02\x02\u{547}\u{548}\x07\x5c\x02\x02\u{548}\u{d4}\x03\x02\x02\ + \x02\u{549}\u{54a}\x07\x49\x02\x02\u{54a}\u{54b}\x07\x54\x02\x02\u{54b}\ + \u{54c}\x07\x51\x02\x02\u{54c}\u{54d}\x07\x57\x02\x02\u{54d}\u{54e}\x07\ + \x52\x02\x02\u{54e}\u{d6}\x03\x02\x02\x02\u{54f}\u{550}\x07\x49\x02\x02\ + \u{550}\u{551}\x07\x54\x02\x02\u{551}\u{552}\x07\x51\x02\x02\u{552}\u{553}\ + \x07\x57\x02\x02\u{553}\u{554}\x07\x52\x02\x02\u{554}\u{555}\x07\x4b\x02\ + \x02\u{555}\u{556}\x07\x50\x02\x02\u{556}\u{557}\x07\x49\x02\x02\u{557}\ + \u{d8}\x03\x02\x02\x02\u{558}\u{559}\x07\x49\x02\x02\u{559}\u{55a}\x07\ + \x54\x02\x02\u{55a}\u{55b}\x07\x51\x02\x02\u{55b}\u{55c}\x07\x57\x02\x02\ + \u{55c}\u{55d}\x07\x52\x02\x02\u{55d}\u{55e}\x07\x55\x02\x02\u{55e}\u{da}\ + \x03\x02\x02\x02\u{55f}\u{560}\x07\x4a\x02\x02\u{560}\u{561}\x07\x43\x02\ + \x02\u{561}\u{562}\x07\x58\x02\x02\u{562}\u{563}\x07\x4b\x02\x02\u{563}\ + \u{564}\x07\x50\x02\x02\u{564}\u{565}\x07\x49\x02\x02\u{565}\u{dc}\x03\ + \x02\x02\x02\u{566}\u{567}\x07\x4a\x02\x02\u{567}\u{568}\x07\x51\x02\x02\ + \u{568}\u{569}\x07\x57\x02\x02\u{569}\u{56a}\x07\x54\x02\x02\u{56a}\u{de}\ + \x03\x02\x02\x02\u{56b}\u{56c}\x07\x4b\x02\x02\u{56c}\u{56d}\x07\x48\x02\ + \x02\u{56d}\u{e0}\x03\x02\x02\x02\u{56e}\u{56f}\x07\x4b\x02\x02\u{56f}\ + \u{570}\x07\x49\x02\x02\u{570}\u{571}\x07\x50\x02\x02\u{571}\u{572}\x07\ + \x51\x02\x02\u{572}\u{573}\x07\x54\x02\x02\u{573}\u{574}\x07\x47\x02\x02\ + \u{574}\u{e2}\x03\x02\x02\x02\u{575}\u{576}\x07\x4b\x02\x02\u{576}\u{577}\ + \x07\x50\x02\x02\u{577}\u{e4}\x03\x02\x02\x02\u{578}\u{579}\x07\x4b\x02\ + \x02\u{579}\u{57a}\x07\x50\x02\x02\u{57a}\u{57b}\x07\x45\x02\x02\u{57b}\ + \u{57c}\x07\x4e\x02\x02\u{57c}\u{57d}\x07\x57\x02\x02\u{57d}\u{57e}\x07\ + \x46\x02\x02\u{57e}\u{57f}\x07\x4b\x02\x02\u{57f}\u{580}\x07\x50\x02\x02\ + \u{580}\u{581}\x07\x49\x02\x02\u{581}\u{e6}\x03\x02\x02\x02\u{582}\u{583}\ + \x07\x4b\x02\x02\u{583}\u{584}\x07\x50\x02\x02\u{584}\u{585}\x07\x4b\x02\ + \x02\u{585}\u{586}\x07\x56\x02\x02\u{586}\u{587}\x07\x4b\x02\x02\u{587}\ + \u{588}\x07\x43\x02\x02\u{588}\u{589}\x07\x4e\x02\x02\u{589}\u{e8}\x03\ + \x02\x02\x02\u{58a}\u{58b}\x07\x4b\x02\x02\u{58b}\u{58c}\x07\x50\x02\x02\ + \u{58c}\u{58d}\x07\x50\x02\x02\u{58d}\u{58e}\x07\x47\x02\x02\u{58e}\u{58f}\ + \x07\x54\x02\x02\u{58f}\u{ea}\x03\x02\x02\x02\u{590}\u{591}\x07\x4b\x02\ + \x02\u{591}\u{592}\x07\x50\x02\x02\u{592}\u{593}\x07\x52\x02\x02\u{593}\ + \u{594}\x07\x57\x02\x02\u{594}\u{595}\x07\x56\x02\x02\u{595}\u{ec}\x03\ + \x02\x02\x02\u{596}\u{597}\x07\x4b\x02\x02\u{597}\u{598}\x07\x50\x02\x02\ + \u{598}\u{599}\x07\x55\x02\x02\u{599}\u{59a}\x07\x47\x02\x02\u{59a}\u{59b}\ + \x07\x54\x02\x02\u{59b}\u{59c}\x07\x56\x02\x02\u{59c}\u{ee}\x03\x02\x02\ + \x02\u{59d}\u{59e}\x07\x4b\x02\x02\u{59e}\u{59f}\x07\x50\x02\x02\u{59f}\ + \u{5a0}\x07\x56\x02\x02\u{5a0}\u{5a1}\x07\x47\x02\x02\u{5a1}\u{5a2}\x07\ + \x54\x02\x02\u{5a2}\u{5a3}\x07\x55\x02\x02\u{5a3}\u{5a4}\x07\x47\x02\x02\ + \u{5a4}\u{5a5}\x07\x45\x02\x02\u{5a5}\u{5a6}\x07\x56\x02\x02\u{5a6}\u{f0}\ + \x03\x02\x02\x02\u{5a7}\u{5a8}\x07\x4b\x02\x02\u{5a8}\u{5a9}\x07\x50\x02\ + \x02\u{5a9}\u{5aa}\x07\x56\x02\x02\u{5aa}\u{5ab}\x07\x47\x02\x02\u{5ab}\ + \u{5ac}\x07\x54\x02\x02\u{5ac}\u{5ad}\x07\x58\x02\x02\u{5ad}\u{5ae}\x07\ + \x43\x02\x02\u{5ae}\u{5af}\x07\x4e\x02\x02\u{5af}\u{f2}\x03\x02\x02\x02\ + \u{5b0}\u{5b1}\x07\x4b\x02\x02\u{5b1}\u{5b2}\x07\x50\x02\x02\u{5b2}\u{5b3}\ + \x07\x56\x02\x02\u{5b3}\u{5b4}\x07\x51\x02\x02\u{5b4}\u{f4}\x03\x02\x02\ + \x02\u{5b5}\u{5b6}\x07\x4b\x02\x02\u{5b6}\u{5b7}\x07\x50\x02\x02\u{5b7}\ + \u{5b8}\x07\x58\x02\x02\u{5b8}\u{5b9}\x07\x51\x02\x02\u{5b9}\u{5ba}\x07\ + \x4d\x02\x02\u{5ba}\u{5bb}\x07\x47\x02\x02\u{5bb}\u{5bc}\x07\x54\x02\x02\ + \u{5bc}\u{f6}\x03\x02\x02\x02\u{5bd}\u{5be}\x07\x4b\x02\x02\u{5be}\u{5bf}\ + \x07\x51\x02\x02\u{5bf}\u{f8}\x03\x02\x02\x02\u{5c0}\u{5c1}\x07\x4b\x02\ + \x02\u{5c1}\u{5c2}\x07\x55\x02\x02\u{5c2}\u{fa}\x03\x02\x02\x02\u{5c3}\ + \u{5c4}\x07\x4b\x02\x02\u{5c4}\u{5c5}\x07\x55\x02\x02\u{5c5}\u{5c6}\x07\ + \x51\x02\x02\u{5c6}\u{5c7}\x07\x4e\x02\x02\u{5c7}\u{5c8}\x07\x43\x02\x02\ + \u{5c8}\u{5c9}\x07\x56\x02\x02\u{5c9}\u{5ca}\x07\x4b\x02\x02\u{5ca}\u{5cb}\ + \x07\x51\x02\x02\u{5cb}\u{5cc}\x07\x50\x02\x02\u{5cc}\u{fc}\x03\x02\x02\ + \x02\u{5cd}\u{5ce}\x07\x4c\x02\x02\u{5ce}\u{5cf}\x07\x51\x02\x02\u{5cf}\ + \u{5d0}\x07\x4b\x02\x02\u{5d0}\u{5d1}\x07\x50\x02\x02\u{5d1}\u{fe}\x03\ + \x02\x02\x02\u{5d2}\u{5d3}\x07\x4c\x02\x02\u{5d3}\u{5d4}\x07\x55\x02\x02\ + \u{5d4}\u{5d5}\x07\x51\x02\x02\u{5d5}\u{5d6}\x07\x50\x02\x02\u{5d6}\u{100}\ + \x03\x02\x02\x02\u{5d7}\u{5d8}\x07\x4c\x02\x02\u{5d8}\u{5d9}\x07\x55\x02\ + \x02\u{5d9}\u{5da}\x07\x51\x02\x02\u{5da}\u{5db}\x07\x50\x02\x02\u{5db}\ + \u{5dc}\x07\x61\x02\x02\u{5dc}\u{5dd}\x07\x43\x02\x02\u{5dd}\u{5de}\x07\ + \x54\x02\x02\u{5de}\u{5df}\x07\x54\x02\x02\u{5df}\u{5e0}\x07\x43\x02\x02\ + \u{5e0}\u{5e1}\x07\x5b\x02\x02\u{5e1}\u{102}\x03\x02\x02\x02\u{5e2}\u{5e3}\ + \x07\x4c\x02\x02\u{5e3}\u{5e4}\x07\x55\x02\x02\u{5e4}\u{5e5}\x07\x51\x02\ + \x02\u{5e5}\u{5e6}\x07\x50\x02\x02\u{5e6}\u{5e7}\x07\x61\x02\x02\u{5e7}\ + \u{5e8}\x07\x47\x02\x02\u{5e8}\u{5e9}\x07\x5a\x02\x02\u{5e9}\u{5ea}\x07\ + \x4b\x02\x02\u{5ea}\u{5eb}\x07\x55\x02\x02\u{5eb}\u{5ec}\x07\x56\x02\x02\ + \u{5ec}\u{5ed}\x07\x55\x02\x02\u{5ed}\u{104}\x03\x02\x02\x02\u{5ee}\u{5ef}\ + \x07\x4c\x02\x02\u{5ef}\u{5f0}\x07\x55\x02\x02\u{5f0}\u{5f1}\x07\x51\x02\ + \x02\u{5f1}\u{5f2}\x07\x50\x02\x02\u{5f2}\u{5f3}\x07\x61\x02\x02\u{5f3}\ + \u{5f4}\x07\x51\x02\x02\u{5f4}\u{5f5}\x07\x44\x02\x02\u{5f5}\u{5f6}\x07\ + \x4c\x02\x02\u{5f6}\u{5f7}\x07\x47\x02\x02\u{5f7}\u{5f8}\x07\x45\x02\x02\ + \u{5f8}\u{5f9}\x07\x56\x02\x02\u{5f9}\u{106}\x03\x02\x02\x02\u{5fa}\u{5fb}\ + \x07\x4c\x02\x02\u{5fb}\u{5fc}\x07\x55\x02\x02\u{5fc}\u{5fd}\x07\x51\x02\ + \x02\u{5fd}\u{5fe}\x07\x50\x02\x02\u{5fe}\u{5ff}\x07\x61\x02\x02\u{5ff}\ + \u{600}\x07\x53\x02\x02\u{600}\u{601}\x07\x57\x02\x02\u{601}\u{602}\x07\ + \x47\x02\x02\u{602}\u{603}\x07\x54\x02\x02\u{603}\u{604}\x07\x5b\x02\x02\ + \u{604}\u{108}\x03\x02\x02\x02\u{605}\u{606}\x07\x4c\x02\x02\u{606}\u{607}\ + \x07\x55\x02\x02\u{607}\u{608}\x07\x51\x02\x02\u{608}\u{609}\x07\x50\x02\ + \x02\u{609}\u{60a}\x07\x61\x02\x02\u{60a}\u{60b}\x07\x58\x02\x02\u{60b}\ + \u{60c}\x07\x43\x02\x02\u{60c}\u{60d}\x07\x4e\x02\x02\u{60d}\u{60e}\x07\ + \x57\x02\x02\u{60e}\u{60f}\x07\x47\x02\x02\u{60f}\u{10a}\x03\x02\x02\x02\ + \u{610}\u{611}\x07\x4d\x02\x02\u{611}\u{612}\x07\x47\x02\x02\u{612}\u{613}\ + \x07\x47\x02\x02\u{613}\u{614}\x07\x52\x02\x02\u{614}\u{10c}\x03\x02\x02\ + \x02\u{615}\u{616}\x07\x4d\x02\x02\u{616}\u{617}\x07\x47\x02\x02\u{617}\ + \u{618}\x07\x5b\x02\x02\u{618}\u{10e}\x03\x02\x02\x02\u{619}\u{61a}\x07\ + \x4d\x02\x02\u{61a}\u{61b}\x07\x47\x02\x02\u{61b}\u{61c}\x07\x5b\x02\x02\ + \u{61c}\u{61d}\x07\x55\x02\x02\u{61d}\u{110}\x03\x02\x02\x02\u{61e}\u{61f}\ + \x07\x4e\x02\x02\u{61f}\u{620}\x07\x43\x02\x02\u{620}\u{621}\x07\x55\x02\ + \x02\u{621}\u{622}\x07\x56\x02\x02\u{622}\u{112}\x03\x02\x02\x02\u{623}\ + \u{624}\x07\x4e\x02\x02\u{624}\u{625}\x07\x43\x02\x02\u{625}\u{626}\x07\ + \x56\x02\x02\u{626}\u{627}\x07\x47\x02\x02\u{627}\u{628}\x07\x54\x02\x02\ + \u{628}\u{629}\x07\x43\x02\x02\u{629}\u{62a}\x07\x4e\x02\x02\u{62a}\u{114}\ + \x03\x02\x02\x02\u{62b}\u{62c}\x07\x4e\x02\x02\u{62c}\u{62d}\x07\x47\x02\ + \x02\u{62d}\u{62e}\x07\x43\x02\x02\u{62e}\u{62f}\x07\x46\x02\x02\u{62f}\ + \u{630}\x07\x4b\x02\x02\u{630}\u{631}\x07\x50\x02\x02\u{631}\u{632}\x07\ + \x49\x02\x02\u{632}\u{116}\x03\x02\x02\x02\u{633}\u{634}\x07\x4e\x02\x02\ + \u{634}\u{635}\x07\x47\x02\x02\u{635}\u{636}\x07\x48\x02\x02\u{636}\u{637}\ + \x07\x56\x02\x02\u{637}\u{118}\x03\x02\x02\x02\u{638}\u{639}\x07\x4e\x02\ + \x02\u{639}\u{63a}\x07\x47\x02\x02\u{63a}\u{63b}\x07\x58\x02\x02\u{63b}\ + \u{63c}\x07\x47\x02\x02\u{63c}\u{63d}\x07\x4e\x02\x02\u{63d}\u{11a}\x03\ + \x02\x02\x02\u{63e}\u{63f}\x07\x4e\x02\x02\u{63f}\u{640}\x07\x4b\x02\x02\ + \u{640}\u{641}\x07\x4d\x02\x02\u{641}\u{642}\x07\x47\x02\x02\u{642}\u{11c}\ + \x03\x02\x02\x02\u{643}\u{644}\x07\x4e\x02\x02\u{644}\u{645}\x07\x4b\x02\ + \x02\u{645}\u{646}\x07\x4f\x02\x02\u{646}\u{647}\x07\x4b\x02\x02\u{647}\ + \u{648}\x07\x56\x02\x02\u{648}\u{11e}\x03\x02\x02\x02\u{649}\u{64a}\x07\ + \x4e\x02\x02\u{64a}\u{64b}\x07\x4b\x02\x02\u{64b}\u{64c}\x07\x55\x02\x02\ + \u{64c}\u{64d}\x07\x56\x02\x02\u{64d}\u{64e}\x07\x43\x02\x02\u{64e}\u{64f}\ + \x07\x49\x02\x02\u{64f}\u{650}\x07\x49\x02\x02\u{650}\u{120}\x03\x02\x02\ + \x02\u{651}\u{652}\x07\x4e\x02\x02\u{652}\u{653}\x07\x51\x02\x02\u{653}\ + \u{654}\x07\x45\x02\x02\u{654}\u{655}\x07\x43\x02\x02\u{655}\u{656}\x07\ + \x4e\x02\x02\u{656}\u{122}\x03\x02\x02\x02\u{657}\u{658}\x07\x4e\x02\x02\ + \u{658}\u{659}\x07\x51\x02\x02\u{659}\u{65a}\x07\x45\x02\x02\u{65a}\u{65b}\ + \x07\x43\x02\x02\u{65b}\u{65c}\x07\x4e\x02\x02\u{65c}\u{65d}\x07\x56\x02\ + \x02\u{65d}\u{65e}\x07\x4b\x02\x02\u{65e}\u{65f}\x07\x4f\x02\x02\u{65f}\ + \u{660}\x07\x47\x02\x02\u{660}\u{124}\x03\x02\x02\x02\u{661}\u{662}\x07\ + \x4e\x02\x02\u{662}\u{663}\x07\x51\x02\x02\u{663}\u{664}\x07\x45\x02\x02\ + \u{664}\u{665}\x07\x43\x02\x02\u{665}\u{666}\x07\x4e\x02\x02\u{666}\u{667}\ + \x07\x56\x02\x02\u{667}\u{668}\x07\x4b\x02\x02\u{668}\u{669}\x07\x4f\x02\ + \x02\u{669}\u{66a}\x07\x47\x02\x02\u{66a}\u{66b}\x07\x55\x02\x02\u{66b}\ + \u{66c}\x07\x56\x02\x02\u{66c}\u{66d}\x07\x43\x02\x02\u{66d}\u{66e}\x07\ + \x4f\x02\x02\u{66e}\u{66f}\x07\x52\x02\x02\u{66f}\u{126}\x03\x02\x02\x02\ + \u{670}\u{671}\x07\x4e\x02\x02\u{671}\u{672}\x07\x51\x02\x02\u{672}\u{673}\ + \x07\x49\x02\x02\u{673}\u{674}\x07\x4b\x02\x02\u{674}\u{675}\x07\x45\x02\ + \x02\u{675}\u{676}\x07\x43\x02\x02\u{676}\u{677}\x07\x4e\x02\x02\u{677}\ + \u{128}\x03\x02\x02\x02\u{678}\u{679}\x07\x4f\x02\x02\u{679}\u{67a}\x07\ + \x43\x02\x02\u{67a}\u{67b}\x07\x52\x02\x02\u{67b}\u{12a}\x03\x02\x02\x02\ + \u{67c}\u{67d}\x07\x4f\x02\x02\u{67d}\u{67e}\x07\x43\x02\x02\u{67e}\u{67f}\ + \x07\x56\x02\x02\u{67f}\u{680}\x07\x45\x02\x02\u{680}\u{681}\x07\x4a\x02\ + \x02\u{681}\u{12c}\x03\x02\x02\x02\u{682}\u{683}\x07\x4f\x02\x02\u{683}\ + \u{684}\x07\x43\x02\x02\u{684}\u{685}\x07\x56\x02\x02\u{685}\u{686}\x07\ + \x45\x02\x02\u{686}\u{687}\x07\x4a\x02\x02\u{687}\u{688}\x07\x47\x02\x02\ + \u{688}\u{689}\x07\x46\x02\x02\u{689}\u{12e}\x03\x02\x02\x02\u{68a}\u{68b}\ + \x07\x4f\x02\x02\u{68b}\u{68c}\x07\x43\x02\x02\u{68c}\u{68d}\x07\x56\x02\ + \x02\u{68d}\u{68e}\x07\x45\x02\x02\u{68e}\u{68f}\x07\x4a\x02\x02\u{68f}\ + \u{690}\x07\x47\x02\x02\u{690}\u{691}\x07\x55\x02\x02\u{691}\u{130}\x03\ + \x02\x02\x02\u{692}\u{693}\x07\x4f\x02\x02\u{693}\u{694}\x07\x43\x02\x02\ + \u{694}\u{695}\x07\x56\x02\x02\u{695}\u{696}\x07\x45\x02\x02\u{696}\u{697}\ + \x07\x4a\x02\x02\u{697}\u{698}\x07\x61\x02\x02\u{698}\u{699}\x07\x54\x02\ + \x02\u{699}\u{69a}\x07\x47\x02\x02\u{69a}\u{69b}\x07\x45\x02\x02\u{69b}\ + \u{69c}\x07\x51\x02\x02\u{69c}\u{69d}\x07\x49\x02\x02\u{69d}\u{69e}\x07\ + \x50\x02\x02\u{69e}\u{69f}\x07\x4b\x02\x02\u{69f}\u{6a0}\x07\x5c\x02\x02\ + \u{6a0}\u{6a1}\x07\x47\x02\x02\u{6a1}\u{132}\x03\x02\x02\x02\u{6a2}\u{6a3}\ + \x07\x4f\x02\x02\u{6a3}\u{6a4}\x07\x43\x02\x02\u{6a4}\u{6a5}\x07\x56\x02\ + \x02\u{6a5}\u{6a6}\x07\x47\x02\x02\u{6a6}\u{6a7}\x07\x54\x02\x02\u{6a7}\ + \u{6a8}\x07\x4b\x02\x02\u{6a8}\u{6a9}\x07\x43\x02\x02\u{6a9}\u{6aa}\x07\ + \x4e\x02\x02\u{6aa}\u{6ab}\x07\x4b\x02\x02\u{6ab}\u{6ac}\x07\x5c\x02\x02\ + \u{6ac}\u{6ad}\x07\x47\x02\x02\u{6ad}\u{6ae}\x07\x46\x02\x02\u{6ae}\u{134}\ + \x03\x02\x02\x02\u{6af}\u{6b0}\x07\x4f\x02\x02\u{6b0}\u{6b1}\x07\x47\x02\ + \x02\u{6b1}\u{6b2}\x07\x43\x02\x02\u{6b2}\u{6b3}\x07\x55\x02\x02\u{6b3}\ + \u{6b4}\x07\x57\x02\x02\u{6b4}\u{6b5}\x07\x54\x02\x02\u{6b5}\u{6b6}\x07\ + \x47\x02\x02\u{6b6}\u{6b7}\x07\x55\x02\x02\u{6b7}\u{136}\x03\x02\x02\x02\ + \u{6b8}\u{6b9}\x07\x4f\x02\x02\u{6b9}\u{6ba}\x07\x47\x02\x02\u{6ba}\u{6bb}\ + \x07\x54\x02\x02\u{6bb}\u{6bc}\x07\x49\x02\x02\u{6bc}\u{6bd}\x07\x47\x02\ + \x02\u{6bd}\u{138}\x03\x02\x02\x02\u{6be}\u{6bf}\x07\x4f\x02\x02\u{6bf}\ + \u{6c0}\x07\x4b\x02\x02\u{6c0}\u{6c1}\x07\x50\x02\x02\u{6c1}\u{6c2}\x07\ + \x57\x02\x02\u{6c2}\u{6c3}\x07\x56\x02\x02\u{6c3}\u{6c4}\x07\x47\x02\x02\ + \u{6c4}\u{13a}\x03\x02\x02\x02\u{6c5}\u{6c6}\x07\x4f\x02\x02\u{6c6}\u{6c7}\ + \x07\x51\x02\x02\u{6c7}\u{6c8}\x07\x50\x02\x02\u{6c8}\u{6c9}\x07\x56\x02\ + \x02\u{6c9}\u{6ca}\x07\x4a\x02\x02\u{6ca}\u{13c}\x03\x02\x02\x02\u{6cb}\ + \u{6cc}\x07\x50\x02\x02\u{6cc}\u{6cd}\x07\x43\x02\x02\u{6cd}\u{6ce}\x07\ + \x56\x02\x02\u{6ce}\u{6cf}\x07\x57\x02\x02\u{6cf}\u{6d0}\x07\x54\x02\x02\ + \u{6d0}\u{6d1}\x07\x43\x02\x02\u{6d1}\u{6d2}\x07\x4e\x02\x02\u{6d2}\u{13e}\ + \x03\x02\x02\x02\u{6d3}\u{6d4}\x07\x50\x02\x02\u{6d4}\u{6d5}\x07\x47\x02\ + \x02\u{6d5}\u{6d6}\x07\x5a\x02\x02\u{6d6}\u{6d7}\x07\x56\x02\x02\u{6d7}\ + \u{140}\x03\x02\x02\x02\u{6d8}\u{6d9}\x07\x50\x02\x02\u{6d9}\u{6da}\x07\ + \x48\x02\x02\u{6da}\u{6db}\x07\x45\x02\x02\u{6db}\u{142}\x03\x02\x02\x02\ + \u{6dc}\u{6dd}\x07\x50\x02\x02\u{6dd}\u{6de}\x07\x48\x02\x02\u{6de}\u{6df}\ + \x07\x46\x02\x02\u{6df}\u{144}\x03\x02\x02\x02\u{6e0}\u{6e1}\x07\x50\x02\ + \x02\u{6e1}\u{6e2}\x07\x48\x02\x02\u{6e2}\u{6e3}\x07\x4d\x02\x02\u{6e3}\ + \u{6e4}\x07\x45\x02\x02\u{6e4}\u{146}\x03\x02\x02\x02\u{6e5}\u{6e6}\x07\ + \x50\x02\x02\u{6e6}\u{6e7}\x07\x48\x02\x02\u{6e7}\u{6e8}\x07\x4d\x02\x02\ + \u{6e8}\u{6e9}\x07\x46\x02\x02\u{6e9}\u{148}\x03\x02\x02\x02\u{6ea}\u{6eb}\ + \x07\x50\x02\x02\u{6eb}\u{6ec}\x07\x51\x02\x02\u{6ec}\u{14a}\x03\x02\x02\ + \x02\u{6ed}\u{6ee}\x07\x50\x02\x02\u{6ee}\u{6ef}\x07\x51\x02\x02\u{6ef}\ + \u{6f0}\x07\x50\x02\x02\u{6f0}\u{6f1}\x07\x47\x02\x02\u{6f1}\u{14c}\x03\ + \x02\x02\x02\u{6f2}\u{6f3}\x07\x50\x02\x02\u{6f3}\u{6f4}\x07\x51\x02\x02\ + \u{6f4}\u{6f5}\x07\x54\x02\x02\u{6f5}\u{6f6}\x07\x4f\x02\x02\u{6f6}\u{6f7}\ + \x07\x43\x02\x02\u{6f7}\u{6f8}\x07\x4e\x02\x02\u{6f8}\u{6f9}\x07\x4b\x02\ + \x02\u{6f9}\u{6fa}\x07\x5c\x02\x02\u{6fa}\u{6fb}\x07\x47\x02\x02\u{6fb}\ + \u{14e}\x03\x02\x02\x02\u{6fc}\u{6fd}\x07\x50\x02\x02\u{6fd}\u{6fe}\x07\ + \x51\x02\x02\u{6fe}\u{6ff}\x07\x56\x02\x02\u{6ff}\u{150}\x03\x02\x02\x02\ + \u{700}\u{701}\x07\x50\x02\x02\u{701}\u{702}\x07\x57\x02\x02\u{702}\u{703}\ + \x07\x4e\x02\x02\u{703}\u{704}\x07\x4e\x02\x02\u{704}\u{152}\x03\x02\x02\ + \x02\u{705}\u{706}\x07\x50\x02\x02\u{706}\u{707}\x07\x57\x02\x02\u{707}\ + \u{708}\x07\x4e\x02\x02\u{708}\u{709}\x07\x4e\x02\x02\u{709}\u{70a}\x07\ + \x4b\x02\x02\u{70a}\u{70b}\x07\x48\x02\x02\u{70b}\u{154}\x03\x02\x02\x02\ + \u{70c}\u{70d}\x07\x50\x02\x02\u{70d}\u{70e}\x07\x57\x02\x02\u{70e}\u{70f}\ + \x07\x4e\x02\x02\u{70f}\u{710}\x07\x4e\x02\x02\u{710}\u{711}\x07\x55\x02\ + \x02\u{711}\u{156}\x03\x02\x02\x02\u{712}\u{713}\x07\x51\x02\x02\u{713}\ + \u{714}\x07\x44\x02\x02\u{714}\u{715}\x07\x4c\x02\x02\u{715}\u{716}\x07\ + \x47\x02\x02\u{716}\u{717}\x07\x45\x02\x02\u{717}\u{718}\x07\x56\x02\x02\ + \u{718}\u{158}\x03\x02\x02\x02\u{719}\u{71a}\x07\x51\x02\x02\u{71a}\u{71b}\ + \x07\x48\x02\x02\u{71b}\u{15a}\x03\x02\x02\x02\u{71c}\u{71d}\x07\x51\x02\ + \x02\u{71d}\u{71e}\x07\x48\x02\x02\u{71e}\u{71f}\x07\x48\x02\x02\u{71f}\ + \u{720}\x07\x55\x02\x02\u{720}\u{721}\x07\x47\x02\x02\u{721}\u{722}\x07\ + \x56\x02\x02\u{722}\u{15c}\x03\x02\x02\x02\u{723}\u{724}\x07\x51\x02\x02\ + \u{724}\u{725}\x07\x4f\x02\x02\u{725}\u{726}\x07\x4b\x02\x02\u{726}\u{727}\ + \x07\x56\x02\x02\u{727}\u{15e}\x03\x02\x02\x02\u{728}\u{729}\x07\x51\x02\ + \x02\u{729}\u{72a}\x07\x50\x02\x02\u{72a}\u{160}\x03\x02\x02\x02\u{72b}\ + \u{72c}\x07\x51\x02\x02\u{72c}\u{72d}\x07\x50\x02\x02\u{72d}\u{72e}\x07\ + \x47\x02\x02\u{72e}\u{162}\x03\x02\x02\x02\u{72f}\u{730}\x07\x51\x02\x02\ + \u{730}\u{731}\x07\x50\x02\x02\u{731}\u{732}\x07\x4e\x02\x02\u{732}\u{733}\ + \x07\x5b\x02\x02\u{733}\u{164}\x03\x02\x02\x02\u{734}\u{735}\x07\x51\x02\ + \x02\u{735}\u{736}\x07\x52\x02\x02\u{736}\u{737}\x07\x56\x02\x02\u{737}\ + \u{738}\x07\x4b\x02\x02\u{738}\u{739}\x07\x51\x02\x02\u{739}\u{73a}\x07\ + \x50\x02\x02\u{73a}\u{166}\x03\x02\x02\x02\u{73b}\u{73c}\x07\x51\x02\x02\ + \u{73c}\u{73d}\x07\x54\x02\x02\u{73d}\u{168}\x03\x02\x02\x02\u{73e}\u{73f}\ + \x07\x51\x02\x02\u{73f}\u{740}\x07\x54\x02\x02\u{740}\u{741}\x07\x46\x02\ + \x02\u{741}\u{742}\x07\x47\x02\x02\u{742}\u{743}\x07\x54\x02\x02\u{743}\ + \u{16a}\x03\x02\x02\x02\u{744}\u{745}\x07\x51\x02\x02\u{745}\u{746}\x07\ + \x54\x02\x02\u{746}\u{747}\x07\x46\x02\x02\u{747}\u{748}\x07\x4b\x02\x02\ + \u{748}\u{749}\x07\x50\x02\x02\u{749}\u{74a}\x07\x43\x02\x02\u{74a}\u{74b}\ + \x07\x4e\x02\x02\u{74b}\u{74c}\x07\x4b\x02\x02\u{74c}\u{74d}\x07\x56\x02\ + \x02\u{74d}\u{74e}\x07\x5b\x02\x02\u{74e}\u{16c}\x03\x02\x02\x02\u{74f}\ + \u{750}\x07\x51\x02\x02\u{750}\u{751}\x07\x57\x02\x02\u{751}\u{752}\x07\ + \x56\x02\x02\u{752}\u{753}\x07\x47\x02\x02\u{753}\u{754}\x07\x54\x02\x02\ + \u{754}\u{16e}\x03\x02\x02\x02\u{755}\u{756}\x07\x51\x02\x02\u{756}\u{757}\ + \x07\x57\x02\x02\u{757}\u{758}\x07\x56\x02\x02\u{758}\u{759}\x07\x52\x02\ + \x02\u{759}\u{75a}\x07\x57\x02\x02\u{75a}\u{75b}\x07\x56\x02\x02\u{75b}\ + \u{170}\x03\x02\x02\x02\u{75c}\u{75d}\x07\x51\x02\x02\u{75d}\u{75e}\x07\ + \x58\x02\x02\u{75e}\u{75f}\x07\x47\x02\x02\u{75f}\u{760}\x07\x54\x02\x02\ + \u{760}\u{172}\x03\x02\x02\x02\u{761}\u{762}\x07\x51\x02\x02\u{762}\u{763}\ + \x07\x58\x02\x02\u{763}\u{764}\x07\x47\x02\x02\u{764}\u{765}\x07\x54\x02\ + \x02\u{765}\u{766}\x07\x48\x02\x02\u{766}\u{767}\x07\x4e\x02\x02\u{767}\ + \u{768}\x07\x51\x02\x02\u{768}\u{769}\x07\x59\x02\x02\u{769}\u{174}\x03\ + \x02\x02\x02\u{76a}\u{76b}\x07\x52\x02\x02\u{76b}\u{76c}\x07\x43\x02\x02\ + \u{76c}\u{76d}\x07\x54\x02\x02\u{76d}\u{76e}\x07\x56\x02\x02\u{76e}\u{76f}\ + \x07\x4b\x02\x02\u{76f}\u{770}\x07\x56\x02\x02\u{770}\u{771}\x07\x4b\x02\ + \x02\u{771}\u{772}\x07\x51\x02\x02\u{772}\u{773}\x07\x50\x02\x02\u{773}\ + \u{176}\x03\x02\x02\x02\u{774}\u{775}\x07\x52\x02\x02\u{775}\u{776}\x07\ + \x43\x02\x02\u{776}\u{777}\x07\x54\x02\x02\u{777}\u{778}\x07\x56\x02\x02\ + \u{778}\u{779}\x07\x4b\x02\x02\u{779}\u{77a}\x07\x56\x02\x02\u{77a}\u{77b}\ + \x07\x4b\x02\x02\u{77b}\u{77c}\x07\x51\x02\x02\u{77c}\u{77d}\x07\x50\x02\ + \x02\u{77d}\u{77e}\x07\x55\x02\x02\u{77e}\u{178}\x03\x02\x02\x02\u{77f}\ + \u{780}\x07\x52\x02\x02\u{780}\u{781}\x07\x43\x02\x02\u{781}\u{782}\x07\ + \x55\x02\x02\u{782}\u{783}\x07\x55\x02\x02\u{783}\u{784}\x07\x4b\x02\x02\ + \u{784}\u{785}\x07\x50\x02\x02\u{785}\u{786}\x07\x49\x02\x02\u{786}\u{17a}\ + \x03\x02\x02\x02\u{787}\u{788}\x07\x52\x02\x02\u{788}\u{789}\x07\x43\x02\ + \x02\u{789}\u{78a}\x07\x55\x02\x02\u{78a}\u{78b}\x07\x56\x02\x02\u{78b}\ + \u{17c}\x03\x02\x02\x02\u{78c}\u{78d}\x07\x52\x02\x02\u{78d}\u{78e}\x07\ + \x43\x02\x02\u{78e}\u{78f}\x07\x56\x02\x02\u{78f}\u{790}\x07\x4a\x02\x02\ + \u{790}\u{17e}\x03\x02\x02\x02\u{791}\u{792}\x07\x52\x02\x02\u{792}\u{793}\ + \x07\x43\x02\x02\u{793}\u{794}\x07\x56\x02\x02\u{794}\u{795}\x07\x56\x02\ + \x02\u{795}\u{796}\x07\x47\x02\x02\u{796}\u{797}\x07\x54\x02\x02\u{797}\ + \u{798}\x07\x50\x02\x02\u{798}\u{180}\x03\x02\x02\x02\u{799}\u{79a}\x07\ + \x52\x02\x02\u{79a}\u{79b}\x07\x47\x02\x02\u{79b}\u{79c}\x07\x54\x02\x02\ + \u{79c}\u{182}\x03\x02\x02\x02\u{79d}\u{79e}\x07\x52\x02\x02\u{79e}\u{79f}\ + \x07\x47\x02\x02\u{79f}\u{7a0}\x07\x54\x02\x02\u{7a0}\u{7a1}\x07\x4b\x02\ + \x02\u{7a1}\u{7a2}\x07\x51\x02\x02\u{7a2}\u{7a3}\x07\x46\x02\x02\u{7a3}\ + \u{184}\x03\x02\x02\x02\u{7a4}\u{7a5}\x07\x52\x02\x02\u{7a5}\u{7a6}\x07\ + \x47\x02\x02\u{7a6}\u{7a7}\x07\x54\x02\x02\u{7a7}\u{7a8}\x07\x4f\x02\x02\ + \u{7a8}\u{7a9}\x07\x57\x02\x02\u{7a9}\u{7aa}\x07\x56\x02\x02\u{7aa}\u{7ab}\ + \x07\x47\x02\x02\u{7ab}\u{186}\x03\x02\x02\x02\u{7ac}\u{7ad}\x07\x52\x02\ + \x02\u{7ad}\u{7ae}\x07\x51\x02\x02\u{7ae}\u{7af}\x07\x55\x02\x02\u{7af}\ + \u{7b0}\x07\x4b\x02\x02\u{7b0}\u{7b1}\x07\x56\x02\x02\u{7b1}\u{7b2}\x07\ + \x4b\x02\x02\u{7b2}\u{7b3}\x07\x51\x02\x02\u{7b3}\u{7b4}\x07\x50\x02\x02\ + \u{7b4}\u{188}\x03\x02\x02\x02\u{7b5}\u{7b6}\x07\x52\x02\x02\u{7b6}\u{7b7}\ + \x07\x54\x02\x02\u{7b7}\u{7b8}\x07\x47\x02\x02\u{7b8}\u{7b9}\x07\x45\x02\ + \x02\u{7b9}\u{7ba}\x07\x47\x02\x02\u{7ba}\u{7bb}\x07\x46\x02\x02\u{7bb}\ + \u{7bc}\x07\x4b\x02\x02\u{7bc}\u{7bd}\x07\x50\x02\x02\u{7bd}\u{7be}\x07\ + \x49\x02\x02\u{7be}\u{18a}\x03\x02\x02\x02\u{7bf}\u{7c0}\x07\x52\x02\x02\ + \u{7c0}\u{7c1}\x07\x54\x02\x02\u{7c1}\u{7c2}\x07\x47\x02\x02\u{7c2}\u{7c3}\ + \x07\x45\x02\x02\u{7c3}\u{7c4}\x07\x4b\x02\x02\u{7c4}\u{7c5}\x07\x55\x02\ + \x02\u{7c5}\u{7c6}\x07\x4b\x02\x02\u{7c6}\u{7c7}\x07\x51\x02\x02\u{7c7}\ + \u{7c8}\x07\x50\x02\x02\u{7c8}\u{18c}\x03\x02\x02\x02\u{7c9}\u{7ca}\x07\ + \x52\x02\x02\u{7ca}\u{7cb}\x07\x54\x02\x02\u{7cb}\u{7cc}\x07\x47\x02\x02\ + \u{7cc}\u{7cd}\x07\x52\x02\x02\u{7cd}\u{7ce}\x07\x43\x02\x02\u{7ce}\u{7cf}\ + \x07\x54\x02\x02\u{7cf}\u{7d0}\x07\x47\x02\x02\u{7d0}\u{18e}\x03\x02\x02\ + \x02\u{7d1}\u{7d2}\x07\x52\x02\x02\u{7d2}\u{7d3}\x07\x54\x02\x02\u{7d3}\ + \u{7d4}\x07\x4b\x02\x02\u{7d4}\u{7d5}\x07\x58\x02\x02\u{7d5}\u{7d6}\x07\ + \x4b\x02\x02\u{7d6}\u{7d7}\x07\x4e\x02\x02\u{7d7}\u{7d8}\x07\x47\x02\x02\ + \u{7d8}\u{7d9}\x07\x49\x02\x02\u{7d9}\u{7da}\x07\x47\x02\x02\u{7da}\u{7db}\ + \x07\x55\x02\x02\u{7db}\u{190}\x03\x02\x02\x02\u{7dc}\u{7dd}\x07\x52\x02\ + \x02\u{7dd}\u{7de}\x07\x54\x02\x02\u{7de}\u{7df}\x07\x51\x02\x02\u{7df}\ + \u{7e0}\x07\x52\x02\x02\u{7e0}\u{7e1}\x07\x47\x02\x02\u{7e1}\u{7e2}\x07\ + \x54\x02\x02\u{7e2}\u{7e3}\x07\x56\x02\x02\u{7e3}\u{7e4}\x07\x4b\x02\x02\ + \u{7e4}\u{7e5}\x07\x47\x02\x02\u{7e5}\u{7e6}\x07\x55\x02\x02\u{7e6}\u{192}\ + \x03\x02\x02\x02\u{7e7}\u{7e8}\x07\x52\x02\x02\u{7e8}\u{7e9}\x07\x54\x02\ + \x02\u{7e9}\u{7ea}\x07\x57\x02\x02\u{7ea}\u{7eb}\x07\x50\x02\x02\u{7eb}\ + \u{7ec}\x07\x47\x02\x02\u{7ec}\u{194}\x03\x02\x02\x02\u{7ed}\u{7ee}\x07\ + \x53\x02\x02\u{7ee}\u{7ef}\x07\x57\x02\x02\u{7ef}\u{7f0}\x07\x51\x02\x02\ + \u{7f0}\u{7f1}\x07\x56\x02\x02\u{7f1}\u{7f2}\x07\x47\x02\x02\u{7f2}\u{7f3}\ + \x07\x55\x02\x02\u{7f3}\u{196}\x03\x02\x02\x02\u{7f4}\u{7f5}\x07\x54\x02\ + \x02\u{7f5}\u{7f6}\x07\x43\x02\x02\u{7f6}\u{7f7}\x07\x50\x02\x02\u{7f7}\ + \u{7f8}\x07\x49\x02\x02\u{7f8}\u{7f9}\x07\x47\x02\x02\u{7f9}\u{198}\x03\ + \x02\x02\x02\u{7fa}\u{7fb}\x07\x54\x02\x02\u{7fb}\u{7fc}\x07\x47\x02\x02\ + \u{7fc}\u{7fd}\x07\x43\x02\x02\u{7fd}\u{7fe}\x07\x46\x02\x02\u{7fe}\u{19a}\ + \x03\x02\x02\x02\u{7ff}\u{800}\x07\x54\x02\x02\u{800}\u{801}\x07\x47\x02\ + \x02\u{801}\u{802}\x07\x45\x02\x02\u{802}\u{803}\x07\x57\x02\x02\u{803}\ + \u{804}\x07\x54\x02\x02\u{804}\u{805}\x07\x55\x02\x02\u{805}\u{806}\x07\ + \x4b\x02\x02\u{806}\u{807}\x07\x58\x02\x02\u{807}\u{808}\x07\x47\x02\x02\ + \u{808}\u{19c}\x03\x02\x02\x02\u{809}\u{80a}\x07\x54\x02\x02\u{80a}\u{80b}\ + \x07\x47\x02\x02\u{80b}\u{80c}\x07\x48\x02\x02\u{80c}\u{80d}\x07\x54\x02\ + \x02\u{80d}\u{80e}\x07\x47\x02\x02\u{80e}\u{80f}\x07\x55\x02\x02\u{80f}\ + \u{810}\x07\x4a\x02\x02\u{810}\u{19e}\x03\x02\x02\x02\u{811}\u{812}\x07\ + \x54\x02\x02\u{812}\u{813}\x07\x47\x02\x02\u{813}\u{814}\x07\x50\x02\x02\ + \u{814}\u{815}\x07\x43\x02\x02\u{815}\u{816}\x07\x4f\x02\x02\u{816}\u{817}\ + \x07\x47\x02\x02\u{817}\u{1a0}\x03\x02\x02\x02\u{818}\u{819}\x07\x54\x02\ + \x02\u{819}\u{81a}\x07\x47\x02\x02\u{81a}\u{81b}\x07\x52\x02\x02\u{81b}\ + \u{81c}\x07\x47\x02\x02\u{81c}\u{81d}\x07\x43\x02\x02\u{81d}\u{81e}\x07\ + \x56\x02\x02\u{81e}\u{81f}\x07\x43\x02\x02\u{81f}\u{820}\x07\x44\x02\x02\ + \u{820}\u{821}\x07\x4e\x02\x02\u{821}\u{822}\x07\x47\x02\x02\u{822}\u{1a2}\ + \x03\x02\x02\x02\u{823}\u{824}\x07\x54\x02\x02\u{824}\u{825}\x07\x47\x02\ + \x02\u{825}\u{826}\x07\x52\x02\x02\u{826}\u{827}\x07\x4e\x02\x02\u{827}\ + \u{828}\x07\x43\x02\x02\u{828}\u{829}\x07\x45\x02\x02\u{829}\u{82a}\x07\ + \x47\x02\x02\u{82a}\u{1a4}\x03\x02\x02\x02\u{82b}\u{82c}\x07\x54\x02\x02\ + \u{82c}\u{82d}\x07\x47\x02\x02\u{82d}\u{82e}\x07\x55\x02\x02\u{82e}\u{82f}\ + \x07\x47\x02\x02\u{82f}\u{830}\x07\x56\x02\x02\u{830}\u{1a6}\x03\x02\x02\ + \x02\u{831}\u{832}\x07\x54\x02\x02\u{832}\u{833}\x07\x47\x02\x02\u{833}\ + \u{834}\x07\x55\x02\x02\u{834}\u{835}\x07\x52\x02\x02\u{835}\u{836}\x07\ + \x47\x02\x02\u{836}\u{837}\x07\x45\x02\x02\u{837}\u{838}\x07\x56\x02\x02\ + \u{838}\u{1a8}\x03\x02\x02\x02\u{839}\u{83a}\x07\x54\x02\x02\u{83a}\u{83b}\ + \x07\x47\x02\x02\u{83b}\u{83c}\x07\x55\x02\x02\u{83c}\u{83d}\x07\x56\x02\ + \x02\u{83d}\u{83e}\x07\x54\x02\x02\u{83e}\u{83f}\x07\x4b\x02\x02\u{83f}\ + \u{840}\x07\x45\x02\x02\u{840}\u{841}\x07\x56\x02\x02\u{841}\u{1aa}\x03\ + \x02\x02\x02\u{842}\u{843}\x07\x54\x02\x02\u{843}\u{844}\x07\x47\x02\x02\ + \u{844}\u{845}\x07\x56\x02\x02\u{845}\u{846}\x07\x57\x02\x02\u{846}\u{847}\ + \x07\x54\x02\x02\u{847}\u{848}\x07\x50\x02\x02\u{848}\u{849}\x07\x4b\x02\ + \x02\u{849}\u{84a}\x07\x50\x02\x02\u{84a}\u{84b}\x07\x49\x02\x02\u{84b}\ + \u{1ac}\x03\x02\x02\x02\u{84c}\u{84d}\x07\x54\x02\x02\u{84d}\u{84e}\x07\ + \x47\x02\x02\u{84e}\u{84f}\x07\x58\x02\x02\u{84f}\u{850}\x07\x51\x02\x02\ + \u{850}\u{851}\x07\x4d\x02\x02\u{851}\u{852}\x07\x47\x02\x02\u{852}\u{1ae}\ + \x03\x02\x02\x02\u{853}\u{854}\x07\x54\x02\x02\u{854}\u{855}\x07\x4b\x02\ + \x02\u{855}\u{856}\x07\x49\x02\x02\u{856}\u{857}\x07\x4a\x02\x02\u{857}\ + \u{858}\x07\x56\x02\x02\u{858}\u{1b0}\x03\x02\x02\x02\u{859}\u{85a}\x07\ + \x54\x02\x02\u{85a}\u{85b}\x07\x51\x02\x02\u{85b}\u{85c}\x07\x4e\x02\x02\ + \u{85c}\u{85d}\x07\x47\x02\x02\u{85d}\u{1b2}\x03\x02\x02\x02\u{85e}\u{85f}\ + \x07\x54\x02\x02\u{85f}\u{860}\x07\x51\x02\x02\u{860}\u{861}\x07\x4e\x02\ + \x02\u{861}\u{862}\x07\x47\x02\x02\u{862}\u{863}\x07\x55\x02\x02\u{863}\ + \u{1b4}\x03\x02\x02\x02\u{864}\u{865}\x07\x54\x02\x02\u{865}\u{866}\x07\ + \x51\x02\x02\u{866}\u{867}\x07\x4e\x02\x02\u{867}\u{868}\x07\x4e\x02\x02\ + \u{868}\u{869}\x07\x44\x02\x02\u{869}\u{86a}\x07\x43\x02\x02\u{86a}\u{86b}\ + \x07\x45\x02\x02\u{86b}\u{86c}\x07\x4d\x02\x02\u{86c}\u{1b6}\x03\x02\x02\ + \x02\u{86d}\u{86e}\x07\x54\x02\x02\u{86e}\u{86f}\x07\x51\x02\x02\u{86f}\ + \u{870}\x07\x4e\x02\x02\u{870}\u{871}\x07\x4e\x02\x02\u{871}\u{872}\x07\ + \x57\x02\x02\u{872}\u{873}\x07\x52\x02\x02\u{873}\u{1b8}\x03\x02\x02\x02\ + \u{874}\u{875}\x07\x54\x02\x02\u{875}\u{876}\x07\x51\x02\x02\u{876}\u{877}\ + \x07\x59\x02\x02\u{877}\u{1ba}\x03\x02\x02\x02\u{878}\u{879}\x07\x54\x02\ + \x02\u{879}\u{87a}\x07\x51\x02\x02\u{87a}\u{87b}\x07\x59\x02\x02\u{87b}\ + \u{87c}\x07\x55\x02\x02\u{87c}\u{1bc}\x03\x02\x02\x02\u{87d}\u{87e}\x07\ + \x54\x02\x02\u{87e}\u{87f}\x07\x57\x02\x02\u{87f}\u{880}\x07\x50\x02\x02\ + \u{880}\u{881}\x07\x50\x02\x02\u{881}\u{882}\x07\x4b\x02\x02\u{882}\u{883}\ + \x07\x50\x02\x02\u{883}\u{884}\x07\x49\x02\x02\u{884}\u{1be}\x03\x02\x02\ + \x02\u{885}\u{886}\x07\x55\x02\x02\u{886}\u{887}\x07\x45\x02\x02\u{887}\ + \u{888}\x07\x43\x02\x02\u{888}\u{889}\x07\x4e\x02\x02\u{889}\u{88a}\x07\ + \x43\x02\x02\u{88a}\u{88b}\x07\x54\x02\x02\u{88b}\u{1c0}\x03\x02\x02\x02\ + \u{88c}\u{88d}\x07\x55\x02\x02\u{88d}\u{88e}\x07\x45\x02\x02\u{88e}\u{88f}\ + \x07\x4a\x02\x02\u{88f}\u{890}\x07\x47\x02\x02\u{890}\u{891}\x07\x4f\x02\ + \x02\u{891}\u{892}\x07\x43\x02\x02\u{892}\u{1c2}\x03\x02\x02\x02\u{893}\ + \u{894}\x07\x55\x02\x02\u{894}\u{895}\x07\x45\x02\x02\u{895}\u{896}\x07\ + \x4a\x02\x02\u{896}\u{897}\x07\x47\x02\x02\u{897}\u{898}\x07\x4f\x02\x02\ + \u{898}\u{899}\x07\x43\x02\x02\u{899}\u{89a}\x07\x55\x02\x02\u{89a}\u{1c4}\ + \x03\x02\x02\x02\u{89b}\u{89c}\x07\x55\x02\x02\u{89c}\u{89d}\x07\x47\x02\ + \x02\u{89d}\u{89e}\x07\x45\x02\x02\u{89e}\u{89f}\x07\x51\x02\x02\u{89f}\ + \u{8a0}\x07\x50\x02\x02\u{8a0}\u{8a1}\x07\x46\x02\x02\u{8a1}\u{1c6}\x03\ + \x02\x02\x02\u{8a2}\u{8a3}\x07\x55\x02\x02\u{8a3}\u{8a4}\x07\x47\x02\x02\ + \u{8a4}\u{8a5}\x07\x45\x02\x02\u{8a5}\u{8a6}\x07\x57\x02\x02\u{8a6}\u{8a7}\ + \x07\x54\x02\x02\u{8a7}\u{8a8}\x07\x4b\x02\x02\u{8a8}\u{8a9}\x07\x56\x02\ + \x02\u{8a9}\u{8aa}\x07\x5b\x02\x02\u{8aa}\u{1c8}\x03\x02\x02\x02\u{8ab}\ + \u{8ac}\x07\x55\x02\x02\u{8ac}\u{8ad}\x07\x47\x02\x02\u{8ad}\u{8ae}\x07\ + \x47\x02\x02\u{8ae}\u{8af}\x07\x4d\x02\x02\u{8af}\u{1ca}\x03\x02\x02\x02\ + \u{8b0}\u{8b1}\x07\x55\x02\x02\u{8b1}\u{8b2}\x07\x47\x02\x02\u{8b2}\u{8b3}\ + \x07\x4e\x02\x02\u{8b3}\u{8b4}\x07\x47\x02\x02\u{8b4}\u{8b5}\x07\x45\x02\ + \x02\u{8b5}\u{8b6}\x07\x56\x02\x02\u{8b6}\u{1cc}\x03\x02\x02\x02\u{8b7}\ + \u{8b8}\x07\x55\x02\x02\u{8b8}\u{8b9}\x07\x47\x02\x02\u{8b9}\u{8ba}\x07\ + \x54\x02\x02\u{8ba}\u{8bb}\x07\x4b\x02\x02\u{8bb}\u{8bc}\x07\x43\x02\x02\ + \u{8bc}\u{8bd}\x07\x4e\x02\x02\u{8bd}\u{8be}\x07\x4b\x02\x02\u{8be}\u{8bf}\ + \x07\x5c\x02\x02\u{8bf}\u{8c0}\x07\x43\x02\x02\u{8c0}\u{8c1}\x07\x44\x02\ + \x02\u{8c1}\u{8c2}\x07\x4e\x02\x02\u{8c2}\u{8c3}\x07\x47\x02\x02\u{8c3}\ + \u{1ce}\x03\x02\x02\x02\u{8c4}\u{8c5}\x07\x55\x02\x02\u{8c5}\u{8c6}\x07\ + \x47\x02\x02\u{8c6}\u{8c7}\x07\x55\x02\x02\u{8c7}\u{8c8}\x07\x55\x02\x02\ + \u{8c8}\u{8c9}\x07\x4b\x02\x02\u{8c9}\u{8ca}\x07\x51\x02\x02\u{8ca}\u{8cb}\ + \x07\x50\x02\x02\u{8cb}\u{1d0}\x03\x02\x02\x02\u{8cc}\u{8cd}\x07\x55\x02\ + \x02\u{8cd}\u{8ce}\x07\x47\x02\x02\u{8ce}\u{8cf}\x07\x56\x02\x02\u{8cf}\ + \u{1d2}\x03\x02\x02\x02\u{8d0}\u{8d1}\x07\x55\x02\x02\u{8d1}\u{8d2}\x07\ + \x47\x02\x02\u{8d2}\u{8d3}\x07\x56\x02\x02\u{8d3}\u{8d4}\x07\x55\x02\x02\ + \u{8d4}\u{1d4}\x03\x02\x02\x02\u{8d5}\u{8d6}\x07\x55\x02\x02\u{8d6}\u{8d7}\ + \x07\x4a\x02\x02\u{8d7}\u{8d8}\x07\x51\x02\x02\u{8d8}\u{8d9}\x07\x59\x02\ + \x02\u{8d9}\u{1d6}\x03\x02\x02\x02\u{8da}\u{8db}\x07\x55\x02\x02\u{8db}\ + \u{8dc}\x07\x51\x02\x02\u{8dc}\u{8dd}\x07\x4f\x02\x02\u{8dd}\u{8de}\x07\ + \x47\x02\x02\u{8de}\u{1d8}\x03\x02\x02\x02\u{8df}\u{8e0}\x07\x55\x02\x02\ + \u{8e0}\u{8e1}\x07\x56\x02\x02\u{8e1}\u{8e2}\x07\x43\x02\x02\u{8e2}\u{8e3}\ + \x07\x54\x02\x02\u{8e3}\u{8e4}\x07\x56\x02\x02\u{8e4}\u{1da}\x03\x02\x02\ + \x02\u{8e5}\u{8e6}\x07\x55\x02\x02\u{8e6}\u{8e7}\x07\x56\x02\x02\u{8e7}\ + \u{8e8}\x07\x43\x02\x02\u{8e8}\u{8e9}\x07\x56\x02\x02\u{8e9}\u{8ea}\x07\ + \x55\x02\x02\u{8ea}\u{1dc}\x03\x02\x02\x02\u{8eb}\u{8ec}\x07\x55\x02\x02\ + \u{8ec}\u{8ed}\x07\x57\x02\x02\u{8ed}\u{8ee}\x07\x44\x02\x02\u{8ee}\u{8ef}\ + \x07\x55\x02\x02\u{8ef}\u{8f0}\x07\x47\x02\x02\u{8f0}\u{8f1}\x07\x56\x02\ + \x02\u{8f1}\u{1de}\x03\x02\x02\x02\u{8f2}\u{8f3}\x07\x55\x02\x02\u{8f3}\ + \u{8f4}\x07\x57\x02\x02\u{8f4}\u{8f5}\x07\x44\x02\x02\u{8f5}\u{8f6}\x07\ + \x55\x02\x02\u{8f6}\u{8f7}\x07\x56\x02\x02\u{8f7}\u{8f8}\x07\x54\x02\x02\ + \u{8f8}\u{8f9}\x07\x4b\x02\x02\u{8f9}\u{8fa}\x07\x50\x02\x02\u{8fa}\u{8fb}\ + \x07\x49\x02\x02\u{8fb}\u{1e0}\x03\x02\x02\x02\u{8fc}\u{8fd}\x07\x55\x02\ + \x02\u{8fd}\u{8fe}\x07\x5b\x02\x02\u{8fe}\u{8ff}\x07\x55\x02\x02\u{8ff}\ + \u{900}\x07\x56\x02\x02\u{900}\u{901}\x07\x47\x02\x02\u{901}\u{902}\x07\ + \x4f\x02\x02\u{902}\u{1e2}\x03\x02\x02\x02\u{903}\u{904}\x07\x56\x02\x02\ + \u{904}\u{905}\x07\x43\x02\x02\u{905}\u{906}\x07\x44\x02\x02\u{906}\u{907}\ + \x07\x4e\x02\x02\u{907}\u{908}\x07\x47\x02\x02\u{908}\u{1e4}\x03\x02\x02\ + \x02\u{909}\u{90a}\x07\x56\x02\x02\u{90a}\u{90b}\x07\x43\x02\x02\u{90b}\ + \u{90c}\x07\x44\x02\x02\u{90c}\u{90d}\x07\x4e\x02\x02\u{90d}\u{90e}\x07\ + \x47\x02\x02\u{90e}\u{90f}\x07\x55\x02\x02\u{90f}\u{1e6}\x03\x02\x02\x02\ + \u{910}\u{911}\x07\x56\x02\x02\u{911}\u{912}\x07\x43\x02\x02\u{912}\u{913}\ + \x07\x44\x02\x02\u{913}\u{914}\x07\x4e\x02\x02\u{914}\u{915}\x07\x47\x02\ + \x02\u{915}\u{916}\x07\x55\x02\x02\u{916}\u{917}\x07\x43\x02\x02\u{917}\ + \u{918}\x07\x4f\x02\x02\u{918}\u{919}\x07\x52\x02\x02\u{919}\u{91a}\x07\ + \x4e\x02\x02\u{91a}\u{91b}\x07\x47\x02\x02\u{91b}\u{1e8}\x03\x02\x02\x02\ + \u{91c}\u{91d}\x07\x56\x02\x02\u{91d}\u{91e}\x07\x47\x02\x02\u{91e}\u{91f}\ + \x07\x5a\x02\x02\u{91f}\u{920}\x07\x56\x02\x02\u{920}\u{1ea}\x03\x02\x02\ + \x02\u{921}\u{922}\x07\x55\x02\x02\u{922}\u{923}\x07\x56\x02\x02\u{923}\ + \u{924}\x07\x54\x02\x02\u{924}\u{925}\x07\x4b\x02\x02\u{925}\u{926}\x07\ + \x50\x02\x02\u{926}\u{927}\x07\x49\x02\x02\u{927}\u{1ec}\x03\x02\x02\x02\ + \u{928}\u{929}\x07\x56\x02\x02\u{929}\u{92a}\x07\x4a\x02\x02\u{92a}\u{92b}\ + \x07\x47\x02\x02\u{92b}\u{92c}\x07\x50\x02\x02\u{92c}\u{1ee}\x03\x02\x02\ + \x02\u{92d}\u{92e}\x07\x56\x02\x02\u{92e}\u{92f}\x07\x4b\x02\x02\u{92f}\ + \u{930}\x07\x47\x02\x02\u{930}\u{931}\x07\x55\x02\x02\u{931}\u{1f0}\x03\ + \x02\x02\x02\u{932}\u{933}\x07\x56\x02\x02\u{933}\u{934}\x07\x4b\x02\x02\ + \u{934}\u{935}\x07\x4f\x02\x02\u{935}\u{936}\x07\x47\x02\x02\u{936}\u{1f2}\ + \x03\x02\x02\x02\u{937}\u{938}\x07\x56\x02\x02\u{938}\u{939}\x07\x4b\x02\ + \x02\u{939}\u{93a}\x07\x4f\x02\x02\u{93a}\u{93b}\x07\x47\x02\x02\u{93b}\ + \u{93c}\x07\x55\x02\x02\u{93c}\u{93d}\x07\x56\x02\x02\u{93d}\u{93e}\x07\ + \x43\x02\x02\u{93e}\u{93f}\x07\x4f\x02\x02\u{93f}\u{940}\x07\x52\x02\x02\ + \u{940}\u{1f4}\x03\x02\x02\x02\u{941}\u{942}\x07\x56\x02\x02\u{942}\u{943}\ + \x07\x51\x02\x02\u{943}\u{1f6}\x03\x02\x02\x02\u{944}\u{945}\x07\x56\x02\ + \x02\u{945}\u{946}\x07\x54\x02\x02\u{946}\u{947}\x07\x43\x02\x02\u{947}\ + \u{948}\x07\x4b\x02\x02\u{948}\u{949}\x07\x4e\x02\x02\u{949}\u{94a}\x07\ + \x4b\x02\x02\u{94a}\u{94b}\x07\x50\x02\x02\u{94b}\u{94c}\x07\x49\x02\x02\ + \u{94c}\u{1f8}\x03\x02\x02\x02\u{94d}\u{94e}\x07\x56\x02\x02\u{94e}\u{94f}\ + \x07\x54\x02\x02\u{94f}\u{950}\x07\x43\x02\x02\u{950}\u{951}\x07\x50\x02\ + \x02\u{951}\u{952}\x07\x55\x02\x02\u{952}\u{953}\x07\x43\x02\x02\u{953}\ + \u{954}\x07\x45\x02\x02\u{954}\u{955}\x07\x56\x02\x02\u{955}\u{956}\x07\ + \x4b\x02\x02\u{956}\u{957}\x07\x51\x02\x02\u{957}\u{958}\x07\x50\x02\x02\ + \u{958}\u{1fa}\x03\x02\x02\x02\u{959}\u{95a}\x07\x56\x02\x02\u{95a}\u{95b}\ + \x07\x54\x02\x02\u{95b}\u{95c}\x07\x4b\x02\x02\u{95c}\u{95d}\x07\x4f\x02\ + \x02\u{95d}\u{1fc}\x03\x02\x02\x02\u{95e}\u{95f}\x07\x56\x02\x02\u{95f}\ + \u{960}\x07\x54\x02\x02\u{960}\u{961}\x07\x57\x02\x02\u{961}\u{962}\x07\ + \x47\x02\x02\u{962}\u{1fe}\x03\x02\x02\x02\u{963}\u{964}\x07\x56\x02\x02\ + \u{964}\u{965}\x07\x54\x02\x02\u{965}\u{966}\x07\x57\x02\x02\u{966}\u{967}\ + \x07\x50\x02\x02\u{967}\u{968}\x07\x45\x02\x02\u{968}\u{969}\x07\x43\x02\ + \x02\u{969}\u{96a}\x07\x56\x02\x02\u{96a}\u{96b}\x07\x47\x02\x02\u{96b}\ + \u{200}\x03\x02\x02\x02\u{96c}\u{96d}\x07\x56\x02\x02\u{96d}\u{96e}\x07\ + \x54\x02\x02\u{96e}\u{96f}\x07\x5b\x02\x02\u{96f}\u{970}\x07\x61\x02\x02\ + \u{970}\u{971}\x07\x45\x02\x02\u{971}\u{972}\x07\x43\x02\x02\u{972}\u{973}\ + \x07\x55\x02\x02\u{973}\u{974}\x07\x56\x02\x02\u{974}\u{202}\x03\x02\x02\ + \x02\u{975}\u{976}\x07\x56\x02\x02\u{976}\u{977}\x07\x5b\x02\x02\u{977}\ + \u{978}\x07\x52\x02\x02\u{978}\u{979}\x07\x47\x02\x02\u{979}\u{204}\x03\ + \x02\x02\x02\u{97a}\u{97b}\x07\x57\x02\x02\u{97b}\u{97c}\x07\x47\x02\x02\ + \u{97c}\u{97d}\x07\x55\x02\x02\u{97d}\u{97e}\x07\x45\x02\x02\u{97e}\u{97f}\ + \x07\x43\x02\x02\u{97f}\u{980}\x07\x52\x02\x02\u{980}\u{981}\x07\x47\x02\ + \x02\u{981}\u{206}\x03\x02\x02\x02\u{982}\u{983}\x07\x57\x02\x02\u{983}\ + \u{984}\x07\x50\x02\x02\u{984}\u{985}\x07\x44\x02\x02\u{985}\u{986}\x07\ + \x51\x02\x02\u{986}\u{987}\x07\x57\x02\x02\u{987}\u{988}\x07\x50\x02\x02\ + \u{988}\u{989}\x07\x46\x02\x02\u{989}\u{98a}\x07\x47\x02\x02\u{98a}\u{98b}\ + \x07\x46\x02\x02\u{98b}\u{208}\x03\x02\x02\x02\u{98c}\u{98d}\x07\x57\x02\ + \x02\u{98d}\u{98e}\x07\x50\x02\x02\u{98e}\u{98f}\x07\x45\x02\x02\u{98f}\ + \u{990}\x07\x51\x02\x02\u{990}\u{991}\x07\x4f\x02\x02\u{991}\u{992}\x07\ + \x4f\x02\x02\u{992}\u{993}\x07\x4b\x02\x02\u{993}\u{994}\x07\x56\x02\x02\ + \u{994}\u{995}\x07\x56\x02\x02\u{995}\u{996}\x07\x47\x02\x02\u{996}\u{997}\ + \x07\x46\x02\x02\u{997}\u{20a}\x03\x02\x02\x02\u{998}\u{999}\x07\x57\x02\ + \x02\u{999}\u{99a}\x07\x50\x02\x02\u{99a}\u{99b}\x07\x45\x02\x02\u{99b}\ + \u{99c}\x07\x51\x02\x02\u{99c}\u{99d}\x07\x50\x02\x02\u{99d}\u{99e}\x07\ + \x46\x02\x02\u{99e}\u{99f}\x07\x4b\x02\x02\u{99f}\u{9a0}\x07\x56\x02\x02\ + \u{9a0}\u{9a1}\x07\x4b\x02\x02\u{9a1}\u{9a2}\x07\x51\x02\x02\u{9a2}\u{9a3}\ + \x07\x50\x02\x02\u{9a3}\u{9a4}\x07\x43\x02\x02\u{9a4}\u{9a5}\x07\x4e\x02\ + \x02\u{9a5}\u{20c}\x03\x02\x02\x02\u{9a6}\u{9a7}\x07\x57\x02\x02\u{9a7}\ + \u{9a8}\x07\x50\x02\x02\u{9a8}\u{9a9}\x07\x4b\x02\x02\u{9a9}\u{9aa}\x07\ + \x51\x02\x02\u{9aa}\u{9ab}\x07\x50\x02\x02\u{9ab}\u{20e}\x03\x02\x02\x02\ + \u{9ac}\u{9ad}\x07\x57\x02\x02\u{9ad}\u{9ae}\x07\x50\x02\x02\u{9ae}\u{9af}\ + \x07\x4b\x02\x02\u{9af}\u{9b0}\x07\x53\x02\x02\u{9b0}\u{9b1}\x07\x57\x02\ + \x02\u{9b1}\u{9b2}\x07\x47\x02\x02\u{9b2}\u{210}\x03\x02\x02\x02\u{9b3}\ + \u{9b4}\x07\x57\x02\x02\u{9b4}\u{9b5}\x07\x50\x02\x02\u{9b5}\u{9b6}\x07\ + \x4d\x02\x02\u{9b6}\u{9b7}\x07\x50\x02\x02\u{9b7}\u{9b8}\x07\x51\x02\x02\ + \u{9b8}\u{9b9}\x07\x59\x02\x02\u{9b9}\u{9ba}\x07\x50\x02\x02\u{9ba}\u{212}\ + \x03\x02\x02\x02\u{9bb}\u{9bc}\x07\x57\x02\x02\u{9bc}\u{9bd}\x07\x50\x02\ + \x02\u{9bd}\u{9be}\x07\x4f\x02\x02\u{9be}\u{9bf}\x07\x43\x02\x02\u{9bf}\ + \u{9c0}\x07\x56\x02\x02\u{9c0}\u{9c1}\x07\x45\x02\x02\u{9c1}\u{9c2}\x07\ + \x4a\x02\x02\u{9c2}\u{9c3}\x07\x47\x02\x02\u{9c3}\u{9c4}\x07\x46\x02\x02\ + \u{9c4}\u{214}\x03\x02\x02\x02\u{9c5}\u{9c6}\x07\x57\x02\x02\u{9c6}\u{9c7}\ + \x07\x50\x02\x02\u{9c7}\u{9c8}\x07\x50\x02\x02\u{9c8}\u{9c9}\x07\x47\x02\ + \x02\u{9c9}\u{9ca}\x07\x55\x02\x02\u{9ca}\u{9cb}\x07\x56\x02\x02\u{9cb}\ + \u{216}\x03\x02\x02\x02\u{9cc}\u{9cd}\x07\x57\x02\x02\u{9cd}\u{9ce}\x07\ + \x52\x02\x02\u{9ce}\u{9cf}\x07\x46\x02\x02\u{9cf}\u{9d0}\x07\x43\x02\x02\ + \u{9d0}\u{9d1}\x07\x56\x02\x02\u{9d1}\u{9d2}\x07\x47\x02\x02\u{9d2}\u{218}\ + \x03\x02\x02\x02\u{9d3}\u{9d4}\x07\x57\x02\x02\u{9d4}\u{9d5}\x07\x55\x02\ + \x02\u{9d5}\u{9d6}\x07\x47\x02\x02\u{9d6}\u{21a}\x03\x02\x02\x02\u{9d7}\ + \u{9d8}\x07\x57\x02\x02\u{9d8}\u{9d9}\x07\x55\x02\x02\u{9d9}\u{9da}\x07\ + \x47\x02\x02\u{9da}\u{9db}\x07\x54\x02\x02\u{9db}\u{21c}\x03\x02\x02\x02\ + \u{9dc}\u{9dd}\x07\x57\x02\x02\u{9dd}\u{9de}\x07\x55\x02\x02\u{9de}\u{9df}\ + \x07\x4b\x02\x02\u{9df}\u{9e0}\x07\x50\x02\x02\u{9e0}\u{9e1}\x07\x49\x02\ + \x02\u{9e1}\u{21e}\x03\x02\x02\x02\u{9e2}\u{9e3}\x07\x57\x02\x02\u{9e3}\ + \u{9e4}\x07\x56\x02\x02\u{9e4}\u{9e5}\x07\x48\x02\x02\u{9e5}\u{9e6}\x07\ + \x33\x02\x02\u{9e6}\u{9e7}\x07\x38\x02\x02\u{9e7}\u{220}\x03\x02\x02\x02\ + \u{9e8}\u{9e9}\x07\x57\x02\x02\u{9e9}\u{9ea}\x07\x56\x02\x02\u{9ea}\u{9eb}\ + \x07\x48\x02\x02\u{9eb}\u{9ec}\x07\x35\x02\x02\u{9ec}\u{9ed}\x07\x34\x02\ + \x02\u{9ed}\u{222}\x03\x02\x02\x02\u{9ee}\u{9ef}\x07\x57\x02\x02\u{9ef}\ + \u{9f0}\x07\x56\x02\x02\u{9f0}\u{9f1}\x07\x48\x02\x02\u{9f1}\u{9f2}\x07\ + \x3a\x02\x02\u{9f2}\u{224}\x03\x02\x02\x02\u{9f3}\u{9f4}\x07\x58\x02\x02\ + \u{9f4}\u{9f5}\x07\x43\x02\x02\u{9f5}\u{9f6}\x07\x4e\x02\x02\u{9f6}\u{9f7}\ + \x07\x4b\x02\x02\u{9f7}\u{9f8}\x07\x46\x02\x02\u{9f8}\u{9f9}\x07\x43\x02\ + \x02\u{9f9}\u{9fa}\x07\x56\x02\x02\u{9fa}\u{9fb}\x07\x47\x02\x02\u{9fb}\ + \u{226}\x03\x02\x02\x02\u{9fc}\u{9fd}\x07\x58\x02\x02\u{9fd}\u{9fe}\x07\ + \x43\x02\x02\u{9fe}\u{9ff}\x07\x4e\x02\x02\u{9ff}\u{a00}\x07\x57\x02\x02\ + \u{a00}\u{a01}\x07\x47\x02\x02\u{a01}\u{228}\x03\x02\x02\x02\u{a02}\u{a03}\ + \x07\x58\x02\x02\u{a03}\u{a04}\x07\x43\x02\x02\u{a04}\u{a05}\x07\x4e\x02\ + \x02\u{a05}\u{a06}\x07\x57\x02\x02\u{a06}\u{a07}\x07\x47\x02\x02\u{a07}\ + \u{a08}\x07\x55\x02\x02\u{a08}\u{22a}\x03\x02\x02\x02\u{a09}\u{a0a}\x07\ + \x58\x02\x02\u{a0a}\u{a0b}\x07\x47\x02\x02\u{a0b}\u{a0c}\x07\x54\x02\x02\ + \u{a0c}\u{a0d}\x07\x44\x02\x02\u{a0d}\u{a0e}\x07\x51\x02\x02\u{a0e}\u{a0f}\ + \x07\x55\x02\x02\u{a0f}\u{a10}\x07\x47\x02\x02\u{a10}\u{22c}\x03\x02\x02\ + \x02\u{a11}\u{a12}\x07\x58\x02\x02\u{a12}\u{a13}\x07\x47\x02\x02\u{a13}\ + \u{a14}\x07\x54\x02\x02\u{a14}\u{a15}\x07\x55\x02\x02\u{a15}\u{a16}\x07\ + \x4b\x02\x02\u{a16}\u{a17}\x07\x51\x02\x02\u{a17}\u{a18}\x07\x50\x02\x02\ + \u{a18}\u{22e}\x03\x02\x02\x02\u{a19}\u{a1a}\x07\x58\x02\x02\u{a1a}\u{a1b}\ + \x07\x4b\x02\x02\u{a1b}\u{a1c}\x07\x47\x02\x02\u{a1c}\u{a1d}\x07\x59\x02\ + \x02\u{a1d}\u{230}\x03\x02\x02\x02\u{a1e}\u{a1f}\x07\x59\x02\x02\u{a1f}\ + \u{a20}\x07\x4a\x02\x02\u{a20}\u{a21}\x07\x47\x02\x02\u{a21}\u{a22}\x07\ + \x50\x02\x02\u{a22}\u{232}\x03\x02\x02\x02\u{a23}\u{a24}\x07\x59\x02\x02\ + \u{a24}\u{a25}\x07\x4a\x02\x02\u{a25}\u{a26}\x07\x47\x02\x02\u{a26}\u{a27}\ + \x07\x54\x02\x02\u{a27}\u{a28}\x07\x47\x02\x02\u{a28}\u{234}\x03\x02\x02\ + \x02\u{a29}\u{a2a}\x07\x59\x02\x02\u{a2a}\u{a2b}\x07\x4b\x02\x02\u{a2b}\ + \u{a2c}\x07\x50\x02\x02\u{a2c}\u{a2d}\x07\x46\x02\x02\u{a2d}\u{a2e}\x07\ + \x51\x02\x02\u{a2e}\u{a2f}\x07\x59\x02\x02\u{a2f}\u{236}\x03\x02\x02\x02\ + \u{a30}\u{a31}\x07\x59\x02\x02\u{a31}\u{a32}\x07\x4b\x02\x02\u{a32}\u{a33}\ + \x07\x56\x02\x02\u{a33}\u{a34}\x07\x4a\x02\x02\u{a34}\u{238}\x03\x02\x02\ + \x02\u{a35}\u{a36}\x07\x59\x02\x02\u{a36}\u{a37}\x07\x4b\x02\x02\u{a37}\ + \u{a38}\x07\x56\x02\x02\u{a38}\u{a39}\x07\x4a\x02\x02\u{a39}\u{a3a}\x07\ + \x4b\x02\x02\u{a3a}\u{a3b}\x07\x50\x02\x02\u{a3b}\u{23a}\x03\x02\x02\x02\ + \u{a3c}\u{a3d}\x07\x59\x02\x02\u{a3d}\u{a3e}\x07\x4b\x02\x02\u{a3e}\u{a3f}\ + \x07\x56\x02\x02\u{a3f}\u{a40}\x07\x4a\x02\x02\u{a40}\u{a41}\x07\x51\x02\ + \x02\u{a41}\u{a42}\x07\x57\x02\x02\u{a42}\u{a43}\x07\x56\x02\x02\u{a43}\ + \u{23c}\x03\x02\x02\x02\u{a44}\u{a45}\x07\x59\x02\x02\u{a45}\u{a46}\x07\ + \x51\x02\x02\u{a46}\u{a47}\x07\x54\x02\x02\u{a47}\u{a48}\x07\x4d\x02\x02\ + \u{a48}\u{23e}\x03\x02\x02\x02\u{a49}\u{a4a}\x07\x59\x02\x02\u{a4a}\u{a4b}\ + \x07\x54\x02\x02\u{a4b}\u{a4c}\x07\x43\x02\x02\u{a4c}\u{a4d}\x07\x52\x02\ + \x02\u{a4d}\u{a4e}\x07\x52\x02\x02\u{a4e}\u{a4f}\x07\x47\x02\x02\u{a4f}\ + \u{a50}\x07\x54\x02\x02\u{a50}\u{240}\x03\x02\x02\x02\u{a51}\u{a52}\x07\ + \x59\x02\x02\u{a52}\u{a53}\x07\x54\x02\x02\u{a53}\u{a54}\x07\x4b\x02\x02\ + \u{a54}\u{a55}\x07\x56\x02\x02\u{a55}\u{a56}\x07\x47\x02\x02\u{a56}\u{242}\ + \x03\x02\x02\x02\u{a57}\u{a58}\x07\x5b\x02\x02\u{a58}\u{a59}\x07\x47\x02\ + \x02\u{a59}\u{a5a}\x07\x43\x02\x02\u{a5a}\u{a5b}\x07\x54\x02\x02\u{a5b}\ + \u{244}\x03\x02\x02\x02\u{a5c}\u{a5d}\x07\x5c\x02\x02\u{a5d}\u{a5e}\x07\ + \x51\x02\x02\u{a5e}\u{a5f}\x07\x50\x02\x02\u{a5f}\u{a60}\x07\x47\x02\x02\ + \u{a60}\u{246}\x03\x02\x02\x02\u{a61}\u{a62}\x07\x3f\x02\x02\u{a62}\u{248}\ + \x03\x02\x02\x02\u{a63}\u{a64}\x07\x3e\x02\x02\u{a64}\u{a68}\x07\x40\x02\ + \x02\u{a65}\u{a66}\x07\x23\x02\x02\u{a66}\u{a68}\x07\x3f\x02\x02\u{a67}\ + \u{a63}\x03\x02\x02\x02\u{a67}\u{a65}\x03\x02\x02\x02\u{a68}\u{24a}\x03\ + \x02\x02\x02\u{a69}\u{a6a}\x07\x3e\x02\x02\u{a6a}\u{24c}\x03\x02\x02\x02\ + \u{a6b}\u{a6c}\x07\x3e\x02\x02\u{a6c}\u{a6d}\x07\x3f\x02\x02\u{a6d}\u{24e}\ + \x03\x02\x02\x02\u{a6e}\u{a6f}\x07\x40\x02\x02\u{a6f}\u{250}\x03\x02\x02\ + \x02\u{a70}\u{a71}\x07\x40\x02\x02\u{a71}\u{a72}\x07\x3f\x02\x02\u{a72}\ + \u{252}\x03\x02\x02\x02\u{a73}\u{a74}\x07\x2d\x02\x02\u{a74}\u{254}\x03\ + \x02\x02\x02\u{a75}\u{a76}\x07\x2f\x02\x02\u{a76}\u{256}\x03\x02\x02\x02\ + \u{a77}\u{a78}\x07\x2c\x02\x02\u{a78}\u{258}\x03\x02\x02\x02\u{a79}\u{a7a}\ + \x07\x31\x02\x02\u{a7a}\u{25a}\x03\x02\x02\x02\u{a7b}\u{a7c}\x07\x27\x02\ + \x02\u{a7c}\u{25c}\x03\x02\x02\x02\u{a7d}\u{a7e}\x07\x7e\x02\x02\u{a7e}\ + \u{a7f}\x07\x7e\x02\x02\u{a7f}\u{25e}\x03\x02\x02\x02\u{a80}\u{a81}\x07\ + \x41\x02\x02\u{a81}\u{260}\x03\x02\x02\x02\u{a82}\u{a88}\x07\x29\x02\x02\ + \u{a83}\u{a87}\x0a\x02\x02\x02\u{a84}\u{a85}\x07\x29\x02\x02\u{a85}\u{a87}\ + \x07\x29\x02\x02\u{a86}\u{a83}\x03\x02\x02\x02\u{a86}\u{a84}\x03\x02\x02\ + \x02\u{a87}\u{a8a}\x03\x02\x02\x02\u{a88}\u{a86}\x03\x02\x02\x02\u{a88}\ + \u{a89}\x03\x02\x02\x02\u{a89}\u{a8b}\x03\x02\x02\x02\u{a8a}\u{a88}\x03\ + \x02\x02\x02\u{a8b}\u{a8c}\x07\x29\x02\x02\u{a8c}\u{262}\x03\x02\x02\x02\ + \u{a8d}\u{a8e}\x07\x57\x02\x02\u{a8e}\u{a8f}\x07\x28\x02\x02\u{a8f}\u{a90}\ + \x07\x29\x02\x02\u{a90}\u{a96}\x03\x02\x02\x02\u{a91}\u{a95}\x0a\x02\x02\ + \x02\u{a92}\u{a93}\x07\x29\x02\x02\u{a93}\u{a95}\x07\x29\x02\x02\u{a94}\ + \u{a91}\x03\x02\x02\x02\u{a94}\u{a92}\x03\x02\x02\x02\u{a95}\u{a98}\x03\ + \x02\x02\x02\u{a96}\u{a94}\x03\x02\x02\x02\u{a96}\u{a97}\x03\x02\x02\x02\ + \u{a97}\u{a99}\x03\x02\x02\x02\u{a98}\u{a96}\x03\x02\x02\x02\u{a99}\u{a9a}\ + \x07\x29\x02\x02\u{a9a}\u{264}\x03\x02\x02\x02\u{a9b}\u{a9c}\x07\x5a\x02\ + \x02\u{a9c}\u{a9d}\x07\x29\x02\x02\u{a9d}\u{aa1}\x03\x02\x02\x02\u{a9e}\ + \u{aa0}\x0a\x02\x02\x02\u{a9f}\u{a9e}\x03\x02\x02\x02\u{aa0}\u{aa3}\x03\ + \x02\x02\x02\u{aa1}\u{a9f}\x03\x02\x02\x02\u{aa1}\u{aa2}\x03\x02\x02\x02\ + \u{aa2}\u{aa4}\x03\x02\x02\x02\u{aa3}\u{aa1}\x03\x02\x02\x02\u{aa4}\u{aa5}\ + \x07\x29\x02\x02\u{aa5}\u{266}\x03\x02\x02\x02\u{aa6}\u{aa8}\x05\u{277}\ + \u{13c}\x02\u{aa7}\u{aa6}\x03\x02\x02\x02\u{aa8}\u{aa9}\x03\x02\x02\x02\ + \u{aa9}\u{aa7}\x03\x02\x02\x02\u{aa9}\u{aaa}\x03\x02\x02\x02\u{aaa}\u{268}\ + \x03\x02\x02\x02\u{aab}\u{aad}\x05\u{277}\u{13c}\x02\u{aac}\u{aab}\x03\ + \x02\x02\x02\u{aad}\u{aae}\x03\x02\x02\x02\u{aae}\u{aac}\x03\x02\x02\x02\ + \u{aae}\u{aaf}\x03\x02\x02\x02\u{aaf}\u{ab0}\x03\x02\x02\x02\u{ab0}\u{ab4}\ + \x07\x30\x02\x02\u{ab1}\u{ab3}\x05\u{277}\u{13c}\x02\u{ab2}\u{ab1}\x03\ + \x02\x02\x02\u{ab3}\u{ab6}\x03\x02\x02\x02\u{ab4}\u{ab2}\x03\x02\x02\x02\ + \u{ab4}\u{ab5}\x03\x02\x02\x02\u{ab5}\u{abe}\x03\x02\x02\x02\u{ab6}\u{ab4}\ + \x03\x02\x02\x02\u{ab7}\u{ab9}\x07\x30\x02\x02\u{ab8}\u{aba}\x05\u{277}\ + \u{13c}\x02\u{ab9}\u{ab8}\x03\x02\x02\x02\u{aba}\u{abb}\x03\x02\x02\x02\ + \u{abb}\u{ab9}\x03\x02\x02\x02\u{abb}\u{abc}\x03\x02\x02\x02\u{abc}\u{abe}\ + \x03\x02\x02\x02\u{abd}\u{aac}\x03\x02\x02\x02\u{abd}\u{ab7}\x03\x02\x02\ + \x02\u{abe}\u{26a}\x03\x02\x02\x02\u{abf}\u{ac1}\x05\u{277}\u{13c}\x02\ + \u{ac0}\u{abf}\x03\x02\x02\x02\u{ac1}\u{ac2}\x03\x02\x02\x02\u{ac2}\u{ac0}\ + \x03\x02\x02\x02\u{ac2}\u{ac3}\x03\x02\x02\x02\u{ac3}\u{acb}\x03\x02\x02\ + \x02\u{ac4}\u{ac8}\x07\x30\x02\x02\u{ac5}\u{ac7}\x05\u{277}\u{13c}\x02\ + \u{ac6}\u{ac5}\x03\x02\x02\x02\u{ac7}\u{aca}\x03\x02\x02\x02\u{ac8}\u{ac6}\ + \x03\x02\x02\x02\u{ac8}\u{ac9}\x03\x02\x02\x02\u{ac9}\u{acc}\x03\x02\x02\ + \x02\u{aca}\u{ac8}\x03\x02\x02\x02\u{acb}\u{ac4}\x03\x02\x02\x02\u{acb}\ + \u{acc}\x03\x02\x02\x02\u{acc}\u{acd}\x03\x02\x02\x02\u{acd}\u{ace}\x05\ + \u{275}\u{13b}\x02\u{ace}\u{ad8}\x03\x02\x02\x02\u{acf}\u{ad1}\x07\x30\ + \x02\x02\u{ad0}\u{ad2}\x05\u{277}\u{13c}\x02\u{ad1}\u{ad0}\x03\x02\x02\ + \x02\u{ad2}\u{ad3}\x03\x02\x02\x02\u{ad3}\u{ad1}\x03\x02\x02\x02\u{ad3}\ + \u{ad4}\x03\x02\x02\x02\u{ad4}\u{ad5}\x03\x02\x02\x02\u{ad5}\u{ad6}\x05\ + \u{275}\u{13b}\x02\u{ad6}\u{ad8}\x03\x02\x02\x02\u{ad7}\u{ac0}\x03\x02\ + \x02\x02\u{ad7}\u{acf}\x03\x02\x02\x02\u{ad8}\u{26c}\x03\x02\x02\x02\u{ad9}\ + \u{adc}\x05\u{279}\u{13d}\x02\u{ada}\u{adc}\x07\x61\x02\x02\u{adb}\u{ad9}\ + \x03\x02\x02\x02\u{adb}\u{ada}\x03\x02\x02\x02\u{adc}\u{ae2}\x03\x02\x02\ + \x02\u{add}\u{ae1}\x05\u{279}\u{13d}\x02\u{ade}\u{ae1}\x05\u{277}\u{13c}\ + \x02\u{adf}\u{ae1}\x07\x61\x02\x02\u{ae0}\u{add}\x03\x02\x02\x02\u{ae0}\ + \u{ade}\x03\x02\x02\x02\u{ae0}\u{adf}\x03\x02\x02\x02\u{ae1}\u{ae4}\x03\ + \x02\x02\x02\u{ae2}\u{ae0}\x03\x02\x02\x02\u{ae2}\u{ae3}\x03\x02\x02\x02\ + \u{ae3}\u{26e}\x03\x02\x02\x02\u{ae4}\u{ae2}\x03\x02\x02\x02\u{ae5}\u{ae9}\ + \x05\u{277}\u{13c}\x02\u{ae6}\u{aea}\x05\u{279}\u{13d}\x02\u{ae7}\u{aea}\ + \x05\u{277}\u{13c}\x02\u{ae8}\u{aea}\x07\x61\x02\x02\u{ae9}\u{ae6}\x03\ + \x02\x02\x02\u{ae9}\u{ae7}\x03\x02\x02\x02\u{ae9}\u{ae8}\x03\x02\x02\x02\ + \u{aea}\u{aeb}\x03\x02\x02\x02\u{aeb}\u{ae9}\x03\x02\x02\x02\u{aeb}\u{aec}\ + \x03\x02\x02\x02\u{aec}\u{270}\x03\x02\x02\x02\u{aed}\u{af3}\x07\x24\x02\ + \x02\u{aee}\u{af2}\x0a\x03\x02\x02\u{aef}\u{af0}\x07\x24\x02\x02\u{af0}\ + \u{af2}\x07\x24\x02\x02\u{af1}\u{aee}\x03\x02\x02\x02\u{af1}\u{aef}\x03\ + \x02\x02\x02\u{af2}\u{af5}\x03\x02\x02\x02\u{af3}\u{af1}\x03\x02\x02\x02\ + \u{af3}\u{af4}\x03\x02\x02\x02\u{af4}\u{af6}\x03\x02\x02\x02\u{af5}\u{af3}\ + \x03\x02\x02\x02\u{af6}\u{af7}\x07\x24\x02\x02\u{af7}\u{272}\x03\x02\x02\ + \x02\u{af8}\u{afe}\x07\x62\x02\x02\u{af9}\u{afd}\x0a\x04\x02\x02\u{afa}\ + \u{afb}\x07\x62\x02\x02\u{afb}\u{afd}\x07\x62\x02\x02\u{afc}\u{af9}\x03\ + \x02\x02\x02\u{afc}\u{afa}\x03\x02\x02\x02\u{afd}\u{b00}\x03\x02\x02\x02\ + \u{afe}\u{afc}\x03\x02\x02\x02\u{afe}\u{aff}\x03\x02\x02\x02\u{aff}\u{b01}\ + \x03\x02\x02\x02\u{b00}\u{afe}\x03\x02\x02\x02\u{b01}\u{b02}\x07\x62\x02\ + \x02\u{b02}\u{274}\x03\x02\x02\x02\u{b03}\u{b05}\x07\x47\x02\x02\u{b04}\ + \u{b06}\x09\x05\x02\x02\u{b05}\u{b04}\x03\x02\x02\x02\u{b05}\u{b06}\x03\ + \x02\x02\x02\u{b06}\u{b08}\x03\x02\x02\x02\u{b07}\u{b09}\x05\u{277}\u{13c}\ + \x02\u{b08}\u{b07}\x03\x02\x02\x02\u{b09}\u{b0a}\x03\x02\x02\x02\u{b0a}\ + \u{b08}\x03\x02\x02\x02\u{b0a}\u{b0b}\x03\x02\x02\x02\u{b0b}\u{276}\x03\ + \x02\x02\x02\u{b0c}\u{b0d}\x09\x06\x02\x02\u{b0d}\u{278}\x03\x02\x02\x02\ + \u{b0e}\u{b0f}\x09\x07\x02\x02\u{b0f}\u{27a}\x03\x02\x02\x02\u{b10}\u{b11}\ + \x07\x2f\x02\x02\u{b11}\u{b12}\x07\x2f\x02\x02\u{b12}\u{b16}\x03\x02\x02\ + \x02\u{b13}\u{b15}\x0a\x08\x02\x02\u{b14}\u{b13}\x03\x02\x02\x02\u{b15}\ + \u{b18}\x03\x02\x02\x02\u{b16}\u{b14}\x03\x02\x02\x02\u{b16}\u{b17}\x03\ + \x02\x02\x02\u{b17}\u{b1a}\x03\x02\x02\x02\u{b18}\u{b16}\x03\x02\x02\x02\ + \u{b19}\u{b1b}\x07\x0f\x02\x02\u{b1a}\u{b19}\x03\x02\x02\x02\u{b1a}\u{b1b}\ + \x03\x02\x02\x02\u{b1b}\u{b1d}\x03\x02\x02\x02\u{b1c}\u{b1e}\x07\x0c\x02\ + \x02\u{b1d}\u{b1c}\x03\x02\x02\x02\u{b1d}\u{b1e}\x03\x02\x02\x02\u{b1e}\ + \u{b1f}\x03\x02\x02\x02\u{b1f}\u{b20}\x08\u{13e}\x02\x02\u{b20}\u{27c}\ + \x03\x02\x02\x02\u{b21}\u{b22}\x07\x31\x02\x02\u{b22}\u{b23}\x07\x2c\x02\ + \x02\u{b23}\u{b27}\x03\x02\x02\x02\u{b24}\u{b26}\x0b\x02\x02\x02\u{b25}\ + \u{b24}\x03\x02\x02\x02\u{b26}\u{b29}\x03\x02\x02\x02\u{b27}\u{b28}\x03\ + \x02\x02\x02\u{b27}\u{b25}\x03\x02\x02\x02\u{b28}\u{b2a}\x03\x02\x02\x02\ + \u{b29}\u{b27}\x03\x02\x02\x02\u{b2a}\u{b2b}\x07\x2c\x02\x02\u{b2b}\u{b2c}\ + \x07\x31\x02\x02\u{b2c}\u{b2d}\x03\x02\x02\x02\u{b2d}\u{b2e}\x08\u{13f}\ + \x02\x02\u{b2e}\u{27e}\x03\x02\x02\x02\u{b2f}\u{b31}\x09\x09\x02\x02\u{b30}\ + \u{b2f}\x03\x02\x02\x02\u{b31}\u{b32}\x03\x02\x02\x02\u{b32}\u{b30}\x03\ + \x02\x02\x02\u{b32}\u{b33}\x03\x02\x02\x02\u{b33}\u{b34}\x03\x02\x02\x02\ + \u{b34}\u{b35}\x08\u{140}\x02\x02\u{b35}\u{280}\x03\x02\x02\x02\u{b36}\ + \u{b37}\x0b\x02\x02\x02\u{b37}\u{282}\x03\x02\x02\x02\x23\x02\u{a67}\u{a86}\ + \u{a88}\u{a94}\u{a96}\u{aa1}\u{aa9}\u{aae}\u{ab4}\u{abb}\u{abd}\u{ac2}\ + \u{ac8}\u{acb}\u{ad3}\u{ad7}\u{adb}\u{ae0}\u{ae2}\u{ae9}\u{aeb}\u{af1}\ + \u{af3}\u{afc}\u{afe}\u{b05}\u{b0a}\u{b16}\u{b1a}\u{b1d}\u{b27}\u{b32}\ + \x03\x02\x03\x02"; diff --git a/datafusion/sql/src/antlr/presto/prestolistener.rs b/datafusion/sql/src/antlr/presto/prestolistener.rs new file mode 100644 index 0000000000000..bf71d3ada58e1 --- /dev/null +++ b/datafusion/sql/src/antlr/presto/prestolistener.rs @@ -0,0 +1,3332 @@ +#![allow(nonstandard_style)] +// Generated from Presto.g4 by ANTLR 4.8 +use antlr_rust::tree::ParseTreeListener; +use super::prestoparser::*; + +pub trait PrestoListener<'input> : ParseTreeListener<'input,PrestoParserContextType>{ +/** + * Enter a parse tree produced by {@link PrestoParser#singleStatement}. + * @param ctx the parse tree + */ +fn enter_singleStatement(&mut self, _ctx: &SingleStatementContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#singleStatement}. + * @param ctx the parse tree + */ +fn exit_singleStatement(&mut self, _ctx: &SingleStatementContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#standaloneExpression}. + * @param ctx the parse tree + */ +fn enter_standaloneExpression(&mut self, _ctx: &StandaloneExpressionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#standaloneExpression}. + * @param ctx the parse tree + */ +fn exit_standaloneExpression(&mut self, _ctx: &StandaloneExpressionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#standalonePathSpecification}. + * @param ctx the parse tree + */ +fn enter_standalonePathSpecification(&mut self, _ctx: &StandalonePathSpecificationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#standalonePathSpecification}. + * @param ctx the parse tree + */ +fn exit_standalonePathSpecification(&mut self, _ctx: &StandalonePathSpecificationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#standaloneType}. + * @param ctx the parse tree + */ +fn enter_standaloneType(&mut self, _ctx: &StandaloneTypeContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#standaloneType}. + * @param ctx the parse tree + */ +fn exit_standaloneType(&mut self, _ctx: &StandaloneTypeContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#standaloneRowPattern}. + * @param ctx the parse tree + */ +fn enter_standaloneRowPattern(&mut self, _ctx: &StandaloneRowPatternContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#standaloneRowPattern}. + * @param ctx the parse tree + */ +fn exit_standaloneRowPattern(&mut self, _ctx: &StandaloneRowPatternContext<'input>) { } +/** + * Enter a parse tree produced by the {@code statementDefault} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_statementDefault(&mut self, _ctx: &StatementDefaultContext<'input>) { } +/** + * Exit a parse tree produced by the {@code statementDefault} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_statementDefault(&mut self, _ctx: &StatementDefaultContext<'input>) { } +/** + * Enter a parse tree produced by the {@code use} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_use(&mut self, _ctx: &UseContext<'input>) { } +/** + * Exit a parse tree produced by the {@code use} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_use(&mut self, _ctx: &UseContext<'input>) { } +/** + * Enter a parse tree produced by the {@code createSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_createSchema(&mut self, _ctx: &CreateSchemaContext<'input>) { } +/** + * Exit a parse tree produced by the {@code createSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_createSchema(&mut self, _ctx: &CreateSchemaContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dropSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_dropSchema(&mut self, _ctx: &DropSchemaContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dropSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_dropSchema(&mut self, _ctx: &DropSchemaContext<'input>) { } +/** + * Enter a parse tree produced by the {@code renameSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_renameSchema(&mut self, _ctx: &RenameSchemaContext<'input>) { } +/** + * Exit a parse tree produced by the {@code renameSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_renameSchema(&mut self, _ctx: &RenameSchemaContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setSchemaAuthorization} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setSchemaAuthorization(&mut self, _ctx: &SetSchemaAuthorizationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setSchemaAuthorization} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setSchemaAuthorization(&mut self, _ctx: &SetSchemaAuthorizationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code createTableAsSelect} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_createTableAsSelect(&mut self, _ctx: &CreateTableAsSelectContext<'input>) { } +/** + * Exit a parse tree produced by the {@code createTableAsSelect} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_createTableAsSelect(&mut self, _ctx: &CreateTableAsSelectContext<'input>) { } +/** + * Enter a parse tree produced by the {@code createTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_createTable(&mut self, _ctx: &CreateTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code createTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_createTable(&mut self, _ctx: &CreateTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dropTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_dropTable(&mut self, _ctx: &DropTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dropTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_dropTable(&mut self, _ctx: &DropTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code insertInto} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_insertInto(&mut self, _ctx: &InsertIntoContext<'input>) { } +/** + * Exit a parse tree produced by the {@code insertInto} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_insertInto(&mut self, _ctx: &InsertIntoContext<'input>) { } +/** + * Enter a parse tree produced by the {@code delete} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_delete(&mut self, _ctx: &DeleteContext<'input>) { } +/** + * Exit a parse tree produced by the {@code delete} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_delete(&mut self, _ctx: &DeleteContext<'input>) { } +/** + * Enter a parse tree produced by the {@code truncateTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_truncateTable(&mut self, _ctx: &TruncateTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code truncateTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_truncateTable(&mut self, _ctx: &TruncateTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code commentTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_commentTable(&mut self, _ctx: &CommentTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code commentTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_commentTable(&mut self, _ctx: &CommentTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code commentView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_commentView(&mut self, _ctx: &CommentViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code commentView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_commentView(&mut self, _ctx: &CommentViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code commentColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_commentColumn(&mut self, _ctx: &CommentColumnContext<'input>) { } +/** + * Exit a parse tree produced by the {@code commentColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_commentColumn(&mut self, _ctx: &CommentColumnContext<'input>) { } +/** + * Enter a parse tree produced by the {@code renameTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_renameTable(&mut self, _ctx: &RenameTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code renameTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_renameTable(&mut self, _ctx: &RenameTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code addColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_addColumn(&mut self, _ctx: &AddColumnContext<'input>) { } +/** + * Exit a parse tree produced by the {@code addColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_addColumn(&mut self, _ctx: &AddColumnContext<'input>) { } +/** + * Enter a parse tree produced by the {@code renameColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_renameColumn(&mut self, _ctx: &RenameColumnContext<'input>) { } +/** + * Exit a parse tree produced by the {@code renameColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_renameColumn(&mut self, _ctx: &RenameColumnContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dropColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_dropColumn(&mut self, _ctx: &DropColumnContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dropColumn} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_dropColumn(&mut self, _ctx: &DropColumnContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setColumnType} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setColumnType(&mut self, _ctx: &SetColumnTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setColumnType} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setColumnType(&mut self, _ctx: &SetColumnTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setTableAuthorization} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setTableAuthorization(&mut self, _ctx: &SetTableAuthorizationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setTableAuthorization} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setTableAuthorization(&mut self, _ctx: &SetTableAuthorizationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setTableProperties} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setTableProperties(&mut self, _ctx: &SetTablePropertiesContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setTableProperties} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setTableProperties(&mut self, _ctx: &SetTablePropertiesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code tableExecute} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_tableExecute(&mut self, _ctx: &TableExecuteContext<'input>) { } +/** + * Exit a parse tree produced by the {@code tableExecute} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_tableExecute(&mut self, _ctx: &TableExecuteContext<'input>) { } +/** + * Enter a parse tree produced by the {@code analyze} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_analyze(&mut self, _ctx: &AnalyzeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code analyze} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_analyze(&mut self, _ctx: &AnalyzeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code createMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_createMaterializedView(&mut self, _ctx: &CreateMaterializedViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code createMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_createMaterializedView(&mut self, _ctx: &CreateMaterializedViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code createView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_createView(&mut self, _ctx: &CreateViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code createView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_createView(&mut self, _ctx: &CreateViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code refreshMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_refreshMaterializedView(&mut self, _ctx: &RefreshMaterializedViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code refreshMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_refreshMaterializedView(&mut self, _ctx: &RefreshMaterializedViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dropMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_dropMaterializedView(&mut self, _ctx: &DropMaterializedViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dropMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_dropMaterializedView(&mut self, _ctx: &DropMaterializedViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code renameMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_renameMaterializedView(&mut self, _ctx: &RenameMaterializedViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code renameMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_renameMaterializedView(&mut self, _ctx: &RenameMaterializedViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setMaterializedViewProperties} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setMaterializedViewProperties(&mut self, _ctx: &SetMaterializedViewPropertiesContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setMaterializedViewProperties} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setMaterializedViewProperties(&mut self, _ctx: &SetMaterializedViewPropertiesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dropView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_dropView(&mut self, _ctx: &DropViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dropView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_dropView(&mut self, _ctx: &DropViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code renameView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_renameView(&mut self, _ctx: &RenameViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code renameView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_renameView(&mut self, _ctx: &RenameViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setViewAuthorization} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setViewAuthorization(&mut self, _ctx: &SetViewAuthorizationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setViewAuthorization} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setViewAuthorization(&mut self, _ctx: &SetViewAuthorizationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code call} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_call(&mut self, _ctx: &CallContext<'input>) { } +/** + * Exit a parse tree produced by the {@code call} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_call(&mut self, _ctx: &CallContext<'input>) { } +/** + * Enter a parse tree produced by the {@code createRole} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_createRole(&mut self, _ctx: &CreateRoleContext<'input>) { } +/** + * Exit a parse tree produced by the {@code createRole} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_createRole(&mut self, _ctx: &CreateRoleContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dropRole} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_dropRole(&mut self, _ctx: &DropRoleContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dropRole} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_dropRole(&mut self, _ctx: &DropRoleContext<'input>) { } +/** + * Enter a parse tree produced by the {@code grantRoles} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_grantRoles(&mut self, _ctx: &GrantRolesContext<'input>) { } +/** + * Exit a parse tree produced by the {@code grantRoles} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_grantRoles(&mut self, _ctx: &GrantRolesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code revokeRoles} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_revokeRoles(&mut self, _ctx: &RevokeRolesContext<'input>) { } +/** + * Exit a parse tree produced by the {@code revokeRoles} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_revokeRoles(&mut self, _ctx: &RevokeRolesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setRole} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setRole(&mut self, _ctx: &SetRoleContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setRole} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setRole(&mut self, _ctx: &SetRoleContext<'input>) { } +/** + * Enter a parse tree produced by the {@code grant} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_grant(&mut self, _ctx: &GrantContext<'input>) { } +/** + * Exit a parse tree produced by the {@code grant} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_grant(&mut self, _ctx: &GrantContext<'input>) { } +/** + * Enter a parse tree produced by the {@code deny} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_deny(&mut self, _ctx: &DenyContext<'input>) { } +/** + * Exit a parse tree produced by the {@code deny} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_deny(&mut self, _ctx: &DenyContext<'input>) { } +/** + * Enter a parse tree produced by the {@code revoke} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_revoke(&mut self, _ctx: &RevokeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code revoke} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_revoke(&mut self, _ctx: &RevokeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showGrants} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showGrants(&mut self, _ctx: &ShowGrantsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showGrants} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showGrants(&mut self, _ctx: &ShowGrantsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code explain} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_explain(&mut self, _ctx: &ExplainContext<'input>) { } +/** + * Exit a parse tree produced by the {@code explain} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_explain(&mut self, _ctx: &ExplainContext<'input>) { } +/** + * Enter a parse tree produced by the {@code explainAnalyze} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_explainAnalyze(&mut self, _ctx: &ExplainAnalyzeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code explainAnalyze} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_explainAnalyze(&mut self, _ctx: &ExplainAnalyzeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showCreateTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showCreateTable(&mut self, _ctx: &ShowCreateTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showCreateTable} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showCreateTable(&mut self, _ctx: &ShowCreateTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showCreateSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showCreateSchema(&mut self, _ctx: &ShowCreateSchemaContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showCreateSchema} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showCreateSchema(&mut self, _ctx: &ShowCreateSchemaContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showCreateView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showCreateView(&mut self, _ctx: &ShowCreateViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showCreateView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showCreateView(&mut self, _ctx: &ShowCreateViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showCreateMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showCreateMaterializedView(&mut self, _ctx: &ShowCreateMaterializedViewContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showCreateMaterializedView} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showCreateMaterializedView(&mut self, _ctx: &ShowCreateMaterializedViewContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showTables} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showTables(&mut self, _ctx: &ShowTablesContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showTables} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showTables(&mut self, _ctx: &ShowTablesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showSchemas} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showSchemas(&mut self, _ctx: &ShowSchemasContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showSchemas} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showSchemas(&mut self, _ctx: &ShowSchemasContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showCatalogs} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showCatalogs(&mut self, _ctx: &ShowCatalogsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showCatalogs} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showCatalogs(&mut self, _ctx: &ShowCatalogsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showColumns} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showColumns(&mut self, _ctx: &ShowColumnsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showColumns} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showColumns(&mut self, _ctx: &ShowColumnsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showStats} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showStats(&mut self, _ctx: &ShowStatsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showStats} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showStats(&mut self, _ctx: &ShowStatsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showStatsForQuery} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showStatsForQuery(&mut self, _ctx: &ShowStatsForQueryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showStatsForQuery} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showStatsForQuery(&mut self, _ctx: &ShowStatsForQueryContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showRoles} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showRoles(&mut self, _ctx: &ShowRolesContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showRoles} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showRoles(&mut self, _ctx: &ShowRolesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showRoleGrants} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showRoleGrants(&mut self, _ctx: &ShowRoleGrantsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showRoleGrants} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showRoleGrants(&mut self, _ctx: &ShowRoleGrantsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showFunctions} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showFunctions(&mut self, _ctx: &ShowFunctionsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showFunctions} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showFunctions(&mut self, _ctx: &ShowFunctionsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code showSession} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_showSession(&mut self, _ctx: &ShowSessionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code showSession} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_showSession(&mut self, _ctx: &ShowSessionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setSession} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setSession(&mut self, _ctx: &SetSessionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setSession} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setSession(&mut self, _ctx: &SetSessionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code resetSession} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_resetSession(&mut self, _ctx: &ResetSessionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code resetSession} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_resetSession(&mut self, _ctx: &ResetSessionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code startTransaction} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_startTransaction(&mut self, _ctx: &StartTransactionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code startTransaction} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_startTransaction(&mut self, _ctx: &StartTransactionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code commit} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_commit(&mut self, _ctx: &CommitContext<'input>) { } +/** + * Exit a parse tree produced by the {@code commit} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_commit(&mut self, _ctx: &CommitContext<'input>) { } +/** + * Enter a parse tree produced by the {@code rollback} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_rollback(&mut self, _ctx: &RollbackContext<'input>) { } +/** + * Exit a parse tree produced by the {@code rollback} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_rollback(&mut self, _ctx: &RollbackContext<'input>) { } +/** + * Enter a parse tree produced by the {@code prepare} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_prepare(&mut self, _ctx: &PrepareContext<'input>) { } +/** + * Exit a parse tree produced by the {@code prepare} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_prepare(&mut self, _ctx: &PrepareContext<'input>) { } +/** + * Enter a parse tree produced by the {@code deallocate} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_deallocate(&mut self, _ctx: &DeallocateContext<'input>) { } +/** + * Exit a parse tree produced by the {@code deallocate} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_deallocate(&mut self, _ctx: &DeallocateContext<'input>) { } +/** + * Enter a parse tree produced by the {@code execute} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_execute(&mut self, _ctx: &ExecuteContext<'input>) { } +/** + * Exit a parse tree produced by the {@code execute} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_execute(&mut self, _ctx: &ExecuteContext<'input>) { } +/** + * Enter a parse tree produced by the {@code describeInput} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_describeInput(&mut self, _ctx: &DescribeInputContext<'input>) { } +/** + * Exit a parse tree produced by the {@code describeInput} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_describeInput(&mut self, _ctx: &DescribeInputContext<'input>) { } +/** + * Enter a parse tree produced by the {@code describeOutput} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_describeOutput(&mut self, _ctx: &DescribeOutputContext<'input>) { } +/** + * Exit a parse tree produced by the {@code describeOutput} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_describeOutput(&mut self, _ctx: &DescribeOutputContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setPath} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setPath(&mut self, _ctx: &SetPathContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setPath} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setPath(&mut self, _ctx: &SetPathContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setTimeZone} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_setTimeZone(&mut self, _ctx: &SetTimeZoneContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setTimeZone} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_setTimeZone(&mut self, _ctx: &SetTimeZoneContext<'input>) { } +/** + * Enter a parse tree produced by the {@code update} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_update(&mut self, _ctx: &UpdateContext<'input>) { } +/** + * Exit a parse tree produced by the {@code update} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_update(&mut self, _ctx: &UpdateContext<'input>) { } +/** + * Enter a parse tree produced by the {@code merge} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn enter_merge(&mut self, _ctx: &MergeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code merge} + * labeled alternative in {@link PrestoParser#statement}. + * @param ctx the parse tree + */ +fn exit_merge(&mut self, _ctx: &MergeContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#query}. + * @param ctx the parse tree + */ +fn enter_query(&mut self, _ctx: &QueryContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#query}. + * @param ctx the parse tree + */ +fn exit_query(&mut self, _ctx: &QueryContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#with}. + * @param ctx the parse tree + */ +fn enter_with(&mut self, _ctx: &WithContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#with}. + * @param ctx the parse tree + */ +fn exit_with(&mut self, _ctx: &WithContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#tableElement}. + * @param ctx the parse tree + */ +fn enter_tableElement(&mut self, _ctx: &TableElementContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#tableElement}. + * @param ctx the parse tree + */ +fn exit_tableElement(&mut self, _ctx: &TableElementContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#columnDefinition}. + * @param ctx the parse tree + */ +fn enter_columnDefinition(&mut self, _ctx: &ColumnDefinitionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#columnDefinition}. + * @param ctx the parse tree + */ +fn exit_columnDefinition(&mut self, _ctx: &ColumnDefinitionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#likeClause}. + * @param ctx the parse tree + */ +fn enter_likeClause(&mut self, _ctx: &LikeClauseContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#likeClause}. + * @param ctx the parse tree + */ +fn exit_likeClause(&mut self, _ctx: &LikeClauseContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#properties}. + * @param ctx the parse tree + */ +fn enter_properties(&mut self, _ctx: &PropertiesContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#properties}. + * @param ctx the parse tree + */ +fn exit_properties(&mut self, _ctx: &PropertiesContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#propertyAssignments}. + * @param ctx the parse tree + */ +fn enter_propertyAssignments(&mut self, _ctx: &PropertyAssignmentsContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#propertyAssignments}. + * @param ctx the parse tree + */ +fn exit_propertyAssignments(&mut self, _ctx: &PropertyAssignmentsContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#property}. + * @param ctx the parse tree + */ +fn enter_property(&mut self, _ctx: &PropertyContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#property}. + * @param ctx the parse tree + */ +fn exit_property(&mut self, _ctx: &PropertyContext<'input>) { } +/** + * Enter a parse tree produced by the {@code defaultPropertyValue} + * labeled alternative in {@link PrestoParser#propertyValue}. + * @param ctx the parse tree + */ +fn enter_defaultPropertyValue(&mut self, _ctx: &DefaultPropertyValueContext<'input>) { } +/** + * Exit a parse tree produced by the {@code defaultPropertyValue} + * labeled alternative in {@link PrestoParser#propertyValue}. + * @param ctx the parse tree + */ +fn exit_defaultPropertyValue(&mut self, _ctx: &DefaultPropertyValueContext<'input>) { } +/** + * Enter a parse tree produced by the {@code nonDefaultPropertyValue} + * labeled alternative in {@link PrestoParser#propertyValue}. + * @param ctx the parse tree + */ +fn enter_nonDefaultPropertyValue(&mut self, _ctx: &NonDefaultPropertyValueContext<'input>) { } +/** + * Exit a parse tree produced by the {@code nonDefaultPropertyValue} + * labeled alternative in {@link PrestoParser#propertyValue}. + * @param ctx the parse tree + */ +fn exit_nonDefaultPropertyValue(&mut self, _ctx: &NonDefaultPropertyValueContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#queryNoWith}. + * @param ctx the parse tree + */ +fn enter_queryNoWith(&mut self, _ctx: &QueryNoWithContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#queryNoWith}. + * @param ctx the parse tree + */ +fn exit_queryNoWith(&mut self, _ctx: &QueryNoWithContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#limitRowCount}. + * @param ctx the parse tree + */ +fn enter_limitRowCount(&mut self, _ctx: &LimitRowCountContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#limitRowCount}. + * @param ctx the parse tree + */ +fn exit_limitRowCount(&mut self, _ctx: &LimitRowCountContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#rowCount}. + * @param ctx the parse tree + */ +fn enter_rowCount(&mut self, _ctx: &RowCountContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#rowCount}. + * @param ctx the parse tree + */ +fn exit_rowCount(&mut self, _ctx: &RowCountContext<'input>) { } +/** + * Enter a parse tree produced by the {@code queryTermDefault} + * labeled alternative in {@link PrestoParser#queryTerm}. + * @param ctx the parse tree + */ +fn enter_queryTermDefault(&mut self, _ctx: &QueryTermDefaultContext<'input>) { } +/** + * Exit a parse tree produced by the {@code queryTermDefault} + * labeled alternative in {@link PrestoParser#queryTerm}. + * @param ctx the parse tree + */ +fn exit_queryTermDefault(&mut self, _ctx: &QueryTermDefaultContext<'input>) { } +/** + * Enter a parse tree produced by the {@code setOperation} + * labeled alternative in {@link PrestoParser#queryTerm}. + * @param ctx the parse tree + */ +fn enter_setOperation(&mut self, _ctx: &SetOperationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code setOperation} + * labeled alternative in {@link PrestoParser#queryTerm}. + * @param ctx the parse tree + */ +fn exit_setOperation(&mut self, _ctx: &SetOperationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code queryPrimaryDefault} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn enter_queryPrimaryDefault(&mut self, _ctx: &QueryPrimaryDefaultContext<'input>) { } +/** + * Exit a parse tree produced by the {@code queryPrimaryDefault} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn exit_queryPrimaryDefault(&mut self, _ctx: &QueryPrimaryDefaultContext<'input>) { } +/** + * Enter a parse tree produced by the {@code table} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn enter_table(&mut self, _ctx: &TableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code table} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn exit_table(&mut self, _ctx: &TableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code inlineTable} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn enter_inlineTable(&mut self, _ctx: &InlineTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code inlineTable} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn exit_inlineTable(&mut self, _ctx: &InlineTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code subquery} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn enter_subquery(&mut self, _ctx: &SubqueryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code subquery} + * labeled alternative in {@link PrestoParser#queryPrimary}. + * @param ctx the parse tree + */ +fn exit_subquery(&mut self, _ctx: &SubqueryContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#sortItem}. + * @param ctx the parse tree + */ +fn enter_sortItem(&mut self, _ctx: &SortItemContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#sortItem}. + * @param ctx the parse tree + */ +fn exit_sortItem(&mut self, _ctx: &SortItemContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#querySpecification}. + * @param ctx the parse tree + */ +fn enter_querySpecification(&mut self, _ctx: &QuerySpecificationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#querySpecification}. + * @param ctx the parse tree + */ +fn exit_querySpecification(&mut self, _ctx: &QuerySpecificationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#querySelectItems}. + * @param ctx the parse tree + */ +fn enter_querySelectItems(&mut self, _ctx: &QuerySelectItemsContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#querySelectItems}. + * @param ctx the parse tree + */ +fn exit_querySelectItems(&mut self, _ctx: &QuerySelectItemsContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#groupBy}. + * @param ctx the parse tree + */ +fn enter_groupBy(&mut self, _ctx: &GroupByContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#groupBy}. + * @param ctx the parse tree + */ +fn exit_groupBy(&mut self, _ctx: &GroupByContext<'input>) { } +/** + * Enter a parse tree produced by the {@code singleGroupingSet} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn enter_singleGroupingSet(&mut self, _ctx: &SingleGroupingSetContext<'input>) { } +/** + * Exit a parse tree produced by the {@code singleGroupingSet} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn exit_singleGroupingSet(&mut self, _ctx: &SingleGroupingSetContext<'input>) { } +/** + * Enter a parse tree produced by the {@code rollup} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn enter_rollup(&mut self, _ctx: &RollupContext<'input>) { } +/** + * Exit a parse tree produced by the {@code rollup} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn exit_rollup(&mut self, _ctx: &RollupContext<'input>) { } +/** + * Enter a parse tree produced by the {@code cube} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn enter_cube(&mut self, _ctx: &CubeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code cube} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn exit_cube(&mut self, _ctx: &CubeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code multipleGroupingSets} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn enter_multipleGroupingSets(&mut self, _ctx: &MultipleGroupingSetsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code multipleGroupingSets} + * labeled alternative in {@link PrestoParser#groupingElement}. + * @param ctx the parse tree + */ +fn exit_multipleGroupingSets(&mut self, _ctx: &MultipleGroupingSetsContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#groupingSet}. + * @param ctx the parse tree + */ +fn enter_groupingSet(&mut self, _ctx: &GroupingSetContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#groupingSet}. + * @param ctx the parse tree + */ +fn exit_groupingSet(&mut self, _ctx: &GroupingSetContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#windowDefinition}. + * @param ctx the parse tree + */ +fn enter_windowDefinition(&mut self, _ctx: &WindowDefinitionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#windowDefinition}. + * @param ctx the parse tree + */ +fn exit_windowDefinition(&mut self, _ctx: &WindowDefinitionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#windowSpecification}. + * @param ctx the parse tree + */ +fn enter_windowSpecification(&mut self, _ctx: &WindowSpecificationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#windowSpecification}. + * @param ctx the parse tree + */ +fn exit_windowSpecification(&mut self, _ctx: &WindowSpecificationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#namedQuery}. + * @param ctx the parse tree + */ +fn enter_namedQuery(&mut self, _ctx: &NamedQueryContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#namedQuery}. + * @param ctx the parse tree + */ +fn exit_namedQuery(&mut self, _ctx: &NamedQueryContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#setQuantifier}. + * @param ctx the parse tree + */ +fn enter_setQuantifier(&mut self, _ctx: &SetQuantifierContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#setQuantifier}. + * @param ctx the parse tree + */ +fn exit_setQuantifier(&mut self, _ctx: &SetQuantifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code selectSingle} + * labeled alternative in {@link PrestoParser#selectItem}. + * @param ctx the parse tree + */ +fn enter_selectSingle(&mut self, _ctx: &SelectSingleContext<'input>) { } +/** + * Exit a parse tree produced by the {@code selectSingle} + * labeled alternative in {@link PrestoParser#selectItem}. + * @param ctx the parse tree + */ +fn exit_selectSingle(&mut self, _ctx: &SelectSingleContext<'input>) { } +/** + * Enter a parse tree produced by the {@code selectAll} + * labeled alternative in {@link PrestoParser#selectItem}. + * @param ctx the parse tree + */ +fn enter_selectAll(&mut self, _ctx: &SelectAllContext<'input>) { } +/** + * Exit a parse tree produced by the {@code selectAll} + * labeled alternative in {@link PrestoParser#selectItem}. + * @param ctx the parse tree + */ +fn exit_selectAll(&mut self, _ctx: &SelectAllContext<'input>) { } +/** + * Enter a parse tree produced by the {@code relationDefault} + * labeled alternative in {@link PrestoParser#relation}. + * @param ctx the parse tree + */ +fn enter_relationDefault(&mut self, _ctx: &RelationDefaultContext<'input>) { } +/** + * Exit a parse tree produced by the {@code relationDefault} + * labeled alternative in {@link PrestoParser#relation}. + * @param ctx the parse tree + */ +fn exit_relationDefault(&mut self, _ctx: &RelationDefaultContext<'input>) { } +/** + * Enter a parse tree produced by the {@code joinRelation} + * labeled alternative in {@link PrestoParser#relation}. + * @param ctx the parse tree + */ +fn enter_joinRelation(&mut self, _ctx: &JoinRelationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code joinRelation} + * labeled alternative in {@link PrestoParser#relation}. + * @param ctx the parse tree + */ +fn exit_joinRelation(&mut self, _ctx: &JoinRelationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#joinType}. + * @param ctx the parse tree + */ +fn enter_joinType(&mut self, _ctx: &JoinTypeContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#joinType}. + * @param ctx the parse tree + */ +fn exit_joinType(&mut self, _ctx: &JoinTypeContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#joinCriteria}. + * @param ctx the parse tree + */ +fn enter_joinCriteria(&mut self, _ctx: &JoinCriteriaContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#joinCriteria}. + * @param ctx the parse tree + */ +fn exit_joinCriteria(&mut self, _ctx: &JoinCriteriaContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#sampledRelation}. + * @param ctx the parse tree + */ +fn enter_sampledRelation(&mut self, _ctx: &SampledRelationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#sampledRelation}. + * @param ctx the parse tree + */ +fn exit_sampledRelation(&mut self, _ctx: &SampledRelationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#sampleType}. + * @param ctx the parse tree + */ +fn enter_sampleType(&mut self, _ctx: &SampleTypeContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#sampleType}. + * @param ctx the parse tree + */ +fn exit_sampleType(&mut self, _ctx: &SampleTypeContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#trimsSpecification}. + * @param ctx the parse tree + */ +fn enter_trimsSpecification(&mut self, _ctx: &TrimsSpecificationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#trimsSpecification}. + * @param ctx the parse tree + */ +fn exit_trimsSpecification(&mut self, _ctx: &TrimsSpecificationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#listAggOverflowBehavior}. + * @param ctx the parse tree + */ +fn enter_listAggOverflowBehavior(&mut self, _ctx: &ListAggOverflowBehaviorContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#listAggOverflowBehavior}. + * @param ctx the parse tree + */ +fn exit_listAggOverflowBehavior(&mut self, _ctx: &ListAggOverflowBehaviorContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#listaggCountIndication}. + * @param ctx the parse tree + */ +fn enter_listaggCountIndication(&mut self, _ctx: &ListaggCountIndicationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#listaggCountIndication}. + * @param ctx the parse tree + */ +fn exit_listaggCountIndication(&mut self, _ctx: &ListaggCountIndicationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#patternRecognition}. + * @param ctx the parse tree + */ +fn enter_patternRecognition(&mut self, _ctx: &PatternRecognitionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#patternRecognition}. + * @param ctx the parse tree + */ +fn exit_patternRecognition(&mut self, _ctx: &PatternRecognitionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#measureDefinition}. + * @param ctx the parse tree + */ +fn enter_measureDefinition(&mut self, _ctx: &MeasureDefinitionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#measureDefinition}. + * @param ctx the parse tree + */ +fn exit_measureDefinition(&mut self, _ctx: &MeasureDefinitionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#rowsPerMatch}. + * @param ctx the parse tree + */ +fn enter_rowsPerMatch(&mut self, _ctx: &RowsPerMatchContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#rowsPerMatch}. + * @param ctx the parse tree + */ +fn exit_rowsPerMatch(&mut self, _ctx: &RowsPerMatchContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#emptyMatchHandling}. + * @param ctx the parse tree + */ +fn enter_emptyMatchHandling(&mut self, _ctx: &EmptyMatchHandlingContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#emptyMatchHandling}. + * @param ctx the parse tree + */ +fn exit_emptyMatchHandling(&mut self, _ctx: &EmptyMatchHandlingContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#skipTo}. + * @param ctx the parse tree + */ +fn enter_skipTo(&mut self, _ctx: &SkipToContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#skipTo}. + * @param ctx the parse tree + */ +fn exit_skipTo(&mut self, _ctx: &SkipToContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#subsetDefinition}. + * @param ctx the parse tree + */ +fn enter_subsetDefinition(&mut self, _ctx: &SubsetDefinitionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#subsetDefinition}. + * @param ctx the parse tree + */ +fn exit_subsetDefinition(&mut self, _ctx: &SubsetDefinitionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#variableDefinition}. + * @param ctx the parse tree + */ +fn enter_variableDefinition(&mut self, _ctx: &VariableDefinitionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#variableDefinition}. + * @param ctx the parse tree + */ +fn exit_variableDefinition(&mut self, _ctx: &VariableDefinitionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#aliasedRelation}. + * @param ctx the parse tree + */ +fn enter_aliasedRelation(&mut self, _ctx: &AliasedRelationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#aliasedRelation}. + * @param ctx the parse tree + */ +fn exit_aliasedRelation(&mut self, _ctx: &AliasedRelationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#columnAliases}. + * @param ctx the parse tree + */ +fn enter_columnAliases(&mut self, _ctx: &ColumnAliasesContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#columnAliases}. + * @param ctx the parse tree + */ +fn exit_columnAliases(&mut self, _ctx: &ColumnAliasesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code tableName} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn enter_tableName(&mut self, _ctx: &TableNameContext<'input>) { } +/** + * Exit a parse tree produced by the {@code tableName} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn exit_tableName(&mut self, _ctx: &TableNameContext<'input>) { } +/** + * Enter a parse tree produced by the {@code subqueryRelation} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn enter_subqueryRelation(&mut self, _ctx: &SubqueryRelationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code subqueryRelation} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn exit_subqueryRelation(&mut self, _ctx: &SubqueryRelationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code unnest} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn enter_unnest(&mut self, _ctx: &UnnestContext<'input>) { } +/** + * Exit a parse tree produced by the {@code unnest} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn exit_unnest(&mut self, _ctx: &UnnestContext<'input>) { } +/** + * Enter a parse tree produced by the {@code lateral} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn enter_lateral(&mut self, _ctx: &LateralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code lateral} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn exit_lateral(&mut self, _ctx: &LateralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code tableFunctionInvocation} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn enter_tableFunctionInvocation(&mut self, _ctx: &TableFunctionInvocationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code tableFunctionInvocation} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn exit_tableFunctionInvocation(&mut self, _ctx: &TableFunctionInvocationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code parenthesizedRelation} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn enter_parenthesizedRelation(&mut self, _ctx: &ParenthesizedRelationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code parenthesizedRelation} + * labeled alternative in {@link PrestoParser#relationPrimary}. + * @param ctx the parse tree + */ +fn exit_parenthesizedRelation(&mut self, _ctx: &ParenthesizedRelationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#tableFunctionCall}. + * @param ctx the parse tree + */ +fn enter_tableFunctionCall(&mut self, _ctx: &TableFunctionCallContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#tableFunctionCall}. + * @param ctx the parse tree + */ +fn exit_tableFunctionCall(&mut self, _ctx: &TableFunctionCallContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#tableFunctionArgument}. + * @param ctx the parse tree + */ +fn enter_tableFunctionArgument(&mut self, _ctx: &TableFunctionArgumentContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#tableFunctionArgument}. + * @param ctx the parse tree + */ +fn exit_tableFunctionArgument(&mut self, _ctx: &TableFunctionArgumentContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#tableArgument}. + * @param ctx the parse tree + */ +fn enter_tableArgument(&mut self, _ctx: &TableArgumentContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#tableArgument}. + * @param ctx the parse tree + */ +fn exit_tableArgument(&mut self, _ctx: &TableArgumentContext<'input>) { } +/** + * Enter a parse tree produced by the {@code tableArgumentTable} + * labeled alternative in {@link PrestoParser#tableArgumentRelation}. + * @param ctx the parse tree + */ +fn enter_tableArgumentTable(&mut self, _ctx: &TableArgumentTableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code tableArgumentTable} + * labeled alternative in {@link PrestoParser#tableArgumentRelation}. + * @param ctx the parse tree + */ +fn exit_tableArgumentTable(&mut self, _ctx: &TableArgumentTableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code tableArgumentQuery} + * labeled alternative in {@link PrestoParser#tableArgumentRelation}. + * @param ctx the parse tree + */ +fn enter_tableArgumentQuery(&mut self, _ctx: &TableArgumentQueryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code tableArgumentQuery} + * labeled alternative in {@link PrestoParser#tableArgumentRelation}. + * @param ctx the parse tree + */ +fn exit_tableArgumentQuery(&mut self, _ctx: &TableArgumentQueryContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#descriptorArgument}. + * @param ctx the parse tree + */ +fn enter_descriptorArgument(&mut self, _ctx: &DescriptorArgumentContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#descriptorArgument}. + * @param ctx the parse tree + */ +fn exit_descriptorArgument(&mut self, _ctx: &DescriptorArgumentContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#descriptorField}. + * @param ctx the parse tree + */ +fn enter_descriptorField(&mut self, _ctx: &DescriptorFieldContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#descriptorField}. + * @param ctx the parse tree + */ +fn exit_descriptorField(&mut self, _ctx: &DescriptorFieldContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#copartitionTables}. + * @param ctx the parse tree + */ +fn enter_copartitionTables(&mut self, _ctx: &CopartitionTablesContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#copartitionTables}. + * @param ctx the parse tree + */ +fn exit_copartitionTables(&mut self, _ctx: &CopartitionTablesContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#expression}. + * @param ctx the parse tree + */ +fn enter_expression(&mut self, _ctx: &ExpressionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#expression}. + * @param ctx the parse tree + */ +fn exit_expression(&mut self, _ctx: &ExpressionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code logicalNot} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn enter_logicalNot(&mut self, _ctx: &LogicalNotContext<'input>) { } +/** + * Exit a parse tree produced by the {@code logicalNot} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn exit_logicalNot(&mut self, _ctx: &LogicalNotContext<'input>) { } +/** + * Enter a parse tree produced by the {@code predicated} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn enter_predicated(&mut self, _ctx: &PredicatedContext<'input>) { } +/** + * Exit a parse tree produced by the {@code predicated} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn exit_predicated(&mut self, _ctx: &PredicatedContext<'input>) { } +/** + * Enter a parse tree produced by the {@code or} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn enter_or(&mut self, _ctx: &OrContext<'input>) { } +/** + * Exit a parse tree produced by the {@code or} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn exit_or(&mut self, _ctx: &OrContext<'input>) { } +/** + * Enter a parse tree produced by the {@code and} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn enter_and(&mut self, _ctx: &AndContext<'input>) { } +/** + * Exit a parse tree produced by the {@code and} + * labeled alternative in {@link PrestoParser#booleanExpression}. + * @param ctx the parse tree + */ +fn exit_and(&mut self, _ctx: &AndContext<'input>) { } +/** + * Enter a parse tree produced by the {@code comparison} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_comparison(&mut self, _ctx: &ComparisonContext<'input>) { } +/** + * Exit a parse tree produced by the {@code comparison} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_comparison(&mut self, _ctx: &ComparisonContext<'input>) { } +/** + * Enter a parse tree produced by the {@code quantifiedComparison} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_quantifiedComparison(&mut self, _ctx: &QuantifiedComparisonContext<'input>) { } +/** + * Exit a parse tree produced by the {@code quantifiedComparison} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_quantifiedComparison(&mut self, _ctx: &QuantifiedComparisonContext<'input>) { } +/** + * Enter a parse tree produced by the {@code between} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_between(&mut self, _ctx: &BetweenContext<'input>) { } +/** + * Exit a parse tree produced by the {@code between} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_between(&mut self, _ctx: &BetweenContext<'input>) { } +/** + * Enter a parse tree produced by the {@code inList} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_inList(&mut self, _ctx: &InListContext<'input>) { } +/** + * Exit a parse tree produced by the {@code inList} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_inList(&mut self, _ctx: &InListContext<'input>) { } +/** + * Enter a parse tree produced by the {@code inSubquery} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_inSubquery(&mut self, _ctx: &InSubqueryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code inSubquery} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_inSubquery(&mut self, _ctx: &InSubqueryContext<'input>) { } +/** + * Enter a parse tree produced by the {@code like} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_like(&mut self, _ctx: &LikeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code like} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_like(&mut self, _ctx: &LikeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code nullPredicate} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_nullPredicate(&mut self, _ctx: &NullPredicateContext<'input>) { } +/** + * Exit a parse tree produced by the {@code nullPredicate} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_nullPredicate(&mut self, _ctx: &NullPredicateContext<'input>) { } +/** + * Enter a parse tree produced by the {@code distinctFrom} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn enter_distinctFrom(&mut self, _ctx: &DistinctFromContext<'input>) { } +/** + * Exit a parse tree produced by the {@code distinctFrom} + * labeled alternative in {@link PrestoParser#predicate}. + * @param ctx the parse tree + */ +fn exit_distinctFrom(&mut self, _ctx: &DistinctFromContext<'input>) { } +/** + * Enter a parse tree produced by the {@code valueExpressionDefault} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn enter_valueExpressionDefault(&mut self, _ctx: &ValueExpressionDefaultContext<'input>) { } +/** + * Exit a parse tree produced by the {@code valueExpressionDefault} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn exit_valueExpressionDefault(&mut self, _ctx: &ValueExpressionDefaultContext<'input>) { } +/** + * Enter a parse tree produced by the {@code concatenation} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn enter_concatenation(&mut self, _ctx: &ConcatenationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code concatenation} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn exit_concatenation(&mut self, _ctx: &ConcatenationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code arithmeticBinary} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn enter_arithmeticBinary(&mut self, _ctx: &ArithmeticBinaryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code arithmeticBinary} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn exit_arithmeticBinary(&mut self, _ctx: &ArithmeticBinaryContext<'input>) { } +/** + * Enter a parse tree produced by the {@code arithmeticUnary} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn enter_arithmeticUnary(&mut self, _ctx: &ArithmeticUnaryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code arithmeticUnary} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn exit_arithmeticUnary(&mut self, _ctx: &ArithmeticUnaryContext<'input>) { } +/** + * Enter a parse tree produced by the {@code atTimeZone} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn enter_atTimeZone(&mut self, _ctx: &AtTimeZoneContext<'input>) { } +/** + * Exit a parse tree produced by the {@code atTimeZone} + * labeled alternative in {@link PrestoParser#valueExpression}. + * @param ctx the parse tree + */ +fn exit_atTimeZone(&mut self, _ctx: &AtTimeZoneContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dereference} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_dereference(&mut self, _ctx: &DereferenceContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dereference} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_dereference(&mut self, _ctx: &DereferenceContext<'input>) { } +/** + * Enter a parse tree produced by the {@code typeConstructor} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_typeConstructor(&mut self, _ctx: &TypeConstructorContext<'input>) { } +/** + * Exit a parse tree produced by the {@code typeConstructor} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_typeConstructor(&mut self, _ctx: &TypeConstructorContext<'input>) { } +/** + * Enter a parse tree produced by the {@code jsonValue} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_jsonValue(&mut self, _ctx: &JsonValueContext<'input>) { } +/** + * Exit a parse tree produced by the {@code jsonValue} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_jsonValue(&mut self, _ctx: &JsonValueContext<'input>) { } +/** + * Enter a parse tree produced by the {@code specialDateTimeFunction} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_specialDateTimeFunction(&mut self, _ctx: &SpecialDateTimeFunctionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code specialDateTimeFunction} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_specialDateTimeFunction(&mut self, _ctx: &SpecialDateTimeFunctionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code substring} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_substring(&mut self, _ctx: &SubstringContext<'input>) { } +/** + * Exit a parse tree produced by the {@code substring} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_substring(&mut self, _ctx: &SubstringContext<'input>) { } +/** + * Enter a parse tree produced by the {@code cast} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_cast(&mut self, _ctx: &CastContext<'input>) { } +/** + * Exit a parse tree produced by the {@code cast} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_cast(&mut self, _ctx: &CastContext<'input>) { } +/** + * Enter a parse tree produced by the {@code lambda} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_lambda(&mut self, _ctx: &LambdaContext<'input>) { } +/** + * Exit a parse tree produced by the {@code lambda} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_lambda(&mut self, _ctx: &LambdaContext<'input>) { } +/** + * Enter a parse tree produced by the {@code parenthesizedExpression} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_parenthesizedExpression(&mut self, _ctx: &ParenthesizedExpressionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code parenthesizedExpression} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_parenthesizedExpression(&mut self, _ctx: &ParenthesizedExpressionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code trim} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_trim(&mut self, _ctx: &TrimContext<'input>) { } +/** + * Exit a parse tree produced by the {@code trim} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_trim(&mut self, _ctx: &TrimContext<'input>) { } +/** + * Enter a parse tree produced by the {@code parameter} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_parameter(&mut self, _ctx: &ParameterContext<'input>) { } +/** + * Exit a parse tree produced by the {@code parameter} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_parameter(&mut self, _ctx: &ParameterContext<'input>) { } +/** + * Enter a parse tree produced by the {@code normalize} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_normalize(&mut self, _ctx: &NormalizeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code normalize} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_normalize(&mut self, _ctx: &NormalizeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code jsonObject} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_jsonObject(&mut self, _ctx: &JsonObjectContext<'input>) { } +/** + * Exit a parse tree produced by the {@code jsonObject} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_jsonObject(&mut self, _ctx: &JsonObjectContext<'input>) { } +/** + * Enter a parse tree produced by the {@code intervalLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_intervalLiteral(&mut self, _ctx: &IntervalLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code intervalLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_intervalLiteral(&mut self, _ctx: &IntervalLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code numericLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_numericLiteral(&mut self, _ctx: &NumericLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code numericLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_numericLiteral(&mut self, _ctx: &NumericLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code booleanLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_booleanLiteral(&mut self, _ctx: &BooleanLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code booleanLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_booleanLiteral(&mut self, _ctx: &BooleanLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code jsonArray} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_jsonArray(&mut self, _ctx: &JsonArrayContext<'input>) { } +/** + * Exit a parse tree produced by the {@code jsonArray} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_jsonArray(&mut self, _ctx: &JsonArrayContext<'input>) { } +/** + * Enter a parse tree produced by the {@code simpleCase} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_simpleCase(&mut self, _ctx: &SimpleCaseContext<'input>) { } +/** + * Exit a parse tree produced by the {@code simpleCase} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_simpleCase(&mut self, _ctx: &SimpleCaseContext<'input>) { } +/** + * Enter a parse tree produced by the {@code columnReference} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_columnReference(&mut self, _ctx: &ColumnReferenceContext<'input>) { } +/** + * Exit a parse tree produced by the {@code columnReference} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_columnReference(&mut self, _ctx: &ColumnReferenceContext<'input>) { } +/** + * Enter a parse tree produced by the {@code nullLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_nullLiteral(&mut self, _ctx: &NullLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code nullLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_nullLiteral(&mut self, _ctx: &NullLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code rowConstructor} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_rowConstructor(&mut self, _ctx: &RowConstructorContext<'input>) { } +/** + * Exit a parse tree produced by the {@code rowConstructor} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_rowConstructor(&mut self, _ctx: &RowConstructorContext<'input>) { } +/** + * Enter a parse tree produced by the {@code subscript} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_subscript(&mut self, _ctx: &SubscriptContext<'input>) { } +/** + * Exit a parse tree produced by the {@code subscript} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_subscript(&mut self, _ctx: &SubscriptContext<'input>) { } +/** + * Enter a parse tree produced by the {@code jsonExists} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_jsonExists(&mut self, _ctx: &JsonExistsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code jsonExists} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_jsonExists(&mut self, _ctx: &JsonExistsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code currentPath} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_currentPath(&mut self, _ctx: &CurrentPathContext<'input>) { } +/** + * Exit a parse tree produced by the {@code currentPath} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_currentPath(&mut self, _ctx: &CurrentPathContext<'input>) { } +/** + * Enter a parse tree produced by the {@code subqueryExpression} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_subqueryExpression(&mut self, _ctx: &SubqueryExpressionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code subqueryExpression} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_subqueryExpression(&mut self, _ctx: &SubqueryExpressionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code binaryLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_binaryLiteral(&mut self, _ctx: &BinaryLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code binaryLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_binaryLiteral(&mut self, _ctx: &BinaryLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code currentUser} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_currentUser(&mut self, _ctx: &CurrentUserContext<'input>) { } +/** + * Exit a parse tree produced by the {@code currentUser} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_currentUser(&mut self, _ctx: &CurrentUserContext<'input>) { } +/** + * Enter a parse tree produced by the {@code jsonQuery} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_jsonQuery(&mut self, _ctx: &JsonQueryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code jsonQuery} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_jsonQuery(&mut self, _ctx: &JsonQueryContext<'input>) { } +/** + * Enter a parse tree produced by the {@code measure} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_measure(&mut self, _ctx: &MeasureContext<'input>) { } +/** + * Exit a parse tree produced by the {@code measure} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_measure(&mut self, _ctx: &MeasureContext<'input>) { } +/** + * Enter a parse tree produced by the {@code extract} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_extract(&mut self, _ctx: &ExtractContext<'input>) { } +/** + * Exit a parse tree produced by the {@code extract} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_extract(&mut self, _ctx: &ExtractContext<'input>) { } +/** + * Enter a parse tree produced by the {@code stringLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_stringLiteral(&mut self, _ctx: &StringLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code stringLiteral} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_stringLiteral(&mut self, _ctx: &StringLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code arrayConstructor} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_arrayConstructor(&mut self, _ctx: &ArrayConstructorContext<'input>) { } +/** + * Exit a parse tree produced by the {@code arrayConstructor} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_arrayConstructor(&mut self, _ctx: &ArrayConstructorContext<'input>) { } +/** + * Enter a parse tree produced by the {@code functionCall} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_functionCall(&mut self, _ctx: &FunctionCallContext<'input>) { } +/** + * Exit a parse tree produced by the {@code functionCall} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_functionCall(&mut self, _ctx: &FunctionCallContext<'input>) { } +/** + * Enter a parse tree produced by the {@code currentSchema} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_currentSchema(&mut self, _ctx: &CurrentSchemaContext<'input>) { } +/** + * Exit a parse tree produced by the {@code currentSchema} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_currentSchema(&mut self, _ctx: &CurrentSchemaContext<'input>) { } +/** + * Enter a parse tree produced by the {@code exists} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_exists(&mut self, _ctx: &ExistsContext<'input>) { } +/** + * Exit a parse tree produced by the {@code exists} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_exists(&mut self, _ctx: &ExistsContext<'input>) { } +/** + * Enter a parse tree produced by the {@code position} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_position(&mut self, _ctx: &PositionContext<'input>) { } +/** + * Exit a parse tree produced by the {@code position} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_position(&mut self, _ctx: &PositionContext<'input>) { } +/** + * Enter a parse tree produced by the {@code listagg} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_listagg(&mut self, _ctx: &ListaggContext<'input>) { } +/** + * Exit a parse tree produced by the {@code listagg} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_listagg(&mut self, _ctx: &ListaggContext<'input>) { } +/** + * Enter a parse tree produced by the {@code searchedCase} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_searchedCase(&mut self, _ctx: &SearchedCaseContext<'input>) { } +/** + * Exit a parse tree produced by the {@code searchedCase} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_searchedCase(&mut self, _ctx: &SearchedCaseContext<'input>) { } +/** + * Enter a parse tree produced by the {@code currentCatalog} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_currentCatalog(&mut self, _ctx: &CurrentCatalogContext<'input>) { } +/** + * Exit a parse tree produced by the {@code currentCatalog} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_currentCatalog(&mut self, _ctx: &CurrentCatalogContext<'input>) { } +/** + * Enter a parse tree produced by the {@code groupingOperation} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn enter_groupingOperation(&mut self, _ctx: &GroupingOperationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code groupingOperation} + * labeled alternative in {@link PrestoParser#primaryExpression}. + * @param ctx the parse tree + */ +fn exit_groupingOperation(&mut self, _ctx: &GroupingOperationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonPathInvocation}. + * @param ctx the parse tree + */ +fn enter_jsonPathInvocation(&mut self, _ctx: &JsonPathInvocationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonPathInvocation}. + * @param ctx the parse tree + */ +fn exit_jsonPathInvocation(&mut self, _ctx: &JsonPathInvocationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonValueExpression}. + * @param ctx the parse tree + */ +fn enter_jsonValueExpression(&mut self, _ctx: &JsonValueExpressionContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonValueExpression}. + * @param ctx the parse tree + */ +fn exit_jsonValueExpression(&mut self, _ctx: &JsonValueExpressionContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonRepresentation}. + * @param ctx the parse tree + */ +fn enter_jsonRepresentation(&mut self, _ctx: &JsonRepresentationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonRepresentation}. + * @param ctx the parse tree + */ +fn exit_jsonRepresentation(&mut self, _ctx: &JsonRepresentationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonArgument}. + * @param ctx the parse tree + */ +fn enter_jsonArgument(&mut self, _ctx: &JsonArgumentContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonArgument}. + * @param ctx the parse tree + */ +fn exit_jsonArgument(&mut self, _ctx: &JsonArgumentContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonExistsErrorBehavior}. + * @param ctx the parse tree + */ +fn enter_jsonExistsErrorBehavior(&mut self, _ctx: &JsonExistsErrorBehaviorContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonExistsErrorBehavior}. + * @param ctx the parse tree + */ +fn exit_jsonExistsErrorBehavior(&mut self, _ctx: &JsonExistsErrorBehaviorContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonValueBehavior}. + * @param ctx the parse tree + */ +fn enter_jsonValueBehavior(&mut self, _ctx: &JsonValueBehaviorContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonValueBehavior}. + * @param ctx the parse tree + */ +fn exit_jsonValueBehavior(&mut self, _ctx: &JsonValueBehaviorContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonQueryWrapperBehavior}. + * @param ctx the parse tree + */ +fn enter_jsonQueryWrapperBehavior(&mut self, _ctx: &JsonQueryWrapperBehaviorContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonQueryWrapperBehavior}. + * @param ctx the parse tree + */ +fn exit_jsonQueryWrapperBehavior(&mut self, _ctx: &JsonQueryWrapperBehaviorContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonQueryBehavior}. + * @param ctx the parse tree + */ +fn enter_jsonQueryBehavior(&mut self, _ctx: &JsonQueryBehaviorContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonQueryBehavior}. + * @param ctx the parse tree + */ +fn exit_jsonQueryBehavior(&mut self, _ctx: &JsonQueryBehaviorContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#jsonObjectMember}. + * @param ctx the parse tree + */ +fn enter_jsonObjectMember(&mut self, _ctx: &JsonObjectMemberContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#jsonObjectMember}. + * @param ctx the parse tree + */ +fn exit_jsonObjectMember(&mut self, _ctx: &JsonObjectMemberContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#processingMode}. + * @param ctx the parse tree + */ +fn enter_processingMode(&mut self, _ctx: &ProcessingModeContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#processingMode}. + * @param ctx the parse tree + */ +fn exit_processingMode(&mut self, _ctx: &ProcessingModeContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#nullTreatment}. + * @param ctx the parse tree + */ +fn enter_nullTreatment(&mut self, _ctx: &NullTreatmentContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#nullTreatment}. + * @param ctx the parse tree + */ +fn exit_nullTreatment(&mut self, _ctx: &NullTreatmentContext<'input>) { } +/** + * Enter a parse tree produced by the {@code basicStringLiteral} + * labeled alternative in {@link PrestoParser#string}. + * @param ctx the parse tree + */ +fn enter_basicStringLiteral(&mut self, _ctx: &BasicStringLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code basicStringLiteral} + * labeled alternative in {@link PrestoParser#string}. + * @param ctx the parse tree + */ +fn exit_basicStringLiteral(&mut self, _ctx: &BasicStringLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code unicodeStringLiteral} + * labeled alternative in {@link PrestoParser#string}. + * @param ctx the parse tree + */ +fn enter_unicodeStringLiteral(&mut self, _ctx: &UnicodeStringLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code unicodeStringLiteral} + * labeled alternative in {@link PrestoParser#string}. + * @param ctx the parse tree + */ +fn exit_unicodeStringLiteral(&mut self, _ctx: &UnicodeStringLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code timeZoneInterval} + * labeled alternative in {@link PrestoParser#timeZoneSpecifier}. + * @param ctx the parse tree + */ +fn enter_timeZoneInterval(&mut self, _ctx: &TimeZoneIntervalContext<'input>) { } +/** + * Exit a parse tree produced by the {@code timeZoneInterval} + * labeled alternative in {@link PrestoParser#timeZoneSpecifier}. + * @param ctx the parse tree + */ +fn exit_timeZoneInterval(&mut self, _ctx: &TimeZoneIntervalContext<'input>) { } +/** + * Enter a parse tree produced by the {@code timeZoneString} + * labeled alternative in {@link PrestoParser#timeZoneSpecifier}. + * @param ctx the parse tree + */ +fn enter_timeZoneString(&mut self, _ctx: &TimeZoneStringContext<'input>) { } +/** + * Exit a parse tree produced by the {@code timeZoneString} + * labeled alternative in {@link PrestoParser#timeZoneSpecifier}. + * @param ctx the parse tree + */ +fn exit_timeZoneString(&mut self, _ctx: &TimeZoneStringContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#comparisonOperator}. + * @param ctx the parse tree + */ +fn enter_comparisonOperator(&mut self, _ctx: &ComparisonOperatorContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#comparisonOperator}. + * @param ctx the parse tree + */ +fn exit_comparisonOperator(&mut self, _ctx: &ComparisonOperatorContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#comparisonQuantifier}. + * @param ctx the parse tree + */ +fn enter_comparisonQuantifier(&mut self, _ctx: &ComparisonQuantifierContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#comparisonQuantifier}. + * @param ctx the parse tree + */ +fn exit_comparisonQuantifier(&mut self, _ctx: &ComparisonQuantifierContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#booleanValue}. + * @param ctx the parse tree + */ +fn enter_booleanValue(&mut self, _ctx: &BooleanValueContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#booleanValue}. + * @param ctx the parse tree + */ +fn exit_booleanValue(&mut self, _ctx: &BooleanValueContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#interval}. + * @param ctx the parse tree + */ +fn enter_interval(&mut self, _ctx: &IntervalContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#interval}. + * @param ctx the parse tree + */ +fn exit_interval(&mut self, _ctx: &IntervalContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#intervalField}. + * @param ctx the parse tree + */ +fn enter_intervalField(&mut self, _ctx: &IntervalFieldContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#intervalField}. + * @param ctx the parse tree + */ +fn exit_intervalField(&mut self, _ctx: &IntervalFieldContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#normalForm}. + * @param ctx the parse tree + */ +fn enter_normalForm(&mut self, _ctx: &NormalFormContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#normalForm}. + * @param ctx the parse tree + */ +fn exit_normalForm(&mut self, _ctx: &NormalFormContext<'input>) { } +/** + * Enter a parse tree produced by the {@code rowType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_rowType(&mut self, _ctx: &RowTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code rowType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_rowType(&mut self, _ctx: &RowTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code intervalType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_intervalType(&mut self, _ctx: &IntervalTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code intervalType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_intervalType(&mut self, _ctx: &IntervalTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code arrayType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_arrayType(&mut self, _ctx: &ArrayTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code arrayType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_arrayType(&mut self, _ctx: &ArrayTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code doublePrecisionType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_doublePrecisionType(&mut self, _ctx: &DoublePrecisionTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code doublePrecisionType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_doublePrecisionType(&mut self, _ctx: &DoublePrecisionTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code legacyArrayType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_legacyArrayType(&mut self, _ctx: &LegacyArrayTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code legacyArrayType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_legacyArrayType(&mut self, _ctx: &LegacyArrayTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code genericType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_genericType(&mut self, _ctx: &GenericTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code genericType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_genericType(&mut self, _ctx: &GenericTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code dateTimeType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_dateTimeType(&mut self, _ctx: &DateTimeTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code dateTimeType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_dateTimeType(&mut self, _ctx: &DateTimeTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code legacyMapType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn enter_legacyMapType(&mut self, _ctx: &LegacyMapTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code legacyMapType} + * labeled alternative in {@link PrestoParser#type_}. + * @param ctx the parse tree + */ +fn exit_legacyMapType(&mut self, _ctx: &LegacyMapTypeContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#rowField}. + * @param ctx the parse tree + */ +fn enter_rowField(&mut self, _ctx: &RowFieldContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#rowField}. + * @param ctx the parse tree + */ +fn exit_rowField(&mut self, _ctx: &RowFieldContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#typeParameter}. + * @param ctx the parse tree + */ +fn enter_typeParameter(&mut self, _ctx: &TypeParameterContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#typeParameter}. + * @param ctx the parse tree + */ +fn exit_typeParameter(&mut self, _ctx: &TypeParameterContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#whenClause}. + * @param ctx the parse tree + */ +fn enter_whenClause(&mut self, _ctx: &WhenClauseContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#whenClause}. + * @param ctx the parse tree + */ +fn exit_whenClause(&mut self, _ctx: &WhenClauseContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#filter}. + * @param ctx the parse tree + */ +fn enter_filter(&mut self, _ctx: &FilterContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#filter}. + * @param ctx the parse tree + */ +fn exit_filter(&mut self, _ctx: &FilterContext<'input>) { } +/** + * Enter a parse tree produced by the {@code mergeUpdate} + * labeled alternative in {@link PrestoParser#mergeCase}. + * @param ctx the parse tree + */ +fn enter_mergeUpdate(&mut self, _ctx: &MergeUpdateContext<'input>) { } +/** + * Exit a parse tree produced by the {@code mergeUpdate} + * labeled alternative in {@link PrestoParser#mergeCase}. + * @param ctx the parse tree + */ +fn exit_mergeUpdate(&mut self, _ctx: &MergeUpdateContext<'input>) { } +/** + * Enter a parse tree produced by the {@code mergeDelete} + * labeled alternative in {@link PrestoParser#mergeCase}. + * @param ctx the parse tree + */ +fn enter_mergeDelete(&mut self, _ctx: &MergeDeleteContext<'input>) { } +/** + * Exit a parse tree produced by the {@code mergeDelete} + * labeled alternative in {@link PrestoParser#mergeCase}. + * @param ctx the parse tree + */ +fn exit_mergeDelete(&mut self, _ctx: &MergeDeleteContext<'input>) { } +/** + * Enter a parse tree produced by the {@code mergeInsert} + * labeled alternative in {@link PrestoParser#mergeCase}. + * @param ctx the parse tree + */ +fn enter_mergeInsert(&mut self, _ctx: &MergeInsertContext<'input>) { } +/** + * Exit a parse tree produced by the {@code mergeInsert} + * labeled alternative in {@link PrestoParser#mergeCase}. + * @param ctx the parse tree + */ +fn exit_mergeInsert(&mut self, _ctx: &MergeInsertContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#over}. + * @param ctx the parse tree + */ +fn enter_over(&mut self, _ctx: &OverContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#over}. + * @param ctx the parse tree + */ +fn exit_over(&mut self, _ctx: &OverContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#windowFrame}. + * @param ctx the parse tree + */ +fn enter_windowFrame(&mut self, _ctx: &WindowFrameContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#windowFrame}. + * @param ctx the parse tree + */ +fn exit_windowFrame(&mut self, _ctx: &WindowFrameContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#frameExtent}. + * @param ctx the parse tree + */ +fn enter_frameExtent(&mut self, _ctx: &FrameExtentContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#frameExtent}. + * @param ctx the parse tree + */ +fn exit_frameExtent(&mut self, _ctx: &FrameExtentContext<'input>) { } +/** + * Enter a parse tree produced by the {@code unboundedFrame} + * labeled alternative in {@link PrestoParser#frameBound}. + * @param ctx the parse tree + */ +fn enter_unboundedFrame(&mut self, _ctx: &UnboundedFrameContext<'input>) { } +/** + * Exit a parse tree produced by the {@code unboundedFrame} + * labeled alternative in {@link PrestoParser#frameBound}. + * @param ctx the parse tree + */ +fn exit_unboundedFrame(&mut self, _ctx: &UnboundedFrameContext<'input>) { } +/** + * Enter a parse tree produced by the {@code currentRowBound} + * labeled alternative in {@link PrestoParser#frameBound}. + * @param ctx the parse tree + */ +fn enter_currentRowBound(&mut self, _ctx: &CurrentRowBoundContext<'input>) { } +/** + * Exit a parse tree produced by the {@code currentRowBound} + * labeled alternative in {@link PrestoParser#frameBound}. + * @param ctx the parse tree + */ +fn exit_currentRowBound(&mut self, _ctx: &CurrentRowBoundContext<'input>) { } +/** + * Enter a parse tree produced by the {@code boundedFrame} + * labeled alternative in {@link PrestoParser#frameBound}. + * @param ctx the parse tree + */ +fn enter_boundedFrame(&mut self, _ctx: &BoundedFrameContext<'input>) { } +/** + * Exit a parse tree produced by the {@code boundedFrame} + * labeled alternative in {@link PrestoParser#frameBound}. + * @param ctx the parse tree + */ +fn exit_boundedFrame(&mut self, _ctx: &BoundedFrameContext<'input>) { } +/** + * Enter a parse tree produced by the {@code quantifiedPrimary} + * labeled alternative in {@link PrestoParser#rowPattern}. + * @param ctx the parse tree + */ +fn enter_quantifiedPrimary(&mut self, _ctx: &QuantifiedPrimaryContext<'input>) { } +/** + * Exit a parse tree produced by the {@code quantifiedPrimary} + * labeled alternative in {@link PrestoParser#rowPattern}. + * @param ctx the parse tree + */ +fn exit_quantifiedPrimary(&mut self, _ctx: &QuantifiedPrimaryContext<'input>) { } +/** + * Enter a parse tree produced by the {@code patternConcatenation} + * labeled alternative in {@link PrestoParser#rowPattern}. + * @param ctx the parse tree + */ +fn enter_patternConcatenation(&mut self, _ctx: &PatternConcatenationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code patternConcatenation} + * labeled alternative in {@link PrestoParser#rowPattern}. + * @param ctx the parse tree + */ +fn exit_patternConcatenation(&mut self, _ctx: &PatternConcatenationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code patternAlternation} + * labeled alternative in {@link PrestoParser#rowPattern}. + * @param ctx the parse tree + */ +fn enter_patternAlternation(&mut self, _ctx: &PatternAlternationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code patternAlternation} + * labeled alternative in {@link PrestoParser#rowPattern}. + * @param ctx the parse tree + */ +fn exit_patternAlternation(&mut self, _ctx: &PatternAlternationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code patternVariable} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn enter_patternVariable(&mut self, _ctx: &PatternVariableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code patternVariable} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn exit_patternVariable(&mut self, _ctx: &PatternVariableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code emptyPattern} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn enter_emptyPattern(&mut self, _ctx: &EmptyPatternContext<'input>) { } +/** + * Exit a parse tree produced by the {@code emptyPattern} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn exit_emptyPattern(&mut self, _ctx: &EmptyPatternContext<'input>) { } +/** + * Enter a parse tree produced by the {@code patternPermutation} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn enter_patternPermutation(&mut self, _ctx: &PatternPermutationContext<'input>) { } +/** + * Exit a parse tree produced by the {@code patternPermutation} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn exit_patternPermutation(&mut self, _ctx: &PatternPermutationContext<'input>) { } +/** + * Enter a parse tree produced by the {@code groupedPattern} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn enter_groupedPattern(&mut self, _ctx: &GroupedPatternContext<'input>) { } +/** + * Exit a parse tree produced by the {@code groupedPattern} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn exit_groupedPattern(&mut self, _ctx: &GroupedPatternContext<'input>) { } +/** + * Enter a parse tree produced by the {@code partitionStartAnchor} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn enter_partitionStartAnchor(&mut self, _ctx: &PartitionStartAnchorContext<'input>) { } +/** + * Exit a parse tree produced by the {@code partitionStartAnchor} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn exit_partitionStartAnchor(&mut self, _ctx: &PartitionStartAnchorContext<'input>) { } +/** + * Enter a parse tree produced by the {@code partitionEndAnchor} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn enter_partitionEndAnchor(&mut self, _ctx: &PartitionEndAnchorContext<'input>) { } +/** + * Exit a parse tree produced by the {@code partitionEndAnchor} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn exit_partitionEndAnchor(&mut self, _ctx: &PartitionEndAnchorContext<'input>) { } +/** + * Enter a parse tree produced by the {@code excludedPattern} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn enter_excludedPattern(&mut self, _ctx: &ExcludedPatternContext<'input>) { } +/** + * Exit a parse tree produced by the {@code excludedPattern} + * labeled alternative in {@link PrestoParser#patternPrimary}. + * @param ctx the parse tree + */ +fn exit_excludedPattern(&mut self, _ctx: &ExcludedPatternContext<'input>) { } +/** + * Enter a parse tree produced by the {@code zeroOrMoreQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn enter_zeroOrMoreQuantifier(&mut self, _ctx: &ZeroOrMoreQuantifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code zeroOrMoreQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn exit_zeroOrMoreQuantifier(&mut self, _ctx: &ZeroOrMoreQuantifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code oneOrMoreQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn enter_oneOrMoreQuantifier(&mut self, _ctx: &OneOrMoreQuantifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code oneOrMoreQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn exit_oneOrMoreQuantifier(&mut self, _ctx: &OneOrMoreQuantifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code zeroOrOneQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn enter_zeroOrOneQuantifier(&mut self, _ctx: &ZeroOrOneQuantifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code zeroOrOneQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn exit_zeroOrOneQuantifier(&mut self, _ctx: &ZeroOrOneQuantifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code rangeQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn enter_rangeQuantifier(&mut self, _ctx: &RangeQuantifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code rangeQuantifier} + * labeled alternative in {@link PrestoParser#patternQuantifier}. + * @param ctx the parse tree + */ +fn exit_rangeQuantifier(&mut self, _ctx: &RangeQuantifierContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#updateAssignment}. + * @param ctx the parse tree + */ +fn enter_updateAssignment(&mut self, _ctx: &UpdateAssignmentContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#updateAssignment}. + * @param ctx the parse tree + */ +fn exit_updateAssignment(&mut self, _ctx: &UpdateAssignmentContext<'input>) { } +/** + * Enter a parse tree produced by the {@code explainFormat} + * labeled alternative in {@link PrestoParser#explainOption}. + * @param ctx the parse tree + */ +fn enter_explainFormat(&mut self, _ctx: &ExplainFormatContext<'input>) { } +/** + * Exit a parse tree produced by the {@code explainFormat} + * labeled alternative in {@link PrestoParser#explainOption}. + * @param ctx the parse tree + */ +fn exit_explainFormat(&mut self, _ctx: &ExplainFormatContext<'input>) { } +/** + * Enter a parse tree produced by the {@code explainType} + * labeled alternative in {@link PrestoParser#explainOption}. + * @param ctx the parse tree + */ +fn enter_explainType(&mut self, _ctx: &ExplainTypeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code explainType} + * labeled alternative in {@link PrestoParser#explainOption}. + * @param ctx the parse tree + */ +fn exit_explainType(&mut self, _ctx: &ExplainTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code isolationLevel} + * labeled alternative in {@link PrestoParser#transactionMode}. + * @param ctx the parse tree + */ +fn enter_isolationLevel(&mut self, _ctx: &IsolationLevelContext<'input>) { } +/** + * Exit a parse tree produced by the {@code isolationLevel} + * labeled alternative in {@link PrestoParser#transactionMode}. + * @param ctx the parse tree + */ +fn exit_isolationLevel(&mut self, _ctx: &IsolationLevelContext<'input>) { } +/** + * Enter a parse tree produced by the {@code transactionAccessMode} + * labeled alternative in {@link PrestoParser#transactionMode}. + * @param ctx the parse tree + */ +fn enter_transactionAccessMode(&mut self, _ctx: &TransactionAccessModeContext<'input>) { } +/** + * Exit a parse tree produced by the {@code transactionAccessMode} + * labeled alternative in {@link PrestoParser#transactionMode}. + * @param ctx the parse tree + */ +fn exit_transactionAccessMode(&mut self, _ctx: &TransactionAccessModeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code readUncommitted} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn enter_readUncommitted(&mut self, _ctx: &ReadUncommittedContext<'input>) { } +/** + * Exit a parse tree produced by the {@code readUncommitted} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn exit_readUncommitted(&mut self, _ctx: &ReadUncommittedContext<'input>) { } +/** + * Enter a parse tree produced by the {@code readCommitted} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn enter_readCommitted(&mut self, _ctx: &ReadCommittedContext<'input>) { } +/** + * Exit a parse tree produced by the {@code readCommitted} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn exit_readCommitted(&mut self, _ctx: &ReadCommittedContext<'input>) { } +/** + * Enter a parse tree produced by the {@code repeatableRead} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn enter_repeatableRead(&mut self, _ctx: &RepeatableReadContext<'input>) { } +/** + * Exit a parse tree produced by the {@code repeatableRead} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn exit_repeatableRead(&mut self, _ctx: &RepeatableReadContext<'input>) { } +/** + * Enter a parse tree produced by the {@code serializable} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn enter_serializable(&mut self, _ctx: &SerializableContext<'input>) { } +/** + * Exit a parse tree produced by the {@code serializable} + * labeled alternative in {@link PrestoParser#levelOfIsolation}. + * @param ctx the parse tree + */ +fn exit_serializable(&mut self, _ctx: &SerializableContext<'input>) { } +/** + * Enter a parse tree produced by the {@code positionalArgument} + * labeled alternative in {@link PrestoParser#callArgument}. + * @param ctx the parse tree + */ +fn enter_positionalArgument(&mut self, _ctx: &PositionalArgumentContext<'input>) { } +/** + * Exit a parse tree produced by the {@code positionalArgument} + * labeled alternative in {@link PrestoParser#callArgument}. + * @param ctx the parse tree + */ +fn exit_positionalArgument(&mut self, _ctx: &PositionalArgumentContext<'input>) { } +/** + * Enter a parse tree produced by the {@code namedArgument} + * labeled alternative in {@link PrestoParser#callArgument}. + * @param ctx the parse tree + */ +fn enter_namedArgument(&mut self, _ctx: &NamedArgumentContext<'input>) { } +/** + * Exit a parse tree produced by the {@code namedArgument} + * labeled alternative in {@link PrestoParser#callArgument}. + * @param ctx the parse tree + */ +fn exit_namedArgument(&mut self, _ctx: &NamedArgumentContext<'input>) { } +/** + * Enter a parse tree produced by the {@code qualifiedArgument} + * labeled alternative in {@link PrestoParser#pathElement}. + * @param ctx the parse tree + */ +fn enter_qualifiedArgument(&mut self, _ctx: &QualifiedArgumentContext<'input>) { } +/** + * Exit a parse tree produced by the {@code qualifiedArgument} + * labeled alternative in {@link PrestoParser#pathElement}. + * @param ctx the parse tree + */ +fn exit_qualifiedArgument(&mut self, _ctx: &QualifiedArgumentContext<'input>) { } +/** + * Enter a parse tree produced by the {@code unqualifiedArgument} + * labeled alternative in {@link PrestoParser#pathElement}. + * @param ctx the parse tree + */ +fn enter_unqualifiedArgument(&mut self, _ctx: &UnqualifiedArgumentContext<'input>) { } +/** + * Exit a parse tree produced by the {@code unqualifiedArgument} + * labeled alternative in {@link PrestoParser#pathElement}. + * @param ctx the parse tree + */ +fn exit_unqualifiedArgument(&mut self, _ctx: &UnqualifiedArgumentContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#pathSpecification}. + * @param ctx the parse tree + */ +fn enter_pathSpecification(&mut self, _ctx: &PathSpecificationContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#pathSpecification}. + * @param ctx the parse tree + */ +fn exit_pathSpecification(&mut self, _ctx: &PathSpecificationContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#privilege}. + * @param ctx the parse tree + */ +fn enter_privilege(&mut self, _ctx: &PrivilegeContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#privilege}. + * @param ctx the parse tree + */ +fn exit_privilege(&mut self, _ctx: &PrivilegeContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#qualifiedName}. + * @param ctx the parse tree + */ +fn enter_qualifiedName(&mut self, _ctx: &QualifiedNameContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#qualifiedName}. + * @param ctx the parse tree + */ +fn exit_qualifiedName(&mut self, _ctx: &QualifiedNameContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#queryPeriod}. + * @param ctx the parse tree + */ +fn enter_queryPeriod(&mut self, _ctx: &QueryPeriodContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#queryPeriod}. + * @param ctx the parse tree + */ +fn exit_queryPeriod(&mut self, _ctx: &QueryPeriodContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#rangeType}. + * @param ctx the parse tree + */ +fn enter_rangeType(&mut self, _ctx: &RangeTypeContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#rangeType}. + * @param ctx the parse tree + */ +fn exit_rangeType(&mut self, _ctx: &RangeTypeContext<'input>) { } +/** + * Enter a parse tree produced by the {@code specifiedPrincipal} + * labeled alternative in {@link PrestoParser#grantor}. + * @param ctx the parse tree + */ +fn enter_specifiedPrincipal(&mut self, _ctx: &SpecifiedPrincipalContext<'input>) { } +/** + * Exit a parse tree produced by the {@code specifiedPrincipal} + * labeled alternative in {@link PrestoParser#grantor}. + * @param ctx the parse tree + */ +fn exit_specifiedPrincipal(&mut self, _ctx: &SpecifiedPrincipalContext<'input>) { } +/** + * Enter a parse tree produced by the {@code currentUserGrantor} + * labeled alternative in {@link PrestoParser#grantor}. + * @param ctx the parse tree + */ +fn enter_currentUserGrantor(&mut self, _ctx: &CurrentUserGrantorContext<'input>) { } +/** + * Exit a parse tree produced by the {@code currentUserGrantor} + * labeled alternative in {@link PrestoParser#grantor}. + * @param ctx the parse tree + */ +fn exit_currentUserGrantor(&mut self, _ctx: &CurrentUserGrantorContext<'input>) { } +/** + * Enter a parse tree produced by the {@code currentRoleGrantor} + * labeled alternative in {@link PrestoParser#grantor}. + * @param ctx the parse tree + */ +fn enter_currentRoleGrantor(&mut self, _ctx: &CurrentRoleGrantorContext<'input>) { } +/** + * Exit a parse tree produced by the {@code currentRoleGrantor} + * labeled alternative in {@link PrestoParser#grantor}. + * @param ctx the parse tree + */ +fn exit_currentRoleGrantor(&mut self, _ctx: &CurrentRoleGrantorContext<'input>) { } +/** + * Enter a parse tree produced by the {@code unspecifiedPrincipal} + * labeled alternative in {@link PrestoParser#principal}. + * @param ctx the parse tree + */ +fn enter_unspecifiedPrincipal(&mut self, _ctx: &UnspecifiedPrincipalContext<'input>) { } +/** + * Exit a parse tree produced by the {@code unspecifiedPrincipal} + * labeled alternative in {@link PrestoParser#principal}. + * @param ctx the parse tree + */ +fn exit_unspecifiedPrincipal(&mut self, _ctx: &UnspecifiedPrincipalContext<'input>) { } +/** + * Enter a parse tree produced by the {@code userPrincipal} + * labeled alternative in {@link PrestoParser#principal}. + * @param ctx the parse tree + */ +fn enter_userPrincipal(&mut self, _ctx: &UserPrincipalContext<'input>) { } +/** + * Exit a parse tree produced by the {@code userPrincipal} + * labeled alternative in {@link PrestoParser#principal}. + * @param ctx the parse tree + */ +fn exit_userPrincipal(&mut self, _ctx: &UserPrincipalContext<'input>) { } +/** + * Enter a parse tree produced by the {@code rolePrincipal} + * labeled alternative in {@link PrestoParser#principal}. + * @param ctx the parse tree + */ +fn enter_rolePrincipal(&mut self, _ctx: &RolePrincipalContext<'input>) { } +/** + * Exit a parse tree produced by the {@code rolePrincipal} + * labeled alternative in {@link PrestoParser#principal}. + * @param ctx the parse tree + */ +fn exit_rolePrincipal(&mut self, _ctx: &RolePrincipalContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#roles}. + * @param ctx the parse tree + */ +fn enter_roles(&mut self, _ctx: &RolesContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#roles}. + * @param ctx the parse tree + */ +fn exit_roles(&mut self, _ctx: &RolesContext<'input>) { } +/** + * Enter a parse tree produced by the {@code unquotedIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn enter_unquotedIdentifier(&mut self, _ctx: &UnquotedIdentifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code unquotedIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn exit_unquotedIdentifier(&mut self, _ctx: &UnquotedIdentifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code quotedIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn enter_quotedIdentifier(&mut self, _ctx: &QuotedIdentifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code quotedIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn exit_quotedIdentifier(&mut self, _ctx: &QuotedIdentifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code backQuotedIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn enter_backQuotedIdentifier(&mut self, _ctx: &BackQuotedIdentifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code backQuotedIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn exit_backQuotedIdentifier(&mut self, _ctx: &BackQuotedIdentifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code digitIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn enter_digitIdentifier(&mut self, _ctx: &DigitIdentifierContext<'input>) { } +/** + * Exit a parse tree produced by the {@code digitIdentifier} + * labeled alternative in {@link PrestoParser#identifier}. + * @param ctx the parse tree + */ +fn exit_digitIdentifier(&mut self, _ctx: &DigitIdentifierContext<'input>) { } +/** + * Enter a parse tree produced by the {@code decimalLiteral} + * labeled alternative in {@link PrestoParser#number}. + * @param ctx the parse tree + */ +fn enter_decimalLiteral(&mut self, _ctx: &DecimalLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code decimalLiteral} + * labeled alternative in {@link PrestoParser#number}. + * @param ctx the parse tree + */ +fn exit_decimalLiteral(&mut self, _ctx: &DecimalLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code doubleLiteral} + * labeled alternative in {@link PrestoParser#number}. + * @param ctx the parse tree + */ +fn enter_doubleLiteral(&mut self, _ctx: &DoubleLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code doubleLiteral} + * labeled alternative in {@link PrestoParser#number}. + * @param ctx the parse tree + */ +fn exit_doubleLiteral(&mut self, _ctx: &DoubleLiteralContext<'input>) { } +/** + * Enter a parse tree produced by the {@code integerLiteral} + * labeled alternative in {@link PrestoParser#number}. + * @param ctx the parse tree + */ +fn enter_integerLiteral(&mut self, _ctx: &IntegerLiteralContext<'input>) { } +/** + * Exit a parse tree produced by the {@code integerLiteral} + * labeled alternative in {@link PrestoParser#number}. + * @param ctx the parse tree + */ +fn exit_integerLiteral(&mut self, _ctx: &IntegerLiteralContext<'input>) { } +/** + * Enter a parse tree produced by {@link PrestoParser#nonReserved}. + * @param ctx the parse tree + */ +fn enter_nonReserved(&mut self, _ctx: &NonReservedContext<'input>) { } +/** + * Exit a parse tree produced by {@link PrestoParser#nonReserved}. + * @param ctx the parse tree + */ +fn exit_nonReserved(&mut self, _ctx: &NonReservedContext<'input>) { } + +} + +antlr_rust::coerce_from!{ 'input : PrestoListener<'input> } + + diff --git a/datafusion/sql/src/antlr/presto/prestoparser.rs b/datafusion/sql/src/antlr/presto/prestoparser.rs new file mode 100644 index 0000000000000..4aaeb571c03a2 --- /dev/null +++ b/datafusion/sql/src/antlr/presto/prestoparser.rs @@ -0,0 +1,43111 @@ +// Generated from Presto.g4 by ANTLR 4.8 +#![allow(dead_code)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(nonstandard_style)] +#![allow(unused_imports)] +#![allow(unused_mut)] +#![allow(unused_braces)] +use antlr_rust::PredictionContextCache; +use antlr_rust::parser::{Parser, BaseParser, ParserRecog, ParserNodeType}; +use antlr_rust::token_stream::TokenStream; +use antlr_rust::TokenSource; +use antlr_rust::parser_atn_simulator::ParserATNSimulator; +use antlr_rust::errors::*; +use antlr_rust::rule_context::{BaseRuleContext, CustomRuleContext, RuleContext}; +use antlr_rust::recognizer::{Recognizer,Actions}; +use antlr_rust::atn_deserializer::ATNDeserializer; +use antlr_rust::dfa::DFA; +use antlr_rust::atn::{ATN, INVALID_ALT}; +use antlr_rust::error_strategy::{ErrorStrategy, DefaultErrorStrategy}; +use antlr_rust::parser_rule_context::{BaseParserRuleContext, ParserRuleContext,cast,cast_mut}; +use antlr_rust::tree::*; +use antlr_rust::token::{TOKEN_EOF,OwningToken,Token}; +use antlr_rust::int_stream::EOF; +use antlr_rust::vocabulary::{Vocabulary,VocabularyImpl}; +use antlr_rust::token_factory::{CommonTokenFactory,TokenFactory, TokenAware}; +use super::prestolistener::*; +use antlr_rust::lazy_static; +use antlr_rust::{TidAble,TidExt}; + +use std::marker::PhantomData; +use std::sync::Arc; +use std::rc::Rc; +use std::convert::TryFrom; +use std::cell::RefCell; +use std::ops::{DerefMut, Deref}; +use std::borrow::{Borrow,BorrowMut}; +use std::any::{Any,TypeId}; + + pub const T__0:isize=1; + pub const T__1:isize=2; + pub const T__2:isize=3; + pub const T__3:isize=4; + pub const T__4:isize=5; + pub const T__5:isize=6; + pub const T__6:isize=7; + pub const T__7:isize=8; + pub const T__8:isize=9; + pub const T__9:isize=10; + pub const T__10:isize=11; + pub const T__11:isize=12; + pub const T__12:isize=13; + pub const T__13:isize=14; + pub const T__14:isize=15; + pub const T__15:isize=16; + pub const ABSENT:isize=17; + pub const ADD:isize=18; + pub const ADMIN:isize=19; + pub const AFTER:isize=20; + pub const ALL:isize=21; + pub const ALTER:isize=22; + pub const ANALYZE:isize=23; + pub const AND:isize=24; + pub const ANY:isize=25; + pub const ARRAY:isize=26; + pub const AS:isize=27; + pub const ASC:isize=28; + pub const AT:isize=29; + pub const AUTHORIZATION:isize=30; + pub const BERNOULLI:isize=31; + pub const BETWEEN:isize=32; + pub const BOTH:isize=33; + pub const BY:isize=34; + pub const CALL:isize=35; + pub const CASCADE:isize=36; + pub const CASE:isize=37; + pub const CAST:isize=38; + pub const CATALOGS:isize=39; + pub const COLUMN:isize=40; + pub const COLUMNS:isize=41; + pub const COMMA:isize=42; + pub const COMMENT:isize=43; + pub const COMMIT:isize=44; + pub const COMMITTED:isize=45; + pub const CONDITIONAL:isize=46; + pub const CONSTRAINT:isize=47; + pub const COUNT:isize=48; + pub const COPARTITION:isize=49; + pub const CREATE:isize=50; + pub const CROSS:isize=51; + pub const CUBE:isize=52; + pub const CURRENT:isize=53; + pub const CURRENT_CATALOG:isize=54; + pub const CURRENT_DATE:isize=55; + pub const CURRENT_PATH:isize=56; + pub const CURRENT_ROLE:isize=57; + pub const CURRENT_SCHEMA:isize=58; + pub const CURRENT_TIME:isize=59; + pub const CURRENT_TIMESTAMP:isize=60; + pub const CURRENT_USER:isize=61; + pub const DATA:isize=62; + pub const DATE:isize=63; + pub const DAY:isize=64; + pub const DEALLOCATE:isize=65; + pub const DEFAULT:isize=66; + pub const DEFINE:isize=67; + pub const DEFINER:isize=68; + pub const DELETE:isize=69; + pub const DENY:isize=70; + pub const DESC:isize=71; + pub const DESCRIBE:isize=72; + pub const DESCRIPTOR:isize=73; + pub const DISTINCT:isize=74; + pub const DISTRIBUTED:isize=75; + pub const DOUBLE:isize=76; + pub const DROP:isize=77; + pub const ELSE:isize=78; + pub const EMPTY:isize=79; + pub const ENCODING:isize=80; + pub const END:isize=81; + pub const ERROR:isize=82; + pub const ESCAPE:isize=83; + pub const EXCEPT:isize=84; + pub const EXCLUDING:isize=85; + pub const EXECUTE:isize=86; + pub const EXISTS:isize=87; + pub const EXPLAIN:isize=88; + pub const EXTRACT:isize=89; + pub const FALSE:isize=90; + pub const FETCH:isize=91; + pub const FILTER:isize=92; + pub const FINAL:isize=93; + pub const FIRST:isize=94; + pub const FOLLOWING:isize=95; + pub const FOR:isize=96; + pub const FORMAT:isize=97; + pub const FROM:isize=98; + pub const FULL:isize=99; + pub const FUNCTIONS:isize=100; + pub const GRACE:isize=101; + pub const GRANT:isize=102; + pub const GRANTED:isize=103; + pub const GRANTS:isize=104; + pub const GRAPHVIZ:isize=105; + pub const GROUP:isize=106; + pub const GROUPING:isize=107; + pub const GROUPS:isize=108; + pub const HAVING:isize=109; + pub const HOUR:isize=110; + pub const IF:isize=111; + pub const IGNORE:isize=112; + pub const IN:isize=113; + pub const INCLUDING:isize=114; + pub const INITIAL:isize=115; + pub const INNER:isize=116; + pub const INPUT:isize=117; + pub const INSERT:isize=118; + pub const INTERSECT:isize=119; + pub const INTERVAL:isize=120; + pub const INTO:isize=121; + pub const INVOKER:isize=122; + pub const IO:isize=123; + pub const IS:isize=124; + pub const ISOLATION:isize=125; + pub const JOIN:isize=126; + pub const JSON:isize=127; + pub const JSON_ARRAY:isize=128; + pub const JSON_EXISTS:isize=129; + pub const JSON_OBJECT:isize=130; + pub const JSON_QUERY:isize=131; + pub const JSON_VALUE:isize=132; + pub const KEEP:isize=133; + pub const KEY:isize=134; + pub const KEYS:isize=135; + pub const LAST:isize=136; + pub const LATERAL:isize=137; + pub const LEADING:isize=138; + pub const LEFT:isize=139; + pub const LEVEL:isize=140; + pub const LIKE:isize=141; + pub const LIMIT:isize=142; + pub const LISTAGG:isize=143; + pub const LOCAL:isize=144; + pub const LOCALTIME:isize=145; + pub const LOCALTIMESTAMP:isize=146; + pub const LOGICAL:isize=147; + pub const MAP:isize=148; + pub const MATCH:isize=149; + pub const MATCHED:isize=150; + pub const MATCHES:isize=151; + pub const MATCH_RECOGNIZE:isize=152; + pub const MATERIALIZED:isize=153; + pub const MEASURES:isize=154; + pub const MERGE:isize=155; + pub const MINUTE:isize=156; + pub const MONTH:isize=157; + pub const NATURAL:isize=158; + pub const NEXT:isize=159; + pub const NFC:isize=160; + pub const NFD:isize=161; + pub const NFKC:isize=162; + pub const NFKD:isize=163; + pub const NO:isize=164; + pub const NONE:isize=165; + pub const NORMALIZE:isize=166; + pub const NOT:isize=167; + pub const NULL:isize=168; + pub const NULLIF:isize=169; + pub const NULLS:isize=170; + pub const OBJECT:isize=171; + pub const OF:isize=172; + pub const OFFSET:isize=173; + pub const OMIT:isize=174; + pub const ON:isize=175; + pub const ONE:isize=176; + pub const ONLY:isize=177; + pub const OPTION:isize=178; + pub const OR:isize=179; + pub const ORDER:isize=180; + pub const ORDINALITY:isize=181; + pub const OUTER:isize=182; + pub const OUTPUT:isize=183; + pub const OVER:isize=184; + pub const OVERFLOW:isize=185; + pub const PARTITION:isize=186; + pub const PARTITIONS:isize=187; + pub const PASSING:isize=188; + pub const PAST:isize=189; + pub const PATH:isize=190; + pub const PATTERN:isize=191; + pub const PER:isize=192; + pub const PERIOD:isize=193; + pub const PERMUTE:isize=194; + pub const POSITION:isize=195; + pub const PRECEDING:isize=196; + pub const PRECISION:isize=197; + pub const PREPARE:isize=198; + pub const PRIVILEGES:isize=199; + pub const PROPERTIES:isize=200; + pub const PRUNE:isize=201; + pub const QUOTES:isize=202; + pub const RANGE:isize=203; + pub const READ:isize=204; + pub const RECURSIVE:isize=205; + pub const REFRESH:isize=206; + pub const RENAME:isize=207; + pub const REPEATABLE:isize=208; + pub const REPLACE:isize=209; + pub const RESET:isize=210; + pub const RESPECT:isize=211; + pub const RESTRICT:isize=212; + pub const RETURNING:isize=213; + pub const REVOKE:isize=214; + pub const RIGHT:isize=215; + pub const ROLE:isize=216; + pub const ROLES:isize=217; + pub const ROLLBACK:isize=218; + pub const ROLLUP:isize=219; + pub const ROW:isize=220; + pub const ROWS:isize=221; + pub const RUNNING:isize=222; + pub const SCALAR:isize=223; + pub const SCHEMA:isize=224; + pub const SCHEMAS:isize=225; + pub const SECOND:isize=226; + pub const SECURITY:isize=227; + pub const SEEK:isize=228; + pub const SELECT:isize=229; + pub const SERIALIZABLE:isize=230; + pub const SESSION:isize=231; + pub const SET:isize=232; + pub const SETS:isize=233; + pub const SHOW:isize=234; + pub const SOME:isize=235; + pub const START:isize=236; + pub const STATS:isize=237; + pub const SUBSET:isize=238; + pub const SUBSTRING:isize=239; + pub const SYSTEM:isize=240; + pub const TABLE:isize=241; + pub const TABLES:isize=242; + pub const TABLESAMPLE:isize=243; + pub const TEXT:isize=244; + pub const TEXT_STRING:isize=245; + pub const THEN:isize=246; + pub const TIES:isize=247; + pub const TIME:isize=248; + pub const TIMESTAMP:isize=249; + pub const TO:isize=250; + pub const TRAILING:isize=251; + pub const TRANSACTION:isize=252; + pub const TRIM:isize=253; + pub const TRUE:isize=254; + pub const TRUNCATE:isize=255; + pub const TRY_CAST:isize=256; + pub const TYPE:isize=257; + pub const UESCAPE:isize=258; + pub const UNBOUNDED:isize=259; + pub const UNCOMMITTED:isize=260; + pub const UNCONDITIONAL:isize=261; + pub const UNION:isize=262; + pub const UNIQUE:isize=263; + pub const UNKNOWN:isize=264; + pub const UNMATCHED:isize=265; + pub const UNNEST:isize=266; + pub const UPDATE:isize=267; + pub const USE:isize=268; + pub const USER:isize=269; + pub const USING:isize=270; + pub const UTF16:isize=271; + pub const UTF32:isize=272; + pub const UTF8:isize=273; + pub const VALIDATE:isize=274; + pub const VALUE:isize=275; + pub const VALUES:isize=276; + pub const VERBOSE:isize=277; + pub const VERSION:isize=278; + pub const VIEW:isize=279; + pub const WHEN:isize=280; + pub const WHERE:isize=281; + pub const WINDOW:isize=282; + pub const WITH:isize=283; + pub const WITHIN:isize=284; + pub const WITHOUT:isize=285; + pub const WORK:isize=286; + pub const WRAPPER:isize=287; + pub const WRITE:isize=288; + pub const YEAR:isize=289; + pub const ZONE:isize=290; + pub const EQ:isize=291; + pub const NEQ:isize=292; + pub const LT:isize=293; + pub const LTE:isize=294; + pub const GT:isize=295; + pub const GTE:isize=296; + pub const PLUS:isize=297; + pub const MINUS:isize=298; + pub const ASTERISK:isize=299; + pub const SLASH:isize=300; + pub const PERCENT:isize=301; + pub const CONCAT:isize=302; + pub const QUESTION_MARK:isize=303; + pub const STRING:isize=304; + pub const UNICODE_STRING:isize=305; + pub const BINARY_LITERAL:isize=306; + pub const INTEGER_VALUE:isize=307; + pub const DECIMAL_VALUE:isize=308; + pub const DOUBLE_VALUE:isize=309; + pub const IDENTIFIER:isize=310; + pub const DIGIT_IDENTIFIER:isize=311; + pub const QUOTED_IDENTIFIER:isize=312; + pub const BACKQUOTED_IDENTIFIER:isize=313; + pub const SIMPLE_COMMENT:isize=314; + pub const BRACKETED_COMMENT:isize=315; + pub const WS:isize=316; + pub const UNRECOGNIZED:isize=317; + pub const DELIMITER:isize=318; + pub const RULE_singleStatement:usize = 0; + pub const RULE_standaloneExpression:usize = 1; + pub const RULE_standalonePathSpecification:usize = 2; + pub const RULE_standaloneType:usize = 3; + pub const RULE_standaloneRowPattern:usize = 4; + pub const RULE_statement:usize = 5; + pub const RULE_query:usize = 6; + pub const RULE_with:usize = 7; + pub const RULE_tableElement:usize = 8; + pub const RULE_columnDefinition:usize = 9; + pub const RULE_likeClause:usize = 10; + pub const RULE_properties:usize = 11; + pub const RULE_propertyAssignments:usize = 12; + pub const RULE_property:usize = 13; + pub const RULE_propertyValue:usize = 14; + pub const RULE_queryNoWith:usize = 15; + pub const RULE_limitRowCount:usize = 16; + pub const RULE_rowCount:usize = 17; + pub const RULE_queryTerm:usize = 18; + pub const RULE_queryPrimary:usize = 19; + pub const RULE_sortItem:usize = 20; + pub const RULE_querySpecification:usize = 21; + pub const RULE_querySelectItems:usize = 22; + pub const RULE_groupBy:usize = 23; + pub const RULE_groupingElement:usize = 24; + pub const RULE_groupingSet:usize = 25; + pub const RULE_windowDefinition:usize = 26; + pub const RULE_windowSpecification:usize = 27; + pub const RULE_namedQuery:usize = 28; + pub const RULE_setQuantifier:usize = 29; + pub const RULE_selectItem:usize = 30; + pub const RULE_relation:usize = 31; + pub const RULE_joinType:usize = 32; + pub const RULE_joinCriteria:usize = 33; + pub const RULE_sampledRelation:usize = 34; + pub const RULE_sampleType:usize = 35; + pub const RULE_trimsSpecification:usize = 36; + pub const RULE_listAggOverflowBehavior:usize = 37; + pub const RULE_listaggCountIndication:usize = 38; + pub const RULE_patternRecognition:usize = 39; + pub const RULE_measureDefinition:usize = 40; + pub const RULE_rowsPerMatch:usize = 41; + pub const RULE_emptyMatchHandling:usize = 42; + pub const RULE_skipTo:usize = 43; + pub const RULE_subsetDefinition:usize = 44; + pub const RULE_variableDefinition:usize = 45; + pub const RULE_aliasedRelation:usize = 46; + pub const RULE_columnAliases:usize = 47; + pub const RULE_relationPrimary:usize = 48; + pub const RULE_tableFunctionCall:usize = 49; + pub const RULE_tableFunctionArgument:usize = 50; + pub const RULE_tableArgument:usize = 51; + pub const RULE_tableArgumentRelation:usize = 52; + pub const RULE_descriptorArgument:usize = 53; + pub const RULE_descriptorField:usize = 54; + pub const RULE_copartitionTables:usize = 55; + pub const RULE_expression:usize = 56; + pub const RULE_booleanExpression:usize = 57; + pub const RULE_predicate:usize = 58; + pub const RULE_valueExpression:usize = 59; + pub const RULE_primaryExpression:usize = 60; + pub const RULE_jsonPathInvocation:usize = 61; + pub const RULE_jsonValueExpression:usize = 62; + pub const RULE_jsonRepresentation:usize = 63; + pub const RULE_jsonArgument:usize = 64; + pub const RULE_jsonExistsErrorBehavior:usize = 65; + pub const RULE_jsonValueBehavior:usize = 66; + pub const RULE_jsonQueryWrapperBehavior:usize = 67; + pub const RULE_jsonQueryBehavior:usize = 68; + pub const RULE_jsonObjectMember:usize = 69; + pub const RULE_processingMode:usize = 70; + pub const RULE_nullTreatment:usize = 71; + pub const RULE_string:usize = 72; + pub const RULE_timeZoneSpecifier:usize = 73; + pub const RULE_comparisonOperator:usize = 74; + pub const RULE_comparisonQuantifier:usize = 75; + pub const RULE_booleanValue:usize = 76; + pub const RULE_interval:usize = 77; + pub const RULE_intervalField:usize = 78; + pub const RULE_normalForm:usize = 79; + pub const RULE_type_:usize = 80; + pub const RULE_rowField:usize = 81; + pub const RULE_typeParameter:usize = 82; + pub const RULE_whenClause:usize = 83; + pub const RULE_filter:usize = 84; + pub const RULE_mergeCase:usize = 85; + pub const RULE_over:usize = 86; + pub const RULE_windowFrame:usize = 87; + pub const RULE_frameExtent:usize = 88; + pub const RULE_frameBound:usize = 89; + pub const RULE_rowPattern:usize = 90; + pub const RULE_patternPrimary:usize = 91; + pub const RULE_patternQuantifier:usize = 92; + pub const RULE_updateAssignment:usize = 93; + pub const RULE_explainOption:usize = 94; + pub const RULE_transactionMode:usize = 95; + pub const RULE_levelOfIsolation:usize = 96; + pub const RULE_callArgument:usize = 97; + pub const RULE_pathElement:usize = 98; + pub const RULE_pathSpecification:usize = 99; + pub const RULE_privilege:usize = 100; + pub const RULE_qualifiedName:usize = 101; + pub const RULE_queryPeriod:usize = 102; + pub const RULE_rangeType:usize = 103; + pub const RULE_grantor:usize = 104; + pub const RULE_principal:usize = 105; + pub const RULE_roles:usize = 106; + pub const RULE_identifier:usize = 107; + pub const RULE_number:usize = 108; + pub const RULE_nonReserved:usize = 109; + pub const ruleNames: [&'static str; 110] = [ + "singleStatement", "standaloneExpression", "standalonePathSpecification", + "standaloneType", "standaloneRowPattern", "statement", "query", "with", + "tableElement", "columnDefinition", "likeClause", "properties", "propertyAssignments", + "property", "propertyValue", "queryNoWith", "limitRowCount", "rowCount", + "queryTerm", "queryPrimary", "sortItem", "querySpecification", "querySelectItems", + "groupBy", "groupingElement", "groupingSet", "windowDefinition", "windowSpecification", + "namedQuery", "setQuantifier", "selectItem", "relation", "joinType", "joinCriteria", + "sampledRelation", "sampleType", "trimsSpecification", "listAggOverflowBehavior", + "listaggCountIndication", "patternRecognition", "measureDefinition", "rowsPerMatch", + "emptyMatchHandling", "skipTo", "subsetDefinition", "variableDefinition", + "aliasedRelation", "columnAliases", "relationPrimary", "tableFunctionCall", + "tableFunctionArgument", "tableArgument", "tableArgumentRelation", "descriptorArgument", + "descriptorField", "copartitionTables", "expression", "booleanExpression", + "predicate", "valueExpression", "primaryExpression", "jsonPathInvocation", + "jsonValueExpression", "jsonRepresentation", "jsonArgument", "jsonExistsErrorBehavior", + "jsonValueBehavior", "jsonQueryWrapperBehavior", "jsonQueryBehavior", + "jsonObjectMember", "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", "queryPeriod", + "rangeType", "grantor", "principal", "roles", "identifier", "number", + "nonReserved" + ]; + + + pub const _LITERAL_NAMES: [Option<&'static str>;304] = [ + None, Some("'.'"), Some("'('"), Some("')'"), Some("'SKIP'"), Some("'=>'"), + Some("'->'"), Some("'['"), Some("']'"), Some("':'"), Some("'|'"), Some("'^'"), + Some("'$'"), Some("'{-'"), Some("'-}'"), Some("'{'"), Some("'}'"), Some("'ABSENT'"), + Some("'ADD'"), Some("'ADMIN'"), Some("'AFTER'"), Some("'ALL'"), Some("'ALTER'"), + Some("'ANALYZE'"), Some("'AND'"), Some("'ANY'"), Some("'ARRAY'"), Some("'AS'"), + Some("'ASC'"), Some("'AT'"), Some("'AUTHORIZATION'"), Some("'BERNOULLI'"), + Some("'BETWEEN'"), Some("'BOTH'"), Some("'BY'"), Some("'CALL'"), Some("'CASCADE'"), + Some("'CASE'"), Some("'CAST'"), Some("'CATALOGS'"), Some("'COLUMN'"), + Some("'COLUMNS'"), Some("','"), Some("'COMMENT'"), Some("'COMMIT'"), Some("'COMMITTED'"), + Some("'CONDITIONAL'"), Some("'CONSTRAINT'"), Some("'COUNT'"), Some("'COPARTITION'"), + Some("'CREATE'"), Some("'CROSS'"), Some("'CUBE'"), Some("'CURRENT'"), + Some("'CURRENT_CATALOG'"), Some("'CURRENT_DATE'"), Some("'CURRENT_PATH'"), + Some("'CURRENT_ROLE'"), Some("'CURRENT_SCHEMA'"), Some("'CURRENT_TIME'"), + Some("'CURRENT_TIMESTAMP'"), Some("'CURRENT_USER'"), Some("'DATA'"), Some("'DATE'"), + Some("'DAY'"), Some("'DEALLOCATE'"), Some("'DEFAULT'"), Some("'DEFINE'"), + Some("'DEFINER'"), Some("'DELETE'"), Some("'DENY'"), Some("'DESC'"), Some("'DESCRIBE'"), + Some("'DESCRIPTOR'"), Some("'DISTINCT'"), Some("'DISTRIBUTED'"), Some("'DOUBLE'"), + Some("'DROP'"), Some("'ELSE'"), Some("'EMPTY'"), Some("'ENCODING'"), Some("'END'"), + Some("'ERROR'"), Some("'ESCAPE'"), Some("'EXCEPT'"), Some("'EXCLUDING'"), + Some("'EXECUTE'"), Some("'EXISTS'"), Some("'EXPLAIN'"), Some("'EXTRACT'"), + Some("'FALSE'"), Some("'FETCH'"), Some("'FILTER'"), Some("'FINAL'"), Some("'FIRST'"), + Some("'FOLLOWING'"), Some("'FOR'"), Some("'FORMAT'"), Some("'FROM'"), + Some("'FULL'"), Some("'FUNCTIONS'"), Some("'GRACE'"), Some("'GRANT'"), + Some("'GRANTED'"), Some("'GRANTS'"), Some("'GRAPHVIZ'"), Some("'GROUP'"), + Some("'GROUPING'"), Some("'GROUPS'"), Some("'HAVING'"), Some("'HOUR'"), + Some("'IF'"), Some("'IGNORE'"), Some("'IN'"), Some("'INCLUDING'"), Some("'INITIAL'"), + Some("'INNER'"), Some("'INPUT'"), Some("'INSERT'"), Some("'INTERSECT'"), + Some("'INTERVAL'"), Some("'INTO'"), Some("'INVOKER'"), Some("'IO'"), Some("'IS'"), + Some("'ISOLATION'"), Some("'JOIN'"), Some("'JSON'"), Some("'JSON_ARRAY'"), + Some("'JSON_EXISTS'"), Some("'JSON_OBJECT'"), Some("'JSON_QUERY'"), Some("'JSON_VALUE'"), + Some("'KEEP'"), Some("'KEY'"), Some("'KEYS'"), Some("'LAST'"), Some("'LATERAL'"), + Some("'LEADING'"), Some("'LEFT'"), Some("'LEVEL'"), Some("'LIKE'"), Some("'LIMIT'"), + Some("'LISTAGG'"), Some("'LOCAL'"), Some("'LOCALTIME'"), Some("'LOCALTIMESTAMP'"), + Some("'LOGICAL'"), Some("'MAP'"), Some("'MATCH'"), Some("'MATCHED'"), + Some("'MATCHES'"), Some("'MATCH_RECOGNIZE'"), Some("'MATERIALIZED'"), + Some("'MEASURES'"), Some("'MERGE'"), Some("'MINUTE'"), Some("'MONTH'"), + Some("'NATURAL'"), Some("'NEXT'"), Some("'NFC'"), Some("'NFD'"), Some("'NFKC'"), + Some("'NFKD'"), Some("'NO'"), Some("'NONE'"), Some("'NORMALIZE'"), Some("'NOT'"), + Some("'NULL'"), Some("'NULLIF'"), Some("'NULLS'"), Some("'OBJECT'"), Some("'OF'"), + Some("'OFFSET'"), Some("'OMIT'"), Some("'ON'"), Some("'ONE'"), Some("'ONLY'"), + Some("'OPTION'"), Some("'OR'"), Some("'ORDER'"), Some("'ORDINALITY'"), + Some("'OUTER'"), Some("'OUTPUT'"), Some("'OVER'"), Some("'OVERFLOW'"), + Some("'PARTITION'"), Some("'PARTITIONS'"), Some("'PASSING'"), Some("'PAST'"), + Some("'PATH'"), Some("'PATTERN'"), Some("'PER'"), Some("'PERIOD'"), Some("'PERMUTE'"), + Some("'POSITION'"), Some("'PRECEDING'"), Some("'PRECISION'"), Some("'PREPARE'"), + Some("'PRIVILEGES'"), Some("'PROPERTIES'"), Some("'PRUNE'"), Some("'QUOTES'"), + Some("'RANGE'"), Some("'READ'"), Some("'RECURSIVE'"), Some("'REFRESH'"), + Some("'RENAME'"), Some("'REPEATABLE'"), Some("'REPLACE'"), Some("'RESET'"), + Some("'RESPECT'"), Some("'RESTRICT'"), Some("'RETURNING'"), Some("'REVOKE'"), + Some("'RIGHT'"), Some("'ROLE'"), Some("'ROLES'"), Some("'ROLLBACK'"), + Some("'ROLLUP'"), Some("'ROW'"), Some("'ROWS'"), Some("'RUNNING'"), Some("'SCALAR'"), + Some("'SCHEMA'"), Some("'SCHEMAS'"), Some("'SECOND'"), Some("'SECURITY'"), + Some("'SEEK'"), Some("'SELECT'"), Some("'SERIALIZABLE'"), Some("'SESSION'"), + Some("'SET'"), Some("'SETS'"), Some("'SHOW'"), Some("'SOME'"), Some("'START'"), + Some("'STATS'"), Some("'SUBSET'"), Some("'SUBSTRING'"), Some("'SYSTEM'"), + Some("'TABLE'"), Some("'TABLES'"), Some("'TABLESAMPLE'"), Some("'TEXT'"), + Some("'STRING'"), Some("'THEN'"), Some("'TIES'"), Some("'TIME'"), Some("'TIMESTAMP'"), + Some("'TO'"), Some("'TRAILING'"), Some("'TRANSACTION'"), Some("'TRIM'"), + Some("'TRUE'"), Some("'TRUNCATE'"), Some("'TRY_CAST'"), Some("'TYPE'"), + Some("'UESCAPE'"), Some("'UNBOUNDED'"), Some("'UNCOMMITTED'"), Some("'UNCONDITIONAL'"), + Some("'UNION'"), Some("'UNIQUE'"), Some("'UNKNOWN'"), Some("'UNMATCHED'"), + Some("'UNNEST'"), Some("'UPDATE'"), Some("'USE'"), Some("'USER'"), Some("'USING'"), + Some("'UTF16'"), Some("'UTF32'"), Some("'UTF8'"), Some("'VALIDATE'"), + Some("'VALUE'"), Some("'VALUES'"), Some("'VERBOSE'"), Some("'VERSION'"), + Some("'VIEW'"), Some("'WHEN'"), Some("'WHERE'"), Some("'WINDOW'"), Some("'WITH'"), + Some("'WITHIN'"), Some("'WITHOUT'"), Some("'WORK'"), Some("'WRAPPER'"), + Some("'WRITE'"), Some("'YEAR'"), Some("'ZONE'"), Some("'='"), None, Some("'<'"), + Some("'<='"), Some("'>'"), Some("'>='"), Some("'+'"), Some("'-'"), Some("'*'"), + Some("'/'"), Some("'%'"), Some("'||'"), Some("'?'") + ]; + pub const _SYMBOLIC_NAMES: [Option<&'static str>;319] = [ + None, None, None, None, None, None, None, None, None, None, None, None, + None, None, None, None, None, Some("ABSENT"), Some("ADD"), Some("ADMIN"), + Some("AFTER"), Some("ALL"), Some("ALTER"), Some("ANALYZE"), Some("AND"), + Some("ANY"), Some("ARRAY"), Some("AS"), Some("ASC"), Some("AT"), Some("AUTHORIZATION"), + Some("BERNOULLI"), Some("BETWEEN"), Some("BOTH"), Some("BY"), Some("CALL"), + Some("CASCADE"), Some("CASE"), Some("CAST"), Some("CATALOGS"), Some("COLUMN"), + Some("COLUMNS"), Some("COMMA"), Some("COMMENT"), Some("COMMIT"), Some("COMMITTED"), + Some("CONDITIONAL"), Some("CONSTRAINT"), Some("COUNT"), Some("COPARTITION"), + Some("CREATE"), Some("CROSS"), Some("CUBE"), Some("CURRENT"), Some("CURRENT_CATALOG"), + Some("CURRENT_DATE"), Some("CURRENT_PATH"), Some("CURRENT_ROLE"), Some("CURRENT_SCHEMA"), + Some("CURRENT_TIME"), Some("CURRENT_TIMESTAMP"), Some("CURRENT_USER"), + Some("DATA"), Some("DATE"), Some("DAY"), Some("DEALLOCATE"), Some("DEFAULT"), + Some("DEFINE"), Some("DEFINER"), Some("DELETE"), Some("DENY"), Some("DESC"), + Some("DESCRIBE"), Some("DESCRIPTOR"), Some("DISTINCT"), Some("DISTRIBUTED"), + Some("DOUBLE"), Some("DROP"), Some("ELSE"), Some("EMPTY"), Some("ENCODING"), + Some("END"), Some("ERROR"), Some("ESCAPE"), Some("EXCEPT"), Some("EXCLUDING"), + Some("EXECUTE"), Some("EXISTS"), Some("EXPLAIN"), Some("EXTRACT"), Some("FALSE"), + Some("FETCH"), Some("FILTER"), Some("FINAL"), Some("FIRST"), Some("FOLLOWING"), + Some("FOR"), Some("FORMAT"), Some("FROM"), Some("FULL"), Some("FUNCTIONS"), + Some("GRACE"), Some("GRANT"), Some("GRANTED"), Some("GRANTS"), Some("GRAPHVIZ"), + Some("GROUP"), Some("GROUPING"), Some("GROUPS"), Some("HAVING"), Some("HOUR"), + Some("IF"), Some("IGNORE"), Some("IN"), Some("INCLUDING"), Some("INITIAL"), + Some("INNER"), Some("INPUT"), Some("INSERT"), Some("INTERSECT"), Some("INTERVAL"), + Some("INTO"), Some("INVOKER"), Some("IO"), Some("IS"), Some("ISOLATION"), + Some("JOIN"), Some("JSON"), Some("JSON_ARRAY"), Some("JSON_EXISTS"), Some("JSON_OBJECT"), + Some("JSON_QUERY"), Some("JSON_VALUE"), Some("KEEP"), Some("KEY"), Some("KEYS"), + Some("LAST"), Some("LATERAL"), Some("LEADING"), Some("LEFT"), Some("LEVEL"), + Some("LIKE"), Some("LIMIT"), Some("LISTAGG"), Some("LOCAL"), Some("LOCALTIME"), + Some("LOCALTIMESTAMP"), Some("LOGICAL"), Some("MAP"), Some("MATCH"), Some("MATCHED"), + Some("MATCHES"), Some("MATCH_RECOGNIZE"), Some("MATERIALIZED"), Some("MEASURES"), + Some("MERGE"), Some("MINUTE"), Some("MONTH"), Some("NATURAL"), Some("NEXT"), + Some("NFC"), Some("NFD"), Some("NFKC"), Some("NFKD"), Some("NO"), Some("NONE"), + Some("NORMALIZE"), Some("NOT"), Some("NULL"), Some("NULLIF"), Some("NULLS"), + Some("OBJECT"), Some("OF"), Some("OFFSET"), Some("OMIT"), Some("ON"), + Some("ONE"), Some("ONLY"), Some("OPTION"), Some("OR"), Some("ORDER"), + Some("ORDINALITY"), Some("OUTER"), Some("OUTPUT"), Some("OVER"), Some("OVERFLOW"), + Some("PARTITION"), Some("PARTITIONS"), Some("PASSING"), Some("PAST"), + Some("PATH"), Some("PATTERN"), Some("PER"), Some("PERIOD"), Some("PERMUTE"), + Some("POSITION"), Some("PRECEDING"), Some("PRECISION"), Some("PREPARE"), + Some("PRIVILEGES"), Some("PROPERTIES"), Some("PRUNE"), Some("QUOTES"), + Some("RANGE"), Some("READ"), Some("RECURSIVE"), Some("REFRESH"), Some("RENAME"), + Some("REPEATABLE"), Some("REPLACE"), Some("RESET"), Some("RESPECT"), Some("RESTRICT"), + Some("RETURNING"), Some("REVOKE"), Some("RIGHT"), Some("ROLE"), Some("ROLES"), + Some("ROLLBACK"), Some("ROLLUP"), Some("ROW"), Some("ROWS"), Some("RUNNING"), + Some("SCALAR"), Some("SCHEMA"), Some("SCHEMAS"), Some("SECOND"), Some("SECURITY"), + Some("SEEK"), Some("SELECT"), Some("SERIALIZABLE"), Some("SESSION"), Some("SET"), + Some("SETS"), Some("SHOW"), Some("SOME"), Some("START"), Some("STATS"), + Some("SUBSET"), Some("SUBSTRING"), Some("SYSTEM"), Some("TABLE"), Some("TABLES"), + Some("TABLESAMPLE"), Some("TEXT"), Some("TEXT_STRING"), Some("THEN"), + Some("TIES"), Some("TIME"), Some("TIMESTAMP"), Some("TO"), Some("TRAILING"), + Some("TRANSACTION"), Some("TRIM"), Some("TRUE"), Some("TRUNCATE"), Some("TRY_CAST"), + Some("TYPE"), Some("UESCAPE"), Some("UNBOUNDED"), Some("UNCOMMITTED"), + Some("UNCONDITIONAL"), Some("UNION"), Some("UNIQUE"), Some("UNKNOWN"), + Some("UNMATCHED"), Some("UNNEST"), Some("UPDATE"), Some("USE"), Some("USER"), + Some("USING"), Some("UTF16"), Some("UTF32"), Some("UTF8"), Some("VALIDATE"), + Some("VALUE"), Some("VALUES"), Some("VERBOSE"), Some("VERSION"), Some("VIEW"), + Some("WHEN"), Some("WHERE"), Some("WINDOW"), Some("WITH"), Some("WITHIN"), + Some("WITHOUT"), Some("WORK"), Some("WRAPPER"), Some("WRITE"), Some("YEAR"), + Some("ZONE"), Some("EQ"), Some("NEQ"), Some("LT"), Some("LTE"), Some("GT"), + Some("GTE"), Some("PLUS"), Some("MINUS"), Some("ASTERISK"), Some("SLASH"), + Some("PERCENT"), Some("CONCAT"), Some("QUESTION_MARK"), Some("STRING"), + Some("UNICODE_STRING"), Some("BINARY_LITERAL"), Some("INTEGER_VALUE"), + Some("DECIMAL_VALUE"), Some("DOUBLE_VALUE"), Some("IDENTIFIER"), Some("DIGIT_IDENTIFIER"), + Some("QUOTED_IDENTIFIER"), Some("BACKQUOTED_IDENTIFIER"), Some("SIMPLE_COMMENT"), + Some("BRACKETED_COMMENT"), Some("WS"), Some("UNRECOGNIZED"), Some("DELIMITER") + ]; + lazy_static!{ + static ref _shared_context_cache: Arc = Arc::new(PredictionContextCache::new()); + static ref VOCABULARY: Box = Box::new(VocabularyImpl::new(_LITERAL_NAMES.iter(), _SYMBOLIC_NAMES.iter(), None)); + } + + +type BaseParserType<'input, I> = + BaseParser<'input,PrestoParserExt<'input>, I, PrestoParserContextType , dyn PrestoListener<'input> + 'input >; + +type TokenType<'input> = as TokenFactory<'input>>::Tok; + +pub type LocalTokenFactory<'input> = antlr_rust::token_factory::ArenaCommonFactory<'input>; + +pub type PrestoTreeWalker<'input,'a> = + ParseTreeWalker<'input, 'a, PrestoParserContextType , dyn PrestoListener<'input> + 'a>; + +/// Parser for Presto grammar +pub struct PrestoParser<'input,I,H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + base:BaseParserType<'input,I>, + interpreter:Arc, + _shared_context_cache: Box, + pub err_handler: H, +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn get_serialized_atn() -> &'static str { _serializedATN } + + pub fn set_error_strategy(&mut self, strategy: H) { + self.err_handler = strategy + } + + pub fn with_strategy(input: I, strategy: H) -> Self { + antlr_rust::recognizer::check_version("0","3"); + let interpreter = Arc::new(ParserATNSimulator::new( + _ATN.clone(), + _decision_to_DFA.clone(), + _shared_context_cache.clone(), + )); + Self { + base: BaseParser::new_base_parser( + input, + Arc::clone(&interpreter), + PrestoParserExt{ + _pd: Default::default(), + } + ), + interpreter, + _shared_context_cache: Box::new(PredictionContextCache::new()), + err_handler: strategy, + } + } + +} + +type DynStrategy<'input,I> = Box> + 'input>; + +impl<'input, I> PrestoParser<'input, I, DynStrategy<'input,I>> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, +{ + pub fn with_dyn_strategy(input: I) -> Self{ + Self::with_strategy(input,Box::new(DefaultErrorStrategy::new())) + } +} + +impl<'input, I> PrestoParser<'input, I, DefaultErrorStrategy<'input,PrestoParserContextType>> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, +{ + pub fn new(input: I) -> Self{ + Self::with_strategy(input,DefaultErrorStrategy::new()) + } +} + +/// Trait for monomorphized trait object that corresponds to the nodes of parse tree generated for PrestoParser +pub trait PrestoParserContext<'input>: + for<'x> Listenable + 'x > + + ParserRuleContext<'input, TF=LocalTokenFactory<'input>, Ctx=PrestoParserContextType> +{} + +antlr_rust::coerce_from!{ 'input : PrestoParserContext<'input> } + +impl<'input> PrestoParserContext<'input> for TerminalNode<'input,PrestoParserContextType> {} +impl<'input> PrestoParserContext<'input> for ErrorNode<'input,PrestoParserContextType> {} + +antlr_rust::tid! { impl<'input> TidAble<'input> for dyn PrestoParserContext<'input> + 'input } + +antlr_rust::tid! { impl<'input> TidAble<'input> for dyn PrestoListener<'input> + 'input } + +pub struct PrestoParserContextType; +antlr_rust::tid!{PrestoParserContextType} + +impl<'input> ParserNodeType<'input> for PrestoParserContextType{ + type TF = LocalTokenFactory<'input>; + type Type = dyn PrestoParserContext<'input> + 'input; +} + +impl<'input, I, H> Deref for PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + type Target = BaseParserType<'input,I>; + + fn deref(&self) -> &Self::Target { + &self.base + } +} + +impl<'input, I, H> DerefMut for PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.base + } +} + +pub struct PrestoParserExt<'input>{ + _pd: PhantomData<&'input str>, +} + +impl<'input> PrestoParserExt<'input>{ +} +antlr_rust::tid! { PrestoParserExt<'a> } + +impl<'input> TokenAware<'input> for PrestoParserExt<'input>{ + type TF = LocalTokenFactory<'input>; +} + +impl<'input,I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>> ParserRecog<'input, BaseParserType<'input,I>> for PrestoParserExt<'input>{} + +impl<'input,I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>> Actions<'input, BaseParserType<'input,I>> for PrestoParserExt<'input>{ + fn get_grammar_file_name(&self) -> & str{ "Presto.g4"} + + fn get_rule_names(&self) -> &[& str] {&ruleNames} + + fn get_vocabulary(&self) -> &dyn Vocabulary { &**VOCABULARY } + fn sempred(_localctx: Option<&(dyn PrestoParserContext<'input> + 'input)>, rule_index: isize, pred_index: isize, + recog:&mut BaseParserType<'input,I> + )->bool{ + match rule_index { + 18 => PrestoParser::<'input,I,_>::queryTerm_sempred(_localctx.and_then(|x|x.downcast_ref()), pred_index, recog), + 31 => PrestoParser::<'input,I,_>::relation_sempred(_localctx.and_then(|x|x.downcast_ref()), pred_index, recog), + 57 => PrestoParser::<'input,I,_>::booleanExpression_sempred(_localctx.and_then(|x|x.downcast_ref()), pred_index, recog), + 59 => PrestoParser::<'input,I,_>::valueExpression_sempred(_localctx.and_then(|x|x.downcast_ref()), pred_index, recog), + 60 => PrestoParser::<'input,I,_>::primaryExpression_sempred(_localctx.and_then(|x|x.downcast_ref()), pred_index, recog), + 80 => PrestoParser::<'input,I,_>::type__sempred(_localctx.and_then(|x|x.downcast_ref()), pred_index, recog), + 90 => PrestoParser::<'input,I,_>::rowPattern_sempred(_localctx.and_then(|x|x.downcast_ref()), pred_index, recog), + _ => true + } + } +} + +impl<'input, I> PrestoParser<'input, I, DefaultErrorStrategy<'input,PrestoParserContextType>> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, +{ + fn queryTerm_sempred(_localctx: Option<&QueryTermContext<'input>>, pred_index:isize, + recog:&mut ::Target + ) -> bool { + match pred_index { + 0=>{ + recog.precpred(None, 2) + } + 1=>{ + recog.precpred(None, 1) + } + _ => true + } + } + fn relation_sempred(_localctx: Option<&RelationContext<'input>>, pred_index:isize, + recog:&mut ::Target + ) -> bool { + match pred_index { + 2=>{ + recog.precpred(None, 2) + } + _ => true + } + } + fn booleanExpression_sempred(_localctx: Option<&BooleanExpressionContext<'input>>, pred_index:isize, + recog:&mut ::Target + ) -> bool { + match pred_index { + 3=>{ + recog.precpred(None, 2) + } + 4=>{ + recog.precpred(None, 1) + } + _ => true + } + } + fn valueExpression_sempred(_localctx: Option<&ValueExpressionContext<'input>>, pred_index:isize, + recog:&mut ::Target + ) -> bool { + match pred_index { + 5=>{ + recog.precpred(None, 3) + } + 6=>{ + recog.precpred(None, 2) + } + 7=>{ + recog.precpred(None, 1) + } + 8=>{ + recog.precpred(None, 5) + } + _ => true + } + } + fn primaryExpression_sempred(_localctx: Option<&PrimaryExpressionContext<'input>>, pred_index:isize, + recog:&mut ::Target + ) -> bool { + match pred_index { + 9=>{ + recog.precpred(None, 24) + } + 10=>{ + recog.precpred(None, 22) + } + _ => true + } + } + fn type__sempred(_localctx: Option<&Type_Context<'input>>, pred_index:isize, + recog:&mut ::Target + ) -> bool { + match pred_index { + 11=>{ + recog.precpred(None, 2) + } + _ => true + } + } + fn rowPattern_sempred(_localctx: Option<&RowPatternContext<'input>>, pred_index:isize, + recog:&mut ::Target + ) -> bool { + match pred_index { + 12=>{ + recog.precpred(None, 2) + } + 13=>{ + recog.precpred(None, 1) + } + _ => true + } + } +} +//------------------- singleStatement ---------------- +pub type SingleStatementContextAll<'input> = SingleStatementContext<'input>; + + +pub type SingleStatementContext<'input> = BaseParserRuleContext<'input,SingleStatementContextExt<'input>>; + +#[derive(Clone)] +pub struct SingleStatementContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SingleStatementContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SingleStatementContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_singleStatement(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_singleStatement(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for SingleStatementContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_singleStatement } + //fn type_rule_index() -> usize where Self: Sized { RULE_singleStatement } +} +antlr_rust::tid!{SingleStatementContextExt<'a>} + +impl<'input> SingleStatementContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SingleStatementContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait SingleStatementContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn statement(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token EOF +/// Returns `None` if there is no child corresponding to token EOF +fn EOF(&self) -> Option>> where Self:Sized{ + self.get_token(EOF, 0) +} + +} + +impl<'input> SingleStatementContextAttrs<'input> for SingleStatementContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn singleStatement(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SingleStatementContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 0, RULE_singleStatement); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule statement*/ + recog.base.set_state(220); + recog.statement()?; + + recog.base.set_state(221); + recog.base.match_token(EOF,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- standaloneExpression ---------------- +pub type StandaloneExpressionContextAll<'input> = StandaloneExpressionContext<'input>; + + +pub type StandaloneExpressionContext<'input> = BaseParserRuleContext<'input,StandaloneExpressionContextExt<'input>>; + +#[derive(Clone)] +pub struct StandaloneExpressionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for StandaloneExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StandaloneExpressionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_standaloneExpression(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_standaloneExpression(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for StandaloneExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_standaloneExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_standaloneExpression } +} +antlr_rust::tid!{StandaloneExpressionContextExt<'a>} + +impl<'input> StandaloneExpressionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,StandaloneExpressionContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait StandaloneExpressionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token EOF +/// Returns `None` if there is no child corresponding to token EOF +fn EOF(&self) -> Option>> where Self:Sized{ + self.get_token(EOF, 0) +} + +} + +impl<'input> StandaloneExpressionContextAttrs<'input> for StandaloneExpressionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn standaloneExpression(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = StandaloneExpressionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 2, RULE_standaloneExpression); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule expression*/ + recog.base.set_state(223); + recog.expression()?; + + recog.base.set_state(224); + recog.base.match_token(EOF,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- standalonePathSpecification ---------------- +pub type StandalonePathSpecificationContextAll<'input> = StandalonePathSpecificationContext<'input>; + + +pub type StandalonePathSpecificationContext<'input> = BaseParserRuleContext<'input,StandalonePathSpecificationContextExt<'input>>; + +#[derive(Clone)] +pub struct StandalonePathSpecificationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for StandalonePathSpecificationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StandalonePathSpecificationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_standalonePathSpecification(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_standalonePathSpecification(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for StandalonePathSpecificationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_standalonePathSpecification } + //fn type_rule_index() -> usize where Self: Sized { RULE_standalonePathSpecification } +} +antlr_rust::tid!{StandalonePathSpecificationContextExt<'a>} + +impl<'input> StandalonePathSpecificationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,StandalonePathSpecificationContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait StandalonePathSpecificationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn pathSpecification(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token EOF +/// Returns `None` if there is no child corresponding to token EOF +fn EOF(&self) -> Option>> where Self:Sized{ + self.get_token(EOF, 0) +} + +} + +impl<'input> StandalonePathSpecificationContextAttrs<'input> for StandalonePathSpecificationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn standalonePathSpecification(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = StandalonePathSpecificationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 4, RULE_standalonePathSpecification); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule pathSpecification*/ + recog.base.set_state(226); + recog.pathSpecification()?; + + recog.base.set_state(227); + recog.base.match_token(EOF,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- standaloneType ---------------- +pub type StandaloneTypeContextAll<'input> = StandaloneTypeContext<'input>; + + +pub type StandaloneTypeContext<'input> = BaseParserRuleContext<'input,StandaloneTypeContextExt<'input>>; + +#[derive(Clone)] +pub struct StandaloneTypeContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for StandaloneTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StandaloneTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_standaloneType(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_standaloneType(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for StandaloneTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_standaloneType } + //fn type_rule_index() -> usize where Self: Sized { RULE_standaloneType } +} +antlr_rust::tid!{StandaloneTypeContextExt<'a>} + +impl<'input> StandaloneTypeContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,StandaloneTypeContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait StandaloneTypeContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token EOF +/// Returns `None` if there is no child corresponding to token EOF +fn EOF(&self) -> Option>> where Self:Sized{ + self.get_token(EOF, 0) +} + +} + +impl<'input> StandaloneTypeContextAttrs<'input> for StandaloneTypeContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn standaloneType(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = StandaloneTypeContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 6, RULE_standaloneType); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule type_*/ + recog.base.set_state(229); + recog.type__rec(0)?; + + recog.base.set_state(230); + recog.base.match_token(EOF,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- standaloneRowPattern ---------------- +pub type StandaloneRowPatternContextAll<'input> = StandaloneRowPatternContext<'input>; + + +pub type StandaloneRowPatternContext<'input> = BaseParserRuleContext<'input,StandaloneRowPatternContextExt<'input>>; + +#[derive(Clone)] +pub struct StandaloneRowPatternContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for StandaloneRowPatternContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StandaloneRowPatternContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_standaloneRowPattern(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_standaloneRowPattern(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for StandaloneRowPatternContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_standaloneRowPattern } + //fn type_rule_index() -> usize where Self: Sized { RULE_standaloneRowPattern } +} +antlr_rust::tid!{StandaloneRowPatternContextExt<'a>} + +impl<'input> StandaloneRowPatternContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,StandaloneRowPatternContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait StandaloneRowPatternContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn rowPattern(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token EOF +/// Returns `None` if there is no child corresponding to token EOF +fn EOF(&self) -> Option>> where Self:Sized{ + self.get_token(EOF, 0) +} + +} + +impl<'input> StandaloneRowPatternContextAttrs<'input> for StandaloneRowPatternContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn standaloneRowPattern(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = StandaloneRowPatternContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 8, RULE_standaloneRowPattern); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule rowPattern*/ + recog.base.set_state(232); + recog.rowPattern_rec(0)?; + + recog.base.set_state(233); + recog.base.match_token(EOF,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- statement ---------------- +#[derive(Debug)] +pub enum StatementContextAll<'input>{ + ExplainContext(ExplainContext<'input>), + PrepareContext(PrepareContext<'input>), + DropMaterializedViewContext(DropMaterializedViewContext<'input>), + SetMaterializedViewPropertiesContext(SetMaterializedViewPropertiesContext<'input>), + UseContext(UseContext<'input>), + DeallocateContext(DeallocateContext<'input>), + RenameTableContext(RenameTableContext<'input>), + CommitContext(CommitContext<'input>), + CreateRoleContext(CreateRoleContext<'input>), + DropColumnContext(DropColumnContext<'input>), + DropViewContext(DropViewContext<'input>), + ShowTablesContext(ShowTablesContext<'input>), + SetViewAuthorizationContext(SetViewAuthorizationContext<'input>), + ShowCatalogsContext(ShowCatalogsContext<'input>), + ShowRolesContext(ShowRolesContext<'input>), + MergeContext(MergeContext<'input>), + RenameColumnContext(RenameColumnContext<'input>), + CommentColumnContext(CommentColumnContext<'input>), + RevokeRolesContext(RevokeRolesContext<'input>), + ShowCreateTableContext(ShowCreateTableContext<'input>), + ShowColumnsContext(ShowColumnsContext<'input>), + ShowRoleGrantsContext(ShowRoleGrantsContext<'input>), + AddColumnContext(AddColumnContext<'input>), + DenyContext(DenyContext<'input>), + ResetSessionContext(ResetSessionContext<'input>), + InsertIntoContext(InsertIntoContext<'input>), + ShowSessionContext(ShowSessionContext<'input>), + CreateSchemaContext(CreateSchemaContext<'input>), + ExplainAnalyzeContext(ExplainAnalyzeContext<'input>), + ExecuteContext(ExecuteContext<'input>), + RenameSchemaContext(RenameSchemaContext<'input>), + DropRoleContext(DropRoleContext<'input>), + AnalyzeContext(AnalyzeContext<'input>), + SetRoleContext(SetRoleContext<'input>), + ShowGrantsContext(ShowGrantsContext<'input>), + DropSchemaContext(DropSchemaContext<'input>), + SetTableAuthorizationContext(SetTableAuthorizationContext<'input>), + ShowCreateViewContext(ShowCreateViewContext<'input>), + CreateTableContext(CreateTableContext<'input>), + StartTransactionContext(StartTransactionContext<'input>), + CreateTableAsSelectContext(CreateTableAsSelectContext<'input>), + CommentViewContext(CommentViewContext<'input>), + ShowStatsContext(ShowStatsContext<'input>), + ShowCreateSchemaContext(ShowCreateSchemaContext<'input>), + RevokeContext(RevokeContext<'input>), + UpdateContext(UpdateContext<'input>), + TableExecuteContext(TableExecuteContext<'input>), + DeleteContext(DeleteContext<'input>), + DescribeInputContext(DescribeInputContext<'input>), + ShowStatsForQueryContext(ShowStatsForQueryContext<'input>), + SetColumnTypeContext(SetColumnTypeContext<'input>), + StatementDefaultContext(StatementDefaultContext<'input>), + SetTimeZoneContext(SetTimeZoneContext<'input>), + TruncateTableContext(TruncateTableContext<'input>), + CreateMaterializedViewContext(CreateMaterializedViewContext<'input>), + SetSessionContext(SetSessionContext<'input>), + CreateViewContext(CreateViewContext<'input>), + RenameMaterializedViewContext(RenameMaterializedViewContext<'input>), + ShowSchemasContext(ShowSchemasContext<'input>), + DropTableContext(DropTableContext<'input>), + SetSchemaAuthorizationContext(SetSchemaAuthorizationContext<'input>), + RollbackContext(RollbackContext<'input>), + CommentTableContext(CommentTableContext<'input>), + RenameViewContext(RenameViewContext<'input>), + SetPathContext(SetPathContext<'input>), + GrantRolesContext(GrantRolesContext<'input>), + CallContext(CallContext<'input>), + RefreshMaterializedViewContext(RefreshMaterializedViewContext<'input>), + ShowCreateMaterializedViewContext(ShowCreateMaterializedViewContext<'input>), + ShowFunctionsContext(ShowFunctionsContext<'input>), + DescribeOutputContext(DescribeOutputContext<'input>), + GrantContext(GrantContext<'input>), + SetTablePropertiesContext(SetTablePropertiesContext<'input>), +Error(StatementContext<'input>) +} +antlr_rust::tid!{StatementContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for StatementContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for StatementContextAll<'input>{} + +impl<'input> Deref for StatementContextAll<'input>{ + type Target = dyn StatementContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use StatementContextAll::*; + match self{ + ExplainContext(inner) => inner, + PrepareContext(inner) => inner, + DropMaterializedViewContext(inner) => inner, + SetMaterializedViewPropertiesContext(inner) => inner, + UseContext(inner) => inner, + DeallocateContext(inner) => inner, + RenameTableContext(inner) => inner, + CommitContext(inner) => inner, + CreateRoleContext(inner) => inner, + DropColumnContext(inner) => inner, + DropViewContext(inner) => inner, + ShowTablesContext(inner) => inner, + SetViewAuthorizationContext(inner) => inner, + ShowCatalogsContext(inner) => inner, + ShowRolesContext(inner) => inner, + MergeContext(inner) => inner, + RenameColumnContext(inner) => inner, + CommentColumnContext(inner) => inner, + RevokeRolesContext(inner) => inner, + ShowCreateTableContext(inner) => inner, + ShowColumnsContext(inner) => inner, + ShowRoleGrantsContext(inner) => inner, + AddColumnContext(inner) => inner, + DenyContext(inner) => inner, + ResetSessionContext(inner) => inner, + InsertIntoContext(inner) => inner, + ShowSessionContext(inner) => inner, + CreateSchemaContext(inner) => inner, + ExplainAnalyzeContext(inner) => inner, + ExecuteContext(inner) => inner, + RenameSchemaContext(inner) => inner, + DropRoleContext(inner) => inner, + AnalyzeContext(inner) => inner, + SetRoleContext(inner) => inner, + ShowGrantsContext(inner) => inner, + DropSchemaContext(inner) => inner, + SetTableAuthorizationContext(inner) => inner, + ShowCreateViewContext(inner) => inner, + CreateTableContext(inner) => inner, + StartTransactionContext(inner) => inner, + CreateTableAsSelectContext(inner) => inner, + CommentViewContext(inner) => inner, + ShowStatsContext(inner) => inner, + ShowCreateSchemaContext(inner) => inner, + RevokeContext(inner) => inner, + UpdateContext(inner) => inner, + TableExecuteContext(inner) => inner, + DeleteContext(inner) => inner, + DescribeInputContext(inner) => inner, + ShowStatsForQueryContext(inner) => inner, + SetColumnTypeContext(inner) => inner, + StatementDefaultContext(inner) => inner, + SetTimeZoneContext(inner) => inner, + TruncateTableContext(inner) => inner, + CreateMaterializedViewContext(inner) => inner, + SetSessionContext(inner) => inner, + CreateViewContext(inner) => inner, + RenameMaterializedViewContext(inner) => inner, + ShowSchemasContext(inner) => inner, + DropTableContext(inner) => inner, + SetSchemaAuthorizationContext(inner) => inner, + RollbackContext(inner) => inner, + CommentTableContext(inner) => inner, + RenameViewContext(inner) => inner, + SetPathContext(inner) => inner, + GrantRolesContext(inner) => inner, + CallContext(inner) => inner, + RefreshMaterializedViewContext(inner) => inner, + ShowCreateMaterializedViewContext(inner) => inner, + ShowFunctionsContext(inner) => inner, + DescribeOutputContext(inner) => inner, + GrantContext(inner) => inner, + SetTablePropertiesContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for StatementContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type StatementContext<'input> = BaseParserRuleContext<'input,StatementContextExt<'input>>; + +#[derive(Clone)] +pub struct StatementContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for StatementContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StatementContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for StatementContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} +antlr_rust::tid!{StatementContextExt<'a>} + +impl<'input> StatementContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + StatementContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,StatementContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait StatementContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> StatementContextAttrs<'input> for StatementContext<'input>{} + +pub type ExplainContext<'input> = BaseParserRuleContext<'input,ExplainContextExt<'input>>; + +pub trait ExplainContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token EXPLAIN + /// Returns `None` if there is no child corresponding to token EXPLAIN + fn EXPLAIN(&self) -> Option>> where Self:Sized{ + self.get_token(EXPLAIN, 0) + } + fn statement(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn explainOption_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn explainOption(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> ExplainContextAttrs<'input> for ExplainContext<'input>{} + +pub struct ExplainContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExplainContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExplainContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExplainContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_explain(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExplainContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ExplainContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExplainContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ExplainContext<'input> {} + +impl<'input> ExplainContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ExplainContext( + BaseParserRuleContext::copy_from(ctx,ExplainContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PrepareContext<'input> = BaseParserRuleContext<'input,PrepareContextExt<'input>>; + +pub trait PrepareContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token PREPARE + /// Returns `None` if there is no child corresponding to token PREPARE + fn PREPARE(&self) -> Option>> where Self:Sized{ + self.get_token(PREPARE, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + fn statement(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> PrepareContextAttrs<'input> for PrepareContext<'input>{} + +pub struct PrepareContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PrepareContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PrepareContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PrepareContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_prepare(self); + } +} + +impl<'input> CustomRuleContext<'input> for PrepareContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for PrepareContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PrepareContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for PrepareContext<'input> {} + +impl<'input> PrepareContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::PrepareContext( + BaseParserRuleContext::copy_from(ctx,PrepareContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DropMaterializedViewContext<'input> = BaseParserRuleContext<'input,DropMaterializedViewContextExt<'input>>; + +pub trait DropMaterializedViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DROP + /// Returns `None` if there is no child corresponding to token DROP + fn DROP(&self) -> Option>> where Self:Sized{ + self.get_token(DROP, 0) + } + /// Retrieves first TerminalNode corresponding to token MATERIALIZED + /// Returns `None` if there is no child corresponding to token MATERIALIZED + fn MATERIALIZED(&self) -> Option>> where Self:Sized{ + self.get_token(MATERIALIZED, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } +} + +impl<'input> DropMaterializedViewContextAttrs<'input> for DropMaterializedViewContext<'input>{} + +pub struct DropMaterializedViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DropMaterializedViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DropMaterializedViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DropMaterializedViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dropMaterializedView(self); + } +} + +impl<'input> CustomRuleContext<'input> for DropMaterializedViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DropMaterializedViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DropMaterializedViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DropMaterializedViewContext<'input> {} + +impl<'input> DropMaterializedViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DropMaterializedViewContext( + BaseParserRuleContext::copy_from(ctx,DropMaterializedViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetMaterializedViewPropertiesContext<'input> = BaseParserRuleContext<'input,SetMaterializedViewPropertiesContextExt<'input>>; + +pub trait SetMaterializedViewPropertiesContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token MATERIALIZED + /// Returns `None` if there is no child corresponding to token MATERIALIZED + fn MATERIALIZED(&self) -> Option>> where Self:Sized{ + self.get_token(MATERIALIZED, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token PROPERTIES + /// Returns `None` if there is no child corresponding to token PROPERTIES + fn PROPERTIES(&self) -> Option>> where Self:Sized{ + self.get_token(PROPERTIES, 0) + } + fn propertyAssignments(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetMaterializedViewPropertiesContextAttrs<'input> for SetMaterializedViewPropertiesContext<'input>{} + +pub struct SetMaterializedViewPropertiesContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetMaterializedViewPropertiesContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetMaterializedViewPropertiesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetMaterializedViewPropertiesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setMaterializedViewProperties(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetMaterializedViewPropertiesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetMaterializedViewPropertiesContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetMaterializedViewPropertiesContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetMaterializedViewPropertiesContext<'input> {} + +impl<'input> SetMaterializedViewPropertiesContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetMaterializedViewPropertiesContext( + BaseParserRuleContext::copy_from(ctx,SetMaterializedViewPropertiesContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type UseContext<'input> = BaseParserRuleContext<'input,UseContextExt<'input>>; + +pub trait UseContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token USE + /// Returns `None` if there is no child corresponding to token USE + fn USE(&self) -> Option>> where Self:Sized{ + self.get_token(USE, 0) + } + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> UseContextAttrs<'input> for UseContext<'input>{} + +pub struct UseContextExt<'input>{ + base:StatementContextExt<'input>, + pub schema: Option>>, + pub catalog: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UseContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UseContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UseContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_use(self); + } +} + +impl<'input> CustomRuleContext<'input> for UseContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for UseContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UseContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for UseContext<'input> {} + +impl<'input> UseContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::UseContext( + BaseParserRuleContext::copy_from(ctx,UseContextExt{ + schema:None, catalog:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DeallocateContext<'input> = BaseParserRuleContext<'input,DeallocateContextExt<'input>>; + +pub trait DeallocateContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DEALLOCATE + /// Returns `None` if there is no child corresponding to token DEALLOCATE + fn DEALLOCATE(&self) -> Option>> where Self:Sized{ + self.get_token(DEALLOCATE, 0) + } + /// Retrieves first TerminalNode corresponding to token PREPARE + /// Returns `None` if there is no child corresponding to token PREPARE + fn PREPARE(&self) -> Option>> where Self:Sized{ + self.get_token(PREPARE, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> DeallocateContextAttrs<'input> for DeallocateContext<'input>{} + +pub struct DeallocateContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DeallocateContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DeallocateContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DeallocateContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_deallocate(self); + } +} + +impl<'input> CustomRuleContext<'input> for DeallocateContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DeallocateContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DeallocateContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DeallocateContext<'input> {} + +impl<'input> DeallocateContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DeallocateContext( + BaseParserRuleContext::copy_from(ctx,DeallocateContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RenameTableContext<'input> = BaseParserRuleContext<'input,RenameTableContextExt<'input>>; + +pub trait RenameTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token RENAME + /// Returns `None` if there is no child corresponding to token RENAME + fn RENAME(&self) -> Option>> where Self:Sized{ + self.get_token(RENAME, 0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn qualifiedName_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn qualifiedName(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } +} + +impl<'input> RenameTableContextAttrs<'input> for RenameTableContext<'input>{} + +pub struct RenameTableContextExt<'input>{ + base:StatementContextExt<'input>, + pub from: Option>>, + pub to: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RenameTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RenameTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RenameTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_renameTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for RenameTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RenameTableContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RenameTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RenameTableContext<'input> {} + +impl<'input> RenameTableContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RenameTableContext( + BaseParserRuleContext::copy_from(ctx,RenameTableContextExt{ + from:None, to:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CommitContext<'input> = BaseParserRuleContext<'input,CommitContextExt<'input>>; + +pub trait CommitContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token COMMIT + /// Returns `None` if there is no child corresponding to token COMMIT + fn COMMIT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMIT, 0) + } + /// Retrieves first TerminalNode corresponding to token WORK + /// Returns `None` if there is no child corresponding to token WORK + fn WORK(&self) -> Option>> where Self:Sized{ + self.get_token(WORK, 0) + } +} + +impl<'input> CommitContextAttrs<'input> for CommitContext<'input>{} + +pub struct CommitContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CommitContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CommitContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CommitContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_commit(self); + } +} + +impl<'input> CustomRuleContext<'input> for CommitContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CommitContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CommitContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CommitContext<'input> {} + +impl<'input> CommitContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CommitContext( + BaseParserRuleContext::copy_from(ctx,CommitContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CreateRoleContext<'input> = BaseParserRuleContext<'input,CreateRoleContextExt<'input>>; + +pub trait CreateRoleContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token ROLE + /// Returns `None` if there is no child corresponding to token ROLE + fn ROLE(&self) -> Option>> where Self:Sized{ + self.get_token(ROLE, 0) + } + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + /// Retrieves first TerminalNode corresponding to token ADMIN + /// Returns `None` if there is no child corresponding to token ADMIN + fn ADMIN(&self) -> Option>> where Self:Sized{ + self.get_token(ADMIN, 0) + } + fn grantor(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } +} + +impl<'input> CreateRoleContextAttrs<'input> for CreateRoleContext<'input>{} + +pub struct CreateRoleContextExt<'input>{ + base:StatementContextExt<'input>, + pub name: Option>>, + pub catalog: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CreateRoleContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CreateRoleContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CreateRoleContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_createRole(self); + } +} + +impl<'input> CustomRuleContext<'input> for CreateRoleContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CreateRoleContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CreateRoleContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CreateRoleContext<'input> {} + +impl<'input> CreateRoleContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CreateRoleContext( + BaseParserRuleContext::copy_from(ctx,CreateRoleContextExt{ + name:None, catalog:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DropColumnContext<'input> = BaseParserRuleContext<'input,DropColumnContextExt<'input>>; + +pub trait DropColumnContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token DROP + /// Returns `None` if there is no child corresponding to token DROP + fn DROP(&self) -> Option>> where Self:Sized{ + self.get_token(DROP, 0) + } + /// Retrieves first TerminalNode corresponding to token COLUMN + /// Returns `None` if there is no child corresponding to token COLUMN + fn COLUMN(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMN, 0) + } + fn qualifiedName_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn qualifiedName(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token IF in current rule + fn IF_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token IF, starting from 0. + /// Returns `None` if number of children corresponding to token IF is less or equal than `i`. + fn IF(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(IF, i) + } + /// Retrieves all `TerminalNode`s corresponding to token EXISTS in current rule + fn EXISTS_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token EXISTS, starting from 0. + /// Returns `None` if number of children corresponding to token EXISTS is less or equal than `i`. + fn EXISTS(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(EXISTS, i) + } +} + +impl<'input> DropColumnContextAttrs<'input> for DropColumnContext<'input>{} + +pub struct DropColumnContextExt<'input>{ + base:StatementContextExt<'input>, + pub tableName: Option>>, + pub column: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DropColumnContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DropColumnContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DropColumnContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dropColumn(self); + } +} + +impl<'input> CustomRuleContext<'input> for DropColumnContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DropColumnContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DropColumnContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DropColumnContext<'input> {} + +impl<'input> DropColumnContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DropColumnContext( + BaseParserRuleContext::copy_from(ctx,DropColumnContextExt{ + tableName:None, column:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DropViewContext<'input> = BaseParserRuleContext<'input,DropViewContextExt<'input>>; + +pub trait DropViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DROP + /// Returns `None` if there is no child corresponding to token DROP + fn DROP(&self) -> Option>> where Self:Sized{ + self.get_token(DROP, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } +} + +impl<'input> DropViewContextAttrs<'input> for DropViewContext<'input>{} + +pub struct DropViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DropViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DropViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DropViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dropView(self); + } +} + +impl<'input> CustomRuleContext<'input> for DropViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DropViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DropViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DropViewContext<'input> {} + +impl<'input> DropViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DropViewContext( + BaseParserRuleContext::copy_from(ctx,DropViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowTablesContext<'input> = BaseParserRuleContext<'input,ShowTablesContextExt<'input>>; + +pub trait ShowTablesContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLES + /// Returns `None` if there is no child corresponding to token TABLES + fn TABLES(&self) -> Option>> where Self:Sized{ + self.get_token(TABLES, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token LIKE + /// Returns `None` if there is no child corresponding to token LIKE + fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } + fn string_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn string(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ESCAPE + /// Returns `None` if there is no child corresponding to token ESCAPE + fn ESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(ESCAPE, 0) + } +} + +impl<'input> ShowTablesContextAttrs<'input> for ShowTablesContext<'input>{} + +pub struct ShowTablesContextExt<'input>{ + base:StatementContextExt<'input>, + pub pattern: Option>>, + pub escape: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowTablesContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowTablesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowTablesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showTables(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowTablesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowTablesContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowTablesContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowTablesContext<'input> {} + +impl<'input> ShowTablesContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowTablesContext( + BaseParserRuleContext::copy_from(ctx,ShowTablesContextExt{ + pattern:None, escape:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetViewAuthorizationContext<'input> = BaseParserRuleContext<'input,SetViewAuthorizationContextExt<'input>>; + +pub trait SetViewAuthorizationContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token AUTHORIZATION + /// Returns `None` if there is no child corresponding to token AUTHORIZATION + fn AUTHORIZATION(&self) -> Option>> where Self:Sized{ + self.get_token(AUTHORIZATION, 0) + } + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetViewAuthorizationContextAttrs<'input> for SetViewAuthorizationContext<'input>{} + +pub struct SetViewAuthorizationContextExt<'input>{ + base:StatementContextExt<'input>, + pub from: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetViewAuthorizationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetViewAuthorizationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetViewAuthorizationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setViewAuthorization(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetViewAuthorizationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetViewAuthorizationContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetViewAuthorizationContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetViewAuthorizationContext<'input> {} + +impl<'input> SetViewAuthorizationContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetViewAuthorizationContext( + BaseParserRuleContext::copy_from(ctx,SetViewAuthorizationContextExt{ + from:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowCatalogsContext<'input> = BaseParserRuleContext<'input,ShowCatalogsContextExt<'input>>; + +pub trait ShowCatalogsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token CATALOGS + /// Returns `None` if there is no child corresponding to token CATALOGS + fn CATALOGS(&self) -> Option>> where Self:Sized{ + self.get_token(CATALOGS, 0) + } + /// Retrieves first TerminalNode corresponding to token LIKE + /// Returns `None` if there is no child corresponding to token LIKE + fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) + } + fn string_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn string(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ESCAPE + /// Returns `None` if there is no child corresponding to token ESCAPE + fn ESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(ESCAPE, 0) + } +} + +impl<'input> ShowCatalogsContextAttrs<'input> for ShowCatalogsContext<'input>{} + +pub struct ShowCatalogsContextExt<'input>{ + base:StatementContextExt<'input>, + pub pattern: Option>>, + pub escape: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowCatalogsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowCatalogsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowCatalogsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showCatalogs(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowCatalogsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowCatalogsContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowCatalogsContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowCatalogsContext<'input> {} + +impl<'input> ShowCatalogsContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowCatalogsContext( + BaseParserRuleContext::copy_from(ctx,ShowCatalogsContextExt{ + pattern:None, escape:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowRolesContext<'input> = BaseParserRuleContext<'input,ShowRolesContextExt<'input>>; + +pub trait ShowRolesContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token ROLES + /// Returns `None` if there is no child corresponding to token ROLES + fn ROLES(&self) -> Option>> where Self:Sized{ + self.get_token(ROLES, 0) + } + /// Retrieves first TerminalNode corresponding to token CURRENT + /// Returns `None` if there is no child corresponding to token CURRENT + fn CURRENT(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } +} + +impl<'input> ShowRolesContextAttrs<'input> for ShowRolesContext<'input>{} + +pub struct ShowRolesContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowRolesContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowRolesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowRolesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showRoles(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowRolesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowRolesContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowRolesContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowRolesContext<'input> {} + +impl<'input> ShowRolesContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowRolesContext( + BaseParserRuleContext::copy_from(ctx,ShowRolesContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type MergeContext<'input> = BaseParserRuleContext<'input,MergeContextExt<'input>>; + +pub trait MergeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token MERGE + /// Returns `None` if there is no child corresponding to token MERGE + fn MERGE(&self) -> Option>> where Self:Sized{ + self.get_token(MERGE, 0) + } + /// Retrieves first TerminalNode corresponding to token INTO + /// Returns `None` if there is no child corresponding to token INTO + fn INTO(&self) -> Option>> where Self:Sized{ + self.get_token(INTO, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token USING + /// Returns `None` if there is no child corresponding to token USING + fn USING(&self) -> Option>> where Self:Sized{ + self.get_token(USING, 0) + } + fn relation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn mergeCase_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn mergeCase(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } +} + +impl<'input> MergeContextAttrs<'input> for MergeContext<'input>{} + +pub struct MergeContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{MergeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for MergeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MergeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_merge(self); + } +} + +impl<'input> CustomRuleContext<'input> for MergeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for MergeContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for MergeContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for MergeContext<'input> {} + +impl<'input> MergeContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::MergeContext( + BaseParserRuleContext::copy_from(ctx,MergeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RenameColumnContext<'input> = BaseParserRuleContext<'input,RenameColumnContextExt<'input>>; + +pub trait RenameColumnContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token RENAME + /// Returns `None` if there is no child corresponding to token RENAME + fn RENAME(&self) -> Option>> where Self:Sized{ + self.get_token(RENAME, 0) + } + /// Retrieves first TerminalNode corresponding to token COLUMN + /// Returns `None` if there is no child corresponding to token COLUMN + fn COLUMN(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMN, 0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token IF in current rule + fn IF_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token IF, starting from 0. + /// Returns `None` if number of children corresponding to token IF is less or equal than `i`. + fn IF(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(IF, i) + } + /// Retrieves all `TerminalNode`s corresponding to token EXISTS in current rule + fn EXISTS_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token EXISTS, starting from 0. + /// Returns `None` if number of children corresponding to token EXISTS is less or equal than `i`. + fn EXISTS(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(EXISTS, i) + } +} + +impl<'input> RenameColumnContextAttrs<'input> for RenameColumnContext<'input>{} + +pub struct RenameColumnContextExt<'input>{ + base:StatementContextExt<'input>, + pub tableName: Option>>, + pub from: Option>>, + pub to: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RenameColumnContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RenameColumnContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RenameColumnContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_renameColumn(self); + } +} + +impl<'input> CustomRuleContext<'input> for RenameColumnContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RenameColumnContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RenameColumnContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RenameColumnContext<'input> {} + +impl<'input> RenameColumnContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RenameColumnContext( + BaseParserRuleContext::copy_from(ctx,RenameColumnContextExt{ + tableName:None, from:None, to:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CommentColumnContext<'input> = BaseParserRuleContext<'input,CommentColumnContextExt<'input>>; + +pub trait CommentColumnContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token COMMENT + /// Returns `None` if there is no child corresponding to token COMMENT + fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + /// Retrieves first TerminalNode corresponding to token COLUMN + /// Returns `None` if there is no child corresponding to token COLUMN + fn COLUMN(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMN, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IS + /// Returns `None` if there is no child corresponding to token IS + fn IS(&self) -> Option>> where Self:Sized{ + self.get_token(IS, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token NULL + /// Returns `None` if there is no child corresponding to token NULL + fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) + } +} + +impl<'input> CommentColumnContextAttrs<'input> for CommentColumnContext<'input>{} + +pub struct CommentColumnContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CommentColumnContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CommentColumnContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CommentColumnContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_commentColumn(self); + } +} + +impl<'input> CustomRuleContext<'input> for CommentColumnContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CommentColumnContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CommentColumnContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CommentColumnContext<'input> {} + +impl<'input> CommentColumnContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CommentColumnContext( + BaseParserRuleContext::copy_from(ctx,CommentColumnContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RevokeRolesContext<'input> = BaseParserRuleContext<'input,RevokeRolesContextExt<'input>>; + +pub trait RevokeRolesContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token REVOKE + /// Returns `None` if there is no child corresponding to token REVOKE + fn REVOKE(&self) -> Option>> where Self:Sized{ + self.get_token(REVOKE, 0) + } + fn roles(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + fn principal_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn principal(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ADMIN + /// Returns `None` if there is no child corresponding to token ADMIN + fn ADMIN(&self) -> Option>> where Self:Sized{ + self.get_token(ADMIN, 0) + } + /// Retrieves first TerminalNode corresponding to token OPTION + /// Returns `None` if there is no child corresponding to token OPTION + fn OPTION(&self) -> Option>> where Self:Sized{ + self.get_token(OPTION, 0) + } + /// Retrieves first TerminalNode corresponding to token FOR + /// Returns `None` if there is no child corresponding to token FOR + fn FOR(&self) -> Option>> where Self:Sized{ + self.get_token(FOR, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves first TerminalNode corresponding to token GRANTED + /// Returns `None` if there is no child corresponding to token GRANTED + fn GRANTED(&self) -> Option>> where Self:Sized{ + self.get_token(GRANTED, 0) + } + /// Retrieves first TerminalNode corresponding to token BY + /// Returns `None` if there is no child corresponding to token BY + fn BY(&self) -> Option>> where Self:Sized{ + self.get_token(BY, 0) + } + fn grantor(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> RevokeRolesContextAttrs<'input> for RevokeRolesContext<'input>{} + +pub struct RevokeRolesContextExt<'input>{ + base:StatementContextExt<'input>, + pub catalog: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RevokeRolesContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RevokeRolesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RevokeRolesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_revokeRoles(self); + } +} + +impl<'input> CustomRuleContext<'input> for RevokeRolesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RevokeRolesContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RevokeRolesContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RevokeRolesContext<'input> {} + +impl<'input> RevokeRolesContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RevokeRolesContext( + BaseParserRuleContext::copy_from(ctx,RevokeRolesContextExt{ + catalog:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowCreateTableContext<'input> = BaseParserRuleContext<'input,ShowCreateTableContextExt<'input>>; + +pub trait ShowCreateTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ShowCreateTableContextAttrs<'input> for ShowCreateTableContext<'input>{} + +pub struct ShowCreateTableContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowCreateTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowCreateTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowCreateTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showCreateTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowCreateTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowCreateTableContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowCreateTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowCreateTableContext<'input> {} + +impl<'input> ShowCreateTableContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowCreateTableContext( + BaseParserRuleContext::copy_from(ctx,ShowCreateTableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowColumnsContext<'input> = BaseParserRuleContext<'input,ShowColumnsContextExt<'input>>; + +pub trait ShowColumnsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token COLUMNS + /// Returns `None` if there is no child corresponding to token COLUMNS + fn COLUMNS(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMNS, 0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token LIKE + /// Returns `None` if there is no child corresponding to token LIKE + fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) + } + fn string_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn string(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ESCAPE + /// Returns `None` if there is no child corresponding to token ESCAPE + fn ESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(ESCAPE, 0) + } + /// Retrieves first TerminalNode corresponding to token DESCRIBE + /// Returns `None` if there is no child corresponding to token DESCRIBE + fn DESCRIBE(&self) -> Option>> where Self:Sized{ + self.get_token(DESCRIBE, 0) + } + /// Retrieves first TerminalNode corresponding to token DESC + /// Returns `None` if there is no child corresponding to token DESC + fn DESC(&self) -> Option>> where Self:Sized{ + self.get_token(DESC, 0) + } +} + +impl<'input> ShowColumnsContextAttrs<'input> for ShowColumnsContext<'input>{} + +pub struct ShowColumnsContextExt<'input>{ + base:StatementContextExt<'input>, + pub pattern: Option>>, + pub escape: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowColumnsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowColumnsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowColumnsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showColumns(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowColumnsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowColumnsContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowColumnsContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowColumnsContext<'input> {} + +impl<'input> ShowColumnsContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowColumnsContext( + BaseParserRuleContext::copy_from(ctx,ShowColumnsContextExt{ + pattern:None, escape:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowRoleGrantsContext<'input> = BaseParserRuleContext<'input,ShowRoleGrantsContextExt<'input>>; + +pub trait ShowRoleGrantsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token ROLE + /// Returns `None` if there is no child corresponding to token ROLE + fn ROLE(&self) -> Option>> where Self:Sized{ + self.get_token(ROLE, 0) + } + /// Retrieves first TerminalNode corresponding to token GRANTS + /// Returns `None` if there is no child corresponding to token GRANTS + fn GRANTS(&self) -> Option>> where Self:Sized{ + self.get_token(GRANTS, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } +} + +impl<'input> ShowRoleGrantsContextAttrs<'input> for ShowRoleGrantsContext<'input>{} + +pub struct ShowRoleGrantsContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowRoleGrantsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowRoleGrantsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowRoleGrantsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showRoleGrants(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowRoleGrantsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowRoleGrantsContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowRoleGrantsContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowRoleGrantsContext<'input> {} + +impl<'input> ShowRoleGrantsContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowRoleGrantsContext( + BaseParserRuleContext::copy_from(ctx,ShowRoleGrantsContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type AddColumnContext<'input> = BaseParserRuleContext<'input,AddColumnContextExt<'input>>; + +pub trait AddColumnContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token ADD + /// Returns `None` if there is no child corresponding to token ADD + fn ADD(&self) -> Option>> where Self:Sized{ + self.get_token(ADD, 0) + } + /// Retrieves first TerminalNode corresponding to token COLUMN + /// Returns `None` if there is no child corresponding to token COLUMN + fn COLUMN(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMN, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn columnDefinition(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token IF in current rule + fn IF_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token IF, starting from 0. + /// Returns `None` if number of children corresponding to token IF is less or equal than `i`. + fn IF(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(IF, i) + } + /// Retrieves all `TerminalNode`s corresponding to token EXISTS in current rule + fn EXISTS_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token EXISTS, starting from 0. + /// Returns `None` if number of children corresponding to token EXISTS is less or equal than `i`. + fn EXISTS(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(EXISTS, i) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } +} + +impl<'input> AddColumnContextAttrs<'input> for AddColumnContext<'input>{} + +pub struct AddColumnContextExt<'input>{ + base:StatementContextExt<'input>, + pub tableName: Option>>, + pub column: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{AddColumnContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for AddColumnContext<'input>{} + +impl<'input,'a> Listenable + 'a> for AddColumnContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_addColumn(self); + } +} + +impl<'input> CustomRuleContext<'input> for AddColumnContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for AddColumnContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for AddColumnContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for AddColumnContext<'input> {} + +impl<'input> AddColumnContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::AddColumnContext( + BaseParserRuleContext::copy_from(ctx,AddColumnContextExt{ + tableName:None, column:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DenyContext<'input> = BaseParserRuleContext<'input,DenyContextExt<'input>>; + +pub trait DenyContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DENY + /// Returns `None` if there is no child corresponding to token DENY + fn DENY(&self) -> Option>> where Self:Sized{ + self.get_token(DENY, 0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn privilege_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn privilege(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ALL + /// Returns `None` if there is no child corresponding to token ALL + fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) + } + /// Retrieves first TerminalNode corresponding to token PRIVILEGES + /// Returns `None` if there is no child corresponding to token PRIVILEGES + fn PRIVILEGES(&self) -> Option>> where Self:Sized{ + self.get_token(PRIVILEGES, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> DenyContextAttrs<'input> for DenyContext<'input>{} + +pub struct DenyContextExt<'input>{ + base:StatementContextExt<'input>, + pub grantee: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DenyContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DenyContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DenyContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_deny(self); + } +} + +impl<'input> CustomRuleContext<'input> for DenyContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DenyContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DenyContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DenyContext<'input> {} + +impl<'input> DenyContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DenyContext( + BaseParserRuleContext::copy_from(ctx,DenyContextExt{ + grantee:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ResetSessionContext<'input> = BaseParserRuleContext<'input,ResetSessionContextExt<'input>>; + +pub trait ResetSessionContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token RESET + /// Returns `None` if there is no child corresponding to token RESET + fn RESET(&self) -> Option>> where Self:Sized{ + self.get_token(RESET, 0) + } + /// Retrieves first TerminalNode corresponding to token SESSION + /// Returns `None` if there is no child corresponding to token SESSION + fn SESSION(&self) -> Option>> where Self:Sized{ + self.get_token(SESSION, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ResetSessionContextAttrs<'input> for ResetSessionContext<'input>{} + +pub struct ResetSessionContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ResetSessionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ResetSessionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ResetSessionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_resetSession(self); + } +} + +impl<'input> CustomRuleContext<'input> for ResetSessionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ResetSessionContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ResetSessionContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ResetSessionContext<'input> {} + +impl<'input> ResetSessionContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ResetSessionContext( + BaseParserRuleContext::copy_from(ctx,ResetSessionContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type InsertIntoContext<'input> = BaseParserRuleContext<'input,InsertIntoContextExt<'input>>; + +pub trait InsertIntoContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token INSERT + /// Returns `None` if there is no child corresponding to token INSERT + fn INSERT(&self) -> Option>> where Self:Sized{ + self.get_token(INSERT, 0) + } + /// Retrieves first TerminalNode corresponding to token INTO + /// Returns `None` if there is no child corresponding to token INTO + fn INTO(&self) -> Option>> where Self:Sized{ + self.get_token(INTO, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> InsertIntoContextAttrs<'input> for InsertIntoContext<'input>{} + +pub struct InsertIntoContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{InsertIntoContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for InsertIntoContext<'input>{} + +impl<'input,'a> Listenable + 'a> for InsertIntoContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_insertInto(self); + } +} + +impl<'input> CustomRuleContext<'input> for InsertIntoContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for InsertIntoContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for InsertIntoContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for InsertIntoContext<'input> {} + +impl<'input> InsertIntoContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::InsertIntoContext( + BaseParserRuleContext::copy_from(ctx,InsertIntoContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowSessionContext<'input> = BaseParserRuleContext<'input,ShowSessionContextExt<'input>>; + +pub trait ShowSessionContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token SESSION + /// Returns `None` if there is no child corresponding to token SESSION + fn SESSION(&self) -> Option>> where Self:Sized{ + self.get_token(SESSION, 0) + } + /// Retrieves first TerminalNode corresponding to token LIKE + /// Returns `None` if there is no child corresponding to token LIKE + fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) + } + fn string_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn string(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ESCAPE + /// Returns `None` if there is no child corresponding to token ESCAPE + fn ESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(ESCAPE, 0) + } +} + +impl<'input> ShowSessionContextAttrs<'input> for ShowSessionContext<'input>{} + +pub struct ShowSessionContextExt<'input>{ + base:StatementContextExt<'input>, + pub pattern: Option>>, + pub escape: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowSessionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowSessionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowSessionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showSession(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowSessionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowSessionContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowSessionContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowSessionContext<'input> {} + +impl<'input> ShowSessionContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowSessionContext( + BaseParserRuleContext::copy_from(ctx,ShowSessionContextExt{ + pattern:None, escape:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CreateSchemaContext<'input> = BaseParserRuleContext<'input,CreateSchemaContextExt<'input>>; + +pub trait CreateSchemaContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } + /// Retrieves first TerminalNode corresponding to token AUTHORIZATION + /// Returns `None` if there is no child corresponding to token AUTHORIZATION + fn AUTHORIZATION(&self) -> Option>> where Self:Sized{ + self.get_token(AUTHORIZATION, 0) + } + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + fn properties(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> CreateSchemaContextAttrs<'input> for CreateSchemaContext<'input>{} + +pub struct CreateSchemaContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CreateSchemaContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CreateSchemaContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CreateSchemaContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_createSchema(self); + } +} + +impl<'input> CustomRuleContext<'input> for CreateSchemaContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CreateSchemaContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CreateSchemaContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CreateSchemaContext<'input> {} + +impl<'input> CreateSchemaContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CreateSchemaContext( + BaseParserRuleContext::copy_from(ctx,CreateSchemaContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ExplainAnalyzeContext<'input> = BaseParserRuleContext<'input,ExplainAnalyzeContextExt<'input>>; + +pub trait ExplainAnalyzeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token EXPLAIN + /// Returns `None` if there is no child corresponding to token EXPLAIN + fn EXPLAIN(&self) -> Option>> where Self:Sized{ + self.get_token(EXPLAIN, 0) + } + /// Retrieves first TerminalNode corresponding to token ANALYZE + /// Returns `None` if there is no child corresponding to token ANALYZE + fn ANALYZE(&self) -> Option>> where Self:Sized{ + self.get_token(ANALYZE, 0) + } + fn statement(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token VERBOSE + /// Returns `None` if there is no child corresponding to token VERBOSE + fn VERBOSE(&self) -> Option>> where Self:Sized{ + self.get_token(VERBOSE, 0) + } +} + +impl<'input> ExplainAnalyzeContextAttrs<'input> for ExplainAnalyzeContext<'input>{} + +pub struct ExplainAnalyzeContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExplainAnalyzeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExplainAnalyzeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExplainAnalyzeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_explainAnalyze(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExplainAnalyzeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ExplainAnalyzeContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExplainAnalyzeContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ExplainAnalyzeContext<'input> {} + +impl<'input> ExplainAnalyzeContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ExplainAnalyzeContext( + BaseParserRuleContext::copy_from(ctx,ExplainAnalyzeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ExecuteContext<'input> = BaseParserRuleContext<'input,ExecuteContextExt<'input>>; + +pub trait ExecuteContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token EXECUTE + /// Returns `None` if there is no child corresponding to token EXECUTE + fn EXECUTE(&self) -> Option>> where Self:Sized{ + self.get_token(EXECUTE, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token USING + /// Returns `None` if there is no child corresponding to token USING + fn USING(&self) -> Option>> where Self:Sized{ + self.get_token(USING, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> ExecuteContextAttrs<'input> for ExecuteContext<'input>{} + +pub struct ExecuteContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExecuteContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExecuteContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExecuteContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_execute(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExecuteContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ExecuteContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExecuteContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ExecuteContext<'input> {} + +impl<'input> ExecuteContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ExecuteContext( + BaseParserRuleContext::copy_from(ctx,ExecuteContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RenameSchemaContext<'input> = BaseParserRuleContext<'input,RenameSchemaContextExt<'input>>; + +pub trait RenameSchemaContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token RENAME + /// Returns `None` if there is no child corresponding to token RENAME + fn RENAME(&self) -> Option>> where Self:Sized{ + self.get_token(RENAME, 0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> RenameSchemaContextAttrs<'input> for RenameSchemaContext<'input>{} + +pub struct RenameSchemaContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RenameSchemaContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RenameSchemaContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RenameSchemaContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_renameSchema(self); + } +} + +impl<'input> CustomRuleContext<'input> for RenameSchemaContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RenameSchemaContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RenameSchemaContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RenameSchemaContext<'input> {} + +impl<'input> RenameSchemaContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RenameSchemaContext( + BaseParserRuleContext::copy_from(ctx,RenameSchemaContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DropRoleContext<'input> = BaseParserRuleContext<'input,DropRoleContextExt<'input>>; + +pub trait DropRoleContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DROP + /// Returns `None` if there is no child corresponding to token DROP + fn DROP(&self) -> Option>> where Self:Sized{ + self.get_token(DROP, 0) + } + /// Retrieves first TerminalNode corresponding to token ROLE + /// Returns `None` if there is no child corresponding to token ROLE + fn ROLE(&self) -> Option>> where Self:Sized{ + self.get_token(ROLE, 0) + } + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } +} + +impl<'input> DropRoleContextAttrs<'input> for DropRoleContext<'input>{} + +pub struct DropRoleContextExt<'input>{ + base:StatementContextExt<'input>, + pub name: Option>>, + pub catalog: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DropRoleContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DropRoleContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DropRoleContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dropRole(self); + } +} + +impl<'input> CustomRuleContext<'input> for DropRoleContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DropRoleContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DropRoleContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DropRoleContext<'input> {} + +impl<'input> DropRoleContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DropRoleContext( + BaseParserRuleContext::copy_from(ctx,DropRoleContextExt{ + name:None, catalog:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type AnalyzeContext<'input> = BaseParserRuleContext<'input,AnalyzeContextExt<'input>>; + +pub trait AnalyzeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ANALYZE + /// Returns `None` if there is no child corresponding to token ANALYZE + fn ANALYZE(&self) -> Option>> where Self:Sized{ + self.get_token(ANALYZE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + fn properties(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> AnalyzeContextAttrs<'input> for AnalyzeContext<'input>{} + +pub struct AnalyzeContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{AnalyzeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for AnalyzeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for AnalyzeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_analyze(self); + } +} + +impl<'input> CustomRuleContext<'input> for AnalyzeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for AnalyzeContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for AnalyzeContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for AnalyzeContext<'input> {} + +impl<'input> AnalyzeContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::AnalyzeContext( + BaseParserRuleContext::copy_from(ctx,AnalyzeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetRoleContext<'input> = BaseParserRuleContext<'input,SetRoleContextExt<'input>>; + +pub trait SetRoleContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token ROLE + /// Returns `None` if there is no child corresponding to token ROLE + fn ROLE(&self) -> Option>> where Self:Sized{ + self.get_token(ROLE, 0) + } + /// Retrieves first TerminalNode corresponding to token ALL + /// Returns `None` if there is no child corresponding to token ALL + fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) + } + /// Retrieves first TerminalNode corresponding to token NONE + /// Returns `None` if there is no child corresponding to token NONE + fn NONE(&self) -> Option>> where Self:Sized{ + self.get_token(NONE, 0) + } + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } +} + +impl<'input> SetRoleContextAttrs<'input> for SetRoleContext<'input>{} + +pub struct SetRoleContextExt<'input>{ + base:StatementContextExt<'input>, + pub role: Option>>, + pub catalog: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetRoleContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetRoleContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetRoleContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setRole(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetRoleContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetRoleContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetRoleContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetRoleContext<'input> {} + +impl<'input> SetRoleContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetRoleContext( + BaseParserRuleContext::copy_from(ctx,SetRoleContextExt{ + role:None, catalog:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowGrantsContext<'input> = BaseParserRuleContext<'input,ShowGrantsContextExt<'input>>; + +pub trait ShowGrantsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token GRANTS + /// Returns `None` if there is no child corresponding to token GRANTS + fn GRANTS(&self) -> Option>> where Self:Sized{ + self.get_token(GRANTS, 0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } +} + +impl<'input> ShowGrantsContextAttrs<'input> for ShowGrantsContext<'input>{} + +pub struct ShowGrantsContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowGrantsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowGrantsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowGrantsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showGrants(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowGrantsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowGrantsContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowGrantsContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowGrantsContext<'input> {} + +impl<'input> ShowGrantsContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowGrantsContext( + BaseParserRuleContext::copy_from(ctx,ShowGrantsContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DropSchemaContext<'input> = BaseParserRuleContext<'input,DropSchemaContextExt<'input>>; + +pub trait DropSchemaContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DROP + /// Returns `None` if there is no child corresponding to token DROP + fn DROP(&self) -> Option>> where Self:Sized{ + self.get_token(DROP, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } + /// Retrieves first TerminalNode corresponding to token CASCADE + /// Returns `None` if there is no child corresponding to token CASCADE + fn CASCADE(&self) -> Option>> where Self:Sized{ + self.get_token(CASCADE, 0) + } + /// Retrieves first TerminalNode corresponding to token RESTRICT + /// Returns `None` if there is no child corresponding to token RESTRICT + fn RESTRICT(&self) -> Option>> where Self:Sized{ + self.get_token(RESTRICT, 0) + } +} + +impl<'input> DropSchemaContextAttrs<'input> for DropSchemaContext<'input>{} + +pub struct DropSchemaContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DropSchemaContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DropSchemaContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DropSchemaContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dropSchema(self); + } +} + +impl<'input> CustomRuleContext<'input> for DropSchemaContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DropSchemaContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DropSchemaContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DropSchemaContext<'input> {} + +impl<'input> DropSchemaContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DropSchemaContext( + BaseParserRuleContext::copy_from(ctx,DropSchemaContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetTableAuthorizationContext<'input> = BaseParserRuleContext<'input,SetTableAuthorizationContextExt<'input>>; + +pub trait SetTableAuthorizationContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token AUTHORIZATION + /// Returns `None` if there is no child corresponding to token AUTHORIZATION + fn AUTHORIZATION(&self) -> Option>> where Self:Sized{ + self.get_token(AUTHORIZATION, 0) + } + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetTableAuthorizationContextAttrs<'input> for SetTableAuthorizationContext<'input>{} + +pub struct SetTableAuthorizationContextExt<'input>{ + base:StatementContextExt<'input>, + pub tableName: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetTableAuthorizationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetTableAuthorizationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetTableAuthorizationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setTableAuthorization(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetTableAuthorizationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetTableAuthorizationContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetTableAuthorizationContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetTableAuthorizationContext<'input> {} + +impl<'input> SetTableAuthorizationContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetTableAuthorizationContext( + BaseParserRuleContext::copy_from(ctx,SetTableAuthorizationContextExt{ + tableName:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowCreateViewContext<'input> = BaseParserRuleContext<'input,ShowCreateViewContextExt<'input>>; + +pub trait ShowCreateViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ShowCreateViewContextAttrs<'input> for ShowCreateViewContext<'input>{} + +pub struct ShowCreateViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowCreateViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowCreateViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowCreateViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showCreateView(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowCreateViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowCreateViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowCreateViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowCreateViewContext<'input> {} + +impl<'input> ShowCreateViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowCreateViewContext( + BaseParserRuleContext::copy_from(ctx,ShowCreateViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CreateTableContext<'input> = BaseParserRuleContext<'input,CreateTableContextExt<'input>>; + +pub trait CreateTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn tableElement_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn tableElement(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves first TerminalNode corresponding to token COMMENT + /// Returns `None` if there is no child corresponding to token COMMENT + fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + fn properties(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> CreateTableContextAttrs<'input> for CreateTableContext<'input>{} + +pub struct CreateTableContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CreateTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CreateTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CreateTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_createTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for CreateTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CreateTableContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CreateTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CreateTableContext<'input> {} + +impl<'input> CreateTableContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CreateTableContext( + BaseParserRuleContext::copy_from(ctx,CreateTableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type StartTransactionContext<'input> = BaseParserRuleContext<'input,StartTransactionContextExt<'input>>; + +pub trait StartTransactionContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token START + /// Returns `None` if there is no child corresponding to token START + fn START(&self) -> Option>> where Self:Sized{ + self.get_token(START, 0) + } + /// Retrieves first TerminalNode corresponding to token TRANSACTION + /// Returns `None` if there is no child corresponding to token TRANSACTION + fn TRANSACTION(&self) -> Option>> where Self:Sized{ + self.get_token(TRANSACTION, 0) + } + fn transactionMode_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn transactionMode(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> StartTransactionContextAttrs<'input> for StartTransactionContext<'input>{} + +pub struct StartTransactionContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{StartTransactionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for StartTransactionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StartTransactionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_startTransaction(self); + } +} + +impl<'input> CustomRuleContext<'input> for StartTransactionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for StartTransactionContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for StartTransactionContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for StartTransactionContext<'input> {} + +impl<'input> StartTransactionContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::StartTransactionContext( + BaseParserRuleContext::copy_from(ctx,StartTransactionContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CreateTableAsSelectContext<'input> = BaseParserRuleContext<'input,CreateTableAsSelectContextExt<'input>>; + +pub trait CreateTableAsSelectContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } + fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token COMMENT + /// Returns `None` if there is no child corresponding to token COMMENT + fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token WITH in current rule + fn WITH_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token WITH, starting from 0. + /// Returns `None` if number of children corresponding to token WITH is less or equal than `i`. + fn WITH(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(WITH, i) + } + fn properties(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token DATA + /// Returns `None` if there is no child corresponding to token DATA + fn DATA(&self) -> Option>> where Self:Sized{ + self.get_token(DATA, 0) + } + /// Retrieves first TerminalNode corresponding to token NO + /// Returns `None` if there is no child corresponding to token NO + fn NO(&self) -> Option>> where Self:Sized{ + self.get_token(NO, 0) + } +} + +impl<'input> CreateTableAsSelectContextAttrs<'input> for CreateTableAsSelectContext<'input>{} + +pub struct CreateTableAsSelectContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CreateTableAsSelectContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CreateTableAsSelectContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CreateTableAsSelectContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_createTableAsSelect(self); + } +} + +impl<'input> CustomRuleContext<'input> for CreateTableAsSelectContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CreateTableAsSelectContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CreateTableAsSelectContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CreateTableAsSelectContext<'input> {} + +impl<'input> CreateTableAsSelectContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CreateTableAsSelectContext( + BaseParserRuleContext::copy_from(ctx,CreateTableAsSelectContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CommentViewContext<'input> = BaseParserRuleContext<'input,CommentViewContextExt<'input>>; + +pub trait CommentViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token COMMENT + /// Returns `None` if there is no child corresponding to token COMMENT + fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IS + /// Returns `None` if there is no child corresponding to token IS + fn IS(&self) -> Option>> where Self:Sized{ + self.get_token(IS, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token NULL + /// Returns `None` if there is no child corresponding to token NULL + fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) + } +} + +impl<'input> CommentViewContextAttrs<'input> for CommentViewContext<'input>{} + +pub struct CommentViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CommentViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CommentViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CommentViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_commentView(self); + } +} + +impl<'input> CustomRuleContext<'input> for CommentViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CommentViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CommentViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CommentViewContext<'input> {} + +impl<'input> CommentViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CommentViewContext( + BaseParserRuleContext::copy_from(ctx,CommentViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowStatsContext<'input> = BaseParserRuleContext<'input,ShowStatsContextExt<'input>>; + +pub trait ShowStatsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token STATS + /// Returns `None` if there is no child corresponding to token STATS + fn STATS(&self) -> Option>> where Self:Sized{ + self.get_token(STATS, 0) + } + /// Retrieves first TerminalNode corresponding to token FOR + /// Returns `None` if there is no child corresponding to token FOR + fn FOR(&self) -> Option>> where Self:Sized{ + self.get_token(FOR, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ShowStatsContextAttrs<'input> for ShowStatsContext<'input>{} + +pub struct ShowStatsContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowStatsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowStatsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowStatsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showStats(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowStatsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowStatsContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowStatsContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowStatsContext<'input> {} + +impl<'input> ShowStatsContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowStatsContext( + BaseParserRuleContext::copy_from(ctx,ShowStatsContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowCreateSchemaContext<'input> = BaseParserRuleContext<'input,ShowCreateSchemaContextExt<'input>>; + +pub trait ShowCreateSchemaContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ShowCreateSchemaContextAttrs<'input> for ShowCreateSchemaContext<'input>{} + +pub struct ShowCreateSchemaContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowCreateSchemaContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowCreateSchemaContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowCreateSchemaContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showCreateSchema(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowCreateSchemaContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowCreateSchemaContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowCreateSchemaContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowCreateSchemaContext<'input> {} + +impl<'input> ShowCreateSchemaContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowCreateSchemaContext( + BaseParserRuleContext::copy_from(ctx,ShowCreateSchemaContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RevokeContext<'input> = BaseParserRuleContext<'input,RevokeContextExt<'input>>; + +pub trait RevokeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token REVOKE + /// Returns `None` if there is no child corresponding to token REVOKE + fn REVOKE(&self) -> Option>> where Self:Sized{ + self.get_token(REVOKE, 0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn privilege_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn privilege(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ALL + /// Returns `None` if there is no child corresponding to token ALL + fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) + } + /// Retrieves first TerminalNode corresponding to token PRIVILEGES + /// Returns `None` if there is no child corresponding to token PRIVILEGES + fn PRIVILEGES(&self) -> Option>> where Self:Sized{ + self.get_token(PRIVILEGES, 0) + } + /// Retrieves first TerminalNode corresponding to token GRANT + /// Returns `None` if there is no child corresponding to token GRANT + fn GRANT(&self) -> Option>> where Self:Sized{ + self.get_token(GRANT, 0) + } + /// Retrieves first TerminalNode corresponding to token OPTION + /// Returns `None` if there is no child corresponding to token OPTION + fn OPTION(&self) -> Option>> where Self:Sized{ + self.get_token(OPTION, 0) + } + /// Retrieves first TerminalNode corresponding to token FOR + /// Returns `None` if there is no child corresponding to token FOR + fn FOR(&self) -> Option>> where Self:Sized{ + self.get_token(FOR, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> RevokeContextAttrs<'input> for RevokeContext<'input>{} + +pub struct RevokeContextExt<'input>{ + base:StatementContextExt<'input>, + pub grantee: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RevokeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RevokeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RevokeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_revoke(self); + } +} + +impl<'input> CustomRuleContext<'input> for RevokeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RevokeContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RevokeContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RevokeContext<'input> {} + +impl<'input> RevokeContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RevokeContext( + BaseParserRuleContext::copy_from(ctx,RevokeContextExt{ + grantee:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type UpdateContext<'input> = BaseParserRuleContext<'input,UpdateContextExt<'input>>; + +pub trait UpdateContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token UPDATE + /// Returns `None` if there is no child corresponding to token UPDATE + fn UPDATE(&self) -> Option>> where Self:Sized{ + self.get_token(UPDATE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + fn updateAssignment_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn updateAssignment(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves first TerminalNode corresponding to token WHERE + /// Returns `None` if there is no child corresponding to token WHERE + fn WHERE(&self) -> Option>> where Self:Sized{ + self.get_token(WHERE, 0) + } + fn booleanExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> UpdateContextAttrs<'input> for UpdateContext<'input>{} + +pub struct UpdateContextExt<'input>{ + base:StatementContextExt<'input>, + pub where_: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UpdateContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UpdateContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UpdateContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_update(self); + } +} + +impl<'input> CustomRuleContext<'input> for UpdateContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for UpdateContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UpdateContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for UpdateContext<'input> {} + +impl<'input> UpdateContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::UpdateContext( + BaseParserRuleContext::copy_from(ctx,UpdateContextExt{ + where_:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TableExecuteContext<'input> = BaseParserRuleContext<'input,TableExecuteContextExt<'input>>; + +pub trait TableExecuteContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token EXECUTE + /// Returns `None` if there is no child corresponding to token EXECUTE + fn EXECUTE(&self) -> Option>> where Self:Sized{ + self.get_token(EXECUTE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WHERE + /// Returns `None` if there is no child corresponding to token WHERE + fn WHERE(&self) -> Option>> where Self:Sized{ + self.get_token(WHERE, 0) + } + fn booleanExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn callArgument_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn callArgument(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> TableExecuteContextAttrs<'input> for TableExecuteContext<'input>{} + +pub struct TableExecuteContextExt<'input>{ + base:StatementContextExt<'input>, + pub tableName: Option>>, + pub procedureName: Option>>, + pub where_: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TableExecuteContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TableExecuteContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableExecuteContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableExecute(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableExecuteContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for TableExecuteContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TableExecuteContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for TableExecuteContext<'input> {} + +impl<'input> TableExecuteContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::TableExecuteContext( + BaseParserRuleContext::copy_from(ctx,TableExecuteContextExt{ + tableName:None, procedureName:None, where_:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DeleteContext<'input> = BaseParserRuleContext<'input,DeleteContextExt<'input>>; + +pub trait DeleteContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DELETE + /// Returns `None` if there is no child corresponding to token DELETE + fn DELETE(&self) -> Option>> where Self:Sized{ + self.get_token(DELETE, 0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WHERE + /// Returns `None` if there is no child corresponding to token WHERE + fn WHERE(&self) -> Option>> where Self:Sized{ + self.get_token(WHERE, 0) + } + fn booleanExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> DeleteContextAttrs<'input> for DeleteContext<'input>{} + +pub struct DeleteContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DeleteContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DeleteContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DeleteContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_delete(self); + } +} + +impl<'input> CustomRuleContext<'input> for DeleteContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DeleteContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DeleteContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DeleteContext<'input> {} + +impl<'input> DeleteContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DeleteContext( + BaseParserRuleContext::copy_from(ctx,DeleteContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DescribeInputContext<'input> = BaseParserRuleContext<'input,DescribeInputContextExt<'input>>; + +pub trait DescribeInputContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DESCRIBE + /// Returns `None` if there is no child corresponding to token DESCRIBE + fn DESCRIBE(&self) -> Option>> where Self:Sized{ + self.get_token(DESCRIBE, 0) + } + /// Retrieves first TerminalNode corresponding to token INPUT + /// Returns `None` if there is no child corresponding to token INPUT + fn INPUT(&self) -> Option>> where Self:Sized{ + self.get_token(INPUT, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> DescribeInputContextAttrs<'input> for DescribeInputContext<'input>{} + +pub struct DescribeInputContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DescribeInputContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DescribeInputContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DescribeInputContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_describeInput(self); + } +} + +impl<'input> CustomRuleContext<'input> for DescribeInputContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DescribeInputContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DescribeInputContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DescribeInputContext<'input> {} + +impl<'input> DescribeInputContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DescribeInputContext( + BaseParserRuleContext::copy_from(ctx,DescribeInputContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowStatsForQueryContext<'input> = BaseParserRuleContext<'input,ShowStatsForQueryContextExt<'input>>; + +pub trait ShowStatsForQueryContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token STATS + /// Returns `None` if there is no child corresponding to token STATS + fn STATS(&self) -> Option>> where Self:Sized{ + self.get_token(STATS, 0) + } + /// Retrieves first TerminalNode corresponding to token FOR + /// Returns `None` if there is no child corresponding to token FOR + fn FOR(&self) -> Option>> where Self:Sized{ + self.get_token(FOR, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ShowStatsForQueryContextAttrs<'input> for ShowStatsForQueryContext<'input>{} + +pub struct ShowStatsForQueryContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowStatsForQueryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowStatsForQueryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowStatsForQueryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showStatsForQuery(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowStatsForQueryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowStatsForQueryContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowStatsForQueryContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowStatsForQueryContext<'input> {} + +impl<'input> ShowStatsForQueryContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowStatsForQueryContext( + BaseParserRuleContext::copy_from(ctx,ShowStatsForQueryContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetColumnTypeContext<'input> = BaseParserRuleContext<'input,SetColumnTypeContextExt<'input>>; + +pub trait SetColumnTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves all `TerminalNode`s corresponding to token ALTER in current rule + fn ALTER_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token ALTER, starting from 0. + /// Returns `None` if number of children corresponding to token ALTER is less or equal than `i`. + fn ALTER(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(ALTER, i) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token COLUMN + /// Returns `None` if there is no child corresponding to token COLUMN + fn COLUMN(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMN, 0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token DATA + /// Returns `None` if there is no child corresponding to token DATA + fn DATA(&self) -> Option>> where Self:Sized{ + self.get_token(DATA, 0) + } + /// Retrieves first TerminalNode corresponding to token TYPE + /// Returns `None` if there is no child corresponding to token TYPE + fn TYPE(&self) -> Option>> where Self:Sized{ + self.get_token(TYPE, 0) + } + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } +} + +impl<'input> SetColumnTypeContextAttrs<'input> for SetColumnTypeContext<'input>{} + +pub struct SetColumnTypeContextExt<'input>{ + base:StatementContextExt<'input>, + pub tableName: Option>>, + pub columnName: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetColumnTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetColumnTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetColumnTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setColumnType(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetColumnTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetColumnTypeContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetColumnTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetColumnTypeContext<'input> {} + +impl<'input> SetColumnTypeContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetColumnTypeContext( + BaseParserRuleContext::copy_from(ctx,SetColumnTypeContextExt{ + tableName:None, columnName:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type StatementDefaultContext<'input> = BaseParserRuleContext<'input,StatementDefaultContextExt<'input>>; + +pub trait StatementDefaultContextAttrs<'input>: PrestoParserContext<'input>{ + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> StatementDefaultContextAttrs<'input> for StatementDefaultContext<'input>{} + +pub struct StatementDefaultContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{StatementDefaultContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for StatementDefaultContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StatementDefaultContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_statementDefault(self); + } +} + +impl<'input> CustomRuleContext<'input> for StatementDefaultContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for StatementDefaultContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for StatementDefaultContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for StatementDefaultContext<'input> {} + +impl<'input> StatementDefaultContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::StatementDefaultContext( + BaseParserRuleContext::copy_from(ctx,StatementDefaultContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetTimeZoneContext<'input> = BaseParserRuleContext<'input,SetTimeZoneContextExt<'input>>; + +pub trait SetTimeZoneContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token TIME + /// Returns `None` if there is no child corresponding to token TIME + fn TIME(&self) -> Option>> where Self:Sized{ + self.get_token(TIME, 0) + } + /// Retrieves first TerminalNode corresponding to token ZONE + /// Returns `None` if there is no child corresponding to token ZONE + fn ZONE(&self) -> Option>> where Self:Sized{ + self.get_token(ZONE, 0) + } + /// Retrieves first TerminalNode corresponding to token LOCAL + /// Returns `None` if there is no child corresponding to token LOCAL + fn LOCAL(&self) -> Option>> where Self:Sized{ + self.get_token(LOCAL, 0) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetTimeZoneContextAttrs<'input> for SetTimeZoneContext<'input>{} + +pub struct SetTimeZoneContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetTimeZoneContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetTimeZoneContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetTimeZoneContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setTimeZone(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetTimeZoneContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetTimeZoneContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetTimeZoneContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetTimeZoneContext<'input> {} + +impl<'input> SetTimeZoneContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetTimeZoneContext( + BaseParserRuleContext::copy_from(ctx,SetTimeZoneContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TruncateTableContext<'input> = BaseParserRuleContext<'input,TruncateTableContextExt<'input>>; + +pub trait TruncateTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TRUNCATE + /// Returns `None` if there is no child corresponding to token TRUNCATE + fn TRUNCATE(&self) -> Option>> where Self:Sized{ + self.get_token(TRUNCATE, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TruncateTableContextAttrs<'input> for TruncateTableContext<'input>{} + +pub struct TruncateTableContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TruncateTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TruncateTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TruncateTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_truncateTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for TruncateTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for TruncateTableContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TruncateTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for TruncateTableContext<'input> {} + +impl<'input> TruncateTableContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::TruncateTableContext( + BaseParserRuleContext::copy_from(ctx,TruncateTableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CreateMaterializedViewContext<'input> = BaseParserRuleContext<'input,CreateMaterializedViewContextExt<'input>>; + +pub trait CreateMaterializedViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token MATERIALIZED + /// Returns `None` if there is no child corresponding to token MATERIALIZED + fn MATERIALIZED(&self) -> Option>> where Self:Sized{ + self.get_token(MATERIALIZED, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token OR + /// Returns `None` if there is no child corresponding to token OR + fn OR(&self) -> Option>> where Self:Sized{ + self.get_token(OR, 0) + } + /// Retrieves first TerminalNode corresponding to token REPLACE + /// Returns `None` if there is no child corresponding to token REPLACE + fn REPLACE(&self) -> Option>> where Self:Sized{ + self.get_token(REPLACE, 0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } + /// Retrieves first TerminalNode corresponding to token GRACE + /// Returns `None` if there is no child corresponding to token GRACE + fn GRACE(&self) -> Option>> where Self:Sized{ + self.get_token(GRACE, 0) + } + /// Retrieves first TerminalNode corresponding to token PERIOD + /// Returns `None` if there is no child corresponding to token PERIOD + fn PERIOD(&self) -> Option>> where Self:Sized{ + self.get_token(PERIOD, 0) + } + fn interval(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token COMMENT + /// Returns `None` if there is no child corresponding to token COMMENT + fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + fn properties(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> CreateMaterializedViewContextAttrs<'input> for CreateMaterializedViewContext<'input>{} + +pub struct CreateMaterializedViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CreateMaterializedViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CreateMaterializedViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CreateMaterializedViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_createMaterializedView(self); + } +} + +impl<'input> CustomRuleContext<'input> for CreateMaterializedViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CreateMaterializedViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CreateMaterializedViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CreateMaterializedViewContext<'input> {} + +impl<'input> CreateMaterializedViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CreateMaterializedViewContext( + BaseParserRuleContext::copy_from(ctx,CreateMaterializedViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetSessionContext<'input> = BaseParserRuleContext<'input,SetSessionContextExt<'input>>; + +pub trait SetSessionContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token SESSION + /// Returns `None` if there is no child corresponding to token SESSION + fn SESSION(&self) -> Option>> where Self:Sized{ + self.get_token(SESSION, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token EQ + /// Returns `None` if there is no child corresponding to token EQ + fn EQ(&self) -> Option>> where Self:Sized{ + self.get_token(EQ, 0) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetSessionContextAttrs<'input> for SetSessionContext<'input>{} + +pub struct SetSessionContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetSessionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetSessionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetSessionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setSession(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetSessionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetSessionContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetSessionContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetSessionContext<'input> {} + +impl<'input> SetSessionContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetSessionContext( + BaseParserRuleContext::copy_from(ctx,SetSessionContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CreateViewContext<'input> = BaseParserRuleContext<'input,CreateViewContextExt<'input>>; + +pub trait CreateViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token OR + /// Returns `None` if there is no child corresponding to token OR + fn OR(&self) -> Option>> where Self:Sized{ + self.get_token(OR, 0) + } + /// Retrieves first TerminalNode corresponding to token REPLACE + /// Returns `None` if there is no child corresponding to token REPLACE + fn REPLACE(&self) -> Option>> where Self:Sized{ + self.get_token(REPLACE, 0) + } + /// Retrieves first TerminalNode corresponding to token COMMENT + /// Returns `None` if there is no child corresponding to token COMMENT + fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token SECURITY + /// Returns `None` if there is no child corresponding to token SECURITY + fn SECURITY(&self) -> Option>> where Self:Sized{ + self.get_token(SECURITY, 0) + } + /// Retrieves first TerminalNode corresponding to token DEFINER + /// Returns `None` if there is no child corresponding to token DEFINER + fn DEFINER(&self) -> Option>> where Self:Sized{ + self.get_token(DEFINER, 0) + } + /// Retrieves first TerminalNode corresponding to token INVOKER + /// Returns `None` if there is no child corresponding to token INVOKER + fn INVOKER(&self) -> Option>> where Self:Sized{ + self.get_token(INVOKER, 0) + } +} + +impl<'input> CreateViewContextAttrs<'input> for CreateViewContext<'input>{} + +pub struct CreateViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CreateViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CreateViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CreateViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_createView(self); + } +} + +impl<'input> CustomRuleContext<'input> for CreateViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CreateViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CreateViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CreateViewContext<'input> {} + +impl<'input> CreateViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CreateViewContext( + BaseParserRuleContext::copy_from(ctx,CreateViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RenameMaterializedViewContext<'input> = BaseParserRuleContext<'input,RenameMaterializedViewContextExt<'input>>; + +pub trait RenameMaterializedViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token MATERIALIZED + /// Returns `None` if there is no child corresponding to token MATERIALIZED + fn MATERIALIZED(&self) -> Option>> where Self:Sized{ + self.get_token(MATERIALIZED, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + /// Retrieves first TerminalNode corresponding to token RENAME + /// Returns `None` if there is no child corresponding to token RENAME + fn RENAME(&self) -> Option>> where Self:Sized{ + self.get_token(RENAME, 0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn qualifiedName_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn qualifiedName(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } +} + +impl<'input> RenameMaterializedViewContextAttrs<'input> for RenameMaterializedViewContext<'input>{} + +pub struct RenameMaterializedViewContextExt<'input>{ + base:StatementContextExt<'input>, + pub from: Option>>, + pub to: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RenameMaterializedViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RenameMaterializedViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RenameMaterializedViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_renameMaterializedView(self); + } +} + +impl<'input> CustomRuleContext<'input> for RenameMaterializedViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RenameMaterializedViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RenameMaterializedViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RenameMaterializedViewContext<'input> {} + +impl<'input> RenameMaterializedViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RenameMaterializedViewContext( + BaseParserRuleContext::copy_from(ctx,RenameMaterializedViewContextExt{ + from:None, to:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowSchemasContext<'input> = BaseParserRuleContext<'input,ShowSchemasContextExt<'input>>; + +pub trait ShowSchemasContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMAS + /// Returns `None` if there is no child corresponding to token SCHEMAS + fn SCHEMAS(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMAS, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token LIKE + /// Returns `None` if there is no child corresponding to token LIKE + fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } + fn string_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn string(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ESCAPE + /// Returns `None` if there is no child corresponding to token ESCAPE + fn ESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(ESCAPE, 0) + } +} + +impl<'input> ShowSchemasContextAttrs<'input> for ShowSchemasContext<'input>{} + +pub struct ShowSchemasContextExt<'input>{ + base:StatementContextExt<'input>, + pub pattern: Option>>, + pub escape: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowSchemasContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowSchemasContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowSchemasContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showSchemas(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowSchemasContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowSchemasContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowSchemasContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowSchemasContext<'input> {} + +impl<'input> ShowSchemasContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowSchemasContext( + BaseParserRuleContext::copy_from(ctx,ShowSchemasContextExt{ + pattern:None, escape:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DropTableContext<'input> = BaseParserRuleContext<'input,DropTableContextExt<'input>>; + +pub trait DropTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DROP + /// Returns `None` if there is no child corresponding to token DROP + fn DROP(&self) -> Option>> where Self:Sized{ + self.get_token(DROP, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IF + /// Returns `None` if there is no child corresponding to token IF + fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) + } + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } +} + +impl<'input> DropTableContextAttrs<'input> for DropTableContext<'input>{} + +pub struct DropTableContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DropTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DropTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DropTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dropTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for DropTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DropTableContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DropTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DropTableContext<'input> {} + +impl<'input> DropTableContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DropTableContext( + BaseParserRuleContext::copy_from(ctx,DropTableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetSchemaAuthorizationContext<'input> = BaseParserRuleContext<'input,SetSchemaAuthorizationContextExt<'input>>; + +pub trait SetSchemaAuthorizationContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token AUTHORIZATION + /// Returns `None` if there is no child corresponding to token AUTHORIZATION + fn AUTHORIZATION(&self) -> Option>> where Self:Sized{ + self.get_token(AUTHORIZATION, 0) + } + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetSchemaAuthorizationContextAttrs<'input> for SetSchemaAuthorizationContext<'input>{} + +pub struct SetSchemaAuthorizationContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetSchemaAuthorizationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetSchemaAuthorizationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetSchemaAuthorizationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setSchemaAuthorization(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetSchemaAuthorizationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetSchemaAuthorizationContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetSchemaAuthorizationContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetSchemaAuthorizationContext<'input> {} + +impl<'input> SetSchemaAuthorizationContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetSchemaAuthorizationContext( + BaseParserRuleContext::copy_from(ctx,SetSchemaAuthorizationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RollbackContext<'input> = BaseParserRuleContext<'input,RollbackContextExt<'input>>; + +pub trait RollbackContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ROLLBACK + /// Returns `None` if there is no child corresponding to token ROLLBACK + fn ROLLBACK(&self) -> Option>> where Self:Sized{ + self.get_token(ROLLBACK, 0) + } + /// Retrieves first TerminalNode corresponding to token WORK + /// Returns `None` if there is no child corresponding to token WORK + fn WORK(&self) -> Option>> where Self:Sized{ + self.get_token(WORK, 0) + } +} + +impl<'input> RollbackContextAttrs<'input> for RollbackContext<'input>{} + +pub struct RollbackContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RollbackContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RollbackContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RollbackContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rollback(self); + } +} + +impl<'input> CustomRuleContext<'input> for RollbackContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RollbackContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RollbackContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RollbackContext<'input> {} + +impl<'input> RollbackContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RollbackContext( + BaseParserRuleContext::copy_from(ctx,RollbackContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CommentTableContext<'input> = BaseParserRuleContext<'input,CommentTableContextExt<'input>>; + +pub trait CommentTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token COMMENT + /// Returns `None` if there is no child corresponding to token COMMENT + fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IS + /// Returns `None` if there is no child corresponding to token IS + fn IS(&self) -> Option>> where Self:Sized{ + self.get_token(IS, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token NULL + /// Returns `None` if there is no child corresponding to token NULL + fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) + } +} + +impl<'input> CommentTableContextAttrs<'input> for CommentTableContext<'input>{} + +pub struct CommentTableContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CommentTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CommentTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CommentTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_commentTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for CommentTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CommentTableContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CommentTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CommentTableContext<'input> {} + +impl<'input> CommentTableContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CommentTableContext( + BaseParserRuleContext::copy_from(ctx,CommentTableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RenameViewContext<'input> = BaseParserRuleContext<'input,RenameViewContextExt<'input>>; + +pub trait RenameViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + /// Retrieves first TerminalNode corresponding to token RENAME + /// Returns `None` if there is no child corresponding to token RENAME + fn RENAME(&self) -> Option>> where Self:Sized{ + self.get_token(RENAME, 0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn qualifiedName_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn qualifiedName(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> RenameViewContextAttrs<'input> for RenameViewContext<'input>{} + +pub struct RenameViewContextExt<'input>{ + base:StatementContextExt<'input>, + pub from: Option>>, + pub to: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RenameViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RenameViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RenameViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_renameView(self); + } +} + +impl<'input> CustomRuleContext<'input> for RenameViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RenameViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RenameViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RenameViewContext<'input> {} + +impl<'input> RenameViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RenameViewContext( + BaseParserRuleContext::copy_from(ctx,RenameViewContextExt{ + from:None, to:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetPathContext<'input> = BaseParserRuleContext<'input,SetPathContextExt<'input>>; + +pub trait SetPathContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token PATH + /// Returns `None` if there is no child corresponding to token PATH + fn PATH(&self) -> Option>> where Self:Sized{ + self.get_token(PATH, 0) + } + fn pathSpecification(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetPathContextAttrs<'input> for SetPathContext<'input>{} + +pub struct SetPathContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetPathContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetPathContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetPathContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setPath(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetPathContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetPathContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetPathContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetPathContext<'input> {} + +impl<'input> SetPathContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetPathContext( + BaseParserRuleContext::copy_from(ctx,SetPathContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type GrantRolesContext<'input> = BaseParserRuleContext<'input,GrantRolesContextExt<'input>>; + +pub trait GrantRolesContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token GRANT + /// Returns `None` if there is no child corresponding to token GRANT + fn GRANT(&self) -> Option>> where Self:Sized{ + self.get_token(GRANT, 0) + } + fn roles(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn principal_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn principal(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + /// Retrieves first TerminalNode corresponding to token ADMIN + /// Returns `None` if there is no child corresponding to token ADMIN + fn ADMIN(&self) -> Option>> where Self:Sized{ + self.get_token(ADMIN, 0) + } + /// Retrieves first TerminalNode corresponding to token OPTION + /// Returns `None` if there is no child corresponding to token OPTION + fn OPTION(&self) -> Option>> where Self:Sized{ + self.get_token(OPTION, 0) + } + /// Retrieves first TerminalNode corresponding to token GRANTED + /// Returns `None` if there is no child corresponding to token GRANTED + fn GRANTED(&self) -> Option>> where Self:Sized{ + self.get_token(GRANTED, 0) + } + /// Retrieves first TerminalNode corresponding to token BY + /// Returns `None` if there is no child corresponding to token BY + fn BY(&self) -> Option>> where Self:Sized{ + self.get_token(BY, 0) + } + fn grantor(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> GrantRolesContextAttrs<'input> for GrantRolesContext<'input>{} + +pub struct GrantRolesContextExt<'input>{ + base:StatementContextExt<'input>, + pub catalog: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{GrantRolesContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for GrantRolesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GrantRolesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_grantRoles(self); + } +} + +impl<'input> CustomRuleContext<'input> for GrantRolesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for GrantRolesContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for GrantRolesContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for GrantRolesContext<'input> {} + +impl<'input> GrantRolesContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::GrantRolesContext( + BaseParserRuleContext::copy_from(ctx,GrantRolesContextExt{ + catalog:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CallContext<'input> = BaseParserRuleContext<'input,CallContextExt<'input>>; + +pub trait CallContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CALL + /// Returns `None` if there is no child corresponding to token CALL + fn CALL(&self) -> Option>> where Self:Sized{ + self.get_token(CALL, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn callArgument_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn callArgument(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> CallContextAttrs<'input> for CallContext<'input>{} + +pub struct CallContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CallContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CallContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CallContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_call(self); + } +} + +impl<'input> CustomRuleContext<'input> for CallContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for CallContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CallContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for CallContext<'input> {} + +impl<'input> CallContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::CallContext( + BaseParserRuleContext::copy_from(ctx,CallContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RefreshMaterializedViewContext<'input> = BaseParserRuleContext<'input,RefreshMaterializedViewContextExt<'input>>; + +pub trait RefreshMaterializedViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token REFRESH + /// Returns `None` if there is no child corresponding to token REFRESH + fn REFRESH(&self) -> Option>> where Self:Sized{ + self.get_token(REFRESH, 0) + } + /// Retrieves first TerminalNode corresponding to token MATERIALIZED + /// Returns `None` if there is no child corresponding to token MATERIALIZED + fn MATERIALIZED(&self) -> Option>> where Self:Sized{ + self.get_token(MATERIALIZED, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> RefreshMaterializedViewContextAttrs<'input> for RefreshMaterializedViewContext<'input>{} + +pub struct RefreshMaterializedViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RefreshMaterializedViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RefreshMaterializedViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RefreshMaterializedViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_refreshMaterializedView(self); + } +} + +impl<'input> CustomRuleContext<'input> for RefreshMaterializedViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for RefreshMaterializedViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RefreshMaterializedViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for RefreshMaterializedViewContext<'input> {} + +impl<'input> RefreshMaterializedViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::RefreshMaterializedViewContext( + BaseParserRuleContext::copy_from(ctx,RefreshMaterializedViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowCreateMaterializedViewContext<'input> = BaseParserRuleContext<'input,ShowCreateMaterializedViewContextExt<'input>>; + +pub trait ShowCreateMaterializedViewContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token CREATE + /// Returns `None` if there is no child corresponding to token CREATE + fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) + } + /// Retrieves first TerminalNode corresponding to token MATERIALIZED + /// Returns `None` if there is no child corresponding to token MATERIALIZED + fn MATERIALIZED(&self) -> Option>> where Self:Sized{ + self.get_token(MATERIALIZED, 0) + } + /// Retrieves first TerminalNode corresponding to token VIEW + /// Returns `None` if there is no child corresponding to token VIEW + fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ShowCreateMaterializedViewContextAttrs<'input> for ShowCreateMaterializedViewContext<'input>{} + +pub struct ShowCreateMaterializedViewContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowCreateMaterializedViewContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowCreateMaterializedViewContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowCreateMaterializedViewContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showCreateMaterializedView(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowCreateMaterializedViewContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowCreateMaterializedViewContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowCreateMaterializedViewContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowCreateMaterializedViewContext<'input> {} + +impl<'input> ShowCreateMaterializedViewContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowCreateMaterializedViewContext( + BaseParserRuleContext::copy_from(ctx,ShowCreateMaterializedViewContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ShowFunctionsContext<'input> = BaseParserRuleContext<'input,ShowFunctionsContextExt<'input>>; + +pub trait ShowFunctionsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SHOW + /// Returns `None` if there is no child corresponding to token SHOW + fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) + } + /// Retrieves first TerminalNode corresponding to token FUNCTIONS + /// Returns `None` if there is no child corresponding to token FUNCTIONS + fn FUNCTIONS(&self) -> Option>> where Self:Sized{ + self.get_token(FUNCTIONS, 0) + } + /// Retrieves first TerminalNode corresponding to token LIKE + /// Returns `None` if there is no child corresponding to token LIKE + fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) + } + fn string_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn string(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ESCAPE + /// Returns `None` if there is no child corresponding to token ESCAPE + fn ESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(ESCAPE, 0) + } +} + +impl<'input> ShowFunctionsContextAttrs<'input> for ShowFunctionsContext<'input>{} + +pub struct ShowFunctionsContextExt<'input>{ + base:StatementContextExt<'input>, + pub pattern: Option>>, + pub escape: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ShowFunctionsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ShowFunctionsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ShowFunctionsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_showFunctions(self); + } +} + +impl<'input> CustomRuleContext<'input> for ShowFunctionsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for ShowFunctionsContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ShowFunctionsContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for ShowFunctionsContext<'input> {} + +impl<'input> ShowFunctionsContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::ShowFunctionsContext( + BaseParserRuleContext::copy_from(ctx,ShowFunctionsContextExt{ + pattern:None, escape:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DescribeOutputContext<'input> = BaseParserRuleContext<'input,DescribeOutputContextExt<'input>>; + +pub trait DescribeOutputContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DESCRIBE + /// Returns `None` if there is no child corresponding to token DESCRIBE + fn DESCRIBE(&self) -> Option>> where Self:Sized{ + self.get_token(DESCRIBE, 0) + } + /// Retrieves first TerminalNode corresponding to token OUTPUT + /// Returns `None` if there is no child corresponding to token OUTPUT + fn OUTPUT(&self) -> Option>> where Self:Sized{ + self.get_token(OUTPUT, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> DescribeOutputContextAttrs<'input> for DescribeOutputContext<'input>{} + +pub struct DescribeOutputContextExt<'input>{ + base:StatementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DescribeOutputContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DescribeOutputContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DescribeOutputContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_describeOutput(self); + } +} + +impl<'input> CustomRuleContext<'input> for DescribeOutputContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for DescribeOutputContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DescribeOutputContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for DescribeOutputContext<'input> {} + +impl<'input> DescribeOutputContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::DescribeOutputContext( + BaseParserRuleContext::copy_from(ctx,DescribeOutputContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type GrantContext<'input> = BaseParserRuleContext<'input,GrantContextExt<'input>>; + +pub trait GrantContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves all `TerminalNode`s corresponding to token GRANT in current rule + fn GRANT_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token GRANT, starting from 0. + /// Returns `None` if number of children corresponding to token GRANT is less or equal than `i`. + fn GRANT(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(GRANT, i) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn privilege_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn privilege(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ALL + /// Returns `None` if there is no child corresponding to token ALL + fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) + } + /// Retrieves first TerminalNode corresponding to token PRIVILEGES + /// Returns `None` if there is no child corresponding to token PRIVILEGES + fn PRIVILEGES(&self) -> Option>> where Self:Sized{ + self.get_token(PRIVILEGES, 0) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + /// Retrieves first TerminalNode corresponding to token OPTION + /// Returns `None` if there is no child corresponding to token OPTION + fn OPTION(&self) -> Option>> where Self:Sized{ + self.get_token(OPTION, 0) + } + /// Retrieves first TerminalNode corresponding to token SCHEMA + /// Returns `None` if there is no child corresponding to token SCHEMA + fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> GrantContextAttrs<'input> for GrantContext<'input>{} + +pub struct GrantContextExt<'input>{ + base:StatementContextExt<'input>, + pub grantee: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{GrantContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for GrantContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GrantContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_grant(self); + } +} + +impl<'input> CustomRuleContext<'input> for GrantContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for GrantContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for GrantContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for GrantContext<'input> {} + +impl<'input> GrantContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::GrantContext( + BaseParserRuleContext::copy_from(ctx,GrantContextExt{ + grantee:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetTablePropertiesContext<'input> = BaseParserRuleContext<'input,SetTablePropertiesContextExt<'input>>; + +pub trait SetTablePropertiesContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ALTER + /// Returns `None` if there is no child corresponding to token ALTER + fn ALTER(&self) -> Option>> where Self:Sized{ + self.get_token(ALTER, 0) + } + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves first TerminalNode corresponding to token PROPERTIES + /// Returns `None` if there is no child corresponding to token PROPERTIES + fn PROPERTIES(&self) -> Option>> where Self:Sized{ + self.get_token(PROPERTIES, 0) + } + fn propertyAssignments(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SetTablePropertiesContextAttrs<'input> for SetTablePropertiesContext<'input>{} + +pub struct SetTablePropertiesContextExt<'input>{ + base:StatementContextExt<'input>, + pub tableName: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetTablePropertiesContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetTablePropertiesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetTablePropertiesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setTableProperties(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetTablePropertiesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_statement } + //fn type_rule_index() -> usize where Self: Sized { RULE_statement } +} + +impl<'input> Borrow> for SetTablePropertiesContext<'input>{ + fn borrow(&self) -> &StatementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetTablePropertiesContext<'input>{ + fn borrow_mut(&mut self) -> &mut StatementContextExt<'input> { &mut self.base } +} + +impl<'input> StatementContextAttrs<'input> for SetTablePropertiesContext<'input> {} + +impl<'input> SetTablePropertiesContextExt<'input>{ + fn new(ctx: &dyn StatementContextAttrs<'input>) -> Rc> { + Rc::new( + StatementContextAll::SetTablePropertiesContext( + BaseParserRuleContext::copy_from(ctx,SetTablePropertiesContextExt{ + tableName:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn statement(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = StatementContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 10, RULE_statement); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1028); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(107,&mut recog.base)? { + 1 =>{ + let tmp = StatementDefaultContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule query*/ + recog.base.set_state(235); + recog.query()?; + + } + } + , + 2 =>{ + let tmp = UseContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(236); + recog.base.match_token(USE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(237); + let tmp = recog.identifier()?; + if let StatementContextAll::UseContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.schema = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 3 =>{ + let tmp = UseContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(238); + recog.base.match_token(USE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(239); + let tmp = recog.identifier()?; + if let StatementContextAll::UseContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.catalog = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(240); + recog.base.match_token(T__0,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(241); + let tmp = recog.identifier()?; + if let StatementContextAll::UseContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.schema = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 4 =>{ + let tmp = CreateSchemaContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(243); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(244); + recog.base.match_token(SCHEMA,&mut recog.err_handler)?; + + recog.base.set_state(248); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(0,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(245); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(246); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + recog.base.set_state(247); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(250); + recog.qualifiedName()?; + + recog.base.set_state(253); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AUTHORIZATION { + { + recog.base.set_state(251); + recog.base.match_token(AUTHORIZATION,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(252); + recog.principal()?; + + } + } + + recog.base.set_state(257); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(255); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + /*InvokeRule properties*/ + recog.base.set_state(256); + recog.properties()?; + + } + } + + } + } + , + 5 =>{ + let tmp = DropSchemaContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 5); + _localctx = tmp; + { + recog.base.set_state(259); + recog.base.match_token(DROP,&mut recog.err_handler)?; + + recog.base.set_state(260); + recog.base.match_token(SCHEMA,&mut recog.err_handler)?; + + recog.base.set_state(263); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(3,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(261); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(262); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(265); + recog.qualifiedName()?; + + recog.base.set_state(267); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==CASCADE || _la==RESTRICT { + { + recog.base.set_state(266); + _la = recog.base.input.la(1); + if { !(_la==CASCADE || _la==RESTRICT) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + } + } + , + 6 =>{ + let tmp = RenameSchemaContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 6); + _localctx = tmp; + { + recog.base.set_state(269); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(270); + recog.base.match_token(SCHEMA,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(271); + recog.qualifiedName()?; + + recog.base.set_state(272); + recog.base.match_token(RENAME,&mut recog.err_handler)?; + + recog.base.set_state(273); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(274); + recog.identifier()?; + + } + } + , + 7 =>{ + let tmp = SetSchemaAuthorizationContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 7); + _localctx = tmp; + { + recog.base.set_state(276); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(277); + recog.base.match_token(SCHEMA,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(278); + recog.qualifiedName()?; + + recog.base.set_state(279); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(280); + recog.base.match_token(AUTHORIZATION,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(281); + recog.principal()?; + + } + } + , + 8 =>{ + let tmp = CreateTableAsSelectContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 8); + _localctx = tmp; + { + recog.base.set_state(283); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(284); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(288); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(5,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(285); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(286); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + recog.base.set_state(287); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(290); + recog.qualifiedName()?; + + recog.base.set_state(292); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + /*InvokeRule columnAliases*/ + recog.base.set_state(291); + recog.columnAliases()?; + + } + } + + recog.base.set_state(296); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COMMENT { + { + recog.base.set_state(294); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(295); + recog.string()?; + + } + } + + recog.base.set_state(300); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(298); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + /*InvokeRule properties*/ + recog.base.set_state(299); + recog.properties()?; + + } + } + + recog.base.set_state(302); + recog.base.match_token(AS,&mut recog.err_handler)?; + + recog.base.set_state(308); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(9,&mut recog.base)? { + 1 =>{ + { + /*InvokeRule query*/ + recog.base.set_state(303); + recog.query()?; + + } + } + , + 2 =>{ + { + recog.base.set_state(304); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(305); + recog.query()?; + + recog.base.set_state(306); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + recog.base.set_state(315); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(310); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(312); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NO { + { + recog.base.set_state(311); + recog.base.match_token(NO,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(314); + recog.base.match_token(DATA,&mut recog.err_handler)?; + + } + } + + } + } + , + 9 =>{ + let tmp = CreateTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 9); + _localctx = tmp; + { + recog.base.set_state(317); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(318); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(322); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(12,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(319); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(320); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + recog.base.set_state(321); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(324); + recog.qualifiedName()?; + + recog.base.set_state(325); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule tableElement*/ + recog.base.set_state(326); + recog.tableElement()?; + + recog.base.set_state(331); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(327); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule tableElement*/ + recog.base.set_state(328); + recog.tableElement()?; + + } + } + recog.base.set_state(333); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(334); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(337); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COMMENT { + { + recog.base.set_state(335); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(336); + recog.string()?; + + } + } + + recog.base.set_state(341); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(339); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + /*InvokeRule properties*/ + recog.base.set_state(340); + recog.properties()?; + + } + } + + } + } + , + 10 =>{ + let tmp = DropTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 10); + _localctx = tmp; + { + recog.base.set_state(343); + recog.base.match_token(DROP,&mut recog.err_handler)?; + + recog.base.set_state(344); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(347); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(16,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(345); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(346); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(349); + recog.qualifiedName()?; + + } + } + , + 11 =>{ + let tmp = InsertIntoContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 11); + _localctx = tmp; + { + recog.base.set_state(350); + recog.base.match_token(INSERT,&mut recog.err_handler)?; + + recog.base.set_state(351); + recog.base.match_token(INTO,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(352); + recog.qualifiedName()?; + + recog.base.set_state(354); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(17,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule columnAliases*/ + recog.base.set_state(353); + recog.columnAliases()?; + + } + } + + _ => {} + } + /*InvokeRule query*/ + recog.base.set_state(356); + recog.query()?; + + } + } + , + 12 =>{ + let tmp = DeleteContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 12); + _localctx = tmp; + { + recog.base.set_state(358); + recog.base.match_token(DELETE,&mut recog.err_handler)?; + + recog.base.set_state(359); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(360); + recog.qualifiedName()?; + + recog.base.set_state(363); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WHERE { + { + recog.base.set_state(361); + recog.base.match_token(WHERE,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(362); + recog.booleanExpression_rec(0)?; + + } + } + + } + } + , + 13 =>{ + let tmp = TruncateTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 13); + _localctx = tmp; + { + recog.base.set_state(365); + recog.base.match_token(TRUNCATE,&mut recog.err_handler)?; + + recog.base.set_state(366); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(367); + recog.qualifiedName()?; + + } + } + , + 14 =>{ + let tmp = CommentTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 14); + _localctx = tmp; + { + recog.base.set_state(368); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + recog.base.set_state(369); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(370); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(371); + recog.qualifiedName()?; + + recog.base.set_state(372); + recog.base.match_token(IS,&mut recog.err_handler)?; + + recog.base.set_state(375); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + STRING | UNICODE_STRING + => { + { + /*InvokeRule string*/ + recog.base.set_state(373); + recog.string()?; + + } + } + + NULL + => { + { + recog.base.set_state(374); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + } + } + , + 15 =>{ + let tmp = CommentViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 15); + _localctx = tmp; + { + recog.base.set_state(377); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + recog.base.set_state(378); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(379); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(380); + recog.qualifiedName()?; + + recog.base.set_state(381); + recog.base.match_token(IS,&mut recog.err_handler)?; + + recog.base.set_state(384); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + STRING | UNICODE_STRING + => { + { + /*InvokeRule string*/ + recog.base.set_state(382); + recog.string()?; + + } + } + + NULL + => { + { + recog.base.set_state(383); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + } + } + , + 16 =>{ + let tmp = CommentColumnContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 16); + _localctx = tmp; + { + recog.base.set_state(386); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + recog.base.set_state(387); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(388); + recog.base.match_token(COLUMN,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(389); + recog.qualifiedName()?; + + recog.base.set_state(390); + recog.base.match_token(IS,&mut recog.err_handler)?; + + recog.base.set_state(393); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + STRING | UNICODE_STRING + => { + { + /*InvokeRule string*/ + recog.base.set_state(391); + recog.string()?; + + } + } + + NULL + => { + { + recog.base.set_state(392); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + } + } + , + 17 =>{ + let tmp = RenameTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 17); + _localctx = tmp; + { + recog.base.set_state(395); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(396); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(399); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(22,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(397); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(398); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(401); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::RenameTableContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.from = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(402); + recog.base.match_token(RENAME,&mut recog.err_handler)?; + + recog.base.set_state(403); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(404); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::RenameTableContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.to = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 18 =>{ + let tmp = AddColumnContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 18); + _localctx = tmp; + { + recog.base.set_state(406); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(407); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(410); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(23,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(408); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(409); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(412); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::AddColumnContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.tableName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(413); + recog.base.match_token(ADD,&mut recog.err_handler)?; + + recog.base.set_state(414); + recog.base.match_token(COLUMN,&mut recog.err_handler)?; + + recog.base.set_state(418); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(24,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(415); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(416); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + recog.base.set_state(417); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule columnDefinition*/ + recog.base.set_state(420); + let tmp = recog.columnDefinition()?; + if let StatementContextAll::AddColumnContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.column = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 19 =>{ + let tmp = RenameColumnContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 19); + _localctx = tmp; + { + recog.base.set_state(422); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(423); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(426); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(25,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(424); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(425); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(428); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::RenameColumnContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.tableName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(429); + recog.base.match_token(RENAME,&mut recog.err_handler)?; + + recog.base.set_state(430); + recog.base.match_token(COLUMN,&mut recog.err_handler)?; + + recog.base.set_state(433); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(26,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(431); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(432); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule identifier*/ + recog.base.set_state(435); + let tmp = recog.identifier()?; + if let StatementContextAll::RenameColumnContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.from = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(436); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(437); + let tmp = recog.identifier()?; + if let StatementContextAll::RenameColumnContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.to = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 20 =>{ + let tmp = DropColumnContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 20); + _localctx = tmp; + { + recog.base.set_state(439); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(440); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(443); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(27,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(441); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(442); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(445); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::DropColumnContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.tableName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(446); + recog.base.match_token(DROP,&mut recog.err_handler)?; + + recog.base.set_state(447); + recog.base.match_token(COLUMN,&mut recog.err_handler)?; + + recog.base.set_state(450); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(28,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(448); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(449); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(452); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::DropColumnContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.column = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 21 =>{ + let tmp = SetColumnTypeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 21); + _localctx = tmp; + { + recog.base.set_state(454); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(455); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(458); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(29,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(456); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(457); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(460); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::SetColumnTypeContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.tableName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(461); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(462); + recog.base.match_token(COLUMN,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(463); + let tmp = recog.identifier()?; + if let StatementContextAll::SetColumnTypeContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.columnName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(464); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(465); + recog.base.match_token(DATA,&mut recog.err_handler)?; + + recog.base.set_state(466); + recog.base.match_token(TYPE,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(467); + recog.type__rec(0)?; + + } + } + , + 22 =>{ + let tmp = SetTableAuthorizationContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 22); + _localctx = tmp; + { + recog.base.set_state(469); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(470); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(471); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::SetTableAuthorizationContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.tableName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(472); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(473); + recog.base.match_token(AUTHORIZATION,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(474); + recog.principal()?; + + } + } + , + 23 =>{ + let tmp = SetTablePropertiesContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 23); + _localctx = tmp; + { + recog.base.set_state(476); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(477); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(478); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::SetTablePropertiesContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.tableName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(479); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(480); + recog.base.match_token(PROPERTIES,&mut recog.err_handler)?; + + /*InvokeRule propertyAssignments*/ + recog.base.set_state(481); + recog.propertyAssignments()?; + + } + } + , + 24 =>{ + let tmp = TableExecuteContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 24); + _localctx = tmp; + { + recog.base.set_state(483); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(484); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(485); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::TableExecuteContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.tableName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(486); + recog.base.match_token(EXECUTE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(487); + let tmp = recog.identifier()?; + if let StatementContextAll::TableExecuteContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.procedureName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(500); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + recog.base.set_state(488); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(497); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule callArgument*/ + recog.base.set_state(489); + recog.callArgument()?; + + recog.base.set_state(494); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(490); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule callArgument*/ + recog.base.set_state(491); + recog.callArgument()?; + + } + } + recog.base.set_state(496); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(499); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(504); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WHERE { + { + recog.base.set_state(502); + recog.base.match_token(WHERE,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(503); + let tmp = recog.booleanExpression_rec(0)?; + if let StatementContextAll::TableExecuteContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.where_ = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + , + 25 =>{ + let tmp = AnalyzeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 25); + _localctx = tmp; + { + recog.base.set_state(506); + recog.base.match_token(ANALYZE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(507); + recog.qualifiedName()?; + + recog.base.set_state(510); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(508); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + /*InvokeRule properties*/ + recog.base.set_state(509); + recog.properties()?; + + } + } + + } + } + , + 26 =>{ + let tmp = CreateMaterializedViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 26); + _localctx = tmp; + { + recog.base.set_state(512); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(515); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==OR { + { + recog.base.set_state(513); + recog.base.match_token(OR,&mut recog.err_handler)?; + + recog.base.set_state(514); + recog.base.match_token(REPLACE,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(517); + recog.base.match_token(MATERIALIZED,&mut recog.err_handler)?; + + recog.base.set_state(518); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + recog.base.set_state(522); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(36,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(519); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(520); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + recog.base.set_state(521); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(524); + recog.qualifiedName()?; + + recog.base.set_state(528); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==GRACE { + { + recog.base.set_state(525); + recog.base.match_token(GRACE,&mut recog.err_handler)?; + + recog.base.set_state(526); + recog.base.match_token(PERIOD,&mut recog.err_handler)?; + + /*InvokeRule interval*/ + recog.base.set_state(527); + recog.interval()?; + + } + } + + recog.base.set_state(532); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COMMENT { + { + recog.base.set_state(530); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(531); + recog.string()?; + + } + } + + recog.base.set_state(536); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(534); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + /*InvokeRule properties*/ + recog.base.set_state(535); + recog.properties()?; + + } + } + + recog.base.set_state(538); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(539); + recog.query()?; + + } + } + , + 27 =>{ + let tmp = CreateViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 27); + _localctx = tmp; + { + recog.base.set_state(541); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(544); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==OR { + { + recog.base.set_state(542); + recog.base.match_token(OR,&mut recog.err_handler)?; + + recog.base.set_state(543); + recog.base.match_token(REPLACE,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(546); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(547); + recog.qualifiedName()?; + + recog.base.set_state(550); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COMMENT { + { + recog.base.set_state(548); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(549); + recog.string()?; + + } + } + + recog.base.set_state(554); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==SECURITY { + { + recog.base.set_state(552); + recog.base.match_token(SECURITY,&mut recog.err_handler)?; + + recog.base.set_state(553); + _la = recog.base.input.la(1); + if { !(_la==DEFINER || _la==INVOKER) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + recog.base.set_state(556); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(557); + recog.query()?; + + } + } + , + 28 =>{ + let tmp = RefreshMaterializedViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 28); + _localctx = tmp; + { + recog.base.set_state(559); + recog.base.match_token(REFRESH,&mut recog.err_handler)?; + + recog.base.set_state(560); + recog.base.match_token(MATERIALIZED,&mut recog.err_handler)?; + + recog.base.set_state(561); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(562); + recog.qualifiedName()?; + + } + } + , + 29 =>{ + let tmp = DropMaterializedViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 29); + _localctx = tmp; + { + recog.base.set_state(563); + recog.base.match_token(DROP,&mut recog.err_handler)?; + + recog.base.set_state(564); + recog.base.match_token(MATERIALIZED,&mut recog.err_handler)?; + + recog.base.set_state(565); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + recog.base.set_state(568); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(43,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(566); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(567); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(570); + recog.qualifiedName()?; + + } + } + , + 30 =>{ + let tmp = RenameMaterializedViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 30); + _localctx = tmp; + { + recog.base.set_state(571); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(572); + recog.base.match_token(MATERIALIZED,&mut recog.err_handler)?; + + recog.base.set_state(573); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + recog.base.set_state(576); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(44,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(574); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(575); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(578); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::RenameMaterializedViewContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.from = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(579); + recog.base.match_token(RENAME,&mut recog.err_handler)?; + + recog.base.set_state(580); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(581); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::RenameMaterializedViewContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.to = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 31 =>{ + let tmp = SetMaterializedViewPropertiesContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 31); + _localctx = tmp; + { + recog.base.set_state(583); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(584); + recog.base.match_token(MATERIALIZED,&mut recog.err_handler)?; + + recog.base.set_state(585); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(586); + recog.qualifiedName()?; + + recog.base.set_state(587); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(588); + recog.base.match_token(PROPERTIES,&mut recog.err_handler)?; + + /*InvokeRule propertyAssignments*/ + recog.base.set_state(589); + recog.propertyAssignments()?; + + } + } + , + 32 =>{ + let tmp = DropViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 32); + _localctx = tmp; + { + recog.base.set_state(591); + recog.base.match_token(DROP,&mut recog.err_handler)?; + + recog.base.set_state(592); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + recog.base.set_state(595); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(45,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(593); + recog.base.match_token(IF,&mut recog.err_handler)?; + + recog.base.set_state(594); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(597); + recog.qualifiedName()?; + + } + } + , + 33 =>{ + let tmp = RenameViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 33); + _localctx = tmp; + { + recog.base.set_state(598); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(599); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(600); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::RenameViewContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.from = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(601); + recog.base.match_token(RENAME,&mut recog.err_handler)?; + + recog.base.set_state(602); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(603); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::RenameViewContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.to = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 34 =>{ + let tmp = SetViewAuthorizationContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 34); + _localctx = tmp; + { + recog.base.set_state(605); + recog.base.match_token(ALTER,&mut recog.err_handler)?; + + recog.base.set_state(606); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(607); + let tmp = recog.qualifiedName()?; + if let StatementContextAll::SetViewAuthorizationContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.from = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(608); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(609); + recog.base.match_token(AUTHORIZATION,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(610); + recog.principal()?; + + } + } + , + 35 =>{ + let tmp = CallContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 35); + _localctx = tmp; + { + recog.base.set_state(612); + recog.base.match_token(CALL,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(613); + recog.qualifiedName()?; + + recog.base.set_state(614); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(623); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule callArgument*/ + recog.base.set_state(615); + recog.callArgument()?; + + recog.base.set_state(620); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(616); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule callArgument*/ + recog.base.set_state(617); + recog.callArgument()?; + + } + } + recog.base.set_state(622); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(625); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 36 =>{ + let tmp = CreateRoleContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 36); + _localctx = tmp; + { + recog.base.set_state(627); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(628); + recog.base.match_token(ROLE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(629); + let tmp = recog.identifier()?; + if let StatementContextAll::CreateRoleContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.name = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(633); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(630); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(631); + recog.base.match_token(ADMIN,&mut recog.err_handler)?; + + /*InvokeRule grantor*/ + recog.base.set_state(632); + recog.grantor()?; + + } + } + + recog.base.set_state(637); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==IN { + { + recog.base.set_state(635); + recog.base.match_token(IN,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(636); + let tmp = recog.identifier()?; + if let StatementContextAll::CreateRoleContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.catalog = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + , + 37 =>{ + let tmp = DropRoleContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 37); + _localctx = tmp; + { + recog.base.set_state(639); + recog.base.match_token(DROP,&mut recog.err_handler)?; + + recog.base.set_state(640); + recog.base.match_token(ROLE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(641); + let tmp = recog.identifier()?; + if let StatementContextAll::DropRoleContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.name = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(644); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==IN { + { + recog.base.set_state(642); + recog.base.match_token(IN,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(643); + let tmp = recog.identifier()?; + if let StatementContextAll::DropRoleContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.catalog = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + , + 38 =>{ + let tmp = GrantRolesContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 38); + _localctx = tmp; + { + recog.base.set_state(646); + recog.base.match_token(GRANT,&mut recog.err_handler)?; + + /*InvokeRule roles*/ + recog.base.set_state(647); + recog.roles()?; + + recog.base.set_state(648); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(649); + recog.principal()?; + + recog.base.set_state(654); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(650); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(651); + recog.principal()?; + + } + } + recog.base.set_state(656); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(660); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(657); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(658); + recog.base.match_token(ADMIN,&mut recog.err_handler)?; + + recog.base.set_state(659); + recog.base.match_token(OPTION,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(665); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==GRANTED { + { + recog.base.set_state(662); + recog.base.match_token(GRANTED,&mut recog.err_handler)?; + + recog.base.set_state(663); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule grantor*/ + recog.base.set_state(664); + recog.grantor()?; + + } + } + + recog.base.set_state(669); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==IN { + { + recog.base.set_state(667); + recog.base.match_token(IN,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(668); + let tmp = recog.identifier()?; + if let StatementContextAll::GrantRolesContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.catalog = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + , + 39 =>{ + let tmp = RevokeRolesContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 39); + _localctx = tmp; + { + recog.base.set_state(671); + recog.base.match_token(REVOKE,&mut recog.err_handler)?; + + recog.base.set_state(675); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(55,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(672); + recog.base.match_token(ADMIN,&mut recog.err_handler)?; + + recog.base.set_state(673); + recog.base.match_token(OPTION,&mut recog.err_handler)?; + + recog.base.set_state(674); + recog.base.match_token(FOR,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule roles*/ + recog.base.set_state(677); + recog.roles()?; + + recog.base.set_state(678); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(679); + recog.principal()?; + + recog.base.set_state(684); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(680); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(681); + recog.principal()?; + + } + } + recog.base.set_state(686); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(690); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==GRANTED { + { + recog.base.set_state(687); + recog.base.match_token(GRANTED,&mut recog.err_handler)?; + + recog.base.set_state(688); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule grantor*/ + recog.base.set_state(689); + recog.grantor()?; + + } + } + + recog.base.set_state(694); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==IN { + { + recog.base.set_state(692); + recog.base.match_token(IN,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(693); + let tmp = recog.identifier()?; + if let StatementContextAll::RevokeRolesContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.catalog = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + , + 40 =>{ + let tmp = SetRoleContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 40); + _localctx = tmp; + { + recog.base.set_state(696); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(697); + recog.base.match_token(ROLE,&mut recog.err_handler)?; + + recog.base.set_state(701); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(59,&mut recog.base)? { + 1 =>{ + { + recog.base.set_state(698); + recog.base.match_token(ALL,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + { + recog.base.set_state(699); + recog.base.match_token(NONE,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + { + /*InvokeRule identifier*/ + recog.base.set_state(700); + let tmp = recog.identifier()?; + if let StatementContextAll::SetRoleContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.role = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + recog.base.set_state(705); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==IN { + { + recog.base.set_state(703); + recog.base.match_token(IN,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(704); + let tmp = recog.identifier()?; + if let StatementContextAll::SetRoleContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.catalog = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + , + 41 =>{ + let tmp = GrantContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 41); + _localctx = tmp; + { + recog.base.set_state(707); + recog.base.match_token(GRANT,&mut recog.err_handler)?; + + recog.base.set_state(718); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + CREATE | DELETE | INSERT | SELECT | UPDATE + => { + { + /*InvokeRule privilege*/ + recog.base.set_state(708); + recog.privilege()?; + + recog.base.set_state(713); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(709); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule privilege*/ + recog.base.set_state(710); + recog.privilege()?; + + } + } + recog.base.set_state(715); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + ALL + => { + { + recog.base.set_state(716); + recog.base.match_token(ALL,&mut recog.err_handler)?; + + recog.base.set_state(717); + recog.base.match_token(PRIVILEGES,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + recog.base.set_state(720); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(722); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(63,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(721); + _la = recog.base.input.la(1); + if { !(_la==SCHEMA || _la==TABLE) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(724); + recog.qualifiedName()?; + + recog.base.set_state(725); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(726); + let tmp = recog.principal()?; + if let StatementContextAll::GrantContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.grantee = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(730); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(727); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(728); + recog.base.match_token(GRANT,&mut recog.err_handler)?; + + recog.base.set_state(729); + recog.base.match_token(OPTION,&mut recog.err_handler)?; + + } + } + + } + } + , + 42 =>{ + let tmp = DenyContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 42); + _localctx = tmp; + { + recog.base.set_state(732); + recog.base.match_token(DENY,&mut recog.err_handler)?; + + recog.base.set_state(743); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + CREATE | DELETE | INSERT | SELECT | UPDATE + => { + { + /*InvokeRule privilege*/ + recog.base.set_state(733); + recog.privilege()?; + + recog.base.set_state(738); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(734); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule privilege*/ + recog.base.set_state(735); + recog.privilege()?; + + } + } + recog.base.set_state(740); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + ALL + => { + { + recog.base.set_state(741); + recog.base.match_token(ALL,&mut recog.err_handler)?; + + recog.base.set_state(742); + recog.base.match_token(PRIVILEGES,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + recog.base.set_state(745); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(747); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(67,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(746); + _la = recog.base.input.la(1); + if { !(_la==SCHEMA || _la==TABLE) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(749); + recog.qualifiedName()?; + + recog.base.set_state(750); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(751); + let tmp = recog.principal()?; + if let StatementContextAll::DenyContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.grantee = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 43 =>{ + let tmp = RevokeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 43); + _localctx = tmp; + { + recog.base.set_state(753); + recog.base.match_token(REVOKE,&mut recog.err_handler)?; + + recog.base.set_state(757); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==GRANT { + { + recog.base.set_state(754); + recog.base.match_token(GRANT,&mut recog.err_handler)?; + + recog.base.set_state(755); + recog.base.match_token(OPTION,&mut recog.err_handler)?; + + recog.base.set_state(756); + recog.base.match_token(FOR,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(769); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + CREATE | DELETE | INSERT | SELECT | UPDATE + => { + { + /*InvokeRule privilege*/ + recog.base.set_state(759); + recog.privilege()?; + + recog.base.set_state(764); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(760); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule privilege*/ + recog.base.set_state(761); + recog.privilege()?; + + } + } + recog.base.set_state(766); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + ALL + => { + { + recog.base.set_state(767); + recog.base.match_token(ALL,&mut recog.err_handler)?; + + recog.base.set_state(768); + recog.base.match_token(PRIVILEGES,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + recog.base.set_state(771); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(773); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(71,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(772); + _la = recog.base.input.la(1); + if { !(_la==SCHEMA || _la==TABLE) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(775); + recog.qualifiedName()?; + + recog.base.set_state(776); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule principal*/ + recog.base.set_state(777); + let tmp = recog.principal()?; + if let StatementContextAll::RevokeContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.grantee = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 44 =>{ + let tmp = ShowGrantsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 44); + _localctx = tmp; + { + recog.base.set_state(779); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(780); + recog.base.match_token(GRANTS,&mut recog.err_handler)?; + + recog.base.set_state(786); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ON { + { + recog.base.set_state(781); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(783); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==TABLE { + { + recog.base.set_state(782); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + } + } + + /*InvokeRule qualifiedName*/ + recog.base.set_state(785); + recog.qualifiedName()?; + + } + } + + } + } + , + 45 =>{ + let tmp = ExplainContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 45); + _localctx = tmp; + { + recog.base.set_state(788); + recog.base.match_token(EXPLAIN,&mut recog.err_handler)?; + + recog.base.set_state(800); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(75,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(789); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule explainOption*/ + recog.base.set_state(790); + recog.explainOption()?; + + recog.base.set_state(795); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(791); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule explainOption*/ + recog.base.set_state(792); + recog.explainOption()?; + + } + } + recog.base.set_state(797); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(798); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule statement*/ + recog.base.set_state(802); + recog.statement()?; + + } + } + , + 46 =>{ + let tmp = ExplainAnalyzeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 46); + _localctx = tmp; + { + recog.base.set_state(803); + recog.base.match_token(EXPLAIN,&mut recog.err_handler)?; + + recog.base.set_state(804); + recog.base.match_token(ANALYZE,&mut recog.err_handler)?; + + recog.base.set_state(806); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==VERBOSE { + { + recog.base.set_state(805); + recog.base.match_token(VERBOSE,&mut recog.err_handler)?; + + } + } + + /*InvokeRule statement*/ + recog.base.set_state(808); + recog.statement()?; + + } + } + , + 47 =>{ + let tmp = ShowCreateTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 47); + _localctx = tmp; + { + recog.base.set_state(809); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(810); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(811); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(812); + recog.qualifiedName()?; + + } + } + , + 48 =>{ + let tmp = ShowCreateSchemaContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 48); + _localctx = tmp; + { + recog.base.set_state(813); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(814); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(815); + recog.base.match_token(SCHEMA,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(816); + recog.qualifiedName()?; + + } + } + , + 49 =>{ + let tmp = ShowCreateViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 49); + _localctx = tmp; + { + recog.base.set_state(817); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(818); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(819); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(820); + recog.qualifiedName()?; + + } + } + , + 50 =>{ + let tmp = ShowCreateMaterializedViewContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 50); + _localctx = tmp; + { + recog.base.set_state(821); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(822); + recog.base.match_token(CREATE,&mut recog.err_handler)?; + + recog.base.set_state(823); + recog.base.match_token(MATERIALIZED,&mut recog.err_handler)?; + + recog.base.set_state(824); + recog.base.match_token(VIEW,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(825); + recog.qualifiedName()?; + + } + } + , + 51 =>{ + let tmp = ShowTablesContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 51); + _localctx = tmp; + { + recog.base.set_state(826); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(827); + recog.base.match_token(TABLES,&mut recog.err_handler)?; + + recog.base.set_state(830); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FROM || _la==IN { + { + recog.base.set_state(828); + _la = recog.base.input.la(1); + if { !(_la==FROM || _la==IN) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(829); + recog.qualifiedName()?; + + } + } + + recog.base.set_state(838); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==LIKE { + { + recog.base.set_state(832); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(833); + let tmp = recog.string()?; + if let StatementContextAll::ShowTablesContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.pattern = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(836); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ESCAPE { + { + recog.base.set_state(834); + recog.base.match_token(ESCAPE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(835); + let tmp = recog.string()?; + if let StatementContextAll::ShowTablesContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.escape = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + + } + } + , + 52 =>{ + let tmp = ShowSchemasContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 52); + _localctx = tmp; + { + recog.base.set_state(840); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(841); + recog.base.match_token(SCHEMAS,&mut recog.err_handler)?; + + recog.base.set_state(844); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FROM || _la==IN { + { + recog.base.set_state(842); + _la = recog.base.input.la(1); + if { !(_la==FROM || _la==IN) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + /*InvokeRule identifier*/ + recog.base.set_state(843); + recog.identifier()?; + + } + } + + recog.base.set_state(852); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==LIKE { + { + recog.base.set_state(846); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(847); + let tmp = recog.string()?; + if let StatementContextAll::ShowSchemasContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.pattern = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(850); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ESCAPE { + { + recog.base.set_state(848); + recog.base.match_token(ESCAPE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(849); + let tmp = recog.string()?; + if let StatementContextAll::ShowSchemasContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.escape = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + + } + } + , + 53 =>{ + let tmp = ShowCatalogsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 53); + _localctx = tmp; + { + recog.base.set_state(854); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(855); + recog.base.match_token(CATALOGS,&mut recog.err_handler)?; + + recog.base.set_state(862); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==LIKE { + { + recog.base.set_state(856); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(857); + let tmp = recog.string()?; + if let StatementContextAll::ShowCatalogsContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.pattern = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(860); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ESCAPE { + { + recog.base.set_state(858); + recog.base.match_token(ESCAPE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(859); + let tmp = recog.string()?; + if let StatementContextAll::ShowCatalogsContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.escape = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + + } + } + , + 54 =>{ + let tmp = ShowColumnsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 54); + _localctx = tmp; + { + recog.base.set_state(864); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(865); + recog.base.match_token(COLUMNS,&mut recog.err_handler)?; + + recog.base.set_state(866); + _la = recog.base.input.la(1); + if { !(_la==FROM || _la==IN) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + recog.base.set_state(868); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)))) != 0) || ((((_la - 133)) & !0x3f) == 0 && ((1usize << (_la - 133)) & ((1usize << (KEEP - 133)) | (1usize << (KEY - 133)) | (1usize << (KEYS - 133)) | (1usize << (LAST - 133)) | (1usize << (LATERAL - 133)) | (1usize << (LEADING - 133)) | (1usize << (LEVEL - 133)) | (1usize << (LIMIT - 133)) | (1usize << (LOCAL - 133)) | (1usize << (LOGICAL - 133)) | (1usize << (MAP - 133)) | (1usize << (MATCH - 133)) | (1usize << (MATCHED - 133)) | (1usize << (MATCHES - 133)) | (1usize << (MATCH_RECOGNIZE - 133)) | (1usize << (MATERIALIZED - 133)) | (1usize << (MEASURES - 133)) | (1usize << (MERGE - 133)) | (1usize << (MINUTE - 133)) | (1usize << (MONTH - 133)) | (1usize << (NEXT - 133)) | (1usize << (NFC - 133)) | (1usize << (NFD - 133)) | (1usize << (NFKC - 133)) | (1usize << (NFKD - 133)) | (1usize << (NO - 133)))) != 0) || ((((_la - 165)) & !0x3f) == 0 && ((1usize << (_la - 165)) & ((1usize << (NONE - 165)) | (1usize << (NULLIF - 165)) | (1usize << (NULLS - 165)) | (1usize << (OBJECT - 165)) | (1usize << (OF - 165)) | (1usize << (OFFSET - 165)) | (1usize << (OMIT - 165)) | (1usize << (ONE - 165)) | (1usize << (ONLY - 165)) | (1usize << (OPTION - 165)) | (1usize << (ORDINALITY - 165)) | (1usize << (OUTPUT - 165)) | (1usize << (OVER - 165)) | (1usize << (OVERFLOW - 165)) | (1usize << (PARTITION - 165)) | (1usize << (PARTITIONS - 165)) | (1usize << (PASSING - 165)) | (1usize << (PAST - 165)) | (1usize << (PATH - 165)) | (1usize << (PATTERN - 165)) | (1usize << (PER - 165)) | (1usize << (PERIOD - 165)) | (1usize << (PERMUTE - 165)) | (1usize << (POSITION - 165)) | (1usize << (PRECEDING - 165)))) != 0) || ((((_la - 197)) & !0x3f) == 0 && ((1usize << (_la - 197)) & ((1usize << (PRECISION - 197)) | (1usize << (PRIVILEGES - 197)) | (1usize << (PROPERTIES - 197)) | (1usize << (PRUNE - 197)) | (1usize << (QUOTES - 197)) | (1usize << (RANGE - 197)) | (1usize << (READ - 197)) | (1usize << (REFRESH - 197)) | (1usize << (RENAME - 197)) | (1usize << (REPEATABLE - 197)) | (1usize << (REPLACE - 197)) | (1usize << (RESET - 197)) | (1usize << (RESPECT - 197)) | (1usize << (RESTRICT - 197)) | (1usize << (RETURNING - 197)) | (1usize << (REVOKE - 197)) | (1usize << (ROLE - 197)) | (1usize << (ROLES - 197)) | (1usize << (ROLLBACK - 197)) | (1usize << (ROW - 197)) | (1usize << (ROWS - 197)) | (1usize << (RUNNING - 197)) | (1usize << (SCALAR - 197)) | (1usize << (SCHEMA - 197)) | (1usize << (SCHEMAS - 197)) | (1usize << (SECOND - 197)) | (1usize << (SECURITY - 197)) | (1usize << (SEEK - 197)))) != 0) || ((((_la - 230)) & !0x3f) == 0 && ((1usize << (_la - 230)) & ((1usize << (SERIALIZABLE - 230)) | (1usize << (SESSION - 230)) | (1usize << (SET - 230)) | (1usize << (SETS - 230)) | (1usize << (SHOW - 230)) | (1usize << (SOME - 230)) | (1usize << (START - 230)) | (1usize << (STATS - 230)) | (1usize << (SUBSET - 230)) | (1usize << (SUBSTRING - 230)) | (1usize << (SYSTEM - 230)) | (1usize << (TABLES - 230)) | (1usize << (TABLESAMPLE - 230)) | (1usize << (TEXT - 230)) | (1usize << (TEXT_STRING - 230)) | (1usize << (TIES - 230)) | (1usize << (TIME - 230)) | (1usize << (TIMESTAMP - 230)) | (1usize << (TO - 230)) | (1usize << (TRAILING - 230)) | (1usize << (TRANSACTION - 230)) | (1usize << (TRUNCATE - 230)) | (1usize << (TRY_CAST - 230)) | (1usize << (TYPE - 230)) | (1usize << (UNBOUNDED - 230)) | (1usize << (UNCOMMITTED - 230)) | (1usize << (UNCONDITIONAL - 230)))) != 0) || ((((_la - 263)) & !0x3f) == 0 && ((1usize << (_la - 263)) & ((1usize << (UNIQUE - 263)) | (1usize << (UNKNOWN - 263)) | (1usize << (UNMATCHED - 263)) | (1usize << (UPDATE - 263)) | (1usize << (USE - 263)) | (1usize << (USER - 263)) | (1usize << (UTF16 - 263)) | (1usize << (UTF32 - 263)) | (1usize << (UTF8 - 263)) | (1usize << (VALIDATE - 263)) | (1usize << (VALUE - 263)) | (1usize << (VERBOSE - 263)) | (1usize << (VERSION - 263)) | (1usize << (VIEW - 263)) | (1usize << (WINDOW - 263)) | (1usize << (WITHIN - 263)) | (1usize << (WITHOUT - 263)) | (1usize << (WORK - 263)) | (1usize << (WRAPPER - 263)) | (1usize << (WRITE - 263)) | (1usize << (YEAR - 263)) | (1usize << (ZONE - 263)))) != 0) || ((((_la - 310)) & !0x3f) == 0 && ((1usize << (_la - 310)) & ((1usize << (IDENTIFIER - 310)) | (1usize << (DIGIT_IDENTIFIER - 310)) | (1usize << (QUOTED_IDENTIFIER - 310)) | (1usize << (BACKQUOTED_IDENTIFIER - 310)))) != 0) { + { + /*InvokeRule qualifiedName*/ + recog.base.set_state(867); + recog.qualifiedName()?; + + } + } + + recog.base.set_state(876); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==LIKE { + { + recog.base.set_state(870); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(871); + let tmp = recog.string()?; + if let StatementContextAll::ShowColumnsContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.pattern = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(874); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ESCAPE { + { + recog.base.set_state(872); + recog.base.match_token(ESCAPE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(873); + let tmp = recog.string()?; + if let StatementContextAll::ShowColumnsContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.escape = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + + } + } + , + 55 =>{ + let tmp = ShowStatsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 55); + _localctx = tmp; + { + recog.base.set_state(878); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(879); + recog.base.match_token(STATS,&mut recog.err_handler)?; + + recog.base.set_state(880); + recog.base.match_token(FOR,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(881); + recog.qualifiedName()?; + + } + } + , + 56 =>{ + let tmp = ShowStatsForQueryContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 56); + _localctx = tmp; + { + recog.base.set_state(882); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(883); + recog.base.match_token(STATS,&mut recog.err_handler)?; + + recog.base.set_state(884); + recog.base.match_token(FOR,&mut recog.err_handler)?; + + recog.base.set_state(885); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(886); + recog.query()?; + + recog.base.set_state(887); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 57 =>{ + let tmp = ShowRolesContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 57); + _localctx = tmp; + { + recog.base.set_state(889); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(891); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==CURRENT { + { + recog.base.set_state(890); + recog.base.match_token(CURRENT,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(893); + recog.base.match_token(ROLES,&mut recog.err_handler)?; + + recog.base.set_state(896); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FROM || _la==IN { + { + recog.base.set_state(894); + _la = recog.base.input.la(1); + if { !(_la==FROM || _la==IN) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + /*InvokeRule identifier*/ + recog.base.set_state(895); + recog.identifier()?; + + } + } + + } + } + , + 58 =>{ + let tmp = ShowRoleGrantsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 58); + _localctx = tmp; + { + recog.base.set_state(898); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(899); + recog.base.match_token(ROLE,&mut recog.err_handler)?; + + recog.base.set_state(900); + recog.base.match_token(GRANTS,&mut recog.err_handler)?; + + recog.base.set_state(903); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FROM || _la==IN { + { + recog.base.set_state(901); + _la = recog.base.input.la(1); + if { !(_la==FROM || _la==IN) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + /*InvokeRule identifier*/ + recog.base.set_state(902); + recog.identifier()?; + + } + } + + } + } + , + 59 =>{ + let tmp = ShowColumnsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 59); + _localctx = tmp; + { + recog.base.set_state(905); + recog.base.match_token(DESCRIBE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(906); + recog.qualifiedName()?; + + } + } + , + 60 =>{ + let tmp = ShowColumnsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 60); + _localctx = tmp; + { + recog.base.set_state(907); + recog.base.match_token(DESC,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(908); + recog.qualifiedName()?; + + } + } + , + 61 =>{ + let tmp = ShowFunctionsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 61); + _localctx = tmp; + { + recog.base.set_state(909); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(910); + recog.base.match_token(FUNCTIONS,&mut recog.err_handler)?; + + recog.base.set_state(917); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==LIKE { + { + recog.base.set_state(911); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(912); + let tmp = recog.string()?; + if let StatementContextAll::ShowFunctionsContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.pattern = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(915); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ESCAPE { + { + recog.base.set_state(913); + recog.base.match_token(ESCAPE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(914); + let tmp = recog.string()?; + if let StatementContextAll::ShowFunctionsContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.escape = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + + } + } + , + 62 =>{ + let tmp = ShowSessionContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 62); + _localctx = tmp; + { + recog.base.set_state(919); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(920); + recog.base.match_token(SESSION,&mut recog.err_handler)?; + + recog.base.set_state(927); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==LIKE { + { + recog.base.set_state(921); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(922); + let tmp = recog.string()?; + if let StatementContextAll::ShowSessionContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.pattern = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(925); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ESCAPE { + { + recog.base.set_state(923); + recog.base.match_token(ESCAPE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(924); + let tmp = recog.string()?; + if let StatementContextAll::ShowSessionContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.escape = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + + } + } + , + 63 =>{ + let tmp = SetSessionContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 63); + _localctx = tmp; + { + recog.base.set_state(929); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(930); + recog.base.match_token(SESSION,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(931); + recog.qualifiedName()?; + + recog.base.set_state(932); + recog.base.match_token(EQ,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(933); + recog.expression()?; + + } + } + , + 64 =>{ + let tmp = ResetSessionContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 64); + _localctx = tmp; + { + recog.base.set_state(935); + recog.base.match_token(RESET,&mut recog.err_handler)?; + + recog.base.set_state(936); + recog.base.match_token(SESSION,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(937); + recog.qualifiedName()?; + + } + } + , + 65 =>{ + let tmp = StartTransactionContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 65); + _localctx = tmp; + { + recog.base.set_state(938); + recog.base.match_token(START,&mut recog.err_handler)?; + + recog.base.set_state(939); + recog.base.match_token(TRANSACTION,&mut recog.err_handler)?; + + recog.base.set_state(948); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ISOLATION || _la==READ { + { + /*InvokeRule transactionMode*/ + recog.base.set_state(940); + recog.transactionMode()?; + + recog.base.set_state(945); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(941); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule transactionMode*/ + recog.base.set_state(942); + recog.transactionMode()?; + + } + } + recog.base.set_state(947); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + } + } + , + 66 =>{ + let tmp = CommitContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 66); + _localctx = tmp; + { + recog.base.set_state(950); + recog.base.match_token(COMMIT,&mut recog.err_handler)?; + + recog.base.set_state(952); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WORK { + { + recog.base.set_state(951); + recog.base.match_token(WORK,&mut recog.err_handler)?; + + } + } + + } + } + , + 67 =>{ + let tmp = RollbackContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 67); + _localctx = tmp; + { + recog.base.set_state(954); + recog.base.match_token(ROLLBACK,&mut recog.err_handler)?; + + recog.base.set_state(956); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WORK { + { + recog.base.set_state(955); + recog.base.match_token(WORK,&mut recog.err_handler)?; + + } + } + + } + } + , + 68 =>{ + let tmp = PrepareContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 68); + _localctx = tmp; + { + recog.base.set_state(958); + recog.base.match_token(PREPARE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(959); + recog.identifier()?; + + recog.base.set_state(960); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule statement*/ + recog.base.set_state(961); + recog.statement()?; + + } + } + , + 69 =>{ + let tmp = DeallocateContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 69); + _localctx = tmp; + { + recog.base.set_state(963); + recog.base.match_token(DEALLOCATE,&mut recog.err_handler)?; + + recog.base.set_state(964); + recog.base.match_token(PREPARE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(965); + recog.identifier()?; + + } + } + , + 70 =>{ + let tmp = ExecuteContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 70); + _localctx = tmp; + { + recog.base.set_state(966); + recog.base.match_token(EXECUTE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(967); + recog.identifier()?; + + recog.base.set_state(977); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==USING { + { + recog.base.set_state(968); + recog.base.match_token(USING,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(969); + recog.expression()?; + + recog.base.set_state(974); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(970); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(971); + recog.expression()?; + + } + } + recog.base.set_state(976); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + } + } + , + 71 =>{ + let tmp = DescribeInputContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 71); + _localctx = tmp; + { + recog.base.set_state(979); + recog.base.match_token(DESCRIBE,&mut recog.err_handler)?; + + recog.base.set_state(980); + recog.base.match_token(INPUT,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(981); + recog.identifier()?; + + } + } + , + 72 =>{ + let tmp = DescribeOutputContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 72); + _localctx = tmp; + { + recog.base.set_state(982); + recog.base.match_token(DESCRIBE,&mut recog.err_handler)?; + + recog.base.set_state(983); + recog.base.match_token(OUTPUT,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(984); + recog.identifier()?; + + } + } + , + 73 =>{ + let tmp = SetPathContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 73); + _localctx = tmp; + { + recog.base.set_state(985); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(986); + recog.base.match_token(PATH,&mut recog.err_handler)?; + + /*InvokeRule pathSpecification*/ + recog.base.set_state(987); + recog.pathSpecification()?; + + } + } + , + 74 =>{ + let tmp = SetTimeZoneContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 74); + _localctx = tmp; + { + recog.base.set_state(988); + recog.base.match_token(SET,&mut recog.err_handler)?; + + recog.base.set_state(989); + recog.base.match_token(TIME,&mut recog.err_handler)?; + + recog.base.set_state(990); + recog.base.match_token(ZONE,&mut recog.err_handler)?; + + recog.base.set_state(993); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(101,&mut recog.base)? { + 1 =>{ + { + recog.base.set_state(991); + recog.base.match_token(LOCAL,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + { + /*InvokeRule expression*/ + recog.base.set_state(992); + recog.expression()?; + + } + } + + _ => {} + } + } + } + , + 75 =>{ + let tmp = UpdateContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 75); + _localctx = tmp; + { + recog.base.set_state(995); + recog.base.match_token(UPDATE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(996); + recog.qualifiedName()?; + + recog.base.set_state(997); + recog.base.match_token(SET,&mut recog.err_handler)?; + + /*InvokeRule updateAssignment*/ + recog.base.set_state(998); + recog.updateAssignment()?; + + recog.base.set_state(1003); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(999); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule updateAssignment*/ + recog.base.set_state(1000); + recog.updateAssignment()?; + + } + } + recog.base.set_state(1005); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1008); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WHERE { + { + recog.base.set_state(1006); + recog.base.match_token(WHERE,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(1007); + let tmp = recog.booleanExpression_rec(0)?; + if let StatementContextAll::UpdateContext(ctx) = cast_mut::<_,StatementContextAll >(&mut _localctx){ + ctx.where_ = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + } + } + , + 76 =>{ + let tmp = MergeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 76); + _localctx = tmp; + { + recog.base.set_state(1010); + recog.base.match_token(MERGE,&mut recog.err_handler)?; + + recog.base.set_state(1011); + recog.base.match_token(INTO,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(1012); + recog.qualifiedName()?; + + recog.base.set_state(1017); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << AS) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)))) != 0) || ((((_la - 133)) & !0x3f) == 0 && ((1usize << (_la - 133)) & ((1usize << (KEEP - 133)) | (1usize << (KEY - 133)) | (1usize << (KEYS - 133)) | (1usize << (LAST - 133)) | (1usize << (LATERAL - 133)) | (1usize << (LEADING - 133)) | (1usize << (LEVEL - 133)) | (1usize << (LIMIT - 133)) | (1usize << (LOCAL - 133)) | (1usize << (LOGICAL - 133)) | (1usize << (MAP - 133)) | (1usize << (MATCH - 133)) | (1usize << (MATCHED - 133)) | (1usize << (MATCHES - 133)) | (1usize << (MATCH_RECOGNIZE - 133)) | (1usize << (MATERIALIZED - 133)) | (1usize << (MEASURES - 133)) | (1usize << (MERGE - 133)) | (1usize << (MINUTE - 133)) | (1usize << (MONTH - 133)) | (1usize << (NEXT - 133)) | (1usize << (NFC - 133)) | (1usize << (NFD - 133)) | (1usize << (NFKC - 133)) | (1usize << (NFKD - 133)) | (1usize << (NO - 133)))) != 0) || ((((_la - 165)) & !0x3f) == 0 && ((1usize << (_la - 165)) & ((1usize << (NONE - 165)) | (1usize << (NULLIF - 165)) | (1usize << (NULLS - 165)) | (1usize << (OBJECT - 165)) | (1usize << (OF - 165)) | (1usize << (OFFSET - 165)) | (1usize << (OMIT - 165)) | (1usize << (ONE - 165)) | (1usize << (ONLY - 165)) | (1usize << (OPTION - 165)) | (1usize << (ORDINALITY - 165)) | (1usize << (OUTPUT - 165)) | (1usize << (OVER - 165)) | (1usize << (OVERFLOW - 165)) | (1usize << (PARTITION - 165)) | (1usize << (PARTITIONS - 165)) | (1usize << (PASSING - 165)) | (1usize << (PAST - 165)) | (1usize << (PATH - 165)) | (1usize << (PATTERN - 165)) | (1usize << (PER - 165)) | (1usize << (PERIOD - 165)) | (1usize << (PERMUTE - 165)) | (1usize << (POSITION - 165)) | (1usize << (PRECEDING - 165)))) != 0) || ((((_la - 197)) & !0x3f) == 0 && ((1usize << (_la - 197)) & ((1usize << (PRECISION - 197)) | (1usize << (PRIVILEGES - 197)) | (1usize << (PROPERTIES - 197)) | (1usize << (PRUNE - 197)) | (1usize << (QUOTES - 197)) | (1usize << (RANGE - 197)) | (1usize << (READ - 197)) | (1usize << (REFRESH - 197)) | (1usize << (RENAME - 197)) | (1usize << (REPEATABLE - 197)) | (1usize << (REPLACE - 197)) | (1usize << (RESET - 197)) | (1usize << (RESPECT - 197)) | (1usize << (RESTRICT - 197)) | (1usize << (RETURNING - 197)) | (1usize << (REVOKE - 197)) | (1usize << (ROLE - 197)) | (1usize << (ROLES - 197)) | (1usize << (ROLLBACK - 197)) | (1usize << (ROW - 197)) | (1usize << (ROWS - 197)) | (1usize << (RUNNING - 197)) | (1usize << (SCALAR - 197)) | (1usize << (SCHEMA - 197)) | (1usize << (SCHEMAS - 197)) | (1usize << (SECOND - 197)) | (1usize << (SECURITY - 197)) | (1usize << (SEEK - 197)))) != 0) || ((((_la - 230)) & !0x3f) == 0 && ((1usize << (_la - 230)) & ((1usize << (SERIALIZABLE - 230)) | (1usize << (SESSION - 230)) | (1usize << (SET - 230)) | (1usize << (SETS - 230)) | (1usize << (SHOW - 230)) | (1usize << (SOME - 230)) | (1usize << (START - 230)) | (1usize << (STATS - 230)) | (1usize << (SUBSET - 230)) | (1usize << (SUBSTRING - 230)) | (1usize << (SYSTEM - 230)) | (1usize << (TABLES - 230)) | (1usize << (TABLESAMPLE - 230)) | (1usize << (TEXT - 230)) | (1usize << (TEXT_STRING - 230)) | (1usize << (TIES - 230)) | (1usize << (TIME - 230)) | (1usize << (TIMESTAMP - 230)) | (1usize << (TO - 230)) | (1usize << (TRAILING - 230)) | (1usize << (TRANSACTION - 230)) | (1usize << (TRUNCATE - 230)) | (1usize << (TRY_CAST - 230)) | (1usize << (TYPE - 230)) | (1usize << (UNBOUNDED - 230)) | (1usize << (UNCOMMITTED - 230)) | (1usize << (UNCONDITIONAL - 230)))) != 0) || ((((_la - 263)) & !0x3f) == 0 && ((1usize << (_la - 263)) & ((1usize << (UNIQUE - 263)) | (1usize << (UNKNOWN - 263)) | (1usize << (UNMATCHED - 263)) | (1usize << (UPDATE - 263)) | (1usize << (USE - 263)) | (1usize << (USER - 263)) | (1usize << (UTF16 - 263)) | (1usize << (UTF32 - 263)) | (1usize << (UTF8 - 263)) | (1usize << (VALIDATE - 263)) | (1usize << (VALUE - 263)) | (1usize << (VERBOSE - 263)) | (1usize << (VERSION - 263)) | (1usize << (VIEW - 263)) | (1usize << (WINDOW - 263)) | (1usize << (WITHIN - 263)) | (1usize << (WITHOUT - 263)) | (1usize << (WORK - 263)) | (1usize << (WRAPPER - 263)) | (1usize << (WRITE - 263)) | (1usize << (YEAR - 263)) | (1usize << (ZONE - 263)))) != 0) || ((((_la - 310)) & !0x3f) == 0 && ((1usize << (_la - 310)) & ((1usize << (IDENTIFIER - 310)) | (1usize << (DIGIT_IDENTIFIER - 310)) | (1usize << (QUOTED_IDENTIFIER - 310)) | (1usize << (BACKQUOTED_IDENTIFIER - 310)))) != 0) { + { + recog.base.set_state(1014); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AS { + { + recog.base.set_state(1013); + recog.base.match_token(AS,&mut recog.err_handler)?; + + } + } + + /*InvokeRule identifier*/ + recog.base.set_state(1016); + recog.identifier()?; + + } + } + + recog.base.set_state(1019); + recog.base.match_token(USING,&mut recog.err_handler)?; + + /*InvokeRule relation*/ + recog.base.set_state(1020); + recog.relation_rec(0)?; + + recog.base.set_state(1021); + recog.base.match_token(ON,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1022); + recog.expression()?; + + recog.base.set_state(1024); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + loop { + { + { + /*InvokeRule mergeCase*/ + recog.base.set_state(1023); + recog.mergeCase()?; + + } + } + recog.base.set_state(1026); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if !(_la==WHEN) {break} + } + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- query ---------------- +pub type QueryContextAll<'input> = QueryContext<'input>; + + +pub type QueryContext<'input> = BaseParserRuleContext<'input,QueryContextExt<'input>>; + +#[derive(Clone)] +pub struct QueryContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QueryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QueryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_query(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_query(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for QueryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_query } + //fn type_rule_index() -> usize where Self: Sized { RULE_query } +} +antlr_rust::tid!{QueryContextExt<'a>} + +impl<'input> QueryContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QueryContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait QueryContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn queryNoWith(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn with(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> QueryContextAttrs<'input> for QueryContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn query(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = QueryContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 12, RULE_query); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1031); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + /*InvokeRule with*/ + recog.base.set_state(1030); + recog.with()?; + + } + } + + /*InvokeRule queryNoWith*/ + recog.base.set_state(1033); + recog.queryNoWith()?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- with ---------------- +pub type WithContextAll<'input> = WithContext<'input>; + + +pub type WithContext<'input> = BaseParserRuleContext<'input,WithContextExt<'input>>; + +#[derive(Clone)] +pub struct WithContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for WithContext<'input>{} + +impl<'input,'a> Listenable + 'a> for WithContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_with(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_with(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for WithContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_with } + //fn type_rule_index() -> usize where Self: Sized { RULE_with } +} +antlr_rust::tid!{WithContextExt<'a>} + +impl<'input> WithContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,WithContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait WithContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token WITH +/// Returns `None` if there is no child corresponding to token WITH +fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) +} +fn namedQuery_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn namedQuery(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token RECURSIVE +/// Returns `None` if there is no child corresponding to token RECURSIVE +fn RECURSIVE(&self) -> Option>> where Self:Sized{ + self.get_token(RECURSIVE, 0) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> WithContextAttrs<'input> for WithContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn with(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = WithContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 14, RULE_with); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1035); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(1037); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==RECURSIVE { + { + recog.base.set_state(1036); + recog.base.match_token(RECURSIVE,&mut recog.err_handler)?; + + } + } + + /*InvokeRule namedQuery*/ + recog.base.set_state(1039); + recog.namedQuery()?; + + recog.base.set_state(1044); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1040); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule namedQuery*/ + recog.base.set_state(1041); + recog.namedQuery()?; + + } + } + recog.base.set_state(1046); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- tableElement ---------------- +pub type TableElementContextAll<'input> = TableElementContext<'input>; + + +pub type TableElementContext<'input> = BaseParserRuleContext<'input,TableElementContextExt<'input>>; + +#[derive(Clone)] +pub struct TableElementContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TableElementContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableElementContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableElement(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_tableElement(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableElementContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_tableElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_tableElement } +} +antlr_rust::tid!{TableElementContextExt<'a>} + +impl<'input> TableElementContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TableElementContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait TableElementContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn columnDefinition(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn likeClause(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> TableElementContextAttrs<'input> for TableElementContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn tableElement(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TableElementContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 16, RULE_tableElement); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1049); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | + AUTHORIZATION | BERNOULLI | BOTH | CALL | CASCADE | CATALOGS | COLUMN | + COLUMNS | COMMENT | COMMIT | COMMITTED | CONDITIONAL | COUNT | COPARTITION | + CURRENT | DATA | DATE | DAY | DEFAULT | DEFINE | DEFINER | DENY | DESC | + DESCRIPTOR | DISTRIBUTED | DOUBLE | EMPTY | ENCODING | ERROR | EXCLUDING | + EXPLAIN | FETCH | FILTER | FINAL | FIRST | FOLLOWING | FORMAT | FUNCTIONS | + GRACE | GRANT | GRANTED | GRANTS | GRAPHVIZ | GROUPS | HOUR | IF | IGNORE | + INCLUDING | INITIAL | INPUT | INTERVAL | INVOKER | IO | ISOLATION | JSON | + KEEP | KEY | KEYS | LAST | LATERAL | LEADING | LEVEL | LIMIT | LOCAL | + LOGICAL | MAP | MATCH | MATCHED | MATCHES | MATCH_RECOGNIZE | MATERIALIZED | + MEASURES | MERGE | MINUTE | MONTH | NEXT | NFC | NFD | NFKC | NFKD | + NO | NONE | NULLIF | NULLS | OBJECT | OF | OFFSET | OMIT | ONE | ONLY | + OPTION | ORDINALITY | OUTPUT | OVER | OVERFLOW | PARTITION | PARTITIONS | + PASSING | PAST | PATH | PATTERN | PER | PERIOD | PERMUTE | POSITION | + PRECEDING | PRECISION | PRIVILEGES | PROPERTIES | PRUNE | QUOTES | RANGE | + READ | REFRESH | RENAME | REPEATABLE | REPLACE | RESET | RESPECT | RESTRICT | + RETURNING | REVOKE | ROLE | ROLES | ROLLBACK | ROW | ROWS | RUNNING | + SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | SERIALIZABLE | + SESSION | SET | SETS | SHOW | SOME | START | STATS | SUBSET | SUBSTRING | + SYSTEM | TABLES | TABLESAMPLE | TEXT | TEXT_STRING | TIES | TIME | TIMESTAMP | + TO | TRAILING | TRANSACTION | TRUNCATE | TRY_CAST | TYPE | UNBOUNDED | + UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | UPDATE | + USE | USER | UTF16 | UTF32 | UTF8 | VALIDATE | VALUE | VERBOSE | VERSION | + VIEW | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE | YEAR | ZONE | + IDENTIFIER | DIGIT_IDENTIFIER | QUOTED_IDENTIFIER | BACKQUOTED_IDENTIFIER + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule columnDefinition*/ + recog.base.set_state(1047); + recog.columnDefinition()?; + + } + } + + LIKE + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + /*InvokeRule likeClause*/ + recog.base.set_state(1048); + recog.likeClause()?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- columnDefinition ---------------- +pub type ColumnDefinitionContextAll<'input> = ColumnDefinitionContext<'input>; + + +pub type ColumnDefinitionContext<'input> = BaseParserRuleContext<'input,ColumnDefinitionContextExt<'input>>; + +#[derive(Clone)] +pub struct ColumnDefinitionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ColumnDefinitionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ColumnDefinitionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_columnDefinition(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_columnDefinition(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ColumnDefinitionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_columnDefinition } + //fn type_rule_index() -> usize where Self: Sized { RULE_columnDefinition } +} +antlr_rust::tid!{ColumnDefinitionContextExt<'a>} + +impl<'input> ColumnDefinitionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ColumnDefinitionContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ColumnDefinitionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token NOT +/// Returns `None` if there is no child corresponding to token NOT +fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) +} +/// Retrieves first TerminalNode corresponding to token NULL +/// Returns `None` if there is no child corresponding to token NULL +fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) +} +/// Retrieves first TerminalNode corresponding to token COMMENT +/// Returns `None` if there is no child corresponding to token COMMENT +fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) +} +fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token WITH +/// Returns `None` if there is no child corresponding to token WITH +fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) +} +fn properties(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> ColumnDefinitionContextAttrs<'input> for ColumnDefinitionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn columnDefinition(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ColumnDefinitionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 18, RULE_columnDefinition); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(1051); + recog.identifier()?; + + /*InvokeRule type_*/ + recog.base.set_state(1052); + recog.type__rec(0)?; + + recog.base.set_state(1055); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NOT { + { + recog.base.set_state(1053); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + recog.base.set_state(1054); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1059); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COMMENT { + { + recog.base.set_state(1057); + recog.base.match_token(COMMENT,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(1058); + recog.string()?; + + } + } + + recog.base.set_state(1063); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH { + { + recog.base.set_state(1061); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + /*InvokeRule properties*/ + recog.base.set_state(1062); + recog.properties()?; + + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- likeClause ---------------- +pub type LikeClauseContextAll<'input> = LikeClauseContext<'input>; + + +pub type LikeClauseContext<'input> = BaseParserRuleContext<'input,LikeClauseContextExt<'input>>; + +#[derive(Clone)] +pub struct LikeClauseContextExt<'input>{ + pub optionType: Option>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for LikeClauseContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LikeClauseContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_likeClause(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_likeClause(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for LikeClauseContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_likeClause } + //fn type_rule_index() -> usize where Self: Sized { RULE_likeClause } +} +antlr_rust::tid!{LikeClauseContextExt<'a>} + +impl<'input> LikeClauseContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,LikeClauseContextExt{ + optionType: None, + ph:PhantomData + }), + ) + } +} + +pub trait LikeClauseContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token LIKE +/// Returns `None` if there is no child corresponding to token LIKE +fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) +} +fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token PROPERTIES +/// Returns `None` if there is no child corresponding to token PROPERTIES +fn PROPERTIES(&self) -> Option>> where Self:Sized{ + self.get_token(PROPERTIES, 0) +} +/// Retrieves first TerminalNode corresponding to token INCLUDING +/// Returns `None` if there is no child corresponding to token INCLUDING +fn INCLUDING(&self) -> Option>> where Self:Sized{ + self.get_token(INCLUDING, 0) +} +/// Retrieves first TerminalNode corresponding to token EXCLUDING +/// Returns `None` if there is no child corresponding to token EXCLUDING +fn EXCLUDING(&self) -> Option>> where Self:Sized{ + self.get_token(EXCLUDING, 0) +} + +} + +impl<'input> LikeClauseContextAttrs<'input> for LikeClauseContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn likeClause(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = LikeClauseContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 20, RULE_likeClause); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1065); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(1066); + recog.qualifiedName()?; + + recog.base.set_state(1069); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==EXCLUDING || _la==INCLUDING { + { + recog.base.set_state(1067); + cast_mut::<_,LikeClauseContext >(&mut _localctx).optionType = recog.base.input.lt(1).cloned(); + + _la = recog.base.input.la(1); + if { !(_la==EXCLUDING || _la==INCLUDING) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + cast_mut::<_,LikeClauseContext >(&mut _localctx).optionType = Some(&tmp); + + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + recog.base.set_state(1068); + recog.base.match_token(PROPERTIES,&mut recog.err_handler)?; + + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- properties ---------------- +pub type PropertiesContextAll<'input> = PropertiesContext<'input>; + + +pub type PropertiesContext<'input> = BaseParserRuleContext<'input,PropertiesContextExt<'input>>; + +#[derive(Clone)] +pub struct PropertiesContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PropertiesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PropertiesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_properties(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_properties(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for PropertiesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_properties } + //fn type_rule_index() -> usize where Self: Sized { RULE_properties } +} +antlr_rust::tid!{PropertiesContextExt<'a>} + +impl<'input> PropertiesContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PropertiesContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait PropertiesContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn propertyAssignments(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> PropertiesContextAttrs<'input> for PropertiesContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn properties(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PropertiesContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 22, RULE_properties); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1071); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule propertyAssignments*/ + recog.base.set_state(1072); + recog.propertyAssignments()?; + + recog.base.set_state(1073); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- propertyAssignments ---------------- +pub type PropertyAssignmentsContextAll<'input> = PropertyAssignmentsContext<'input>; + + +pub type PropertyAssignmentsContext<'input> = BaseParserRuleContext<'input,PropertyAssignmentsContextExt<'input>>; + +#[derive(Clone)] +pub struct PropertyAssignmentsContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PropertyAssignmentsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PropertyAssignmentsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_propertyAssignments(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_propertyAssignments(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for PropertyAssignmentsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_propertyAssignments } + //fn type_rule_index() -> usize where Self: Sized { RULE_propertyAssignments } +} +antlr_rust::tid!{PropertyAssignmentsContextExt<'a>} + +impl<'input> PropertyAssignmentsContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PropertyAssignmentsContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait PropertyAssignmentsContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn property_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn property(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> PropertyAssignmentsContextAttrs<'input> for PropertyAssignmentsContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn propertyAssignments(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PropertyAssignmentsContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 24, RULE_propertyAssignments); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule property*/ + recog.base.set_state(1075); + recog.property()?; + + recog.base.set_state(1080); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1076); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule property*/ + recog.base.set_state(1077); + recog.property()?; + + } + } + recog.base.set_state(1082); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- property ---------------- +pub type PropertyContextAll<'input> = PropertyContext<'input>; + + +pub type PropertyContext<'input> = BaseParserRuleContext<'input,PropertyContextExt<'input>>; + +#[derive(Clone)] +pub struct PropertyContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PropertyContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PropertyContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_property(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_property(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for PropertyContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_property } + //fn type_rule_index() -> usize where Self: Sized { RULE_property } +} +antlr_rust::tid!{PropertyContextExt<'a>} + +impl<'input> PropertyContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PropertyContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait PropertyContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token EQ +/// Returns `None` if there is no child corresponding to token EQ +fn EQ(&self) -> Option>> where Self:Sized{ + self.get_token(EQ, 0) +} +fn propertyValue(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> PropertyContextAttrs<'input> for PropertyContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn property(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PropertyContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 26, RULE_property); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(1083); + recog.identifier()?; + + recog.base.set_state(1084); + recog.base.match_token(EQ,&mut recog.err_handler)?; + + /*InvokeRule propertyValue*/ + recog.base.set_state(1085); + recog.propertyValue()?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- propertyValue ---------------- +#[derive(Debug)] +pub enum PropertyValueContextAll<'input>{ + DefaultPropertyValueContext(DefaultPropertyValueContext<'input>), + NonDefaultPropertyValueContext(NonDefaultPropertyValueContext<'input>), +Error(PropertyValueContext<'input>) +} +antlr_rust::tid!{PropertyValueContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for PropertyValueContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for PropertyValueContextAll<'input>{} + +impl<'input> Deref for PropertyValueContextAll<'input>{ + type Target = dyn PropertyValueContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use PropertyValueContextAll::*; + match self{ + DefaultPropertyValueContext(inner) => inner, + NonDefaultPropertyValueContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for PropertyValueContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type PropertyValueContext<'input> = BaseParserRuleContext<'input,PropertyValueContextExt<'input>>; + +#[derive(Clone)] +pub struct PropertyValueContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PropertyValueContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PropertyValueContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for PropertyValueContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_propertyValue } + //fn type_rule_index() -> usize where Self: Sized { RULE_propertyValue } +} +antlr_rust::tid!{PropertyValueContextExt<'a>} + +impl<'input> PropertyValueContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + PropertyValueContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PropertyValueContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait PropertyValueContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> PropertyValueContextAttrs<'input> for PropertyValueContext<'input>{} + +pub type DefaultPropertyValueContext<'input> = BaseParserRuleContext<'input,DefaultPropertyValueContextExt<'input>>; + +pub trait DefaultPropertyValueContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DEFAULT + /// Returns `None` if there is no child corresponding to token DEFAULT + fn DEFAULT(&self) -> Option>> where Self:Sized{ + self.get_token(DEFAULT, 0) + } +} + +impl<'input> DefaultPropertyValueContextAttrs<'input> for DefaultPropertyValueContext<'input>{} + +pub struct DefaultPropertyValueContextExt<'input>{ + base:PropertyValueContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DefaultPropertyValueContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DefaultPropertyValueContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DefaultPropertyValueContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_defaultPropertyValue(self); + } +} + +impl<'input> CustomRuleContext<'input> for DefaultPropertyValueContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_propertyValue } + //fn type_rule_index() -> usize where Self: Sized { RULE_propertyValue } +} + +impl<'input> Borrow> for DefaultPropertyValueContext<'input>{ + fn borrow(&self) -> &PropertyValueContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DefaultPropertyValueContext<'input>{ + fn borrow_mut(&mut self) -> &mut PropertyValueContextExt<'input> { &mut self.base } +} + +impl<'input> PropertyValueContextAttrs<'input> for DefaultPropertyValueContext<'input> {} + +impl<'input> DefaultPropertyValueContextExt<'input>{ + fn new(ctx: &dyn PropertyValueContextAttrs<'input>) -> Rc> { + Rc::new( + PropertyValueContextAll::DefaultPropertyValueContext( + BaseParserRuleContext::copy_from(ctx,DefaultPropertyValueContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type NonDefaultPropertyValueContext<'input> = BaseParserRuleContext<'input,NonDefaultPropertyValueContextExt<'input>>; + +pub trait NonDefaultPropertyValueContextAttrs<'input>: PrestoParserContext<'input>{ + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> NonDefaultPropertyValueContextAttrs<'input> for NonDefaultPropertyValueContext<'input>{} + +pub struct NonDefaultPropertyValueContextExt<'input>{ + base:PropertyValueContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{NonDefaultPropertyValueContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for NonDefaultPropertyValueContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NonDefaultPropertyValueContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_nonDefaultPropertyValue(self); + } +} + +impl<'input> CustomRuleContext<'input> for NonDefaultPropertyValueContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_propertyValue } + //fn type_rule_index() -> usize where Self: Sized { RULE_propertyValue } +} + +impl<'input> Borrow> for NonDefaultPropertyValueContext<'input>{ + fn borrow(&self) -> &PropertyValueContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for NonDefaultPropertyValueContext<'input>{ + fn borrow_mut(&mut self) -> &mut PropertyValueContextExt<'input> { &mut self.base } +} + +impl<'input> PropertyValueContextAttrs<'input> for NonDefaultPropertyValueContext<'input> {} + +impl<'input> NonDefaultPropertyValueContextExt<'input>{ + fn new(ctx: &dyn PropertyValueContextAttrs<'input>) -> Rc> { + Rc::new( + PropertyValueContextAll::NonDefaultPropertyValueContext( + BaseParserRuleContext::copy_from(ctx,NonDefaultPropertyValueContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn propertyValue(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PropertyValueContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 28, RULE_propertyValue); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1089); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(117,&mut recog.base)? { + 1 =>{ + let tmp = DefaultPropertyValueContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(1087); + recog.base.match_token(DEFAULT,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + let tmp = NonDefaultPropertyValueContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + /*InvokeRule expression*/ + recog.base.set_state(1088); + recog.expression()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- queryNoWith ---------------- +pub type QueryNoWithContextAll<'input> = QueryNoWithContext<'input>; + + +pub type QueryNoWithContext<'input> = BaseParserRuleContext<'input,QueryNoWithContextExt<'input>>; + +#[derive(Clone)] +pub struct QueryNoWithContextExt<'input>{ + pub offset: Option>>, + pub limit: Option>>, + pub fetchFirst: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QueryNoWithContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QueryNoWithContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_queryNoWith(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_queryNoWith(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for QueryNoWithContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryNoWith } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryNoWith } +} +antlr_rust::tid!{QueryNoWithContextExt<'a>} + +impl<'input> QueryNoWithContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QueryNoWithContextExt{ + offset: None, limit: None, fetchFirst: None, + ph:PhantomData + }), + ) + } +} + +pub trait QueryNoWithContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn queryTerm(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token ORDER +/// Returns `None` if there is no child corresponding to token ORDER +fn ORDER(&self) -> Option>> where Self:Sized{ + self.get_token(ORDER, 0) +} +/// Retrieves first TerminalNode corresponding to token BY +/// Returns `None` if there is no child corresponding to token BY +fn BY(&self) -> Option>> where Self:Sized{ + self.get_token(BY, 0) +} +fn sortItem_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn sortItem(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token OFFSET +/// Returns `None` if there is no child corresponding to token OFFSET +fn OFFSET(&self) -> Option>> where Self:Sized{ + self.get_token(OFFSET, 0) +} +fn rowCount_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn rowCount(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token LIMIT +/// Returns `None` if there is no child corresponding to token LIMIT +fn LIMIT(&self) -> Option>> where Self:Sized{ + self.get_token(LIMIT, 0) +} +/// Retrieves first TerminalNode corresponding to token FETCH +/// Returns `None` if there is no child corresponding to token FETCH +fn FETCH(&self) -> Option>> where Self:Sized{ + self.get_token(FETCH, 0) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} +fn limitRowCount(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token FIRST +/// Returns `None` if there is no child corresponding to token FIRST +fn FIRST(&self) -> Option>> where Self:Sized{ + self.get_token(FIRST, 0) +} +/// Retrieves first TerminalNode corresponding to token NEXT +/// Returns `None` if there is no child corresponding to token NEXT +fn NEXT(&self) -> Option>> where Self:Sized{ + self.get_token(NEXT, 0) +} +/// Retrieves all `TerminalNode`s corresponding to token ROW in current rule +fn ROW_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token ROW, starting from 0. +/// Returns `None` if number of children corresponding to token ROW is less or equal than `i`. +fn ROW(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(ROW, i) +} +/// Retrieves all `TerminalNode`s corresponding to token ROWS in current rule +fn ROWS_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token ROWS, starting from 0. +/// Returns `None` if number of children corresponding to token ROWS is less or equal than `i`. +fn ROWS(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(ROWS, i) +} +/// Retrieves first TerminalNode corresponding to token ONLY +/// Returns `None` if there is no child corresponding to token ONLY +fn ONLY(&self) -> Option>> where Self:Sized{ + self.get_token(ONLY, 0) +} +/// Retrieves first TerminalNode corresponding to token WITH +/// Returns `None` if there is no child corresponding to token WITH +fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) +} +/// Retrieves first TerminalNode corresponding to token TIES +/// Returns `None` if there is no child corresponding to token TIES +fn TIES(&self) -> Option>> where Self:Sized{ + self.get_token(TIES, 0) +} + +} + +impl<'input> QueryNoWithContextAttrs<'input> for QueryNoWithContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn queryNoWith(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = QueryNoWithContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 30, RULE_queryNoWith); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule queryTerm*/ + recog.base.set_state(1091); + recog.queryTerm_rec(0)?; + + recog.base.set_state(1102); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ORDER { + { + recog.base.set_state(1092); + recog.base.match_token(ORDER,&mut recog.err_handler)?; + + recog.base.set_state(1093); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1094); + recog.sortItem()?; + + recog.base.set_state(1099); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1095); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1096); + recog.sortItem()?; + + } + } + recog.base.set_state(1101); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1109); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==OFFSET { + { + recog.base.set_state(1104); + recog.base.match_token(OFFSET,&mut recog.err_handler)?; + + /*InvokeRule rowCount*/ + recog.base.set_state(1105); + let tmp = recog.rowCount()?; + cast_mut::<_,QueryNoWithContext >(&mut _localctx).offset = Some(tmp.clone()); + + + recog.base.set_state(1107); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ROW || _la==ROWS { + { + recog.base.set_state(1106); + _la = recog.base.input.la(1); + if { !(_la==ROW || _la==ROWS) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + } + } + + recog.base.set_state(1124); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + LIMIT + => { + { + { + recog.base.set_state(1111); + recog.base.match_token(LIMIT,&mut recog.err_handler)?; + + /*InvokeRule limitRowCount*/ + recog.base.set_state(1112); + let tmp = recog.limitRowCount()?; + cast_mut::<_,QueryNoWithContext >(&mut _localctx).limit = Some(tmp.clone()); + + + } + } + } + + FETCH + => { + { + { + recog.base.set_state(1113); + recog.base.match_token(FETCH,&mut recog.err_handler)?; + + recog.base.set_state(1114); + _la = recog.base.input.la(1); + if { !(_la==FIRST || _la==NEXT) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + recog.base.set_state(1116); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==QUESTION_MARK || _la==INTEGER_VALUE { + { + /*InvokeRule rowCount*/ + recog.base.set_state(1115); + let tmp = recog.rowCount()?; + cast_mut::<_,QueryNoWithContext >(&mut _localctx).fetchFirst = Some(tmp.clone()); + + + } + } + + recog.base.set_state(1118); + _la = recog.base.input.la(1); + if { !(_la==ROW || _la==ROWS) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + recog.base.set_state(1122); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ONLY + => { + { + recog.base.set_state(1119); + recog.base.match_token(ONLY,&mut recog.err_handler)?; + + } + } + + WITH + => { + { + recog.base.set_state(1120); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(1121); + recog.base.match_token(TIES,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + } + } + } + + EOF | T__2 | WITH + => { + } + + _ => {} + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- limitRowCount ---------------- +pub type LimitRowCountContextAll<'input> = LimitRowCountContext<'input>; + + +pub type LimitRowCountContext<'input> = BaseParserRuleContext<'input,LimitRowCountContextExt<'input>>; + +#[derive(Clone)] +pub struct LimitRowCountContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for LimitRowCountContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LimitRowCountContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_limitRowCount(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_limitRowCount(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for LimitRowCountContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_limitRowCount } + //fn type_rule_index() -> usize where Self: Sized { RULE_limitRowCount } +} +antlr_rust::tid!{LimitRowCountContextExt<'a>} + +impl<'input> LimitRowCountContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,LimitRowCountContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait LimitRowCountContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ALL +/// Returns `None` if there is no child corresponding to token ALL +fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) +} +fn rowCount(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> LimitRowCountContextAttrs<'input> for LimitRowCountContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn limitRowCount(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = LimitRowCountContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 32, RULE_limitRowCount); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1128); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ALL + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1126); + recog.base.match_token(ALL,&mut recog.err_handler)?; + + } + } + + QUESTION_MARK | INTEGER_VALUE + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + /*InvokeRule rowCount*/ + recog.base.set_state(1127); + recog.rowCount()?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- rowCount ---------------- +pub type RowCountContextAll<'input> = RowCountContext<'input>; + + +pub type RowCountContext<'input> = BaseParserRuleContext<'input,RowCountContextExt<'input>>; + +#[derive(Clone)] +pub struct RowCountContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RowCountContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RowCountContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rowCount(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_rowCount(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for RowCountContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rowCount } + //fn type_rule_index() -> usize where Self: Sized { RULE_rowCount } +} +antlr_rust::tid!{RowCountContextExt<'a>} + +impl<'input> RowCountContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RowCountContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait RowCountContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token INTEGER_VALUE +/// Returns `None` if there is no child corresponding to token INTEGER_VALUE +fn INTEGER_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(INTEGER_VALUE, 0) +} +/// Retrieves first TerminalNode corresponding to token QUESTION_MARK +/// Returns `None` if there is no child corresponding to token QUESTION_MARK +fn QUESTION_MARK(&self) -> Option>> where Self:Sized{ + self.get_token(QUESTION_MARK, 0) +} + +} + +impl<'input> RowCountContextAttrs<'input> for RowCountContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn rowCount(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = RowCountContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 34, RULE_rowCount); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1130); + _la = recog.base.input.la(1); + if { !(_la==QUESTION_MARK || _la==INTEGER_VALUE) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- queryTerm ---------------- +#[derive(Debug)] +pub enum QueryTermContextAll<'input>{ + QueryTermDefaultContext(QueryTermDefaultContext<'input>), + SetOperationContext(SetOperationContext<'input>), +Error(QueryTermContext<'input>) +} +antlr_rust::tid!{QueryTermContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for QueryTermContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for QueryTermContextAll<'input>{} + +impl<'input> Deref for QueryTermContextAll<'input>{ + type Target = dyn QueryTermContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use QueryTermContextAll::*; + match self{ + QueryTermDefaultContext(inner) => inner, + SetOperationContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for QueryTermContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type QueryTermContext<'input> = BaseParserRuleContext<'input,QueryTermContextExt<'input>>; + +#[derive(Clone)] +pub struct QueryTermContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QueryTermContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QueryTermContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for QueryTermContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryTerm } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryTerm } +} +antlr_rust::tid!{QueryTermContextExt<'a>} + +impl<'input> QueryTermContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + QueryTermContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QueryTermContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait QueryTermContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> QueryTermContextAttrs<'input> for QueryTermContext<'input>{} + +pub type QueryTermDefaultContext<'input> = BaseParserRuleContext<'input,QueryTermDefaultContextExt<'input>>; + +pub trait QueryTermDefaultContextAttrs<'input>: PrestoParserContext<'input>{ + fn queryPrimary(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> QueryTermDefaultContextAttrs<'input> for QueryTermDefaultContext<'input>{} + +pub struct QueryTermDefaultContextExt<'input>{ + base:QueryTermContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{QueryTermDefaultContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for QueryTermDefaultContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QueryTermDefaultContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_queryTermDefault(self); + } +} + +impl<'input> CustomRuleContext<'input> for QueryTermDefaultContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryTerm } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryTerm } +} + +impl<'input> Borrow> for QueryTermDefaultContext<'input>{ + fn borrow(&self) -> &QueryTermContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for QueryTermDefaultContext<'input>{ + fn borrow_mut(&mut self) -> &mut QueryTermContextExt<'input> { &mut self.base } +} + +impl<'input> QueryTermContextAttrs<'input> for QueryTermDefaultContext<'input> {} + +impl<'input> QueryTermDefaultContextExt<'input>{ + fn new(ctx: &dyn QueryTermContextAttrs<'input>) -> Rc> { + Rc::new( + QueryTermContextAll::QueryTermDefaultContext( + BaseParserRuleContext::copy_from(ctx,QueryTermDefaultContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SetOperationContext<'input> = BaseParserRuleContext<'input,SetOperationContextExt<'input>>; + +pub trait SetOperationContextAttrs<'input>: PrestoParserContext<'input>{ + fn queryTerm_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn queryTerm(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token INTERSECT + /// Returns `None` if there is no child corresponding to token INTERSECT + fn INTERSECT(&self) -> Option>> where Self:Sized{ + self.get_token(INTERSECT, 0) + } + fn setQuantifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token UNION + /// Returns `None` if there is no child corresponding to token UNION + fn UNION(&self) -> Option>> where Self:Sized{ + self.get_token(UNION, 0) + } + /// Retrieves first TerminalNode corresponding to token EXCEPT + /// Returns `None` if there is no child corresponding to token EXCEPT + fn EXCEPT(&self) -> Option>> where Self:Sized{ + self.get_token(EXCEPT, 0) + } +} + +impl<'input> SetOperationContextAttrs<'input> for SetOperationContext<'input>{} + +pub struct SetOperationContextExt<'input>{ + base:QueryTermContextExt<'input>, + pub left: Option>>, + pub operator: Option>, + pub right: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SetOperationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SetOperationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetOperationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setOperation(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetOperationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryTerm } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryTerm } +} + +impl<'input> Borrow> for SetOperationContext<'input>{ + fn borrow(&self) -> &QueryTermContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SetOperationContext<'input>{ + fn borrow_mut(&mut self) -> &mut QueryTermContextExt<'input> { &mut self.base } +} + +impl<'input> QueryTermContextAttrs<'input> for SetOperationContext<'input> {} + +impl<'input> SetOperationContextExt<'input>{ + fn new(ctx: &dyn QueryTermContextAttrs<'input>) -> Rc> { + Rc::new( + QueryTermContextAll::SetOperationContext( + BaseParserRuleContext::copy_from(ctx,SetOperationContextExt{ + operator:None, + left:None, right:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn queryTerm(&mut self,) + -> Result>,ANTLRError> { + self.queryTerm_rec(0) + } + + fn queryTerm_rec(&mut self, _p: isize) + -> Result>,ANTLRError> { + let recog = self; + let _parentctx = recog.ctx.take(); + let _parentState = recog.base.get_state(); + let mut _localctx = QueryTermContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_recursion_rule(_localctx.clone(), 36, RULE_queryTerm, _p); + let mut _localctx: Rc = _localctx; + let mut _prevctx = _localctx.clone(); + let _startState = 36; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + { + let mut tmp = QueryTermDefaultContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + + + /*InvokeRule queryPrimary*/ + recog.base.set_state(1133); + recog.queryPrimary()?; + + } + + let tmp = recog.input.lt(-1).cloned(); + recog.ctx.as_ref().unwrap().set_stop(tmp); + recog.base.set_state(1149); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(129,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + recog.trigger_exit_rule_event(); + _prevctx = _localctx.clone(); + { + recog.base.set_state(1147); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(128,&mut recog.base)? { + 1 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = SetOperationContextExt::new(&**QueryTermContextExt::new(_parentctx.clone(), _parentState)); + if let QueryTermContextAll::SetOperationContext(ctx) = cast_mut::<_,QueryTermContextAll >(&mut tmp){ + ctx.left = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_queryTerm); + _localctx = tmp; + recog.base.set_state(1135); + if !({recog.precpred(None, 2)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 2)".to_owned()), None))?; + } + recog.base.set_state(1136); + let tmp = recog.base.match_token(INTERSECT,&mut recog.err_handler)?; + if let QueryTermContextAll::SetOperationContext(ctx) = cast_mut::<_,QueryTermContextAll >(&mut _localctx){ + ctx.operator = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(1138); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ALL || _la==DISTINCT { + { + /*InvokeRule setQuantifier*/ + recog.base.set_state(1137); + recog.setQuantifier()?; + + } + } + + /*InvokeRule queryTerm*/ + recog.base.set_state(1140); + let tmp = recog.queryTerm_rec(3)?; + if let QueryTermContextAll::SetOperationContext(ctx) = cast_mut::<_,QueryTermContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 2 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = SetOperationContextExt::new(&**QueryTermContextExt::new(_parentctx.clone(), _parentState)); + if let QueryTermContextAll::SetOperationContext(ctx) = cast_mut::<_,QueryTermContextAll >(&mut tmp){ + ctx.left = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_queryTerm); + _localctx = tmp; + recog.base.set_state(1141); + if !({recog.precpred(None, 1)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 1)".to_owned()), None))?; + } + recog.base.set_state(1142); + if let QueryTermContextAll::SetOperationContext(ctx) = cast_mut::<_,QueryTermContextAll >(&mut _localctx){ + ctx.operator = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(_la==EXCEPT || _la==UNION) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let QueryTermContextAll::SetOperationContext(ctx) = cast_mut::<_,QueryTermContextAll >(&mut _localctx){ + ctx.operator = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + recog.base.set_state(1144); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ALL || _la==DISTINCT { + { + /*InvokeRule setQuantifier*/ + recog.base.set_state(1143); + recog.setQuantifier()?; + + } + } + + /*InvokeRule queryTerm*/ + recog.base.set_state(1146); + let tmp = recog.queryTerm_rec(2)?; + if let QueryTermContextAll::SetOperationContext(ctx) = cast_mut::<_,QueryTermContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + recog.base.set_state(1151); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(129,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_) => {}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re)=>{ + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?;} + } + recog.base.unroll_recursion_context(_parentctx); + + Ok(_localctx) + } +} +//------------------- queryPrimary ---------------- +#[derive(Debug)] +pub enum QueryPrimaryContextAll<'input>{ + SubqueryContext(SubqueryContext<'input>), + QueryPrimaryDefaultContext(QueryPrimaryDefaultContext<'input>), + TableContext(TableContext<'input>), + InlineTableContext(InlineTableContext<'input>), +Error(QueryPrimaryContext<'input>) +} +antlr_rust::tid!{QueryPrimaryContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for QueryPrimaryContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for QueryPrimaryContextAll<'input>{} + +impl<'input> Deref for QueryPrimaryContextAll<'input>{ + type Target = dyn QueryPrimaryContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use QueryPrimaryContextAll::*; + match self{ + SubqueryContext(inner) => inner, + QueryPrimaryDefaultContext(inner) => inner, + TableContext(inner) => inner, + InlineTableContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for QueryPrimaryContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type QueryPrimaryContext<'input> = BaseParserRuleContext<'input,QueryPrimaryContextExt<'input>>; + +#[derive(Clone)] +pub struct QueryPrimaryContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QueryPrimaryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QueryPrimaryContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for QueryPrimaryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryPrimary } +} +antlr_rust::tid!{QueryPrimaryContextExt<'a>} + +impl<'input> QueryPrimaryContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + QueryPrimaryContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QueryPrimaryContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait QueryPrimaryContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> QueryPrimaryContextAttrs<'input> for QueryPrimaryContext<'input>{} + +pub type SubqueryContext<'input> = BaseParserRuleContext<'input,SubqueryContextExt<'input>>; + +pub trait SubqueryContextAttrs<'input>: PrestoParserContext<'input>{ + fn queryNoWith(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SubqueryContextAttrs<'input> for SubqueryContext<'input>{} + +pub struct SubqueryContextExt<'input>{ + base:QueryPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SubqueryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SubqueryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SubqueryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_subquery(self); + } +} + +impl<'input> CustomRuleContext<'input> for SubqueryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryPrimary } +} + +impl<'input> Borrow> for SubqueryContext<'input>{ + fn borrow(&self) -> &QueryPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SubqueryContext<'input>{ + fn borrow_mut(&mut self) -> &mut QueryPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> QueryPrimaryContextAttrs<'input> for SubqueryContext<'input> {} + +impl<'input> SubqueryContextExt<'input>{ + fn new(ctx: &dyn QueryPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + QueryPrimaryContextAll::SubqueryContext( + BaseParserRuleContext::copy_from(ctx,SubqueryContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type QueryPrimaryDefaultContext<'input> = BaseParserRuleContext<'input,QueryPrimaryDefaultContextExt<'input>>; + +pub trait QueryPrimaryDefaultContextAttrs<'input>: PrestoParserContext<'input>{ + fn querySpecification(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> QueryPrimaryDefaultContextAttrs<'input> for QueryPrimaryDefaultContext<'input>{} + +pub struct QueryPrimaryDefaultContextExt<'input>{ + base:QueryPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{QueryPrimaryDefaultContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for QueryPrimaryDefaultContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QueryPrimaryDefaultContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_queryPrimaryDefault(self); + } +} + +impl<'input> CustomRuleContext<'input> for QueryPrimaryDefaultContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryPrimary } +} + +impl<'input> Borrow> for QueryPrimaryDefaultContext<'input>{ + fn borrow(&self) -> &QueryPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for QueryPrimaryDefaultContext<'input>{ + fn borrow_mut(&mut self) -> &mut QueryPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> QueryPrimaryContextAttrs<'input> for QueryPrimaryDefaultContext<'input> {} + +impl<'input> QueryPrimaryDefaultContextExt<'input>{ + fn new(ctx: &dyn QueryPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + QueryPrimaryContextAll::QueryPrimaryDefaultContext( + BaseParserRuleContext::copy_from(ctx,QueryPrimaryDefaultContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TableContext<'input> = BaseParserRuleContext<'input,TableContextExt<'input>>; + +pub trait TableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TableContextAttrs<'input> for TableContext<'input>{} + +pub struct TableContextExt<'input>{ + base:QueryPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_table(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryPrimary } +} + +impl<'input> Borrow> for TableContext<'input>{ + fn borrow(&self) -> &QueryPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TableContext<'input>{ + fn borrow_mut(&mut self) -> &mut QueryPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> QueryPrimaryContextAttrs<'input> for TableContext<'input> {} + +impl<'input> TableContextExt<'input>{ + fn new(ctx: &dyn QueryPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + QueryPrimaryContextAll::TableContext( + BaseParserRuleContext::copy_from(ctx,TableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type InlineTableContext<'input> = BaseParserRuleContext<'input,InlineTableContextExt<'input>>; + +pub trait InlineTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token VALUES + /// Returns `None` if there is no child corresponding to token VALUES + fn VALUES(&self) -> Option>> where Self:Sized{ + self.get_token(VALUES, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> InlineTableContextAttrs<'input> for InlineTableContext<'input>{} + +pub struct InlineTableContextExt<'input>{ + base:QueryPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{InlineTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for InlineTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for InlineTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_inlineTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for InlineTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryPrimary } +} + +impl<'input> Borrow> for InlineTableContext<'input>{ + fn borrow(&self) -> &QueryPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for InlineTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut QueryPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> QueryPrimaryContextAttrs<'input> for InlineTableContext<'input> {} + +impl<'input> InlineTableContextExt<'input>{ + fn new(ctx: &dyn QueryPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + QueryPrimaryContextAll::InlineTableContext( + BaseParserRuleContext::copy_from(ctx,InlineTableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn queryPrimary(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = QueryPrimaryContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 38, RULE_queryPrimary); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + let mut _alt: isize; + recog.base.set_state(1168); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + SELECT + => { + let tmp = QueryPrimaryDefaultContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule querySpecification*/ + recog.base.set_state(1152); + recog.querySpecification()?; + + } + } + + TABLE + => { + let tmp = TableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(1153); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(1154); + recog.qualifiedName()?; + + } + } + + VALUES + => { + let tmp = InlineTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(1155); + recog.base.match_token(VALUES,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1156); + recog.expression()?; + + recog.base.set_state(1161); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(130,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + { + { + recog.base.set_state(1157); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1158); + recog.expression()?; + + } + } + } + recog.base.set_state(1163); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(130,&mut recog.base)?; + } + } + } + + T__1 + => { + let tmp = SubqueryContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(1164); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule queryNoWith*/ + recog.base.set_state(1165); + recog.queryNoWith()?; + + recog.base.set_state(1166); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- sortItem ---------------- +pub type SortItemContextAll<'input> = SortItemContext<'input>; + + +pub type SortItemContext<'input> = BaseParserRuleContext<'input,SortItemContextExt<'input>>; + +#[derive(Clone)] +pub struct SortItemContextExt<'input>{ + pub ordering: Option>, + pub nullOrdering: Option>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SortItemContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SortItemContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_sortItem(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_sortItem(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for SortItemContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_sortItem } + //fn type_rule_index() -> usize where Self: Sized { RULE_sortItem } +} +antlr_rust::tid!{SortItemContextExt<'a>} + +impl<'input> SortItemContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SortItemContextExt{ + ordering: None, nullOrdering: None, + ph:PhantomData + }), + ) + } +} + +pub trait SortItemContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token NULLS +/// Returns `None` if there is no child corresponding to token NULLS +fn NULLS(&self) -> Option>> where Self:Sized{ + self.get_token(NULLS, 0) +} +/// Retrieves first TerminalNode corresponding to token ASC +/// Returns `None` if there is no child corresponding to token ASC +fn ASC(&self) -> Option>> where Self:Sized{ + self.get_token(ASC, 0) +} +/// Retrieves first TerminalNode corresponding to token DESC +/// Returns `None` if there is no child corresponding to token DESC +fn DESC(&self) -> Option>> where Self:Sized{ + self.get_token(DESC, 0) +} +/// Retrieves first TerminalNode corresponding to token FIRST +/// Returns `None` if there is no child corresponding to token FIRST +fn FIRST(&self) -> Option>> where Self:Sized{ + self.get_token(FIRST, 0) +} +/// Retrieves first TerminalNode corresponding to token LAST +/// Returns `None` if there is no child corresponding to token LAST +fn LAST(&self) -> Option>> where Self:Sized{ + self.get_token(LAST, 0) +} + +} + +impl<'input> SortItemContextAttrs<'input> for SortItemContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn sortItem(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SortItemContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 40, RULE_sortItem); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule expression*/ + recog.base.set_state(1170); + recog.expression()?; + + recog.base.set_state(1172); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ASC || _la==DESC { + { + recog.base.set_state(1171); + cast_mut::<_,SortItemContext >(&mut _localctx).ordering = recog.base.input.lt(1).cloned(); + + _la = recog.base.input.la(1); + if { !(_la==ASC || _la==DESC) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + cast_mut::<_,SortItemContext >(&mut _localctx).ordering = Some(&tmp); + + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + recog.base.set_state(1176); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NULLS { + { + recog.base.set_state(1174); + recog.base.match_token(NULLS,&mut recog.err_handler)?; + + recog.base.set_state(1175); + cast_mut::<_,SortItemContext >(&mut _localctx).nullOrdering = recog.base.input.lt(1).cloned(); + + _la = recog.base.input.la(1); + if { !(_la==FIRST || _la==LAST) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + cast_mut::<_,SortItemContext >(&mut _localctx).nullOrdering = Some(&tmp); + + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- querySpecification ---------------- +pub type QuerySpecificationContextAll<'input> = QuerySpecificationContext<'input>; + + +pub type QuerySpecificationContext<'input> = BaseParserRuleContext<'input,QuerySpecificationContextExt<'input>>; + +#[derive(Clone)] +pub struct QuerySpecificationContextExt<'input>{ + pub where_: Option>>, + pub having: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QuerySpecificationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QuerySpecificationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_querySpecification(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_querySpecification(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for QuerySpecificationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_querySpecification } + //fn type_rule_index() -> usize where Self: Sized { RULE_querySpecification } +} +antlr_rust::tid!{QuerySpecificationContextExt<'a>} + +impl<'input> QuerySpecificationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QuerySpecificationContextExt{ + where_: None, having: None, + ph:PhantomData + }), + ) + } +} + +pub trait QuerySpecificationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token SELECT +/// Returns `None` if there is no child corresponding to token SELECT +fn SELECT(&self) -> Option>> where Self:Sized{ + self.get_token(SELECT, 0) +} +fn querySelectItems(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn setQuantifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token FROM +/// Returns `None` if there is no child corresponding to token FROM +fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) +} +fn relation_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn relation(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token WHERE +/// Returns `None` if there is no child corresponding to token WHERE +fn WHERE(&self) -> Option>> where Self:Sized{ + self.get_token(WHERE, 0) +} +/// Retrieves first TerminalNode corresponding to token GROUP +/// Returns `None` if there is no child corresponding to token GROUP +fn GROUP(&self) -> Option>> where Self:Sized{ + self.get_token(GROUP, 0) +} +/// Retrieves first TerminalNode corresponding to token BY +/// Returns `None` if there is no child corresponding to token BY +fn BY(&self) -> Option>> where Self:Sized{ + self.get_token(BY, 0) +} +fn groupBy(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token HAVING +/// Returns `None` if there is no child corresponding to token HAVING +fn HAVING(&self) -> Option>> where Self:Sized{ + self.get_token(HAVING, 0) +} +/// Retrieves first TerminalNode corresponding to token WINDOW +/// Returns `None` if there is no child corresponding to token WINDOW +fn WINDOW(&self) -> Option>> where Self:Sized{ + self.get_token(WINDOW, 0) +} +fn windowDefinition_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn windowDefinition(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +fn booleanExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn booleanExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> QuerySpecificationContextAttrs<'input> for QuerySpecificationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn querySpecification(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = QuerySpecificationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 42, RULE_querySpecification); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1178); + recog.base.match_token(SELECT,&mut recog.err_handler)?; + + recog.base.set_state(1180); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(134,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule setQuantifier*/ + recog.base.set_state(1179); + recog.setQuantifier()?; + + } + } + + _ => {} + } + /*InvokeRule querySelectItems*/ + recog.base.set_state(1182); + recog.querySelectItems()?; + + recog.base.set_state(1192); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(136,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1183); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule relation*/ + recog.base.set_state(1184); + recog.relation_rec(0)?; + + recog.base.set_state(1189); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(135,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + { + { + recog.base.set_state(1185); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule relation*/ + recog.base.set_state(1186); + recog.relation_rec(0)?; + + } + } + } + recog.base.set_state(1191); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(135,&mut recog.base)?; + } + } + } + + _ => {} + } + recog.base.set_state(1196); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(137,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1194); + recog.base.match_token(WHERE,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(1195); + let tmp = recog.booleanExpression_rec(0)?; + cast_mut::<_,QuerySpecificationContext >(&mut _localctx).where_ = Some(tmp.clone()); + + + } + } + + _ => {} + } + recog.base.set_state(1201); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(138,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1198); + recog.base.match_token(GROUP,&mut recog.err_handler)?; + + recog.base.set_state(1199); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule groupBy*/ + recog.base.set_state(1200); + recog.groupBy()?; + + } + } + + _ => {} + } + recog.base.set_state(1205); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(139,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1203); + recog.base.match_token(HAVING,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(1204); + let tmp = recog.booleanExpression_rec(0)?; + cast_mut::<_,QuerySpecificationContext >(&mut _localctx).having = Some(tmp.clone()); + + + } + } + + _ => {} + } + recog.base.set_state(1216); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(141,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1207); + recog.base.match_token(WINDOW,&mut recog.err_handler)?; + + /*InvokeRule windowDefinition*/ + recog.base.set_state(1208); + recog.windowDefinition()?; + + recog.base.set_state(1213); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(140,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + { + { + recog.base.set_state(1209); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule windowDefinition*/ + recog.base.set_state(1210); + recog.windowDefinition()?; + + } + } + } + recog.base.set_state(1215); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(140,&mut recog.base)?; + } + } + } + + _ => {} + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- querySelectItems ---------------- +pub type QuerySelectItemsContextAll<'input> = QuerySelectItemsContext<'input>; + + +pub type QuerySelectItemsContext<'input> = BaseParserRuleContext<'input,QuerySelectItemsContextExt<'input>>; + +#[derive(Clone)] +pub struct QuerySelectItemsContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QuerySelectItemsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QuerySelectItemsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_querySelectItems(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_querySelectItems(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for QuerySelectItemsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_querySelectItems } + //fn type_rule_index() -> usize where Self: Sized { RULE_querySelectItems } +} +antlr_rust::tid!{QuerySelectItemsContextExt<'a>} + +impl<'input> QuerySelectItemsContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QuerySelectItemsContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait QuerySelectItemsContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn selectItem_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn selectItem(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> QuerySelectItemsContextAttrs<'input> for QuerySelectItemsContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn querySelectItems(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = QuerySelectItemsContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 44, RULE_querySelectItems); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule selectItem*/ + recog.base.set_state(1218); + recog.selectItem()?; + + recog.base.set_state(1223); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(142,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + { + { + recog.base.set_state(1219); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule selectItem*/ + recog.base.set_state(1220); + recog.selectItem()?; + + } + } + } + recog.base.set_state(1225); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(142,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- groupBy ---------------- +pub type GroupByContextAll<'input> = GroupByContext<'input>; + + +pub type GroupByContext<'input> = BaseParserRuleContext<'input,GroupByContextExt<'input>>; + +#[derive(Clone)] +pub struct GroupByContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for GroupByContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GroupByContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_groupBy(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_groupBy(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for GroupByContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_groupBy } + //fn type_rule_index() -> usize where Self: Sized { RULE_groupBy } +} +antlr_rust::tid!{GroupByContextExt<'a>} + +impl<'input> GroupByContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,GroupByContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait GroupByContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn groupingElement_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn groupingElement(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +fn setQuantifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> GroupByContextAttrs<'input> for GroupByContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn groupBy(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = GroupByContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 46, RULE_groupBy); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1227); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(143,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule setQuantifier*/ + recog.base.set_state(1226); + recog.setQuantifier()?; + + } + } + + _ => {} + } + /*InvokeRule groupingElement*/ + recog.base.set_state(1229); + recog.groupingElement()?; + + recog.base.set_state(1234); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(144,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + { + { + recog.base.set_state(1230); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule groupingElement*/ + recog.base.set_state(1231); + recog.groupingElement()?; + + } + } + } + recog.base.set_state(1236); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(144,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- groupingElement ---------------- +#[derive(Debug)] +pub enum GroupingElementContextAll<'input>{ + MultipleGroupingSetsContext(MultipleGroupingSetsContext<'input>), + SingleGroupingSetContext(SingleGroupingSetContext<'input>), + CubeContext(CubeContext<'input>), + RollupContext(RollupContext<'input>), +Error(GroupingElementContext<'input>) +} +antlr_rust::tid!{GroupingElementContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for GroupingElementContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for GroupingElementContextAll<'input>{} + +impl<'input> Deref for GroupingElementContextAll<'input>{ + type Target = dyn GroupingElementContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use GroupingElementContextAll::*; + match self{ + MultipleGroupingSetsContext(inner) => inner, + SingleGroupingSetContext(inner) => inner, + CubeContext(inner) => inner, + RollupContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for GroupingElementContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type GroupingElementContext<'input> = BaseParserRuleContext<'input,GroupingElementContextExt<'input>>; + +#[derive(Clone)] +pub struct GroupingElementContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for GroupingElementContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GroupingElementContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for GroupingElementContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_groupingElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_groupingElement } +} +antlr_rust::tid!{GroupingElementContextExt<'a>} + +impl<'input> GroupingElementContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + GroupingElementContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,GroupingElementContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait GroupingElementContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> GroupingElementContextAttrs<'input> for GroupingElementContext<'input>{} + +pub type MultipleGroupingSetsContext<'input> = BaseParserRuleContext<'input,MultipleGroupingSetsContextExt<'input>>; + +pub trait MultipleGroupingSetsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token GROUPING + /// Returns `None` if there is no child corresponding to token GROUPING + fn GROUPING(&self) -> Option>> where Self:Sized{ + self.get_token(GROUPING, 0) + } + /// Retrieves first TerminalNode corresponding to token SETS + /// Returns `None` if there is no child corresponding to token SETS + fn SETS(&self) -> Option>> where Self:Sized{ + self.get_token(SETS, 0) + } + fn groupingSet_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn groupingSet(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> MultipleGroupingSetsContextAttrs<'input> for MultipleGroupingSetsContext<'input>{} + +pub struct MultipleGroupingSetsContextExt<'input>{ + base:GroupingElementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{MultipleGroupingSetsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for MultipleGroupingSetsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MultipleGroupingSetsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_multipleGroupingSets(self); + } +} + +impl<'input> CustomRuleContext<'input> for MultipleGroupingSetsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_groupingElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_groupingElement } +} + +impl<'input> Borrow> for MultipleGroupingSetsContext<'input>{ + fn borrow(&self) -> &GroupingElementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for MultipleGroupingSetsContext<'input>{ + fn borrow_mut(&mut self) -> &mut GroupingElementContextExt<'input> { &mut self.base } +} + +impl<'input> GroupingElementContextAttrs<'input> for MultipleGroupingSetsContext<'input> {} + +impl<'input> MultipleGroupingSetsContextExt<'input>{ + fn new(ctx: &dyn GroupingElementContextAttrs<'input>) -> Rc> { + Rc::new( + GroupingElementContextAll::MultipleGroupingSetsContext( + BaseParserRuleContext::copy_from(ctx,MultipleGroupingSetsContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SingleGroupingSetContext<'input> = BaseParserRuleContext<'input,SingleGroupingSetContextExt<'input>>; + +pub trait SingleGroupingSetContextAttrs<'input>: PrestoParserContext<'input>{ + fn groupingSet(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SingleGroupingSetContextAttrs<'input> for SingleGroupingSetContext<'input>{} + +pub struct SingleGroupingSetContextExt<'input>{ + base:GroupingElementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SingleGroupingSetContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SingleGroupingSetContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SingleGroupingSetContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_singleGroupingSet(self); + } +} + +impl<'input> CustomRuleContext<'input> for SingleGroupingSetContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_groupingElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_groupingElement } +} + +impl<'input> Borrow> for SingleGroupingSetContext<'input>{ + fn borrow(&self) -> &GroupingElementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SingleGroupingSetContext<'input>{ + fn borrow_mut(&mut self) -> &mut GroupingElementContextExt<'input> { &mut self.base } +} + +impl<'input> GroupingElementContextAttrs<'input> for SingleGroupingSetContext<'input> {} + +impl<'input> SingleGroupingSetContextExt<'input>{ + fn new(ctx: &dyn GroupingElementContextAttrs<'input>) -> Rc> { + Rc::new( + GroupingElementContextAll::SingleGroupingSetContext( + BaseParserRuleContext::copy_from(ctx,SingleGroupingSetContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CubeContext<'input> = BaseParserRuleContext<'input,CubeContextExt<'input>>; + +pub trait CubeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CUBE + /// Returns `None` if there is no child corresponding to token CUBE + fn CUBE(&self) -> Option>> where Self:Sized{ + self.get_token(CUBE, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> CubeContextAttrs<'input> for CubeContext<'input>{} + +pub struct CubeContextExt<'input>{ + base:GroupingElementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CubeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CubeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CubeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_cube(self); + } +} + +impl<'input> CustomRuleContext<'input> for CubeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_groupingElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_groupingElement } +} + +impl<'input> Borrow> for CubeContext<'input>{ + fn borrow(&self) -> &GroupingElementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CubeContext<'input>{ + fn borrow_mut(&mut self) -> &mut GroupingElementContextExt<'input> { &mut self.base } +} + +impl<'input> GroupingElementContextAttrs<'input> for CubeContext<'input> {} + +impl<'input> CubeContextExt<'input>{ + fn new(ctx: &dyn GroupingElementContextAttrs<'input>) -> Rc> { + Rc::new( + GroupingElementContextAll::CubeContext( + BaseParserRuleContext::copy_from(ctx,CubeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RollupContext<'input> = BaseParserRuleContext<'input,RollupContextExt<'input>>; + +pub trait RollupContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ROLLUP + /// Returns `None` if there is no child corresponding to token ROLLUP + fn ROLLUP(&self) -> Option>> where Self:Sized{ + self.get_token(ROLLUP, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> RollupContextAttrs<'input> for RollupContext<'input>{} + +pub struct RollupContextExt<'input>{ + base:GroupingElementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RollupContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RollupContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RollupContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rollup(self); + } +} + +impl<'input> CustomRuleContext<'input> for RollupContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_groupingElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_groupingElement } +} + +impl<'input> Borrow> for RollupContext<'input>{ + fn borrow(&self) -> &GroupingElementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RollupContext<'input>{ + fn borrow_mut(&mut self) -> &mut GroupingElementContextExt<'input> { &mut self.base } +} + +impl<'input> GroupingElementContextAttrs<'input> for RollupContext<'input> {} + +impl<'input> RollupContextExt<'input>{ + fn new(ctx: &dyn GroupingElementContextAttrs<'input>) -> Rc> { + Rc::new( + GroupingElementContextAll::RollupContext( + BaseParserRuleContext::copy_from(ctx,RollupContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn groupingElement(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = GroupingElementContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 48, RULE_groupingElement); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1277); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(150,&mut recog.base)? { + 1 =>{ + let tmp = SingleGroupingSetContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule groupingSet*/ + recog.base.set_state(1237); + recog.groupingSet()?; + + } + } + , + 2 =>{ + let tmp = RollupContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(1238); + recog.base.match_token(ROLLUP,&mut recog.err_handler)?; + + recog.base.set_state(1239); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1248); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule expression*/ + recog.base.set_state(1240); + recog.expression()?; + + recog.base.set_state(1245); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1241); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1242); + recog.expression()?; + + } + } + recog.base.set_state(1247); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1250); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + let tmp = CubeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(1251); + recog.base.match_token(CUBE,&mut recog.err_handler)?; + + recog.base.set_state(1252); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1261); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule expression*/ + recog.base.set_state(1253); + recog.expression()?; + + recog.base.set_state(1258); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1254); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1255); + recog.expression()?; + + } + } + recog.base.set_state(1260); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1263); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 4 =>{ + let tmp = MultipleGroupingSetsContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(1264); + recog.base.match_token(GROUPING,&mut recog.err_handler)?; + + recog.base.set_state(1265); + recog.base.match_token(SETS,&mut recog.err_handler)?; + + recog.base.set_state(1266); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule groupingSet*/ + recog.base.set_state(1267); + recog.groupingSet()?; + + recog.base.set_state(1272); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1268); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule groupingSet*/ + recog.base.set_state(1269); + recog.groupingSet()?; + + } + } + recog.base.set_state(1274); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1275); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- groupingSet ---------------- +pub type GroupingSetContextAll<'input> = GroupingSetContext<'input>; + + +pub type GroupingSetContext<'input> = BaseParserRuleContext<'input,GroupingSetContextExt<'input>>; + +#[derive(Clone)] +pub struct GroupingSetContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for GroupingSetContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GroupingSetContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_groupingSet(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_groupingSet(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for GroupingSetContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_groupingSet } + //fn type_rule_index() -> usize where Self: Sized { RULE_groupingSet } +} +antlr_rust::tid!{GroupingSetContextExt<'a>} + +impl<'input> GroupingSetContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,GroupingSetContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait GroupingSetContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> GroupingSetContextAttrs<'input> for GroupingSetContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn groupingSet(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = GroupingSetContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 50, RULE_groupingSet); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1292); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(153,&mut recog.base)? { + 1 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1279); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1288); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule expression*/ + recog.base.set_state(1280); + recog.expression()?; + + recog.base.set_state(1285); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1281); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1282); + recog.expression()?; + + } + } + recog.base.set_state(1287); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1290); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + /*InvokeRule expression*/ + recog.base.set_state(1291); + recog.expression()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- windowDefinition ---------------- +pub type WindowDefinitionContextAll<'input> = WindowDefinitionContext<'input>; + + +pub type WindowDefinitionContext<'input> = BaseParserRuleContext<'input,WindowDefinitionContextExt<'input>>; + +#[derive(Clone)] +pub struct WindowDefinitionContextExt<'input>{ + pub name: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for WindowDefinitionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for WindowDefinitionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_windowDefinition(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_windowDefinition(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for WindowDefinitionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_windowDefinition } + //fn type_rule_index() -> usize where Self: Sized { RULE_windowDefinition } +} +antlr_rust::tid!{WindowDefinitionContextExt<'a>} + +impl<'input> WindowDefinitionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,WindowDefinitionContextExt{ + name: None, + ph:PhantomData + }), + ) + } +} + +pub trait WindowDefinitionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +fn windowSpecification(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> WindowDefinitionContextAttrs<'input> for WindowDefinitionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn windowDefinition(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = WindowDefinitionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 52, RULE_windowDefinition); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(1294); + let tmp = recog.identifier()?; + cast_mut::<_,WindowDefinitionContext >(&mut _localctx).name = Some(tmp.clone()); + + + recog.base.set_state(1295); + recog.base.match_token(AS,&mut recog.err_handler)?; + + recog.base.set_state(1296); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule windowSpecification*/ + recog.base.set_state(1297); + recog.windowSpecification()?; + + recog.base.set_state(1298); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- windowSpecification ---------------- +pub type WindowSpecificationContextAll<'input> = WindowSpecificationContext<'input>; + + +pub type WindowSpecificationContext<'input> = BaseParserRuleContext<'input,WindowSpecificationContextExt<'input>>; + +#[derive(Clone)] +pub struct WindowSpecificationContextExt<'input>{ + pub existingWindowName: Option>>, + pub expression: Option>>, + pub partition:Vec>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for WindowSpecificationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for WindowSpecificationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_windowSpecification(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_windowSpecification(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for WindowSpecificationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_windowSpecification } + //fn type_rule_index() -> usize where Self: Sized { RULE_windowSpecification } +} +antlr_rust::tid!{WindowSpecificationContextExt<'a>} + +impl<'input> WindowSpecificationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,WindowSpecificationContextExt{ + existingWindowName: None, expression: None, + partition: Vec::new(), + ph:PhantomData + }), + ) + } +} + +pub trait WindowSpecificationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token PARTITION +/// Returns `None` if there is no child corresponding to token PARTITION +fn PARTITION(&self) -> Option>> where Self:Sized{ + self.get_token(PARTITION, 0) +} +/// Retrieves all `TerminalNode`s corresponding to token BY in current rule +fn BY_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token BY, starting from 0. +/// Returns `None` if number of children corresponding to token BY is less or equal than `i`. +fn BY(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(BY, i) +} +/// Retrieves first TerminalNode corresponding to token ORDER +/// Returns `None` if there is no child corresponding to token ORDER +fn ORDER(&self) -> Option>> where Self:Sized{ + self.get_token(ORDER, 0) +} +fn sortItem_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn sortItem(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +fn windowFrame(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> WindowSpecificationContextAttrs<'input> for WindowSpecificationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn windowSpecification(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = WindowSpecificationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 54, RULE_windowSpecification); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1301); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(154,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule identifier*/ + recog.base.set_state(1300); + let tmp = recog.identifier()?; + cast_mut::<_,WindowSpecificationContext >(&mut _localctx).existingWindowName = Some(tmp.clone()); + + + } + } + + _ => {} + } + recog.base.set_state(1313); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==PARTITION { + { + recog.base.set_state(1303); + recog.base.match_token(PARTITION,&mut recog.err_handler)?; + + recog.base.set_state(1304); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1305); + let tmp = recog.expression()?; + cast_mut::<_,WindowSpecificationContext >(&mut _localctx).expression = Some(tmp.clone()); + + + let temp = cast_mut::<_,WindowSpecificationContext >(&mut _localctx).expression.clone().unwrap() + ; + cast_mut::<_,WindowSpecificationContext >(&mut _localctx).partition.push(temp); + + recog.base.set_state(1310); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1306); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1307); + let tmp = recog.expression()?; + cast_mut::<_,WindowSpecificationContext >(&mut _localctx).expression = Some(tmp.clone()); + + + let temp = cast_mut::<_,WindowSpecificationContext >(&mut _localctx).expression.clone().unwrap() + ; + cast_mut::<_,WindowSpecificationContext >(&mut _localctx).partition.push(temp); + + } + } + recog.base.set_state(1312); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1325); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ORDER { + { + recog.base.set_state(1315); + recog.base.match_token(ORDER,&mut recog.err_handler)?; + + recog.base.set_state(1316); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1317); + recog.sortItem()?; + + recog.base.set_state(1322); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1318); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1319); + recog.sortItem()?; + + } + } + recog.base.set_state(1324); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1328); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==GROUPS || _la==MEASURES || _la==RANGE || _la==ROWS { + { + /*InvokeRule windowFrame*/ + recog.base.set_state(1327); + recog.windowFrame()?; + + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- namedQuery ---------------- +pub type NamedQueryContextAll<'input> = NamedQueryContext<'input>; + + +pub type NamedQueryContext<'input> = BaseParserRuleContext<'input,NamedQueryContextExt<'input>>; + +#[derive(Clone)] +pub struct NamedQueryContextExt<'input>{ + pub name: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for NamedQueryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NamedQueryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_namedQuery(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_namedQuery(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for NamedQueryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_namedQuery } + //fn type_rule_index() -> usize where Self: Sized { RULE_namedQuery } +} +antlr_rust::tid!{NamedQueryContextExt<'a>} + +impl<'input> NamedQueryContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,NamedQueryContextExt{ + name: None, + ph:PhantomData + }), + ) + } +} + +pub trait NamedQueryContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> NamedQueryContextAttrs<'input> for NamedQueryContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn namedQuery(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = NamedQueryContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 56, RULE_namedQuery); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(1330); + let tmp = recog.identifier()?; + cast_mut::<_,NamedQueryContext >(&mut _localctx).name = Some(tmp.clone()); + + + recog.base.set_state(1332); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + /*InvokeRule columnAliases*/ + recog.base.set_state(1331); + recog.columnAliases()?; + + } + } + + recog.base.set_state(1334); + recog.base.match_token(AS,&mut recog.err_handler)?; + + recog.base.set_state(1335); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(1336); + recog.query()?; + + recog.base.set_state(1337); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- setQuantifier ---------------- +pub type SetQuantifierContextAll<'input> = SetQuantifierContext<'input>; + + +pub type SetQuantifierContext<'input> = BaseParserRuleContext<'input,SetQuantifierContextExt<'input>>; + +#[derive(Clone)] +pub struct SetQuantifierContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SetQuantifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SetQuantifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_setQuantifier(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_setQuantifier(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for SetQuantifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_setQuantifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_setQuantifier } +} +antlr_rust::tid!{SetQuantifierContextExt<'a>} + +impl<'input> SetQuantifierContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SetQuantifierContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait SetQuantifierContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token DISTINCT +/// Returns `None` if there is no child corresponding to token DISTINCT +fn DISTINCT(&self) -> Option>> where Self:Sized{ + self.get_token(DISTINCT, 0) +} +/// Retrieves first TerminalNode corresponding to token ALL +/// Returns `None` if there is no child corresponding to token ALL +fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) +} + +} + +impl<'input> SetQuantifierContextAttrs<'input> for SetQuantifierContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn setQuantifier(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SetQuantifierContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 58, RULE_setQuantifier); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1339); + _la = recog.base.input.la(1); + if { !(_la==ALL || _la==DISTINCT) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- selectItem ---------------- +#[derive(Debug)] +pub enum SelectItemContextAll<'input>{ + SelectAllContext(SelectAllContext<'input>), + SelectSingleContext(SelectSingleContext<'input>), +Error(SelectItemContext<'input>) +} +antlr_rust::tid!{SelectItemContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for SelectItemContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for SelectItemContextAll<'input>{} + +impl<'input> Deref for SelectItemContextAll<'input>{ + type Target = dyn SelectItemContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use SelectItemContextAll::*; + match self{ + SelectAllContext(inner) => inner, + SelectSingleContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for SelectItemContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type SelectItemContext<'input> = BaseParserRuleContext<'input,SelectItemContextExt<'input>>; + +#[derive(Clone)] +pub struct SelectItemContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SelectItemContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SelectItemContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for SelectItemContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_selectItem } + //fn type_rule_index() -> usize where Self: Sized { RULE_selectItem } +} +antlr_rust::tid!{SelectItemContextExt<'a>} + +impl<'input> SelectItemContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + SelectItemContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SelectItemContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait SelectItemContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> SelectItemContextAttrs<'input> for SelectItemContext<'input>{} + +pub type SelectAllContext<'input> = BaseParserRuleContext<'input,SelectAllContextExt<'input>>; + +pub trait SelectAllContextAttrs<'input>: PrestoParserContext<'input>{ + fn primaryExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token ASTERISK + /// Returns `None` if there is no child corresponding to token ASTERISK + fn ASTERISK(&self) -> Option>> where Self:Sized{ + self.get_token(ASTERISK, 0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } + fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SelectAllContextAttrs<'input> for SelectAllContext<'input>{} + +pub struct SelectAllContextExt<'input>{ + base:SelectItemContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SelectAllContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SelectAllContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SelectAllContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_selectAll(self); + } +} + +impl<'input> CustomRuleContext<'input> for SelectAllContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_selectItem } + //fn type_rule_index() -> usize where Self: Sized { RULE_selectItem } +} + +impl<'input> Borrow> for SelectAllContext<'input>{ + fn borrow(&self) -> &SelectItemContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SelectAllContext<'input>{ + fn borrow_mut(&mut self) -> &mut SelectItemContextExt<'input> { &mut self.base } +} + +impl<'input> SelectItemContextAttrs<'input> for SelectAllContext<'input> {} + +impl<'input> SelectAllContextExt<'input>{ + fn new(ctx: &dyn SelectItemContextAttrs<'input>) -> Rc> { + Rc::new( + SelectItemContextAll::SelectAllContext( + BaseParserRuleContext::copy_from(ctx,SelectAllContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SelectSingleContext<'input> = BaseParserRuleContext<'input,SelectSingleContextExt<'input>>; + +pub trait SelectSingleContextAttrs<'input>: PrestoParserContext<'input>{ + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } +} + +impl<'input> SelectSingleContextAttrs<'input> for SelectSingleContext<'input>{} + +pub struct SelectSingleContextExt<'input>{ + base:SelectItemContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SelectSingleContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SelectSingleContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SelectSingleContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_selectSingle(self); + } +} + +impl<'input> CustomRuleContext<'input> for SelectSingleContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_selectItem } + //fn type_rule_index() -> usize where Self: Sized { RULE_selectItem } +} + +impl<'input> Borrow> for SelectSingleContext<'input>{ + fn borrow(&self) -> &SelectItemContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SelectSingleContext<'input>{ + fn borrow_mut(&mut self) -> &mut SelectItemContextExt<'input> { &mut self.base } +} + +impl<'input> SelectItemContextAttrs<'input> for SelectSingleContext<'input> {} + +impl<'input> SelectSingleContextExt<'input>{ + fn new(ctx: &dyn SelectItemContextAttrs<'input>) -> Rc> { + Rc::new( + SelectItemContextAll::SelectSingleContext( + BaseParserRuleContext::copy_from(ctx,SelectSingleContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn selectItem(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SelectItemContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 60, RULE_selectItem); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1356); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(164,&mut recog.base)? { + 1 =>{ + let tmp = SelectSingleContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule expression*/ + recog.base.set_state(1341); + recog.expression()?; + + recog.base.set_state(1346); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(162,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1343); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AS { + { + recog.base.set_state(1342); + recog.base.match_token(AS,&mut recog.err_handler)?; + + } + } + + /*InvokeRule identifier*/ + recog.base.set_state(1345); + recog.identifier()?; + + } + } + + _ => {} + } + } + } + , + 2 =>{ + let tmp = SelectAllContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + /*InvokeRule primaryExpression*/ + recog.base.set_state(1348); + recog.primaryExpression_rec(0)?; + + recog.base.set_state(1349); + recog.base.match_token(T__0,&mut recog.err_handler)?; + + recog.base.set_state(1350); + recog.base.match_token(ASTERISK,&mut recog.err_handler)?; + + recog.base.set_state(1353); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(163,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1351); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule columnAliases*/ + recog.base.set_state(1352); + recog.columnAliases()?; + + } + } + + _ => {} + } + } + } + , + 3 =>{ + let tmp = SelectAllContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(1355); + recog.base.match_token(ASTERISK,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- relation ---------------- +#[derive(Debug)] +pub enum RelationContextAll<'input>{ + RelationDefaultContext(RelationDefaultContext<'input>), + JoinRelationContext(JoinRelationContext<'input>), +Error(RelationContext<'input>) +} +antlr_rust::tid!{RelationContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for RelationContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for RelationContextAll<'input>{} + +impl<'input> Deref for RelationContextAll<'input>{ + type Target = dyn RelationContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use RelationContextAll::*; + match self{ + RelationDefaultContext(inner) => inner, + JoinRelationContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for RelationContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type RelationContext<'input> = BaseParserRuleContext<'input,RelationContextExt<'input>>; + +#[derive(Clone)] +pub struct RelationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RelationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RelationContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for RelationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relation } + //fn type_rule_index() -> usize where Self: Sized { RULE_relation } +} +antlr_rust::tid!{RelationContextExt<'a>} + +impl<'input> RelationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + RelationContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RelationContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait RelationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> RelationContextAttrs<'input> for RelationContext<'input>{} + +pub type RelationDefaultContext<'input> = BaseParserRuleContext<'input,RelationDefaultContextExt<'input>>; + +pub trait RelationDefaultContextAttrs<'input>: PrestoParserContext<'input>{ + fn sampledRelation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> RelationDefaultContextAttrs<'input> for RelationDefaultContext<'input>{} + +pub struct RelationDefaultContextExt<'input>{ + base:RelationContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RelationDefaultContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RelationDefaultContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RelationDefaultContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_relationDefault(self); + } +} + +impl<'input> CustomRuleContext<'input> for RelationDefaultContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relation } + //fn type_rule_index() -> usize where Self: Sized { RULE_relation } +} + +impl<'input> Borrow> for RelationDefaultContext<'input>{ + fn borrow(&self) -> &RelationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RelationDefaultContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationContextExt<'input> { &mut self.base } +} + +impl<'input> RelationContextAttrs<'input> for RelationDefaultContext<'input> {} + +impl<'input> RelationDefaultContextExt<'input>{ + fn new(ctx: &dyn RelationContextAttrs<'input>) -> Rc> { + Rc::new( + RelationContextAll::RelationDefaultContext( + BaseParserRuleContext::copy_from(ctx,RelationDefaultContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type JoinRelationContext<'input> = BaseParserRuleContext<'input,JoinRelationContextExt<'input>>; + +pub trait JoinRelationContextAttrs<'input>: PrestoParserContext<'input>{ + fn relation_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn relation(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token CROSS + /// Returns `None` if there is no child corresponding to token CROSS + fn CROSS(&self) -> Option>> where Self:Sized{ + self.get_token(CROSS, 0) + } + /// Retrieves first TerminalNode corresponding to token JOIN + /// Returns `None` if there is no child corresponding to token JOIN + fn JOIN(&self) -> Option>> where Self:Sized{ + self.get_token(JOIN, 0) + } + fn joinType(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn joinCriteria(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token NATURAL + /// Returns `None` if there is no child corresponding to token NATURAL + fn NATURAL(&self) -> Option>> where Self:Sized{ + self.get_token(NATURAL, 0) + } + fn sampledRelation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> JoinRelationContextAttrs<'input> for JoinRelationContext<'input>{} + +pub struct JoinRelationContextExt<'input>{ + base:RelationContextExt<'input>, + pub left: Option>>, + pub right: Option>>, + pub rightRelation: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{JoinRelationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for JoinRelationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JoinRelationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_joinRelation(self); + } +} + +impl<'input> CustomRuleContext<'input> for JoinRelationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relation } + //fn type_rule_index() -> usize where Self: Sized { RULE_relation } +} + +impl<'input> Borrow> for JoinRelationContext<'input>{ + fn borrow(&self) -> &RelationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for JoinRelationContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationContextExt<'input> { &mut self.base } +} + +impl<'input> RelationContextAttrs<'input> for JoinRelationContext<'input> {} + +impl<'input> JoinRelationContextExt<'input>{ + fn new(ctx: &dyn RelationContextAttrs<'input>) -> Rc> { + Rc::new( + RelationContextAll::JoinRelationContext( + BaseParserRuleContext::copy_from(ctx,JoinRelationContextExt{ + left:None, right:None, rightRelation:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn relation(&mut self,) + -> Result>,ANTLRError> { + self.relation_rec(0) + } + + fn relation_rec(&mut self, _p: isize) + -> Result>,ANTLRError> { + let recog = self; + let _parentctx = recog.ctx.take(); + let _parentState = recog.base.get_state(); + let mut _localctx = RelationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_recursion_rule(_localctx.clone(), 62, RULE_relation, _p); + let mut _localctx: Rc = _localctx; + let mut _prevctx = _localctx.clone(); + let _startState = 62; + let result: Result<(), ANTLRError> = (|| { + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + { + let mut tmp = RelationDefaultContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + + + /*InvokeRule sampledRelation*/ + recog.base.set_state(1359); + recog.sampledRelation()?; + + } + + let tmp = recog.input.lt(-1).cloned(); + recog.ctx.as_ref().unwrap().set_stop(tmp); + recog.base.set_state(1379); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(166,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + recog.trigger_exit_rule_event(); + _prevctx = _localctx.clone(); + { + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = JoinRelationContextExt::new(&**RelationContextExt::new(_parentctx.clone(), _parentState)); + if let RelationContextAll::JoinRelationContext(ctx) = cast_mut::<_,RelationContextAll >(&mut tmp){ + ctx.left = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_relation); + _localctx = tmp; + recog.base.set_state(1361); + if !({recog.precpred(None, 2)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 2)".to_owned()), None))?; + } + recog.base.set_state(1375); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + CROSS + => { + { + recog.base.set_state(1362); + recog.base.match_token(CROSS,&mut recog.err_handler)?; + + recog.base.set_state(1363); + recog.base.match_token(JOIN,&mut recog.err_handler)?; + + /*InvokeRule sampledRelation*/ + recog.base.set_state(1364); + let tmp = recog.sampledRelation()?; + if let RelationContextAll::JoinRelationContext(ctx) = cast_mut::<_,RelationContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + FULL | INNER | JOIN | LEFT | RIGHT + => { + { + /*InvokeRule joinType*/ + recog.base.set_state(1365); + recog.joinType()?; + + recog.base.set_state(1366); + recog.base.match_token(JOIN,&mut recog.err_handler)?; + + /*InvokeRule relation*/ + recog.base.set_state(1367); + let tmp = recog.relation_rec(0)?; + if let RelationContextAll::JoinRelationContext(ctx) = cast_mut::<_,RelationContextAll >(&mut _localctx){ + ctx.rightRelation = Some(tmp.clone()); } else {unreachable!("cant cast");} + + /*InvokeRule joinCriteria*/ + recog.base.set_state(1368); + recog.joinCriteria()?; + + } + } + + NATURAL + => { + { + recog.base.set_state(1370); + recog.base.match_token(NATURAL,&mut recog.err_handler)?; + + /*InvokeRule joinType*/ + recog.base.set_state(1371); + recog.joinType()?; + + recog.base.set_state(1372); + recog.base.match_token(JOIN,&mut recog.err_handler)?; + + /*InvokeRule sampledRelation*/ + recog.base.set_state(1373); + let tmp = recog.sampledRelation()?; + if let RelationContextAll::JoinRelationContext(ctx) = cast_mut::<_,RelationContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + } + } + } + recog.base.set_state(1381); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(166,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_) => {}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re)=>{ + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?;} + } + recog.base.unroll_recursion_context(_parentctx); + + Ok(_localctx) + } +} +//------------------- joinType ---------------- +pub type JoinTypeContextAll<'input> = JoinTypeContext<'input>; + + +pub type JoinTypeContext<'input> = BaseParserRuleContext<'input,JoinTypeContextExt<'input>>; + +#[derive(Clone)] +pub struct JoinTypeContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JoinTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JoinTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_joinType(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_joinType(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JoinTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_joinType } + //fn type_rule_index() -> usize where Self: Sized { RULE_joinType } +} +antlr_rust::tid!{JoinTypeContextExt<'a>} + +impl<'input> JoinTypeContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JoinTypeContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JoinTypeContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token INNER +/// Returns `None` if there is no child corresponding to token INNER +fn INNER(&self) -> Option>> where Self:Sized{ + self.get_token(INNER, 0) +} +/// Retrieves first TerminalNode corresponding to token LEFT +/// Returns `None` if there is no child corresponding to token LEFT +fn LEFT(&self) -> Option>> where Self:Sized{ + self.get_token(LEFT, 0) +} +/// Retrieves first TerminalNode corresponding to token OUTER +/// Returns `None` if there is no child corresponding to token OUTER +fn OUTER(&self) -> Option>> where Self:Sized{ + self.get_token(OUTER, 0) +} +/// Retrieves first TerminalNode corresponding to token RIGHT +/// Returns `None` if there is no child corresponding to token RIGHT +fn RIGHT(&self) -> Option>> where Self:Sized{ + self.get_token(RIGHT, 0) +} +/// Retrieves first TerminalNode corresponding to token FULL +/// Returns `None` if there is no child corresponding to token FULL +fn FULL(&self) -> Option>> where Self:Sized{ + self.get_token(FULL, 0) +} + +} + +impl<'input> JoinTypeContextAttrs<'input> for JoinTypeContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn joinType(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JoinTypeContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 64, RULE_joinType); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1397); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + INNER | JOIN + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1383); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==INNER { + { + recog.base.set_state(1382); + recog.base.match_token(INNER,&mut recog.err_handler)?; + + } + } + + } + } + + LEFT + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1385); + recog.base.match_token(LEFT,&mut recog.err_handler)?; + + recog.base.set_state(1387); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==OUTER { + { + recog.base.set_state(1386); + recog.base.match_token(OUTER,&mut recog.err_handler)?; + + } + } + + } + } + + RIGHT + => { + //recog.base.enter_outer_alt(_localctx.clone(), 3); + recog.base.enter_outer_alt(None, 3); + { + recog.base.set_state(1389); + recog.base.match_token(RIGHT,&mut recog.err_handler)?; + + recog.base.set_state(1391); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==OUTER { + { + recog.base.set_state(1390); + recog.base.match_token(OUTER,&mut recog.err_handler)?; + + } + } + + } + } + + FULL + => { + //recog.base.enter_outer_alt(_localctx.clone(), 4); + recog.base.enter_outer_alt(None, 4); + { + recog.base.set_state(1393); + recog.base.match_token(FULL,&mut recog.err_handler)?; + + recog.base.set_state(1395); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==OUTER { + { + recog.base.set_state(1394); + recog.base.match_token(OUTER,&mut recog.err_handler)?; + + } + } + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- joinCriteria ---------------- +pub type JoinCriteriaContextAll<'input> = JoinCriteriaContext<'input>; + + +pub type JoinCriteriaContext<'input> = BaseParserRuleContext<'input,JoinCriteriaContextExt<'input>>; + +#[derive(Clone)] +pub struct JoinCriteriaContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JoinCriteriaContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JoinCriteriaContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_joinCriteria(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_joinCriteria(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JoinCriteriaContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_joinCriteria } + //fn type_rule_index() -> usize where Self: Sized { RULE_joinCriteria } +} +antlr_rust::tid!{JoinCriteriaContextExt<'a>} + +impl<'input> JoinCriteriaContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JoinCriteriaContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JoinCriteriaContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ON +/// Returns `None` if there is no child corresponding to token ON +fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) +} +fn booleanExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token USING +/// Returns `None` if there is no child corresponding to token USING +fn USING(&self) -> Option>> where Self:Sized{ + self.get_token(USING, 0) +} +fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> JoinCriteriaContextAttrs<'input> for JoinCriteriaContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn joinCriteria(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JoinCriteriaContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 66, RULE_joinCriteria); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1413); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ON + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1399); + recog.base.match_token(ON,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(1400); + recog.booleanExpression_rec(0)?; + + } + } + + USING + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1401); + recog.base.match_token(USING,&mut recog.err_handler)?; + + recog.base.set_state(1402); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1403); + recog.identifier()?; + + recog.base.set_state(1408); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1404); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1405); + recog.identifier()?; + + } + } + recog.base.set_state(1410); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1411); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- sampledRelation ---------------- +pub type SampledRelationContextAll<'input> = SampledRelationContext<'input>; + + +pub type SampledRelationContext<'input> = BaseParserRuleContext<'input,SampledRelationContextExt<'input>>; + +#[derive(Clone)] +pub struct SampledRelationContextExt<'input>{ + pub percentage: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SampledRelationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SampledRelationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_sampledRelation(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_sampledRelation(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for SampledRelationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_sampledRelation } + //fn type_rule_index() -> usize where Self: Sized { RULE_sampledRelation } +} +antlr_rust::tid!{SampledRelationContextExt<'a>} + +impl<'input> SampledRelationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SampledRelationContextExt{ + percentage: None, + ph:PhantomData + }), + ) + } +} + +pub trait SampledRelationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn patternRecognition(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token TABLESAMPLE +/// Returns `None` if there is no child corresponding to token TABLESAMPLE +fn TABLESAMPLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLESAMPLE, 0) +} +fn sampleType(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> SampledRelationContextAttrs<'input> for SampledRelationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn sampledRelation(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SampledRelationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 68, RULE_sampledRelation); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule patternRecognition*/ + recog.base.set_state(1415); + recog.patternRecognition()?; + + recog.base.set_state(1422); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(174,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1416); + recog.base.match_token(TABLESAMPLE,&mut recog.err_handler)?; + + /*InvokeRule sampleType*/ + recog.base.set_state(1417); + recog.sampleType()?; + + recog.base.set_state(1418); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1419); + let tmp = recog.expression()?; + cast_mut::<_,SampledRelationContext >(&mut _localctx).percentage = Some(tmp.clone()); + + + recog.base.set_state(1420); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- sampleType ---------------- +pub type SampleTypeContextAll<'input> = SampleTypeContext<'input>; + + +pub type SampleTypeContext<'input> = BaseParserRuleContext<'input,SampleTypeContextExt<'input>>; + +#[derive(Clone)] +pub struct SampleTypeContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SampleTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SampleTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_sampleType(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_sampleType(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for SampleTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_sampleType } + //fn type_rule_index() -> usize where Self: Sized { RULE_sampleType } +} +antlr_rust::tid!{SampleTypeContextExt<'a>} + +impl<'input> SampleTypeContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SampleTypeContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait SampleTypeContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token BERNOULLI +/// Returns `None` if there is no child corresponding to token BERNOULLI +fn BERNOULLI(&self) -> Option>> where Self:Sized{ + self.get_token(BERNOULLI, 0) +} +/// Retrieves first TerminalNode corresponding to token SYSTEM +/// Returns `None` if there is no child corresponding to token SYSTEM +fn SYSTEM(&self) -> Option>> where Self:Sized{ + self.get_token(SYSTEM, 0) +} + +} + +impl<'input> SampleTypeContextAttrs<'input> for SampleTypeContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn sampleType(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SampleTypeContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 70, RULE_sampleType); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1424); + _la = recog.base.input.la(1); + if { !(_la==BERNOULLI || _la==SYSTEM) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- trimsSpecification ---------------- +pub type TrimsSpecificationContextAll<'input> = TrimsSpecificationContext<'input>; + + +pub type TrimsSpecificationContext<'input> = BaseParserRuleContext<'input,TrimsSpecificationContextExt<'input>>; + +#[derive(Clone)] +pub struct TrimsSpecificationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TrimsSpecificationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TrimsSpecificationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_trimsSpecification(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_trimsSpecification(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for TrimsSpecificationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_trimsSpecification } + //fn type_rule_index() -> usize where Self: Sized { RULE_trimsSpecification } +} +antlr_rust::tid!{TrimsSpecificationContextExt<'a>} + +impl<'input> TrimsSpecificationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TrimsSpecificationContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait TrimsSpecificationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token LEADING +/// Returns `None` if there is no child corresponding to token LEADING +fn LEADING(&self) -> Option>> where Self:Sized{ + self.get_token(LEADING, 0) +} +/// Retrieves first TerminalNode corresponding to token TRAILING +/// Returns `None` if there is no child corresponding to token TRAILING +fn TRAILING(&self) -> Option>> where Self:Sized{ + self.get_token(TRAILING, 0) +} +/// Retrieves first TerminalNode corresponding to token BOTH +/// Returns `None` if there is no child corresponding to token BOTH +fn BOTH(&self) -> Option>> where Self:Sized{ + self.get_token(BOTH, 0) +} + +} + +impl<'input> TrimsSpecificationContextAttrs<'input> for TrimsSpecificationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn trimsSpecification(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TrimsSpecificationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 72, RULE_trimsSpecification); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1426); + _la = recog.base.input.la(1); + if { !(_la==BOTH || _la==LEADING || _la==TRAILING) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- listAggOverflowBehavior ---------------- +pub type ListAggOverflowBehaviorContextAll<'input> = ListAggOverflowBehaviorContext<'input>; + + +pub type ListAggOverflowBehaviorContext<'input> = BaseParserRuleContext<'input,ListAggOverflowBehaviorContextExt<'input>>; + +#[derive(Clone)] +pub struct ListAggOverflowBehaviorContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ListAggOverflowBehaviorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ListAggOverflowBehaviorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_listAggOverflowBehavior(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_listAggOverflowBehavior(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ListAggOverflowBehaviorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_listAggOverflowBehavior } + //fn type_rule_index() -> usize where Self: Sized { RULE_listAggOverflowBehavior } +} +antlr_rust::tid!{ListAggOverflowBehaviorContextExt<'a>} + +impl<'input> ListAggOverflowBehaviorContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ListAggOverflowBehaviorContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ListAggOverflowBehaviorContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ERROR +/// Returns `None` if there is no child corresponding to token ERROR +fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) +} +/// Retrieves first TerminalNode corresponding to token TRUNCATE +/// Returns `None` if there is no child corresponding to token TRUNCATE +fn TRUNCATE(&self) -> Option>> where Self:Sized{ + self.get_token(TRUNCATE, 0) +} +fn listaggCountIndication(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> ListAggOverflowBehaviorContextAttrs<'input> for ListAggOverflowBehaviorContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn listAggOverflowBehavior(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ListAggOverflowBehaviorContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 74, RULE_listAggOverflowBehavior); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1434); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ERROR + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1428); + recog.base.match_token(ERROR,&mut recog.err_handler)?; + + } + } + + TRUNCATE + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1429); + recog.base.match_token(TRUNCATE,&mut recog.err_handler)?; + + recog.base.set_state(1431); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==STRING || _la==UNICODE_STRING { + { + /*InvokeRule string*/ + recog.base.set_state(1430); + recog.string()?; + + } + } + + /*InvokeRule listaggCountIndication*/ + recog.base.set_state(1433); + recog.listaggCountIndication()?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- listaggCountIndication ---------------- +pub type ListaggCountIndicationContextAll<'input> = ListaggCountIndicationContext<'input>; + + +pub type ListaggCountIndicationContext<'input> = BaseParserRuleContext<'input,ListaggCountIndicationContextExt<'input>>; + +#[derive(Clone)] +pub struct ListaggCountIndicationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ListaggCountIndicationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ListaggCountIndicationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_listaggCountIndication(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_listaggCountIndication(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ListaggCountIndicationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_listaggCountIndication } + //fn type_rule_index() -> usize where Self: Sized { RULE_listaggCountIndication } +} +antlr_rust::tid!{ListaggCountIndicationContextExt<'a>} + +impl<'input> ListaggCountIndicationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ListaggCountIndicationContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ListaggCountIndicationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token WITH +/// Returns `None` if there is no child corresponding to token WITH +fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) +} +/// Retrieves first TerminalNode corresponding to token COUNT +/// Returns `None` if there is no child corresponding to token COUNT +fn COUNT(&self) -> Option>> where Self:Sized{ + self.get_token(COUNT, 0) +} +/// Retrieves first TerminalNode corresponding to token WITHOUT +/// Returns `None` if there is no child corresponding to token WITHOUT +fn WITHOUT(&self) -> Option>> where Self:Sized{ + self.get_token(WITHOUT, 0) +} + +} + +impl<'input> ListaggCountIndicationContextAttrs<'input> for ListaggCountIndicationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn listaggCountIndication(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ListaggCountIndicationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 76, RULE_listaggCountIndication); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1440); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + WITH + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1436); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(1437); + recog.base.match_token(COUNT,&mut recog.err_handler)?; + + } + } + + WITHOUT + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1438); + recog.base.match_token(WITHOUT,&mut recog.err_handler)?; + + recog.base.set_state(1439); + recog.base.match_token(COUNT,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- patternRecognition ---------------- +pub type PatternRecognitionContextAll<'input> = PatternRecognitionContext<'input>; + + +pub type PatternRecognitionContext<'input> = BaseParserRuleContext<'input,PatternRecognitionContextExt<'input>>; + +#[derive(Clone)] +pub struct PatternRecognitionContextExt<'input>{ + pub expression: Option>>, + pub partition:Vec>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PatternRecognitionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PatternRecognitionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_patternRecognition(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_patternRecognition(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for PatternRecognitionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternRecognition } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternRecognition } +} +antlr_rust::tid!{PatternRecognitionContextExt<'a>} + +impl<'input> PatternRecognitionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PatternRecognitionContextExt{ + expression: None, + partition: Vec::new(), + ph:PhantomData + }), + ) + } +} + +pub trait PatternRecognitionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn aliasedRelation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token MATCH_RECOGNIZE +/// Returns `None` if there is no child corresponding to token MATCH_RECOGNIZE +fn MATCH_RECOGNIZE(&self) -> Option>> where Self:Sized{ + self.get_token(MATCH_RECOGNIZE, 0) +} +/// Retrieves first TerminalNode corresponding to token PATTERN +/// Returns `None` if there is no child corresponding to token PATTERN +fn PATTERN(&self) -> Option>> where Self:Sized{ + self.get_token(PATTERN, 0) +} +fn rowPattern(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token DEFINE +/// Returns `None` if there is no child corresponding to token DEFINE +fn DEFINE(&self) -> Option>> where Self:Sized{ + self.get_token(DEFINE, 0) +} +fn variableDefinition_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn variableDefinition(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token PARTITION +/// Returns `None` if there is no child corresponding to token PARTITION +fn PARTITION(&self) -> Option>> where Self:Sized{ + self.get_token(PARTITION, 0) +} +/// Retrieves all `TerminalNode`s corresponding to token BY in current rule +fn BY_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token BY, starting from 0. +/// Returns `None` if number of children corresponding to token BY is less or equal than `i`. +fn BY(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(BY, i) +} +/// Retrieves first TerminalNode corresponding to token ORDER +/// Returns `None` if there is no child corresponding to token ORDER +fn ORDER(&self) -> Option>> where Self:Sized{ + self.get_token(ORDER, 0) +} +fn sortItem_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn sortItem(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token MEASURES +/// Returns `None` if there is no child corresponding to token MEASURES +fn MEASURES(&self) -> Option>> where Self:Sized{ + self.get_token(MEASURES, 0) +} +fn measureDefinition_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn measureDefinition(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +fn rowsPerMatch(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token AFTER +/// Returns `None` if there is no child corresponding to token AFTER +fn AFTER(&self) -> Option>> where Self:Sized{ + self.get_token(AFTER, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCH +/// Returns `None` if there is no child corresponding to token MATCH +fn MATCH(&self) -> Option>> where Self:Sized{ + self.get_token(MATCH, 0) +} +fn skipTo(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token SUBSET +/// Returns `None` if there is no child corresponding to token SUBSET +fn SUBSET(&self) -> Option>> where Self:Sized{ + self.get_token(SUBSET, 0) +} +fn subsetDefinition_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn subsetDefinition(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token INITIAL +/// Returns `None` if there is no child corresponding to token INITIAL +fn INITIAL(&self) -> Option>> where Self:Sized{ + self.get_token(INITIAL, 0) +} +/// Retrieves first TerminalNode corresponding to token SEEK +/// Returns `None` if there is no child corresponding to token SEEK +fn SEEK(&self) -> Option>> where Self:Sized{ + self.get_token(SEEK, 0) +} +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> PatternRecognitionContextAttrs<'input> for PatternRecognitionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn patternRecognition(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PatternRecognitionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 78, RULE_patternRecognition); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule aliasedRelation*/ + recog.base.set_state(1442); + recog.aliasedRelation()?; + + recog.base.set_state(1525); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(193,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1443); + recog.base.match_token(MATCH_RECOGNIZE,&mut recog.err_handler)?; + + recog.base.set_state(1444); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1455); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==PARTITION { + { + recog.base.set_state(1445); + recog.base.match_token(PARTITION,&mut recog.err_handler)?; + + recog.base.set_state(1446); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1447); + let tmp = recog.expression()?; + cast_mut::<_,PatternRecognitionContext >(&mut _localctx).expression = Some(tmp.clone()); + + + let temp = cast_mut::<_,PatternRecognitionContext >(&mut _localctx).expression.clone().unwrap() + ; + cast_mut::<_,PatternRecognitionContext >(&mut _localctx).partition.push(temp); + + recog.base.set_state(1452); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1448); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1449); + let tmp = recog.expression()?; + cast_mut::<_,PatternRecognitionContext >(&mut _localctx).expression = Some(tmp.clone()); + + + let temp = cast_mut::<_,PatternRecognitionContext >(&mut _localctx).expression.clone().unwrap() + ; + cast_mut::<_,PatternRecognitionContext >(&mut _localctx).partition.push(temp); + + } + } + recog.base.set_state(1454); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1467); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ORDER { + { + recog.base.set_state(1457); + recog.base.match_token(ORDER,&mut recog.err_handler)?; + + recog.base.set_state(1458); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1459); + recog.sortItem()?; + + recog.base.set_state(1464); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1460); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1461); + recog.sortItem()?; + + } + } + recog.base.set_state(1466); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1478); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==MEASURES { + { + recog.base.set_state(1469); + recog.base.match_token(MEASURES,&mut recog.err_handler)?; + + /*InvokeRule measureDefinition*/ + recog.base.set_state(1470); + recog.measureDefinition()?; + + recog.base.set_state(1475); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1471); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule measureDefinition*/ + recog.base.set_state(1472); + recog.measureDefinition()?; + + } + } + recog.base.set_state(1477); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1481); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ALL || _la==ONE { + { + /*InvokeRule rowsPerMatch*/ + recog.base.set_state(1480); + recog.rowsPerMatch()?; + + } + } + + recog.base.set_state(1486); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AFTER { + { + recog.base.set_state(1483); + recog.base.match_token(AFTER,&mut recog.err_handler)?; + + recog.base.set_state(1484); + recog.base.match_token(MATCH,&mut recog.err_handler)?; + + /*InvokeRule skipTo*/ + recog.base.set_state(1485); + recog.skipTo()?; + + } + } + + recog.base.set_state(1489); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==INITIAL || _la==SEEK { + { + recog.base.set_state(1488); + _la = recog.base.input.la(1); + if { !(_la==INITIAL || _la==SEEK) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + recog.base.set_state(1491); + recog.base.match_token(PATTERN,&mut recog.err_handler)?; + + recog.base.set_state(1492); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule rowPattern*/ + recog.base.set_state(1493); + recog.rowPattern_rec(0)?; + + recog.base.set_state(1494); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(1504); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==SUBSET { + { + recog.base.set_state(1495); + recog.base.match_token(SUBSET,&mut recog.err_handler)?; + + /*InvokeRule subsetDefinition*/ + recog.base.set_state(1496); + recog.subsetDefinition()?; + + recog.base.set_state(1501); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1497); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule subsetDefinition*/ + recog.base.set_state(1498); + recog.subsetDefinition()?; + + } + } + recog.base.set_state(1503); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1506); + recog.base.match_token(DEFINE,&mut recog.err_handler)?; + + /*InvokeRule variableDefinition*/ + recog.base.set_state(1507); + recog.variableDefinition()?; + + recog.base.set_state(1512); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1508); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule variableDefinition*/ + recog.base.set_state(1509); + recog.variableDefinition()?; + + } + } + recog.base.set_state(1514); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1515); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(1523); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(192,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1517); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AS { + { + recog.base.set_state(1516); + recog.base.match_token(AS,&mut recog.err_handler)?; + + } + } + + /*InvokeRule identifier*/ + recog.base.set_state(1519); + recog.identifier()?; + + recog.base.set_state(1521); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(191,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule columnAliases*/ + recog.base.set_state(1520); + recog.columnAliases()?; + + } + } + + _ => {} + } + } + } + + _ => {} + } + } + } + + _ => {} + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- measureDefinition ---------------- +pub type MeasureDefinitionContextAll<'input> = MeasureDefinitionContext<'input>; + + +pub type MeasureDefinitionContext<'input> = BaseParserRuleContext<'input,MeasureDefinitionContextExt<'input>>; + +#[derive(Clone)] +pub struct MeasureDefinitionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for MeasureDefinitionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MeasureDefinitionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_measureDefinition(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_measureDefinition(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for MeasureDefinitionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_measureDefinition } + //fn type_rule_index() -> usize where Self: Sized { RULE_measureDefinition } +} +antlr_rust::tid!{MeasureDefinitionContextExt<'a>} + +impl<'input> MeasureDefinitionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,MeasureDefinitionContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait MeasureDefinitionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> MeasureDefinitionContextAttrs<'input> for MeasureDefinitionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn measureDefinition(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = MeasureDefinitionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 80, RULE_measureDefinition); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule expression*/ + recog.base.set_state(1527); + recog.expression()?; + + recog.base.set_state(1528); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1529); + recog.identifier()?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- rowsPerMatch ---------------- +pub type RowsPerMatchContextAll<'input> = RowsPerMatchContext<'input>; + + +pub type RowsPerMatchContext<'input> = BaseParserRuleContext<'input,RowsPerMatchContextExt<'input>>; + +#[derive(Clone)] +pub struct RowsPerMatchContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RowsPerMatchContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RowsPerMatchContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rowsPerMatch(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_rowsPerMatch(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for RowsPerMatchContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rowsPerMatch } + //fn type_rule_index() -> usize where Self: Sized { RULE_rowsPerMatch } +} +antlr_rust::tid!{RowsPerMatchContextExt<'a>} + +impl<'input> RowsPerMatchContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RowsPerMatchContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait RowsPerMatchContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ONE +/// Returns `None` if there is no child corresponding to token ONE +fn ONE(&self) -> Option>> where Self:Sized{ + self.get_token(ONE, 0) +} +/// Retrieves first TerminalNode corresponding to token ROW +/// Returns `None` if there is no child corresponding to token ROW +fn ROW(&self) -> Option>> where Self:Sized{ + self.get_token(ROW, 0) +} +/// Retrieves first TerminalNode corresponding to token PER +/// Returns `None` if there is no child corresponding to token PER +fn PER(&self) -> Option>> where Self:Sized{ + self.get_token(PER, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCH +/// Returns `None` if there is no child corresponding to token MATCH +fn MATCH(&self) -> Option>> where Self:Sized{ + self.get_token(MATCH, 0) +} +/// Retrieves first TerminalNode corresponding to token ALL +/// Returns `None` if there is no child corresponding to token ALL +fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) +} +/// Retrieves first TerminalNode corresponding to token ROWS +/// Returns `None` if there is no child corresponding to token ROWS +fn ROWS(&self) -> Option>> where Self:Sized{ + self.get_token(ROWS, 0) +} +fn emptyMatchHandling(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> RowsPerMatchContextAttrs<'input> for RowsPerMatchContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn rowsPerMatch(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = RowsPerMatchContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 82, RULE_rowsPerMatch); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1542); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ONE + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1531); + recog.base.match_token(ONE,&mut recog.err_handler)?; + + recog.base.set_state(1532); + recog.base.match_token(ROW,&mut recog.err_handler)?; + + recog.base.set_state(1533); + recog.base.match_token(PER,&mut recog.err_handler)?; + + recog.base.set_state(1534); + recog.base.match_token(MATCH,&mut recog.err_handler)?; + + } + } + + ALL + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1535); + recog.base.match_token(ALL,&mut recog.err_handler)?; + + recog.base.set_state(1536); + recog.base.match_token(ROWS,&mut recog.err_handler)?; + + recog.base.set_state(1537); + recog.base.match_token(PER,&mut recog.err_handler)?; + + recog.base.set_state(1538); + recog.base.match_token(MATCH,&mut recog.err_handler)?; + + recog.base.set_state(1540); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==OMIT || _la==SHOW || _la==WITH { + { + /*InvokeRule emptyMatchHandling*/ + recog.base.set_state(1539); + recog.emptyMatchHandling()?; + + } + } + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- emptyMatchHandling ---------------- +pub type EmptyMatchHandlingContextAll<'input> = EmptyMatchHandlingContext<'input>; + + +pub type EmptyMatchHandlingContext<'input> = BaseParserRuleContext<'input,EmptyMatchHandlingContextExt<'input>>; + +#[derive(Clone)] +pub struct EmptyMatchHandlingContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for EmptyMatchHandlingContext<'input>{} + +impl<'input,'a> Listenable + 'a> for EmptyMatchHandlingContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_emptyMatchHandling(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_emptyMatchHandling(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for EmptyMatchHandlingContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_emptyMatchHandling } + //fn type_rule_index() -> usize where Self: Sized { RULE_emptyMatchHandling } +} +antlr_rust::tid!{EmptyMatchHandlingContextExt<'a>} + +impl<'input> EmptyMatchHandlingContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,EmptyMatchHandlingContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait EmptyMatchHandlingContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token SHOW +/// Returns `None` if there is no child corresponding to token SHOW +fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) +} +/// Retrieves first TerminalNode corresponding to token EMPTY +/// Returns `None` if there is no child corresponding to token EMPTY +fn EMPTY(&self) -> Option>> where Self:Sized{ + self.get_token(EMPTY, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCHES +/// Returns `None` if there is no child corresponding to token MATCHES +fn MATCHES(&self) -> Option>> where Self:Sized{ + self.get_token(MATCHES, 0) +} +/// Retrieves first TerminalNode corresponding to token OMIT +/// Returns `None` if there is no child corresponding to token OMIT +fn OMIT(&self) -> Option>> where Self:Sized{ + self.get_token(OMIT, 0) +} +/// Retrieves first TerminalNode corresponding to token WITH +/// Returns `None` if there is no child corresponding to token WITH +fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) +} +/// Retrieves first TerminalNode corresponding to token UNMATCHED +/// Returns `None` if there is no child corresponding to token UNMATCHED +fn UNMATCHED(&self) -> Option>> where Self:Sized{ + self.get_token(UNMATCHED, 0) +} +/// Retrieves first TerminalNode corresponding to token ROWS +/// Returns `None` if there is no child corresponding to token ROWS +fn ROWS(&self) -> Option>> where Self:Sized{ + self.get_token(ROWS, 0) +} + +} + +impl<'input> EmptyMatchHandlingContextAttrs<'input> for EmptyMatchHandlingContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn emptyMatchHandling(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = EmptyMatchHandlingContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 84, RULE_emptyMatchHandling); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1553); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + SHOW + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1544); + recog.base.match_token(SHOW,&mut recog.err_handler)?; + + recog.base.set_state(1545); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + recog.base.set_state(1546); + recog.base.match_token(MATCHES,&mut recog.err_handler)?; + + } + } + + OMIT + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1547); + recog.base.match_token(OMIT,&mut recog.err_handler)?; + + recog.base.set_state(1548); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + recog.base.set_state(1549); + recog.base.match_token(MATCHES,&mut recog.err_handler)?; + + } + } + + WITH + => { + //recog.base.enter_outer_alt(_localctx.clone(), 3); + recog.base.enter_outer_alt(None, 3); + { + recog.base.set_state(1550); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(1551); + recog.base.match_token(UNMATCHED,&mut recog.err_handler)?; + + recog.base.set_state(1552); + recog.base.match_token(ROWS,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- skipTo ---------------- +pub type SkipToContextAll<'input> = SkipToContext<'input>; + + +pub type SkipToContext<'input> = BaseParserRuleContext<'input,SkipToContextExt<'input>>; + +#[derive(Clone)] +pub struct SkipToContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SkipToContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SkipToContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_skipTo(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_skipTo(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for SkipToContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_skipTo } + //fn type_rule_index() -> usize where Self: Sized { RULE_skipTo } +} +antlr_rust::tid!{SkipToContextExt<'a>} + +impl<'input> SkipToContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SkipToContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait SkipToContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token TO +/// Returns `None` if there is no child corresponding to token TO +fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) +} +/// Retrieves first TerminalNode corresponding to token NEXT +/// Returns `None` if there is no child corresponding to token NEXT +fn NEXT(&self) -> Option>> where Self:Sized{ + self.get_token(NEXT, 0) +} +/// Retrieves first TerminalNode corresponding to token ROW +/// Returns `None` if there is no child corresponding to token ROW +fn ROW(&self) -> Option>> where Self:Sized{ + self.get_token(ROW, 0) +} +/// Retrieves first TerminalNode corresponding to token PAST +/// Returns `None` if there is no child corresponding to token PAST +fn PAST(&self) -> Option>> where Self:Sized{ + self.get_token(PAST, 0) +} +/// Retrieves first TerminalNode corresponding to token LAST +/// Returns `None` if there is no child corresponding to token LAST +fn LAST(&self) -> Option>> where Self:Sized{ + self.get_token(LAST, 0) +} +/// Retrieves first TerminalNode corresponding to token FIRST +/// Returns `None` if there is no child corresponding to token FIRST +fn FIRST(&self) -> Option>> where Self:Sized{ + self.get_token(FIRST, 0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> SkipToContextAttrs<'input> for SkipToContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn skipTo(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SkipToContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 86, RULE_skipTo); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1574); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(197,&mut recog.base)? { + 1 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1555); + recog.base.match_token(T__3,&mut recog.err_handler)?; + + recog.base.set_state(1556); + recog.base.match_token(TO,&mut recog.err_handler)?; + + recog.base.set_state(1557); + recog.base.match_token(NEXT,&mut recog.err_handler)?; + + recog.base.set_state(1558); + recog.base.match_token(ROW,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1559); + recog.base.match_token(T__3,&mut recog.err_handler)?; + + recog.base.set_state(1560); + recog.base.match_token(PAST,&mut recog.err_handler)?; + + recog.base.set_state(1561); + recog.base.match_token(LAST,&mut recog.err_handler)?; + + recog.base.set_state(1562); + recog.base.match_token(ROW,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 3); + recog.base.enter_outer_alt(None, 3); + { + recog.base.set_state(1563); + recog.base.match_token(T__3,&mut recog.err_handler)?; + + recog.base.set_state(1564); + recog.base.match_token(TO,&mut recog.err_handler)?; + + recog.base.set_state(1565); + recog.base.match_token(FIRST,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1566); + recog.identifier()?; + + } + } + , + 4 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 4); + recog.base.enter_outer_alt(None, 4); + { + recog.base.set_state(1567); + recog.base.match_token(T__3,&mut recog.err_handler)?; + + recog.base.set_state(1568); + recog.base.match_token(TO,&mut recog.err_handler)?; + + recog.base.set_state(1569); + recog.base.match_token(LAST,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1570); + recog.identifier()?; + + } + } + , + 5 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 5); + recog.base.enter_outer_alt(None, 5); + { + recog.base.set_state(1571); + recog.base.match_token(T__3,&mut recog.err_handler)?; + + recog.base.set_state(1572); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1573); + recog.identifier()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- subsetDefinition ---------------- +pub type SubsetDefinitionContextAll<'input> = SubsetDefinitionContext<'input>; + + +pub type SubsetDefinitionContext<'input> = BaseParserRuleContext<'input,SubsetDefinitionContextExt<'input>>; + +#[derive(Clone)] +pub struct SubsetDefinitionContextExt<'input>{ + pub name: Option>>, + pub identifier: Option>>, + pub union:Vec>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for SubsetDefinitionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SubsetDefinitionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_subsetDefinition(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_subsetDefinition(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for SubsetDefinitionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_subsetDefinition } + //fn type_rule_index() -> usize where Self: Sized { RULE_subsetDefinition } +} +antlr_rust::tid!{SubsetDefinitionContextExt<'a>} + +impl<'input> SubsetDefinitionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,SubsetDefinitionContextExt{ + name: None, identifier: None, + union: Vec::new(), + ph:PhantomData + }), + ) + } +} + +pub trait SubsetDefinitionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token EQ +/// Returns `None` if there is no child corresponding to token EQ +fn EQ(&self) -> Option>> where Self:Sized{ + self.get_token(EQ, 0) +} +fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> SubsetDefinitionContextAttrs<'input> for SubsetDefinitionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn subsetDefinition(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = SubsetDefinitionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 88, RULE_subsetDefinition); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(1576); + let tmp = recog.identifier()?; + cast_mut::<_,SubsetDefinitionContext >(&mut _localctx).name = Some(tmp.clone()); + + + recog.base.set_state(1577); + recog.base.match_token(EQ,&mut recog.err_handler)?; + + recog.base.set_state(1578); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1579); + let tmp = recog.identifier()?; + cast_mut::<_,SubsetDefinitionContext >(&mut _localctx).identifier = Some(tmp.clone()); + + + let temp = cast_mut::<_,SubsetDefinitionContext >(&mut _localctx).identifier.clone().unwrap() + ; + cast_mut::<_,SubsetDefinitionContext >(&mut _localctx).union.push(temp); + + recog.base.set_state(1584); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1580); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1581); + let tmp = recog.identifier()?; + cast_mut::<_,SubsetDefinitionContext >(&mut _localctx).identifier = Some(tmp.clone()); + + + let temp = cast_mut::<_,SubsetDefinitionContext >(&mut _localctx).identifier.clone().unwrap() + ; + cast_mut::<_,SubsetDefinitionContext >(&mut _localctx).union.push(temp); + + } + } + recog.base.set_state(1586); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1587); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- variableDefinition ---------------- +pub type VariableDefinitionContextAll<'input> = VariableDefinitionContext<'input>; + + +pub type VariableDefinitionContext<'input> = BaseParserRuleContext<'input,VariableDefinitionContextExt<'input>>; + +#[derive(Clone)] +pub struct VariableDefinitionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for VariableDefinitionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for VariableDefinitionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_variableDefinition(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_variableDefinition(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for VariableDefinitionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_variableDefinition } + //fn type_rule_index() -> usize where Self: Sized { RULE_variableDefinition } +} +antlr_rust::tid!{VariableDefinitionContextExt<'a>} + +impl<'input> VariableDefinitionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,VariableDefinitionContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait VariableDefinitionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> VariableDefinitionContextAttrs<'input> for VariableDefinitionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn variableDefinition(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = VariableDefinitionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 90, RULE_variableDefinition); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(1589); + recog.identifier()?; + + recog.base.set_state(1590); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1591); + recog.expression()?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- aliasedRelation ---------------- +pub type AliasedRelationContextAll<'input> = AliasedRelationContext<'input>; + + +pub type AliasedRelationContext<'input> = BaseParserRuleContext<'input,AliasedRelationContextExt<'input>>; + +#[derive(Clone)] +pub struct AliasedRelationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for AliasedRelationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for AliasedRelationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_aliasedRelation(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_aliasedRelation(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for AliasedRelationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_aliasedRelation } + //fn type_rule_index() -> usize where Self: Sized { RULE_aliasedRelation } +} +antlr_rust::tid!{AliasedRelationContextExt<'a>} + +impl<'input> AliasedRelationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,AliasedRelationContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait AliasedRelationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn relationPrimary(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> AliasedRelationContextAttrs<'input> for AliasedRelationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn aliasedRelation(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = AliasedRelationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 92, RULE_aliasedRelation); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule relationPrimary*/ + recog.base.set_state(1593); + recog.relationPrimary()?; + + recog.base.set_state(1601); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(201,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1595); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AS { + { + recog.base.set_state(1594); + recog.base.match_token(AS,&mut recog.err_handler)?; + + } + } + + /*InvokeRule identifier*/ + recog.base.set_state(1597); + recog.identifier()?; + + recog.base.set_state(1599); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(200,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule columnAliases*/ + recog.base.set_state(1598); + recog.columnAliases()?; + + } + } + + _ => {} + } + } + } + + _ => {} + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- columnAliases ---------------- +pub type ColumnAliasesContextAll<'input> = ColumnAliasesContext<'input>; + + +pub type ColumnAliasesContext<'input> = BaseParserRuleContext<'input,ColumnAliasesContextExt<'input>>; + +#[derive(Clone)] +pub struct ColumnAliasesContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ColumnAliasesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ColumnAliasesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_columnAliases(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_columnAliases(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ColumnAliasesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_columnAliases } + //fn type_rule_index() -> usize where Self: Sized { RULE_columnAliases } +} +antlr_rust::tid!{ColumnAliasesContextExt<'a>} + +impl<'input> ColumnAliasesContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ColumnAliasesContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ColumnAliasesContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> ColumnAliasesContextAttrs<'input> for ColumnAliasesContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn columnAliases(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ColumnAliasesContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 94, RULE_columnAliases); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1603); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1604); + recog.identifier()?; + + recog.base.set_state(1609); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1605); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(1606); + recog.identifier()?; + + } + } + recog.base.set_state(1611); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1612); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- relationPrimary ---------------- +#[derive(Debug)] +pub enum RelationPrimaryContextAll<'input>{ + SubqueryRelationContext(SubqueryRelationContext<'input>), + ParenthesizedRelationContext(ParenthesizedRelationContext<'input>), + UnnestContext(UnnestContext<'input>), + TableFunctionInvocationContext(TableFunctionInvocationContext<'input>), + LateralContext(LateralContext<'input>), + TableNameContext(TableNameContext<'input>), +Error(RelationPrimaryContext<'input>) +} +antlr_rust::tid!{RelationPrimaryContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for RelationPrimaryContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for RelationPrimaryContextAll<'input>{} + +impl<'input> Deref for RelationPrimaryContextAll<'input>{ + type Target = dyn RelationPrimaryContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use RelationPrimaryContextAll::*; + match self{ + SubqueryRelationContext(inner) => inner, + ParenthesizedRelationContext(inner) => inner, + UnnestContext(inner) => inner, + TableFunctionInvocationContext(inner) => inner, + LateralContext(inner) => inner, + TableNameContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for RelationPrimaryContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type RelationPrimaryContext<'input> = BaseParserRuleContext<'input,RelationPrimaryContextExt<'input>>; + +#[derive(Clone)] +pub struct RelationPrimaryContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RelationPrimaryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RelationPrimaryContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for RelationPrimaryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relationPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_relationPrimary } +} +antlr_rust::tid!{RelationPrimaryContextExt<'a>} + +impl<'input> RelationPrimaryContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + RelationPrimaryContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RelationPrimaryContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait RelationPrimaryContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> RelationPrimaryContextAttrs<'input> for RelationPrimaryContext<'input>{} + +pub type SubqueryRelationContext<'input> = BaseParserRuleContext<'input,SubqueryRelationContextExt<'input>>; + +pub trait SubqueryRelationContextAttrs<'input>: PrestoParserContext<'input>{ + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SubqueryRelationContextAttrs<'input> for SubqueryRelationContext<'input>{} + +pub struct SubqueryRelationContextExt<'input>{ + base:RelationPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SubqueryRelationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SubqueryRelationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SubqueryRelationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_subqueryRelation(self); + } +} + +impl<'input> CustomRuleContext<'input> for SubqueryRelationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relationPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_relationPrimary } +} + +impl<'input> Borrow> for SubqueryRelationContext<'input>{ + fn borrow(&self) -> &RelationPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SubqueryRelationContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> RelationPrimaryContextAttrs<'input> for SubqueryRelationContext<'input> {} + +impl<'input> SubqueryRelationContextExt<'input>{ + fn new(ctx: &dyn RelationPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + RelationPrimaryContextAll::SubqueryRelationContext( + BaseParserRuleContext::copy_from(ctx,SubqueryRelationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ParenthesizedRelationContext<'input> = BaseParserRuleContext<'input,ParenthesizedRelationContextExt<'input>>; + +pub trait ParenthesizedRelationContextAttrs<'input>: PrestoParserContext<'input>{ + fn relation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ParenthesizedRelationContextAttrs<'input> for ParenthesizedRelationContext<'input>{} + +pub struct ParenthesizedRelationContextExt<'input>{ + base:RelationPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ParenthesizedRelationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ParenthesizedRelationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ParenthesizedRelationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_parenthesizedRelation(self); + } +} + +impl<'input> CustomRuleContext<'input> for ParenthesizedRelationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relationPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_relationPrimary } +} + +impl<'input> Borrow> for ParenthesizedRelationContext<'input>{ + fn borrow(&self) -> &RelationPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ParenthesizedRelationContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> RelationPrimaryContextAttrs<'input> for ParenthesizedRelationContext<'input> {} + +impl<'input> ParenthesizedRelationContextExt<'input>{ + fn new(ctx: &dyn RelationPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + RelationPrimaryContextAll::ParenthesizedRelationContext( + BaseParserRuleContext::copy_from(ctx,ParenthesizedRelationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type UnnestContext<'input> = BaseParserRuleContext<'input,UnnestContextExt<'input>>; + +pub trait UnnestContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token UNNEST + /// Returns `None` if there is no child corresponding to token UNNEST + fn UNNEST(&self) -> Option>> where Self:Sized{ + self.get_token(UNNEST, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + /// Retrieves first TerminalNode corresponding to token ORDINALITY + /// Returns `None` if there is no child corresponding to token ORDINALITY + fn ORDINALITY(&self) -> Option>> where Self:Sized{ + self.get_token(ORDINALITY, 0) + } +} + +impl<'input> UnnestContextAttrs<'input> for UnnestContext<'input>{} + +pub struct UnnestContextExt<'input>{ + base:RelationPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UnnestContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UnnestContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UnnestContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_unnest(self); + } +} + +impl<'input> CustomRuleContext<'input> for UnnestContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relationPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_relationPrimary } +} + +impl<'input> Borrow> for UnnestContext<'input>{ + fn borrow(&self) -> &RelationPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UnnestContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> RelationPrimaryContextAttrs<'input> for UnnestContext<'input> {} + +impl<'input> UnnestContextExt<'input>{ + fn new(ctx: &dyn RelationPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + RelationPrimaryContextAll::UnnestContext( + BaseParserRuleContext::copy_from(ctx,UnnestContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TableFunctionInvocationContext<'input> = BaseParserRuleContext<'input,TableFunctionInvocationContextExt<'input>>; + +pub trait TableFunctionInvocationContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn tableFunctionCall(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TableFunctionInvocationContextAttrs<'input> for TableFunctionInvocationContext<'input>{} + +pub struct TableFunctionInvocationContextExt<'input>{ + base:RelationPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TableFunctionInvocationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TableFunctionInvocationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableFunctionInvocationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableFunctionInvocation(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableFunctionInvocationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relationPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_relationPrimary } +} + +impl<'input> Borrow> for TableFunctionInvocationContext<'input>{ + fn borrow(&self) -> &RelationPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TableFunctionInvocationContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> RelationPrimaryContextAttrs<'input> for TableFunctionInvocationContext<'input> {} + +impl<'input> TableFunctionInvocationContextExt<'input>{ + fn new(ctx: &dyn RelationPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + RelationPrimaryContextAll::TableFunctionInvocationContext( + BaseParserRuleContext::copy_from(ctx,TableFunctionInvocationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type LateralContext<'input> = BaseParserRuleContext<'input,LateralContextExt<'input>>; + +pub trait LateralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token LATERAL + /// Returns `None` if there is no child corresponding to token LATERAL + fn LATERAL(&self) -> Option>> where Self:Sized{ + self.get_token(LATERAL, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> LateralContextAttrs<'input> for LateralContext<'input>{} + +pub struct LateralContextExt<'input>{ + base:RelationPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{LateralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for LateralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LateralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_lateral(self); + } +} + +impl<'input> CustomRuleContext<'input> for LateralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relationPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_relationPrimary } +} + +impl<'input> Borrow> for LateralContext<'input>{ + fn borrow(&self) -> &RelationPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for LateralContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> RelationPrimaryContextAttrs<'input> for LateralContext<'input> {} + +impl<'input> LateralContextExt<'input>{ + fn new(ctx: &dyn RelationPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + RelationPrimaryContextAll::LateralContext( + BaseParserRuleContext::copy_from(ctx,LateralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TableNameContext<'input> = BaseParserRuleContext<'input,TableNameContextExt<'input>>; + +pub trait TableNameContextAttrs<'input>: PrestoParserContext<'input>{ + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn queryPeriod(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TableNameContextAttrs<'input> for TableNameContext<'input>{} + +pub struct TableNameContextExt<'input>{ + base:RelationPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TableNameContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TableNameContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableNameContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableName(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableNameContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_relationPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_relationPrimary } +} + +impl<'input> Borrow> for TableNameContext<'input>{ + fn borrow(&self) -> &RelationPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TableNameContext<'input>{ + fn borrow_mut(&mut self) -> &mut RelationPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> RelationPrimaryContextAttrs<'input> for TableNameContext<'input> {} + +impl<'input> TableNameContextExt<'input>{ + fn new(ctx: &dyn RelationPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + RelationPrimaryContextAll::TableNameContext( + BaseParserRuleContext::copy_from(ctx,TableNameContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn relationPrimary(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = RelationPrimaryContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 96, RULE_relationPrimary); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1651); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(206,&mut recog.base)? { + 1 =>{ + let tmp = TableNameContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule qualifiedName*/ + recog.base.set_state(1614); + recog.qualifiedName()?; + + recog.base.set_state(1616); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(203,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule queryPeriod*/ + recog.base.set_state(1615); + recog.queryPeriod()?; + + } + } + + _ => {} + } + } + } + , + 2 =>{ + let tmp = SubqueryRelationContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(1618); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(1619); + recog.query()?; + + recog.base.set_state(1620); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + let tmp = UnnestContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(1622); + recog.base.match_token(UNNEST,&mut recog.err_handler)?; + + recog.base.set_state(1623); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1624); + recog.expression()?; + + recog.base.set_state(1629); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1625); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1626); + recog.expression()?; + + } + } + recog.base.set_state(1631); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1632); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(1635); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(205,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1633); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(1634); + recog.base.match_token(ORDINALITY,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + , + 4 =>{ + let tmp = LateralContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(1637); + recog.base.match_token(LATERAL,&mut recog.err_handler)?; + + recog.base.set_state(1638); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(1639); + recog.query()?; + + recog.base.set_state(1640); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 5 =>{ + let tmp = TableFunctionInvocationContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 5); + _localctx = tmp; + { + recog.base.set_state(1642); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(1643); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule tableFunctionCall*/ + recog.base.set_state(1644); + recog.tableFunctionCall()?; + + recog.base.set_state(1645); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 6 =>{ + let tmp = ParenthesizedRelationContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 6); + _localctx = tmp; + { + recog.base.set_state(1647); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule relation*/ + recog.base.set_state(1648); + recog.relation_rec(0)?; + + recog.base.set_state(1649); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- tableFunctionCall ---------------- +pub type TableFunctionCallContextAll<'input> = TableFunctionCallContext<'input>; + + +pub type TableFunctionCallContext<'input> = BaseParserRuleContext<'input,TableFunctionCallContextExt<'input>>; + +#[derive(Clone)] +pub struct TableFunctionCallContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TableFunctionCallContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableFunctionCallContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableFunctionCall(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_tableFunctionCall(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableFunctionCallContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_tableFunctionCall } + //fn type_rule_index() -> usize where Self: Sized { RULE_tableFunctionCall } +} +antlr_rust::tid!{TableFunctionCallContextExt<'a>} + +impl<'input> TableFunctionCallContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TableFunctionCallContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait TableFunctionCallContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn tableFunctionArgument_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn tableFunctionArgument(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token COPARTITION +/// Returns `None` if there is no child corresponding to token COPARTITION +fn COPARTITION(&self) -> Option>> where Self:Sized{ + self.get_token(COPARTITION, 0) +} +fn copartitionTables_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn copartitionTables(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> TableFunctionCallContextAttrs<'input> for TableFunctionCallContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn tableFunctionCall(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TableFunctionCallContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 98, RULE_tableFunctionCall); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule qualifiedName*/ + recog.base.set_state(1653); + recog.qualifiedName()?; + + recog.base.set_state(1654); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1663); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(208,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule tableFunctionArgument*/ + recog.base.set_state(1655); + recog.tableFunctionArgument()?; + + recog.base.set_state(1660); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1656); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule tableFunctionArgument*/ + recog.base.set_state(1657); + recog.tableFunctionArgument()?; + + } + } + recog.base.set_state(1662); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + _ => {} + } + recog.base.set_state(1674); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COPARTITION { + { + recog.base.set_state(1665); + recog.base.match_token(COPARTITION,&mut recog.err_handler)?; + + /*InvokeRule copartitionTables*/ + recog.base.set_state(1666); + recog.copartitionTables()?; + + recog.base.set_state(1671); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1667); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule copartitionTables*/ + recog.base.set_state(1668); + recog.copartitionTables()?; + + } + } + recog.base.set_state(1673); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1676); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- tableFunctionArgument ---------------- +pub type TableFunctionArgumentContextAll<'input> = TableFunctionArgumentContext<'input>; + + +pub type TableFunctionArgumentContext<'input> = BaseParserRuleContext<'input,TableFunctionArgumentContextExt<'input>>; + +#[derive(Clone)] +pub struct TableFunctionArgumentContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TableFunctionArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableFunctionArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableFunctionArgument(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_tableFunctionArgument(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableFunctionArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_tableFunctionArgument } + //fn type_rule_index() -> usize where Self: Sized { RULE_tableFunctionArgument } +} +antlr_rust::tid!{TableFunctionArgumentContextExt<'a>} + +impl<'input> TableFunctionArgumentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TableFunctionArgumentContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait TableFunctionArgumentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn tableArgument(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn descriptorArgument(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> TableFunctionArgumentContextAttrs<'input> for TableFunctionArgumentContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn tableFunctionArgument(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TableFunctionArgumentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 100, RULE_tableFunctionArgument); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1681); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(211,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule identifier*/ + recog.base.set_state(1678); + recog.identifier()?; + + recog.base.set_state(1679); + recog.base.match_token(T__4,&mut recog.err_handler)?; + + } + } + + _ => {} + } + recog.base.set_state(1686); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(212,&mut recog.base)? { + 1 =>{ + { + /*InvokeRule tableArgument*/ + recog.base.set_state(1683); + recog.tableArgument()?; + + } + } + , + 2 =>{ + { + /*InvokeRule descriptorArgument*/ + recog.base.set_state(1684); + recog.descriptorArgument()?; + + } + } + , + 3 =>{ + { + /*InvokeRule expression*/ + recog.base.set_state(1685); + recog.expression()?; + + } + } + + _ => {} + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- tableArgument ---------------- +pub type TableArgumentContextAll<'input> = TableArgumentContext<'input>; + + +pub type TableArgumentContext<'input> = BaseParserRuleContext<'input,TableArgumentContextExt<'input>>; + +#[derive(Clone)] +pub struct TableArgumentContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TableArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableArgument(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_tableArgument(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_tableArgument } + //fn type_rule_index() -> usize where Self: Sized { RULE_tableArgument } +} +antlr_rust::tid!{TableArgumentContextExt<'a>} + +impl<'input> TableArgumentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TableArgumentContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait TableArgumentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn tableArgumentRelation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token PARTITION +/// Returns `None` if there is no child corresponding to token PARTITION +fn PARTITION(&self) -> Option>> where Self:Sized{ + self.get_token(PARTITION, 0) +} +/// Retrieves all `TerminalNode`s corresponding to token BY in current rule +fn BY_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token BY, starting from 0. +/// Returns `None` if number of children corresponding to token BY is less or equal than `i`. +fn BY(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(BY, i) +} +/// Retrieves first TerminalNode corresponding to token PRUNE +/// Returns `None` if there is no child corresponding to token PRUNE +fn PRUNE(&self) -> Option>> where Self:Sized{ + self.get_token(PRUNE, 0) +} +/// Retrieves first TerminalNode corresponding to token WHEN +/// Returns `None` if there is no child corresponding to token WHEN +fn WHEN(&self) -> Option>> where Self:Sized{ + self.get_token(WHEN, 0) +} +/// Retrieves first TerminalNode corresponding to token EMPTY +/// Returns `None` if there is no child corresponding to token EMPTY +fn EMPTY(&self) -> Option>> where Self:Sized{ + self.get_token(EMPTY, 0) +} +/// Retrieves first TerminalNode corresponding to token KEEP +/// Returns `None` if there is no child corresponding to token KEEP +fn KEEP(&self) -> Option>> where Self:Sized{ + self.get_token(KEEP, 0) +} +/// Retrieves first TerminalNode corresponding to token ORDER +/// Returns `None` if there is no child corresponding to token ORDER +fn ORDER(&self) -> Option>> where Self:Sized{ + self.get_token(ORDER, 0) +} +fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +fn sortItem_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn sortItem(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> TableArgumentContextAttrs<'input> for TableArgumentContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn tableArgument(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TableArgumentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 102, RULE_tableArgument); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule tableArgumentRelation*/ + recog.base.set_state(1688); + recog.tableArgumentRelation()?; + + recog.base.set_state(1706); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==PARTITION { + { + recog.base.set_state(1689); + recog.base.match_token(PARTITION,&mut recog.err_handler)?; + + recog.base.set_state(1690); + recog.base.match_token(BY,&mut recog.err_handler)?; + + recog.base.set_state(1704); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(215,&mut recog.base)? { + 1 =>{ + { + recog.base.set_state(1691); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1700); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule expression*/ + recog.base.set_state(1692); + recog.expression()?; + + recog.base.set_state(1697); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1693); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1694); + recog.expression()?; + + } + } + recog.base.set_state(1699); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(1702); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + { + /*InvokeRule expression*/ + recog.base.set_state(1703); + recog.expression()?; + + } + } + + _ => {} + } + } + } + + recog.base.set_state(1714); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + PRUNE + => { + { + recog.base.set_state(1708); + recog.base.match_token(PRUNE,&mut recog.err_handler)?; + + recog.base.set_state(1709); + recog.base.match_token(WHEN,&mut recog.err_handler)?; + + recog.base.set_state(1710); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + } + } + + KEEP + => { + { + recog.base.set_state(1711); + recog.base.match_token(KEEP,&mut recog.err_handler)?; + + recog.base.set_state(1712); + recog.base.match_token(WHEN,&mut recog.err_handler)?; + + recog.base.set_state(1713); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + } + } + + T__2 | COMMA | COPARTITION | ORDER + => { + } + + _ => {} + } + recog.base.set_state(1732); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ORDER { + { + recog.base.set_state(1716); + recog.base.match_token(ORDER,&mut recog.err_handler)?; + + recog.base.set_state(1717); + recog.base.match_token(BY,&mut recog.err_handler)?; + + recog.base.set_state(1730); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(219,&mut recog.base)? { + 1 =>{ + { + recog.base.set_state(1718); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1719); + recog.sortItem()?; + + recog.base.set_state(1724); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1720); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1721); + recog.sortItem()?; + + } + } + recog.base.set_state(1726); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1727); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + { + /*InvokeRule sortItem*/ + recog.base.set_state(1729); + recog.sortItem()?; + + } + } + + _ => {} + } + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- tableArgumentRelation ---------------- +#[derive(Debug)] +pub enum TableArgumentRelationContextAll<'input>{ + TableArgumentQueryContext(TableArgumentQueryContext<'input>), + TableArgumentTableContext(TableArgumentTableContext<'input>), +Error(TableArgumentRelationContext<'input>) +} +antlr_rust::tid!{TableArgumentRelationContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for TableArgumentRelationContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for TableArgumentRelationContextAll<'input>{} + +impl<'input> Deref for TableArgumentRelationContextAll<'input>{ + type Target = dyn TableArgumentRelationContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use TableArgumentRelationContextAll::*; + match self{ + TableArgumentQueryContext(inner) => inner, + TableArgumentTableContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for TableArgumentRelationContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type TableArgumentRelationContext<'input> = BaseParserRuleContext<'input,TableArgumentRelationContextExt<'input>>; + +#[derive(Clone)] +pub struct TableArgumentRelationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TableArgumentRelationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableArgumentRelationContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for TableArgumentRelationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_tableArgumentRelation } + //fn type_rule_index() -> usize where Self: Sized { RULE_tableArgumentRelation } +} +antlr_rust::tid!{TableArgumentRelationContextExt<'a>} + +impl<'input> TableArgumentRelationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + TableArgumentRelationContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TableArgumentRelationContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait TableArgumentRelationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> TableArgumentRelationContextAttrs<'input> for TableArgumentRelationContext<'input>{} + +pub type TableArgumentQueryContext<'input> = BaseParserRuleContext<'input,TableArgumentQueryContextExt<'input>>; + +pub trait TableArgumentQueryContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } + fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TableArgumentQueryContextAttrs<'input> for TableArgumentQueryContext<'input>{} + +pub struct TableArgumentQueryContextExt<'input>{ + base:TableArgumentRelationContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TableArgumentQueryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TableArgumentQueryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableArgumentQueryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableArgumentQuery(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableArgumentQueryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_tableArgumentRelation } + //fn type_rule_index() -> usize where Self: Sized { RULE_tableArgumentRelation } +} + +impl<'input> Borrow> for TableArgumentQueryContext<'input>{ + fn borrow(&self) -> &TableArgumentRelationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TableArgumentQueryContext<'input>{ + fn borrow_mut(&mut self) -> &mut TableArgumentRelationContextExt<'input> { &mut self.base } +} + +impl<'input> TableArgumentRelationContextAttrs<'input> for TableArgumentQueryContext<'input> {} + +impl<'input> TableArgumentQueryContextExt<'input>{ + fn new(ctx: &dyn TableArgumentRelationContextAttrs<'input>) -> Rc> { + Rc::new( + TableArgumentRelationContextAll::TableArgumentQueryContext( + BaseParserRuleContext::copy_from(ctx,TableArgumentQueryContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TableArgumentTableContext<'input> = BaseParserRuleContext<'input,TableArgumentTableContextExt<'input>>; + +pub trait TableArgumentTableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TABLE + /// Returns `None` if there is no child corresponding to token TABLE + fn TABLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLE, 0) + } + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } + fn columnAliases(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TableArgumentTableContextAttrs<'input> for TableArgumentTableContext<'input>{} + +pub struct TableArgumentTableContextExt<'input>{ + base:TableArgumentRelationContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TableArgumentTableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TableArgumentTableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TableArgumentTableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_tableArgumentTable(self); + } +} + +impl<'input> CustomRuleContext<'input> for TableArgumentTableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_tableArgumentRelation } + //fn type_rule_index() -> usize where Self: Sized { RULE_tableArgumentRelation } +} + +impl<'input> Borrow> for TableArgumentTableContext<'input>{ + fn borrow(&self) -> &TableArgumentRelationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TableArgumentTableContext<'input>{ + fn borrow_mut(&mut self) -> &mut TableArgumentRelationContextExt<'input> { &mut self.base } +} + +impl<'input> TableArgumentRelationContextAttrs<'input> for TableArgumentTableContext<'input> {} + +impl<'input> TableArgumentTableContextExt<'input>{ + fn new(ctx: &dyn TableArgumentRelationContextAttrs<'input>) -> Rc> { + Rc::new( + TableArgumentRelationContextAll::TableArgumentTableContext( + BaseParserRuleContext::copy_from(ctx,TableArgumentTableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn tableArgumentRelation(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TableArgumentRelationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 104, RULE_tableArgumentRelation); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1760); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(227,&mut recog.base)? { + 1 =>{ + let tmp = TableArgumentTableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(1734); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(1735); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(1736); + recog.qualifiedName()?; + + recog.base.set_state(1737); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(1745); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(223,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1739); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AS { + { + recog.base.set_state(1738); + recog.base.match_token(AS,&mut recog.err_handler)?; + + } + } + + /*InvokeRule identifier*/ + recog.base.set_state(1741); + recog.identifier()?; + + recog.base.set_state(1743); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + /*InvokeRule columnAliases*/ + recog.base.set_state(1742); + recog.columnAliases()?; + + } + } + + } + } + + _ => {} + } + } + } + , + 2 =>{ + let tmp = TableArgumentQueryContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(1747); + recog.base.match_token(TABLE,&mut recog.err_handler)?; + + recog.base.set_state(1748); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(1749); + recog.query()?; + + recog.base.set_state(1750); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(1758); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(226,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1752); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AS { + { + recog.base.set_state(1751); + recog.base.match_token(AS,&mut recog.err_handler)?; + + } + } + + /*InvokeRule identifier*/ + recog.base.set_state(1754); + recog.identifier()?; + + recog.base.set_state(1756); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + /*InvokeRule columnAliases*/ + recog.base.set_state(1755); + recog.columnAliases()?; + + } + } + + } + } + + _ => {} + } + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- descriptorArgument ---------------- +pub type DescriptorArgumentContextAll<'input> = DescriptorArgumentContext<'input>; + + +pub type DescriptorArgumentContext<'input> = BaseParserRuleContext<'input,DescriptorArgumentContextExt<'input>>; + +#[derive(Clone)] +pub struct DescriptorArgumentContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for DescriptorArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DescriptorArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_descriptorArgument(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_descriptorArgument(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for DescriptorArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_descriptorArgument } + //fn type_rule_index() -> usize where Self: Sized { RULE_descriptorArgument } +} +antlr_rust::tid!{DescriptorArgumentContextExt<'a>} + +impl<'input> DescriptorArgumentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,DescriptorArgumentContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait DescriptorArgumentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token DESCRIPTOR +/// Returns `None` if there is no child corresponding to token DESCRIPTOR +fn DESCRIPTOR(&self) -> Option>> where Self:Sized{ + self.get_token(DESCRIPTOR, 0) +} +fn descriptorField_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn descriptorField(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} +/// Retrieves first TerminalNode corresponding to token CAST +/// Returns `None` if there is no child corresponding to token CAST +fn CAST(&self) -> Option>> where Self:Sized{ + self.get_token(CAST, 0) +} +/// Retrieves first TerminalNode corresponding to token NULL +/// Returns `None` if there is no child corresponding to token NULL +fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) +} +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} + +} + +impl<'input> DescriptorArgumentContextAttrs<'input> for DescriptorArgumentContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn descriptorArgument(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = DescriptorArgumentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 106, RULE_descriptorArgument); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1780); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + DESCRIPTOR + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1762); + recog.base.match_token(DESCRIPTOR,&mut recog.err_handler)?; + + recog.base.set_state(1763); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule descriptorField*/ + recog.base.set_state(1764); + recog.descriptorField()?; + + recog.base.set_state(1769); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1765); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule descriptorField*/ + recog.base.set_state(1766); + recog.descriptorField()?; + + } + } + recog.base.set_state(1771); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1772); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + CAST + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(1774); + recog.base.match_token(CAST,&mut recog.err_handler)?; + + recog.base.set_state(1775); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1776); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + recog.base.set_state(1777); + recog.base.match_token(AS,&mut recog.err_handler)?; + + recog.base.set_state(1778); + recog.base.match_token(DESCRIPTOR,&mut recog.err_handler)?; + + recog.base.set_state(1779); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- descriptorField ---------------- +pub type DescriptorFieldContextAll<'input> = DescriptorFieldContext<'input>; + + +pub type DescriptorFieldContext<'input> = BaseParserRuleContext<'input,DescriptorFieldContextExt<'input>>; + +#[derive(Clone)] +pub struct DescriptorFieldContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for DescriptorFieldContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DescriptorFieldContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_descriptorField(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_descriptorField(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for DescriptorFieldContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_descriptorField } + //fn type_rule_index() -> usize where Self: Sized { RULE_descriptorField } +} +antlr_rust::tid!{DescriptorFieldContextExt<'a>} + +impl<'input> DescriptorFieldContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,DescriptorFieldContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait DescriptorFieldContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> DescriptorFieldContextAttrs<'input> for DescriptorFieldContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn descriptorField(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = DescriptorFieldContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 108, RULE_descriptorField); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(1782); + recog.identifier()?; + + recog.base.set_state(1784); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)))) != 0) || ((((_la - 133)) & !0x3f) == 0 && ((1usize << (_la - 133)) & ((1usize << (KEEP - 133)) | (1usize << (KEY - 133)) | (1usize << (KEYS - 133)) | (1usize << (LAST - 133)) | (1usize << (LATERAL - 133)) | (1usize << (LEADING - 133)) | (1usize << (LEVEL - 133)) | (1usize << (LIMIT - 133)) | (1usize << (LOCAL - 133)) | (1usize << (LOGICAL - 133)) | (1usize << (MAP - 133)) | (1usize << (MATCH - 133)) | (1usize << (MATCHED - 133)) | (1usize << (MATCHES - 133)) | (1usize << (MATCH_RECOGNIZE - 133)) | (1usize << (MATERIALIZED - 133)) | (1usize << (MEASURES - 133)) | (1usize << (MERGE - 133)) | (1usize << (MINUTE - 133)) | (1usize << (MONTH - 133)) | (1usize << (NEXT - 133)) | (1usize << (NFC - 133)) | (1usize << (NFD - 133)) | (1usize << (NFKC - 133)) | (1usize << (NFKD - 133)) | (1usize << (NO - 133)))) != 0) || ((((_la - 165)) & !0x3f) == 0 && ((1usize << (_la - 165)) & ((1usize << (NONE - 165)) | (1usize << (NULLIF - 165)) | (1usize << (NULLS - 165)) | (1usize << (OBJECT - 165)) | (1usize << (OF - 165)) | (1usize << (OFFSET - 165)) | (1usize << (OMIT - 165)) | (1usize << (ONE - 165)) | (1usize << (ONLY - 165)) | (1usize << (OPTION - 165)) | (1usize << (ORDINALITY - 165)) | (1usize << (OUTPUT - 165)) | (1usize << (OVER - 165)) | (1usize << (OVERFLOW - 165)) | (1usize << (PARTITION - 165)) | (1usize << (PARTITIONS - 165)) | (1usize << (PASSING - 165)) | (1usize << (PAST - 165)) | (1usize << (PATH - 165)) | (1usize << (PATTERN - 165)) | (1usize << (PER - 165)) | (1usize << (PERIOD - 165)) | (1usize << (PERMUTE - 165)) | (1usize << (POSITION - 165)) | (1usize << (PRECEDING - 165)))) != 0) || ((((_la - 197)) & !0x3f) == 0 && ((1usize << (_la - 197)) & ((1usize << (PRECISION - 197)) | (1usize << (PRIVILEGES - 197)) | (1usize << (PROPERTIES - 197)) | (1usize << (PRUNE - 197)) | (1usize << (QUOTES - 197)) | (1usize << (RANGE - 197)) | (1usize << (READ - 197)) | (1usize << (REFRESH - 197)) | (1usize << (RENAME - 197)) | (1usize << (REPEATABLE - 197)) | (1usize << (REPLACE - 197)) | (1usize << (RESET - 197)) | (1usize << (RESPECT - 197)) | (1usize << (RESTRICT - 197)) | (1usize << (RETURNING - 197)) | (1usize << (REVOKE - 197)) | (1usize << (ROLE - 197)) | (1usize << (ROLES - 197)) | (1usize << (ROLLBACK - 197)) | (1usize << (ROW - 197)) | (1usize << (ROWS - 197)) | (1usize << (RUNNING - 197)) | (1usize << (SCALAR - 197)) | (1usize << (SCHEMA - 197)) | (1usize << (SCHEMAS - 197)) | (1usize << (SECOND - 197)) | (1usize << (SECURITY - 197)) | (1usize << (SEEK - 197)))) != 0) || ((((_la - 230)) & !0x3f) == 0 && ((1usize << (_la - 230)) & ((1usize << (SERIALIZABLE - 230)) | (1usize << (SESSION - 230)) | (1usize << (SET - 230)) | (1usize << (SETS - 230)) | (1usize << (SHOW - 230)) | (1usize << (SOME - 230)) | (1usize << (START - 230)) | (1usize << (STATS - 230)) | (1usize << (SUBSET - 230)) | (1usize << (SUBSTRING - 230)) | (1usize << (SYSTEM - 230)) | (1usize << (TABLES - 230)) | (1usize << (TABLESAMPLE - 230)) | (1usize << (TEXT - 230)) | (1usize << (TEXT_STRING - 230)) | (1usize << (TIES - 230)) | (1usize << (TIME - 230)) | (1usize << (TIMESTAMP - 230)) | (1usize << (TO - 230)) | (1usize << (TRAILING - 230)) | (1usize << (TRANSACTION - 230)) | (1usize << (TRUNCATE - 230)) | (1usize << (TRY_CAST - 230)) | (1usize << (TYPE - 230)) | (1usize << (UNBOUNDED - 230)) | (1usize << (UNCOMMITTED - 230)) | (1usize << (UNCONDITIONAL - 230)))) != 0) || ((((_la - 263)) & !0x3f) == 0 && ((1usize << (_la - 263)) & ((1usize << (UNIQUE - 263)) | (1usize << (UNKNOWN - 263)) | (1usize << (UNMATCHED - 263)) | (1usize << (UPDATE - 263)) | (1usize << (USE - 263)) | (1usize << (USER - 263)) | (1usize << (UTF16 - 263)) | (1usize << (UTF32 - 263)) | (1usize << (UTF8 - 263)) | (1usize << (VALIDATE - 263)) | (1usize << (VALUE - 263)) | (1usize << (VERBOSE - 263)) | (1usize << (VERSION - 263)) | (1usize << (VIEW - 263)) | (1usize << (WINDOW - 263)) | (1usize << (WITHIN - 263)) | (1usize << (WITHOUT - 263)) | (1usize << (WORK - 263)) | (1usize << (WRAPPER - 263)) | (1usize << (WRITE - 263)) | (1usize << (YEAR - 263)) | (1usize << (ZONE - 263)))) != 0) || ((((_la - 310)) & !0x3f) == 0 && ((1usize << (_la - 310)) & ((1usize << (IDENTIFIER - 310)) | (1usize << (DIGIT_IDENTIFIER - 310)) | (1usize << (QUOTED_IDENTIFIER - 310)) | (1usize << (BACKQUOTED_IDENTIFIER - 310)))) != 0) { + { + /*InvokeRule type_*/ + recog.base.set_state(1783); + recog.type__rec(0)?; + + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- copartitionTables ---------------- +pub type CopartitionTablesContextAll<'input> = CopartitionTablesContext<'input>; + + +pub type CopartitionTablesContext<'input> = BaseParserRuleContext<'input,CopartitionTablesContextExt<'input>>; + +#[derive(Clone)] +pub struct CopartitionTablesContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for CopartitionTablesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CopartitionTablesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_copartitionTables(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_copartitionTables(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for CopartitionTablesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_copartitionTables } + //fn type_rule_index() -> usize where Self: Sized { RULE_copartitionTables } +} +antlr_rust::tid!{CopartitionTablesContextExt<'a>} + +impl<'input> CopartitionTablesContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,CopartitionTablesContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait CopartitionTablesContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn qualifiedName_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn qualifiedName(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> CopartitionTablesContextAttrs<'input> for CopartitionTablesContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn copartitionTables(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = CopartitionTablesContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 110, RULE_copartitionTables); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1786); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(1787); + recog.qualifiedName()?; + + recog.base.set_state(1788); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(1789); + recog.qualifiedName()?; + + recog.base.set_state(1794); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1790); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(1791); + recog.qualifiedName()?; + + } + } + recog.base.set_state(1796); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1797); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- expression ---------------- +pub type ExpressionContextAll<'input> = ExpressionContext<'input>; + + +pub type ExpressionContext<'input> = BaseParserRuleContext<'input,ExpressionContextExt<'input>>; + +#[derive(Clone)] +pub struct ExpressionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExpressionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_expression(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_expression(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_expression } + //fn type_rule_index() -> usize where Self: Sized { RULE_expression } +} +antlr_rust::tid!{ExpressionContextExt<'a>} + +impl<'input> ExpressionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ExpressionContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ExpressionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn booleanExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> ExpressionContextAttrs<'input> for ExpressionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn expression(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ExpressionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 112, RULE_expression); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule booleanExpression*/ + recog.base.set_state(1799); + recog.booleanExpression_rec(0)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- booleanExpression ---------------- +#[derive(Debug)] +pub enum BooleanExpressionContextAll<'input>{ + LogicalNotContext(LogicalNotContext<'input>), + PredicatedContext(PredicatedContext<'input>), + OrContext(OrContext<'input>), + AndContext(AndContext<'input>), +Error(BooleanExpressionContext<'input>) +} +antlr_rust::tid!{BooleanExpressionContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for BooleanExpressionContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for BooleanExpressionContextAll<'input>{} + +impl<'input> Deref for BooleanExpressionContextAll<'input>{ + type Target = dyn BooleanExpressionContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use BooleanExpressionContextAll::*; + match self{ + LogicalNotContext(inner) => inner, + PredicatedContext(inner) => inner, + OrContext(inner) => inner, + AndContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for BooleanExpressionContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type BooleanExpressionContext<'input> = BaseParserRuleContext<'input,BooleanExpressionContextExt<'input>>; + +#[derive(Clone)] +pub struct BooleanExpressionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for BooleanExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BooleanExpressionContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for BooleanExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_booleanExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_booleanExpression } +} +antlr_rust::tid!{BooleanExpressionContextExt<'a>} + +impl<'input> BooleanExpressionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BooleanExpressionContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,BooleanExpressionContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait BooleanExpressionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> BooleanExpressionContextAttrs<'input> for BooleanExpressionContext<'input>{} + +pub type LogicalNotContext<'input> = BaseParserRuleContext<'input,LogicalNotContextExt<'input>>; + +pub trait LogicalNotContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + fn booleanExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> LogicalNotContextAttrs<'input> for LogicalNotContext<'input>{} + +pub struct LogicalNotContextExt<'input>{ + base:BooleanExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{LogicalNotContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for LogicalNotContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LogicalNotContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_logicalNot(self); + } +} + +impl<'input> CustomRuleContext<'input> for LogicalNotContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_booleanExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_booleanExpression } +} + +impl<'input> Borrow> for LogicalNotContext<'input>{ + fn borrow(&self) -> &BooleanExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for LogicalNotContext<'input>{ + fn borrow_mut(&mut self) -> &mut BooleanExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> BooleanExpressionContextAttrs<'input> for LogicalNotContext<'input> {} + +impl<'input> LogicalNotContextExt<'input>{ + fn new(ctx: &dyn BooleanExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + BooleanExpressionContextAll::LogicalNotContext( + BaseParserRuleContext::copy_from(ctx,LogicalNotContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PredicatedContext<'input> = BaseParserRuleContext<'input,PredicatedContextExt<'input>>; + +pub trait PredicatedContextAttrs<'input>: PrestoParserContext<'input>{ + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn predicate(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> PredicatedContextAttrs<'input> for PredicatedContext<'input>{} + +pub struct PredicatedContextExt<'input>{ + base:BooleanExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PredicatedContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PredicatedContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PredicatedContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_predicated(self); + } +} + +impl<'input> CustomRuleContext<'input> for PredicatedContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_booleanExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_booleanExpression } +} + +impl<'input> Borrow> for PredicatedContext<'input>{ + fn borrow(&self) -> &BooleanExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PredicatedContext<'input>{ + fn borrow_mut(&mut self) -> &mut BooleanExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> BooleanExpressionContextAttrs<'input> for PredicatedContext<'input> {} + +impl<'input> PredicatedContextExt<'input>{ + fn new(ctx: &dyn BooleanExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + BooleanExpressionContextAll::PredicatedContext( + BaseParserRuleContext::copy_from(ctx,PredicatedContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type OrContext<'input> = BaseParserRuleContext<'input,OrContextExt<'input>>; + +pub trait OrContextAttrs<'input>: PrestoParserContext<'input>{ + fn booleanExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn booleanExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token OR + /// Returns `None` if there is no child corresponding to token OR + fn OR(&self) -> Option>> where Self:Sized{ + self.get_token(OR, 0) + } +} + +impl<'input> OrContextAttrs<'input> for OrContext<'input>{} + +pub struct OrContextExt<'input>{ + base:BooleanExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{OrContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for OrContext<'input>{} + +impl<'input,'a> Listenable + 'a> for OrContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_or(self); + } +} + +impl<'input> CustomRuleContext<'input> for OrContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_booleanExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_booleanExpression } +} + +impl<'input> Borrow> for OrContext<'input>{ + fn borrow(&self) -> &BooleanExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for OrContext<'input>{ + fn borrow_mut(&mut self) -> &mut BooleanExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> BooleanExpressionContextAttrs<'input> for OrContext<'input> {} + +impl<'input> OrContextExt<'input>{ + fn new(ctx: &dyn BooleanExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + BooleanExpressionContextAll::OrContext( + BaseParserRuleContext::copy_from(ctx,OrContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type AndContext<'input> = BaseParserRuleContext<'input,AndContextExt<'input>>; + +pub trait AndContextAttrs<'input>: PrestoParserContext<'input>{ + fn booleanExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn booleanExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token AND + /// Returns `None` if there is no child corresponding to token AND + fn AND(&self) -> Option>> where Self:Sized{ + self.get_token(AND, 0) + } +} + +impl<'input> AndContextAttrs<'input> for AndContext<'input>{} + +pub struct AndContextExt<'input>{ + base:BooleanExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{AndContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for AndContext<'input>{} + +impl<'input,'a> Listenable + 'a> for AndContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_and(self); + } +} + +impl<'input> CustomRuleContext<'input> for AndContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_booleanExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_booleanExpression } +} + +impl<'input> Borrow> for AndContext<'input>{ + fn borrow(&self) -> &BooleanExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for AndContext<'input>{ + fn borrow_mut(&mut self) -> &mut BooleanExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> BooleanExpressionContextAttrs<'input> for AndContext<'input> {} + +impl<'input> AndContextExt<'input>{ + fn new(ctx: &dyn BooleanExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + BooleanExpressionContextAll::AndContext( + BaseParserRuleContext::copy_from(ctx,AndContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn booleanExpression(&mut self,) + -> Result>,ANTLRError> { + self.booleanExpression_rec(0) + } + + fn booleanExpression_rec(&mut self, _p: isize) + -> Result>,ANTLRError> { + let recog = self; + let _parentctx = recog.ctx.take(); + let _parentState = recog.base.get_state(); + let mut _localctx = BooleanExpressionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_recursion_rule(_localctx.clone(), 114, RULE_booleanExpression, _p); + let mut _localctx: Rc = _localctx; + let mut _prevctx = _localctx.clone(); + let _startState = 114; + let result: Result<(), ANTLRError> = (|| { + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1808); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + T__1 | ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | + AT | AUTHORIZATION | BERNOULLI | BOTH | CALL | CASCADE | CASE | CAST | + CATALOGS | COLUMN | COLUMNS | COMMENT | COMMIT | COMMITTED | CONDITIONAL | + COUNT | COPARTITION | CURRENT | CURRENT_CATALOG | CURRENT_DATE | CURRENT_PATH | + CURRENT_SCHEMA | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | DATA | + DATE | DAY | DEFAULT | DEFINE | DEFINER | DENY | DESC | DESCRIPTOR | + DISTRIBUTED | DOUBLE | EMPTY | ENCODING | ERROR | EXCLUDING | EXISTS | + EXPLAIN | EXTRACT | FALSE | FETCH | FILTER | FINAL | FIRST | FOLLOWING | + FORMAT | FUNCTIONS | GRACE | GRANT | GRANTED | GRANTS | GRAPHVIZ | GROUPING | + GROUPS | HOUR | IF | IGNORE | INCLUDING | INITIAL | INPUT | INTERVAL | + INVOKER | IO | ISOLATION | JSON | JSON_ARRAY | JSON_EXISTS | JSON_OBJECT | + JSON_QUERY | JSON_VALUE | KEEP | KEY | KEYS | LAST | LATERAL | LEADING | + LEVEL | LIMIT | LISTAGG | LOCAL | LOCALTIME | LOCALTIMESTAMP | LOGICAL | + MAP | MATCH | MATCHED | MATCHES | MATCH_RECOGNIZE | MATERIALIZED | MEASURES | + MERGE | MINUTE | MONTH | NEXT | NFC | NFD | NFKC | NFKD | NO | NONE | + NORMALIZE | NULL | NULLIF | NULLS | OBJECT | OF | OFFSET | OMIT | ONE | + ONLY | OPTION | ORDINALITY | OUTPUT | OVER | OVERFLOW | PARTITION | PARTITIONS | + PASSING | PAST | PATH | PATTERN | PER | PERIOD | PERMUTE | POSITION | + PRECEDING | PRECISION | PRIVILEGES | PROPERTIES | PRUNE | QUOTES | RANGE | + READ | REFRESH | RENAME | REPEATABLE | REPLACE | RESET | RESPECT | RESTRICT | + RETURNING | REVOKE | ROLE | ROLES | ROLLBACK | ROW | ROWS | RUNNING | + SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | SERIALIZABLE | + SESSION | SET | SETS | SHOW | SOME | START | STATS | SUBSET | SUBSTRING | + SYSTEM | TABLES | TABLESAMPLE | TEXT | TEXT_STRING | TIES | TIME | TIMESTAMP | + TO | TRAILING | TRANSACTION | TRIM | TRUE | TRUNCATE | TRY_CAST | TYPE | + UNBOUNDED | UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | + UPDATE | USE | USER | UTF16 | UTF32 | UTF8 | VALIDATE | VALUE | VERBOSE | + VERSION | VIEW | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE | + YEAR | ZONE | PLUS | MINUS | QUESTION_MARK | STRING | UNICODE_STRING | + BINARY_LITERAL | INTEGER_VALUE | DECIMAL_VALUE | DOUBLE_VALUE | IDENTIFIER | + DIGIT_IDENTIFIER | QUOTED_IDENTIFIER | BACKQUOTED_IDENTIFIER + => { + { + let mut tmp = PredicatedContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + + + /*InvokeRule valueExpression*/ + recog.base.set_state(1802); + recog.valueExpression_rec(0)?; + + recog.base.set_state(1804); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(232,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule predicate*/ + recog.base.set_state(1803); + recog.predicate()?; + + } + } + + _ => {} + } + } + } + + NOT + => { + { + let mut tmp = LogicalNotContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1806); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(1807); + recog.booleanExpression_rec(3)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + + let tmp = recog.input.lt(-1).cloned(); + recog.ctx.as_ref().unwrap().set_stop(tmp); + recog.base.set_state(1818); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(235,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + recog.trigger_exit_rule_event(); + _prevctx = _localctx.clone(); + { + recog.base.set_state(1816); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(234,&mut recog.base)? { + 1 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = AndContextExt::new(&**BooleanExpressionContextExt::new(_parentctx.clone(), _parentState)); + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_booleanExpression); + _localctx = tmp; + recog.base.set_state(1810); + if !({recog.precpred(None, 2)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 2)".to_owned()), None))?; + } + recog.base.set_state(1811); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(1812); + recog.booleanExpression_rec(3)?; + + } + } + , + 2 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = OrContextExt::new(&**BooleanExpressionContextExt::new(_parentctx.clone(), _parentState)); + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_booleanExpression); + _localctx = tmp; + recog.base.set_state(1813); + if !({recog.precpred(None, 1)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 1)".to_owned()), None))?; + } + recog.base.set_state(1814); + recog.base.match_token(OR,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(1815); + recog.booleanExpression_rec(2)?; + + } + } + + _ => {} + } + } + } + recog.base.set_state(1820); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(235,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_) => {}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re)=>{ + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?;} + } + recog.base.unroll_recursion_context(_parentctx); + + Ok(_localctx) + } +} +//------------------- predicate ---------------- +#[derive(Debug)] +pub enum PredicateContextAll<'input>{ + ComparisonContext(ComparisonContext<'input>), + LikeContext(LikeContext<'input>), + InSubqueryContext(InSubqueryContext<'input>), + DistinctFromContext(DistinctFromContext<'input>), + InListContext(InListContext<'input>), + NullPredicateContext(NullPredicateContext<'input>), + BetweenContext(BetweenContext<'input>), + QuantifiedComparisonContext(QuantifiedComparisonContext<'input>), +Error(PredicateContext<'input>) +} +antlr_rust::tid!{PredicateContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for PredicateContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for PredicateContextAll<'input>{} + +impl<'input> Deref for PredicateContextAll<'input>{ + type Target = dyn PredicateContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use PredicateContextAll::*; + match self{ + ComparisonContext(inner) => inner, + LikeContext(inner) => inner, + InSubqueryContext(inner) => inner, + DistinctFromContext(inner) => inner, + InListContext(inner) => inner, + NullPredicateContext(inner) => inner, + BetweenContext(inner) => inner, + QuantifiedComparisonContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for PredicateContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type PredicateContext<'input> = BaseParserRuleContext<'input,PredicateContextExt<'input>>; + +#[derive(Clone)] +pub struct PredicateContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PredicateContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PredicateContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for PredicateContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} +antlr_rust::tid!{PredicateContextExt<'a>} + +impl<'input> PredicateContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + PredicateContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PredicateContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait PredicateContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> PredicateContextAttrs<'input> for PredicateContext<'input>{} + +pub type ComparisonContext<'input> = BaseParserRuleContext<'input,ComparisonContextExt<'input>>; + +pub trait ComparisonContextAttrs<'input>: PrestoParserContext<'input>{ + fn comparisonOperator(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ComparisonContextAttrs<'input> for ComparisonContext<'input>{} + +pub struct ComparisonContextExt<'input>{ + base:PredicateContextExt<'input>, + pub right: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ComparisonContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ComparisonContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ComparisonContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_comparison(self); + } +} + +impl<'input> CustomRuleContext<'input> for ComparisonContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for ComparisonContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ComparisonContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for ComparisonContext<'input> {} + +impl<'input> ComparisonContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::ComparisonContext( + BaseParserRuleContext::copy_from(ctx,ComparisonContextExt{ + right:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type LikeContext<'input> = BaseParserRuleContext<'input,LikeContextExt<'input>>; + +pub trait LikeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token LIKE + /// Returns `None` if there is no child corresponding to token LIKE + fn LIKE(&self) -> Option>> where Self:Sized{ + self.get_token(LIKE, 0) + } + fn valueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn valueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + /// Retrieves first TerminalNode corresponding to token ESCAPE + /// Returns `None` if there is no child corresponding to token ESCAPE + fn ESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(ESCAPE, 0) + } +} + +impl<'input> LikeContextAttrs<'input> for LikeContext<'input>{} + +pub struct LikeContextExt<'input>{ + base:PredicateContextExt<'input>, + pub pattern: Option>>, + pub escape: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{LikeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for LikeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LikeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_like(self); + } +} + +impl<'input> CustomRuleContext<'input> for LikeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for LikeContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for LikeContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for LikeContext<'input> {} + +impl<'input> LikeContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::LikeContext( + BaseParserRuleContext::copy_from(ctx,LikeContextExt{ + pattern:None, escape:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type InSubqueryContext<'input> = BaseParserRuleContext<'input,InSubqueryContextExt<'input>>; + +pub trait InSubqueryContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } +} + +impl<'input> InSubqueryContextAttrs<'input> for InSubqueryContext<'input>{} + +pub struct InSubqueryContextExt<'input>{ + base:PredicateContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{InSubqueryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for InSubqueryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for InSubqueryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_inSubquery(self); + } +} + +impl<'input> CustomRuleContext<'input> for InSubqueryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for InSubqueryContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for InSubqueryContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for InSubqueryContext<'input> {} + +impl<'input> InSubqueryContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::InSubqueryContext( + BaseParserRuleContext::copy_from(ctx,InSubqueryContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DistinctFromContext<'input> = BaseParserRuleContext<'input,DistinctFromContextExt<'input>>; + +pub trait DistinctFromContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token IS + /// Returns `None` if there is no child corresponding to token IS + fn IS(&self) -> Option>> where Self:Sized{ + self.get_token(IS, 0) + } + /// Retrieves first TerminalNode corresponding to token DISTINCT + /// Returns `None` if there is no child corresponding to token DISTINCT + fn DISTINCT(&self) -> Option>> where Self:Sized{ + self.get_token(DISTINCT, 0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } +} + +impl<'input> DistinctFromContextAttrs<'input> for DistinctFromContext<'input>{} + +pub struct DistinctFromContextExt<'input>{ + base:PredicateContextExt<'input>, + pub right: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DistinctFromContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DistinctFromContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DistinctFromContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_distinctFrom(self); + } +} + +impl<'input> CustomRuleContext<'input> for DistinctFromContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for DistinctFromContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DistinctFromContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for DistinctFromContext<'input> {} + +impl<'input> DistinctFromContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::DistinctFromContext( + BaseParserRuleContext::copy_from(ctx,DistinctFromContextExt{ + right:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type InListContext<'input> = BaseParserRuleContext<'input,InListContextExt<'input>>; + +pub trait InListContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> InListContextAttrs<'input> for InListContext<'input>{} + +pub struct InListContextExt<'input>{ + base:PredicateContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{InListContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for InListContext<'input>{} + +impl<'input,'a> Listenable + 'a> for InListContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_inList(self); + } +} + +impl<'input> CustomRuleContext<'input> for InListContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for InListContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for InListContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for InListContext<'input> {} + +impl<'input> InListContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::InListContext( + BaseParserRuleContext::copy_from(ctx,InListContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type NullPredicateContext<'input> = BaseParserRuleContext<'input,NullPredicateContextExt<'input>>; + +pub trait NullPredicateContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token IS + /// Returns `None` if there is no child corresponding to token IS + fn IS(&self) -> Option>> where Self:Sized{ + self.get_token(IS, 0) + } + /// Retrieves first TerminalNode corresponding to token NULL + /// Returns `None` if there is no child corresponding to token NULL + fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } +} + +impl<'input> NullPredicateContextAttrs<'input> for NullPredicateContext<'input>{} + +pub struct NullPredicateContextExt<'input>{ + base:PredicateContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{NullPredicateContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for NullPredicateContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NullPredicateContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_nullPredicate(self); + } +} + +impl<'input> CustomRuleContext<'input> for NullPredicateContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for NullPredicateContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for NullPredicateContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for NullPredicateContext<'input> {} + +impl<'input> NullPredicateContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::NullPredicateContext( + BaseParserRuleContext::copy_from(ctx,NullPredicateContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type BetweenContext<'input> = BaseParserRuleContext<'input,BetweenContextExt<'input>>; + +pub trait BetweenContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token BETWEEN + /// Returns `None` if there is no child corresponding to token BETWEEN + fn BETWEEN(&self) -> Option>> where Self:Sized{ + self.get_token(BETWEEN, 0) + } + /// Retrieves first TerminalNode corresponding to token AND + /// Returns `None` if there is no child corresponding to token AND + fn AND(&self) -> Option>> where Self:Sized{ + self.get_token(AND, 0) + } + fn valueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn valueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } +} + +impl<'input> BetweenContextAttrs<'input> for BetweenContext<'input>{} + +pub struct BetweenContextExt<'input>{ + base:PredicateContextExt<'input>, + pub lower: Option>>, + pub upper: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{BetweenContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for BetweenContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BetweenContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_between(self); + } +} + +impl<'input> CustomRuleContext<'input> for BetweenContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for BetweenContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for BetweenContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for BetweenContext<'input> {} + +impl<'input> BetweenContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::BetweenContext( + BaseParserRuleContext::copy_from(ctx,BetweenContextExt{ + lower:None, upper:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type QuantifiedComparisonContext<'input> = BaseParserRuleContext<'input,QuantifiedComparisonContextExt<'input>>; + +pub trait QuantifiedComparisonContextAttrs<'input>: PrestoParserContext<'input>{ + fn comparisonOperator(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn comparisonQuantifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> QuantifiedComparisonContextAttrs<'input> for QuantifiedComparisonContext<'input>{} + +pub struct QuantifiedComparisonContextExt<'input>{ + base:PredicateContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{QuantifiedComparisonContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for QuantifiedComparisonContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QuantifiedComparisonContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_quantifiedComparison(self); + } +} + +impl<'input> CustomRuleContext<'input> for QuantifiedComparisonContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_predicate } + //fn type_rule_index() -> usize where Self: Sized { RULE_predicate } +} + +impl<'input> Borrow> for QuantifiedComparisonContext<'input>{ + fn borrow(&self) -> &PredicateContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for QuantifiedComparisonContext<'input>{ + fn borrow_mut(&mut self) -> &mut PredicateContextExt<'input> { &mut self.base } +} + +impl<'input> PredicateContextAttrs<'input> for QuantifiedComparisonContext<'input> {} + +impl<'input> QuantifiedComparisonContextExt<'input>{ + fn new(ctx: &dyn PredicateContextAttrs<'input>) -> Rc> { + Rc::new( + PredicateContextAll::QuantifiedComparisonContext( + BaseParserRuleContext::copy_from(ctx,QuantifiedComparisonContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn predicate(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PredicateContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 116, RULE_predicate); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(1882); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(244,&mut recog.base)? { + 1 =>{ + let tmp = ComparisonContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule comparisonOperator*/ + recog.base.set_state(1821); + recog.comparisonOperator()?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1822); + let tmp = recog.valueExpression_rec(0)?; + if let PredicateContextAll::ComparisonContext(ctx) = cast_mut::<_,PredicateContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 2 =>{ + let tmp = QuantifiedComparisonContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + /*InvokeRule comparisonOperator*/ + recog.base.set_state(1824); + recog.comparisonOperator()?; + + /*InvokeRule comparisonQuantifier*/ + recog.base.set_state(1825); + recog.comparisonQuantifier()?; + + recog.base.set_state(1826); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(1827); + recog.query()?; + + recog.base.set_state(1828); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + let tmp = BetweenContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(1831); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NOT { + { + recog.base.set_state(1830); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1833); + recog.base.match_token(BETWEEN,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1834); + let tmp = recog.valueExpression_rec(0)?; + if let PredicateContextAll::BetweenContext(ctx) = cast_mut::<_,PredicateContextAll >(&mut _localctx){ + ctx.lower = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(1835); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1836); + let tmp = recog.valueExpression_rec(0)?; + if let PredicateContextAll::BetweenContext(ctx) = cast_mut::<_,PredicateContextAll >(&mut _localctx){ + ctx.upper = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 4 =>{ + let tmp = InListContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(1839); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NOT { + { + recog.base.set_state(1838); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1841); + recog.base.match_token(IN,&mut recog.err_handler)?; + + recog.base.set_state(1842); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1843); + recog.expression()?; + + recog.base.set_state(1848); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1844); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1845); + recog.expression()?; + + } + } + recog.base.set_state(1850); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1851); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 5 =>{ + let tmp = InSubqueryContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 5); + _localctx = tmp; + { + recog.base.set_state(1854); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NOT { + { + recog.base.set_state(1853); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1856); + recog.base.match_token(IN,&mut recog.err_handler)?; + + recog.base.set_state(1857); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(1858); + recog.query()?; + + recog.base.set_state(1859); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 6 =>{ + let tmp = LikeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 6); + _localctx = tmp; + { + recog.base.set_state(1862); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NOT { + { + recog.base.set_state(1861); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1864); + recog.base.match_token(LIKE,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1865); + let tmp = recog.valueExpression_rec(0)?; + if let PredicateContextAll::LikeContext(ctx) = cast_mut::<_,PredicateContextAll >(&mut _localctx){ + ctx.pattern = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(1868); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(241,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(1866); + recog.base.match_token(ESCAPE,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1867); + let tmp = recog.valueExpression_rec(0)?; + if let PredicateContextAll::LikeContext(ctx) = cast_mut::<_,PredicateContextAll >(&mut _localctx){ + ctx.escape = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + , + 7 =>{ + let tmp = NullPredicateContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 7); + _localctx = tmp; + { + recog.base.set_state(1870); + recog.base.match_token(IS,&mut recog.err_handler)?; + + recog.base.set_state(1872); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NOT { + { + recog.base.set_state(1871); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1874); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + , + 8 =>{ + let tmp = DistinctFromContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 8); + _localctx = tmp; + { + recog.base.set_state(1875); + recog.base.match_token(IS,&mut recog.err_handler)?; + + recog.base.set_state(1877); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==NOT { + { + recog.base.set_state(1876); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1879); + recog.base.match_token(DISTINCT,&mut recog.err_handler)?; + + recog.base.set_state(1880); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1881); + let tmp = recog.valueExpression_rec(0)?; + if let PredicateContextAll::DistinctFromContext(ctx) = cast_mut::<_,PredicateContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- valueExpression ---------------- +#[derive(Debug)] +pub enum ValueExpressionContextAll<'input>{ + ValueExpressionDefaultContext(ValueExpressionDefaultContext<'input>), + ConcatenationContext(ConcatenationContext<'input>), + ArithmeticBinaryContext(ArithmeticBinaryContext<'input>), + ArithmeticUnaryContext(ArithmeticUnaryContext<'input>), + AtTimeZoneContext(AtTimeZoneContext<'input>), +Error(ValueExpressionContext<'input>) +} +antlr_rust::tid!{ValueExpressionContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for ValueExpressionContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for ValueExpressionContextAll<'input>{} + +impl<'input> Deref for ValueExpressionContextAll<'input>{ + type Target = dyn ValueExpressionContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use ValueExpressionContextAll::*; + match self{ + ValueExpressionDefaultContext(inner) => inner, + ConcatenationContext(inner) => inner, + ArithmeticBinaryContext(inner) => inner, + ArithmeticUnaryContext(inner) => inner, + AtTimeZoneContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for ValueExpressionContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type ValueExpressionContext<'input> = BaseParserRuleContext<'input,ValueExpressionContextExt<'input>>; + +#[derive(Clone)] +pub struct ValueExpressionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ValueExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ValueExpressionContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for ValueExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_valueExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_valueExpression } +} +antlr_rust::tid!{ValueExpressionContextExt<'a>} + +impl<'input> ValueExpressionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + ValueExpressionContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ValueExpressionContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait ValueExpressionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> ValueExpressionContextAttrs<'input> for ValueExpressionContext<'input>{} + +pub type ValueExpressionDefaultContext<'input> = BaseParserRuleContext<'input,ValueExpressionDefaultContextExt<'input>>; + +pub trait ValueExpressionDefaultContextAttrs<'input>: PrestoParserContext<'input>{ + fn primaryExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ValueExpressionDefaultContextAttrs<'input> for ValueExpressionDefaultContext<'input>{} + +pub struct ValueExpressionDefaultContextExt<'input>{ + base:ValueExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ValueExpressionDefaultContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ValueExpressionDefaultContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ValueExpressionDefaultContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_valueExpressionDefault(self); + } +} + +impl<'input> CustomRuleContext<'input> for ValueExpressionDefaultContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_valueExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_valueExpression } +} + +impl<'input> Borrow> for ValueExpressionDefaultContext<'input>{ + fn borrow(&self) -> &ValueExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ValueExpressionDefaultContext<'input>{ + fn borrow_mut(&mut self) -> &mut ValueExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> ValueExpressionContextAttrs<'input> for ValueExpressionDefaultContext<'input> {} + +impl<'input> ValueExpressionDefaultContextExt<'input>{ + fn new(ctx: &dyn ValueExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + ValueExpressionContextAll::ValueExpressionDefaultContext( + BaseParserRuleContext::copy_from(ctx,ValueExpressionDefaultContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ConcatenationContext<'input> = BaseParserRuleContext<'input,ConcatenationContextExt<'input>>; + +pub trait ConcatenationContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CONCAT + /// Returns `None` if there is no child corresponding to token CONCAT + fn CONCAT(&self) -> Option>> where Self:Sized{ + self.get_token(CONCAT, 0) + } + fn valueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn valueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> ConcatenationContextAttrs<'input> for ConcatenationContext<'input>{} + +pub struct ConcatenationContextExt<'input>{ + base:ValueExpressionContextExt<'input>, + pub left: Option>>, + pub right: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ConcatenationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ConcatenationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ConcatenationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_concatenation(self); + } +} + +impl<'input> CustomRuleContext<'input> for ConcatenationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_valueExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_valueExpression } +} + +impl<'input> Borrow> for ConcatenationContext<'input>{ + fn borrow(&self) -> &ValueExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ConcatenationContext<'input>{ + fn borrow_mut(&mut self) -> &mut ValueExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> ValueExpressionContextAttrs<'input> for ConcatenationContext<'input> {} + +impl<'input> ConcatenationContextExt<'input>{ + fn new(ctx: &dyn ValueExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + ValueExpressionContextAll::ConcatenationContext( + BaseParserRuleContext::copy_from(ctx,ConcatenationContextExt{ + left:None, right:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ArithmeticBinaryContext<'input> = BaseParserRuleContext<'input,ArithmeticBinaryContextExt<'input>>; + +pub trait ArithmeticBinaryContextAttrs<'input>: PrestoParserContext<'input>{ + fn valueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn valueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ASTERISK + /// Returns `None` if there is no child corresponding to token ASTERISK + fn ASTERISK(&self) -> Option>> where Self:Sized{ + self.get_token(ASTERISK, 0) + } + /// Retrieves first TerminalNode corresponding to token SLASH + /// Returns `None` if there is no child corresponding to token SLASH + fn SLASH(&self) -> Option>> where Self:Sized{ + self.get_token(SLASH, 0) + } + /// Retrieves first TerminalNode corresponding to token PERCENT + /// Returns `None` if there is no child corresponding to token PERCENT + fn PERCENT(&self) -> Option>> where Self:Sized{ + self.get_token(PERCENT, 0) + } + /// Retrieves first TerminalNode corresponding to token PLUS + /// Returns `None` if there is no child corresponding to token PLUS + fn PLUS(&self) -> Option>> where Self:Sized{ + self.get_token(PLUS, 0) + } + /// Retrieves first TerminalNode corresponding to token MINUS + /// Returns `None` if there is no child corresponding to token MINUS + fn MINUS(&self) -> Option>> where Self:Sized{ + self.get_token(MINUS, 0) + } +} + +impl<'input> ArithmeticBinaryContextAttrs<'input> for ArithmeticBinaryContext<'input>{} + +pub struct ArithmeticBinaryContextExt<'input>{ + base:ValueExpressionContextExt<'input>, + pub left: Option>>, + pub operator: Option>, + pub right: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ArithmeticBinaryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ArithmeticBinaryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ArithmeticBinaryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_arithmeticBinary(self); + } +} + +impl<'input> CustomRuleContext<'input> for ArithmeticBinaryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_valueExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_valueExpression } +} + +impl<'input> Borrow> for ArithmeticBinaryContext<'input>{ + fn borrow(&self) -> &ValueExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ArithmeticBinaryContext<'input>{ + fn borrow_mut(&mut self) -> &mut ValueExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> ValueExpressionContextAttrs<'input> for ArithmeticBinaryContext<'input> {} + +impl<'input> ArithmeticBinaryContextExt<'input>{ + fn new(ctx: &dyn ValueExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + ValueExpressionContextAll::ArithmeticBinaryContext( + BaseParserRuleContext::copy_from(ctx,ArithmeticBinaryContextExt{ + operator:None, + left:None, right:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ArithmeticUnaryContext<'input> = BaseParserRuleContext<'input,ArithmeticUnaryContextExt<'input>>; + +pub trait ArithmeticUnaryContextAttrs<'input>: PrestoParserContext<'input>{ + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token MINUS + /// Returns `None` if there is no child corresponding to token MINUS + fn MINUS(&self) -> Option>> where Self:Sized{ + self.get_token(MINUS, 0) + } + /// Retrieves first TerminalNode corresponding to token PLUS + /// Returns `None` if there is no child corresponding to token PLUS + fn PLUS(&self) -> Option>> where Self:Sized{ + self.get_token(PLUS, 0) + } +} + +impl<'input> ArithmeticUnaryContextAttrs<'input> for ArithmeticUnaryContext<'input>{} + +pub struct ArithmeticUnaryContextExt<'input>{ + base:ValueExpressionContextExt<'input>, + pub operator: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ArithmeticUnaryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ArithmeticUnaryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ArithmeticUnaryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_arithmeticUnary(self); + } +} + +impl<'input> CustomRuleContext<'input> for ArithmeticUnaryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_valueExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_valueExpression } +} + +impl<'input> Borrow> for ArithmeticUnaryContext<'input>{ + fn borrow(&self) -> &ValueExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ArithmeticUnaryContext<'input>{ + fn borrow_mut(&mut self) -> &mut ValueExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> ValueExpressionContextAttrs<'input> for ArithmeticUnaryContext<'input> {} + +impl<'input> ArithmeticUnaryContextExt<'input>{ + fn new(ctx: &dyn ValueExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + ValueExpressionContextAll::ArithmeticUnaryContext( + BaseParserRuleContext::copy_from(ctx,ArithmeticUnaryContextExt{ + operator:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type AtTimeZoneContext<'input> = BaseParserRuleContext<'input,AtTimeZoneContextExt<'input>>; + +pub trait AtTimeZoneContextAttrs<'input>: PrestoParserContext<'input>{ + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AT + /// Returns `None` if there is no child corresponding to token AT + fn AT(&self) -> Option>> where Self:Sized{ + self.get_token(AT, 0) + } + fn timeZoneSpecifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> AtTimeZoneContextAttrs<'input> for AtTimeZoneContext<'input>{} + +pub struct AtTimeZoneContextExt<'input>{ + base:ValueExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{AtTimeZoneContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for AtTimeZoneContext<'input>{} + +impl<'input,'a> Listenable + 'a> for AtTimeZoneContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_atTimeZone(self); + } +} + +impl<'input> CustomRuleContext<'input> for AtTimeZoneContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_valueExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_valueExpression } +} + +impl<'input> Borrow> for AtTimeZoneContext<'input>{ + fn borrow(&self) -> &ValueExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for AtTimeZoneContext<'input>{ + fn borrow_mut(&mut self) -> &mut ValueExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> ValueExpressionContextAttrs<'input> for AtTimeZoneContext<'input> {} + +impl<'input> AtTimeZoneContextExt<'input>{ + fn new(ctx: &dyn ValueExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + ValueExpressionContextAll::AtTimeZoneContext( + BaseParserRuleContext::copy_from(ctx,AtTimeZoneContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn valueExpression(&mut self,) + -> Result>,ANTLRError> { + self.valueExpression_rec(0) + } + + fn valueExpression_rec(&mut self, _p: isize) + -> Result>,ANTLRError> { + let recog = self; + let _parentctx = recog.ctx.take(); + let _parentState = recog.base.get_state(); + let mut _localctx = ValueExpressionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_recursion_rule(_localctx.clone(), 118, RULE_valueExpression, _p); + let mut _localctx: Rc = _localctx; + let mut _prevctx = _localctx.clone(); + let _startState = 118; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(1888); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(245,&mut recog.base)? { + 1 =>{ + { + let mut tmp = ValueExpressionDefaultContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + + + /*InvokeRule primaryExpression*/ + recog.base.set_state(1885); + recog.primaryExpression_rec(0)?; + + } + } + , + 2 =>{ + { + let mut tmp = ArithmeticUnaryContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1886); + if let ValueExpressionContextAll::ArithmeticUnaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.operator = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(_la==PLUS || _la==MINUS) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let ValueExpressionContextAll::ArithmeticUnaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.operator = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + /*InvokeRule valueExpression*/ + recog.base.set_state(1887); + recog.valueExpression_rec(4)?; + + } + } + + _ => {} + } + + let tmp = recog.input.lt(-1).cloned(); + recog.ctx.as_ref().unwrap().set_stop(tmp); + recog.base.set_state(1904); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(247,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + recog.trigger_exit_rule_event(); + _prevctx = _localctx.clone(); + { + recog.base.set_state(1902); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(246,&mut recog.base)? { + 1 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = ArithmeticBinaryContextExt::new(&**ValueExpressionContextExt::new(_parentctx.clone(), _parentState)); + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut tmp){ + ctx.left = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_valueExpression); + _localctx = tmp; + recog.base.set_state(1890); + if !({recog.precpred(None, 3)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 3)".to_owned()), None))?; + } + recog.base.set_state(1891); + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.operator = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(((((_la - 299)) & !0x3f) == 0 && ((1usize << (_la - 299)) & ((1usize << (ASTERISK - 299)) | (1usize << (SLASH - 299)) | (1usize << (PERCENT - 299)))) != 0)) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.operator = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + /*InvokeRule valueExpression*/ + recog.base.set_state(1892); + let tmp = recog.valueExpression_rec(4)?; + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 2 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = ArithmeticBinaryContextExt::new(&**ValueExpressionContextExt::new(_parentctx.clone(), _parentState)); + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut tmp){ + ctx.left = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_valueExpression); + _localctx = tmp; + recog.base.set_state(1893); + if !({recog.precpred(None, 2)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 2)".to_owned()), None))?; + } + recog.base.set_state(1894); + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.operator = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(_la==PLUS || _la==MINUS) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.operator = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + /*InvokeRule valueExpression*/ + recog.base.set_state(1895); + let tmp = recog.valueExpression_rec(3)?; + if let ValueExpressionContextAll::ArithmeticBinaryContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 3 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = ConcatenationContextExt::new(&**ValueExpressionContextExt::new(_parentctx.clone(), _parentState)); + if let ValueExpressionContextAll::ConcatenationContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut tmp){ + ctx.left = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_valueExpression); + _localctx = tmp; + recog.base.set_state(1896); + if !({recog.precpred(None, 1)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 1)".to_owned()), None))?; + } + recog.base.set_state(1897); + recog.base.match_token(CONCAT,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1898); + let tmp = recog.valueExpression_rec(2)?; + if let ValueExpressionContextAll::ConcatenationContext(ctx) = cast_mut::<_,ValueExpressionContextAll >(&mut _localctx){ + ctx.right = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + , + 4 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = AtTimeZoneContextExt::new(&**ValueExpressionContextExt::new(_parentctx.clone(), _parentState)); + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_valueExpression); + _localctx = tmp; + recog.base.set_state(1899); + if !({recog.precpred(None, 5)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 5)".to_owned()), None))?; + } + recog.base.set_state(1900); + recog.base.match_token(AT,&mut recog.err_handler)?; + + /*InvokeRule timeZoneSpecifier*/ + recog.base.set_state(1901); + recog.timeZoneSpecifier()?; + + } + } + + _ => {} + } + } + } + recog.base.set_state(1906); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(247,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_) => {}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re)=>{ + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?;} + } + recog.base.unroll_recursion_context(_parentctx); + + Ok(_localctx) + } +} +//------------------- primaryExpression ---------------- +#[derive(Debug)] +pub enum PrimaryExpressionContextAll<'input>{ + DereferenceContext(DereferenceContext<'input>), + TypeConstructorContext(TypeConstructorContext<'input>), + JsonValueContext(JsonValueContext<'input>), + SpecialDateTimeFunctionContext(SpecialDateTimeFunctionContext<'input>), + SubstringContext(SubstringContext<'input>), + CastContext(CastContext<'input>), + LambdaContext(LambdaContext<'input>), + ParenthesizedExpressionContext(ParenthesizedExpressionContext<'input>), + TrimContext(TrimContext<'input>), + ParameterContext(ParameterContext<'input>), + NormalizeContext(NormalizeContext<'input>), + JsonObjectContext(JsonObjectContext<'input>), + IntervalLiteralContext(IntervalLiteralContext<'input>), + NumericLiteralContext(NumericLiteralContext<'input>), + BooleanLiteralContext(BooleanLiteralContext<'input>), + JsonArrayContext(JsonArrayContext<'input>), + SimpleCaseContext(SimpleCaseContext<'input>), + ColumnReferenceContext(ColumnReferenceContext<'input>), + NullLiteralContext(NullLiteralContext<'input>), + RowConstructorContext(RowConstructorContext<'input>), + SubscriptContext(SubscriptContext<'input>), + JsonExistsContext(JsonExistsContext<'input>), + CurrentPathContext(CurrentPathContext<'input>), + SubqueryExpressionContext(SubqueryExpressionContext<'input>), + BinaryLiteralContext(BinaryLiteralContext<'input>), + CurrentUserContext(CurrentUserContext<'input>), + JsonQueryContext(JsonQueryContext<'input>), + MeasureContext(MeasureContext<'input>), + ExtractContext(ExtractContext<'input>), + StringLiteralContext(StringLiteralContext<'input>), + ArrayConstructorContext(ArrayConstructorContext<'input>), + FunctionCallContext(FunctionCallContext<'input>), + CurrentSchemaContext(CurrentSchemaContext<'input>), + ExistsContext(ExistsContext<'input>), + PositionContext(PositionContext<'input>), + ListaggContext(ListaggContext<'input>), + SearchedCaseContext(SearchedCaseContext<'input>), + CurrentCatalogContext(CurrentCatalogContext<'input>), + GroupingOperationContext(GroupingOperationContext<'input>), +Error(PrimaryExpressionContext<'input>) +} +antlr_rust::tid!{PrimaryExpressionContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for PrimaryExpressionContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for PrimaryExpressionContextAll<'input>{} + +impl<'input> Deref for PrimaryExpressionContextAll<'input>{ + type Target = dyn PrimaryExpressionContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use PrimaryExpressionContextAll::*; + match self{ + DereferenceContext(inner) => inner, + TypeConstructorContext(inner) => inner, + JsonValueContext(inner) => inner, + SpecialDateTimeFunctionContext(inner) => inner, + SubstringContext(inner) => inner, + CastContext(inner) => inner, + LambdaContext(inner) => inner, + ParenthesizedExpressionContext(inner) => inner, + TrimContext(inner) => inner, + ParameterContext(inner) => inner, + NormalizeContext(inner) => inner, + JsonObjectContext(inner) => inner, + IntervalLiteralContext(inner) => inner, + NumericLiteralContext(inner) => inner, + BooleanLiteralContext(inner) => inner, + JsonArrayContext(inner) => inner, + SimpleCaseContext(inner) => inner, + ColumnReferenceContext(inner) => inner, + NullLiteralContext(inner) => inner, + RowConstructorContext(inner) => inner, + SubscriptContext(inner) => inner, + JsonExistsContext(inner) => inner, + CurrentPathContext(inner) => inner, + SubqueryExpressionContext(inner) => inner, + BinaryLiteralContext(inner) => inner, + CurrentUserContext(inner) => inner, + JsonQueryContext(inner) => inner, + MeasureContext(inner) => inner, + ExtractContext(inner) => inner, + StringLiteralContext(inner) => inner, + ArrayConstructorContext(inner) => inner, + FunctionCallContext(inner) => inner, + CurrentSchemaContext(inner) => inner, + ExistsContext(inner) => inner, + PositionContext(inner) => inner, + ListaggContext(inner) => inner, + SearchedCaseContext(inner) => inner, + CurrentCatalogContext(inner) => inner, + GroupingOperationContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for PrimaryExpressionContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type PrimaryExpressionContext<'input> = BaseParserRuleContext<'input,PrimaryExpressionContextExt<'input>>; + +#[derive(Clone)] +pub struct PrimaryExpressionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PrimaryExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PrimaryExpressionContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for PrimaryExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} +antlr_rust::tid!{PrimaryExpressionContextExt<'a>} + +impl<'input> PrimaryExpressionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PrimaryExpressionContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait PrimaryExpressionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for PrimaryExpressionContext<'input>{} + +pub type DereferenceContext<'input> = BaseParserRuleContext<'input,DereferenceContextExt<'input>>; + +pub trait DereferenceContextAttrs<'input>: PrestoParserContext<'input>{ + fn primaryExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> DereferenceContextAttrs<'input> for DereferenceContext<'input>{} + +pub struct DereferenceContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub base_: Option>>, + pub fieldName: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DereferenceContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DereferenceContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DereferenceContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dereference(self); + } +} + +impl<'input> CustomRuleContext<'input> for DereferenceContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for DereferenceContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DereferenceContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for DereferenceContext<'input> {} + +impl<'input> DereferenceContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::DereferenceContext( + BaseParserRuleContext::copy_from(ctx,DereferenceContextExt{ + base_:None, fieldName:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TypeConstructorContext<'input> = BaseParserRuleContext<'input,TypeConstructorContextExt<'input>>; + +pub trait TypeConstructorContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token DOUBLE + /// Returns `None` if there is no child corresponding to token DOUBLE + fn DOUBLE(&self) -> Option>> where Self:Sized{ + self.get_token(DOUBLE, 0) + } + /// Retrieves first TerminalNode corresponding to token PRECISION + /// Returns `None` if there is no child corresponding to token PRECISION + fn PRECISION(&self) -> Option>> where Self:Sized{ + self.get_token(PRECISION, 0) + } +} + +impl<'input> TypeConstructorContextAttrs<'input> for TypeConstructorContext<'input>{} + +pub struct TypeConstructorContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TypeConstructorContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TypeConstructorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TypeConstructorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_typeConstructor(self); + } +} + +impl<'input> CustomRuleContext<'input> for TypeConstructorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for TypeConstructorContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TypeConstructorContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for TypeConstructorContext<'input> {} + +impl<'input> TypeConstructorContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::TypeConstructorContext( + BaseParserRuleContext::copy_from(ctx,TypeConstructorContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type JsonValueContext<'input> = BaseParserRuleContext<'input,JsonValueContextExt<'input>>; + +pub trait JsonValueContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token JSON_VALUE + /// Returns `None` if there is no child corresponding to token JSON_VALUE + fn JSON_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(JSON_VALUE, 0) + } + fn jsonPathInvocation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token RETURNING + /// Returns `None` if there is no child corresponding to token RETURNING + fn RETURNING(&self) -> Option>> where Self:Sized{ + self.get_token(RETURNING, 0) + } + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token ON in current rule + fn ON_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token ON, starting from 0. + /// Returns `None` if number of children corresponding to token ON is less or equal than `i`. + fn ON(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(ON, i) + } + /// Retrieves first TerminalNode corresponding to token EMPTY + /// Returns `None` if there is no child corresponding to token EMPTY + fn EMPTY(&self) -> Option>> where Self:Sized{ + self.get_token(EMPTY, 0) + } + /// Retrieves first TerminalNode corresponding to token ERROR + /// Returns `None` if there is no child corresponding to token ERROR + fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) + } + fn jsonValueBehavior_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn jsonValueBehavior(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> JsonValueContextAttrs<'input> for JsonValueContext<'input>{} + +pub struct JsonValueContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub emptyBehavior: Option>>, + pub errorBehavior: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{JsonValueContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for JsonValueContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonValueContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonValue(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonValueContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for JsonValueContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for JsonValueContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for JsonValueContext<'input> {} + +impl<'input> JsonValueContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::JsonValueContext( + BaseParserRuleContext::copy_from(ctx,JsonValueContextExt{ + emptyBehavior:None, errorBehavior:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SpecialDateTimeFunctionContext<'input> = BaseParserRuleContext<'input,SpecialDateTimeFunctionContextExt<'input>>; + +pub trait SpecialDateTimeFunctionContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT_DATE + /// Returns `None` if there is no child corresponding to token CURRENT_DATE + fn CURRENT_DATE(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_DATE, 0) + } + /// Retrieves first TerminalNode corresponding to token CURRENT_TIME + /// Returns `None` if there is no child corresponding to token CURRENT_TIME + fn CURRENT_TIME(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_TIME, 0) + } + /// Retrieves first TerminalNode corresponding to token INTEGER_VALUE + /// Returns `None` if there is no child corresponding to token INTEGER_VALUE + fn INTEGER_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(INTEGER_VALUE, 0) + } + /// Retrieves first TerminalNode corresponding to token CURRENT_TIMESTAMP + /// Returns `None` if there is no child corresponding to token CURRENT_TIMESTAMP + fn CURRENT_TIMESTAMP(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_TIMESTAMP, 0) + } + /// Retrieves first TerminalNode corresponding to token LOCALTIME + /// Returns `None` if there is no child corresponding to token LOCALTIME + fn LOCALTIME(&self) -> Option>> where Self:Sized{ + self.get_token(LOCALTIME, 0) + } + /// Retrieves first TerminalNode corresponding to token LOCALTIMESTAMP + /// Returns `None` if there is no child corresponding to token LOCALTIMESTAMP + fn LOCALTIMESTAMP(&self) -> Option>> where Self:Sized{ + self.get_token(LOCALTIMESTAMP, 0) + } +} + +impl<'input> SpecialDateTimeFunctionContextAttrs<'input> for SpecialDateTimeFunctionContext<'input>{} + +pub struct SpecialDateTimeFunctionContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub name: Option>, + pub precision: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SpecialDateTimeFunctionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SpecialDateTimeFunctionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SpecialDateTimeFunctionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_specialDateTimeFunction(self); + } +} + +impl<'input> CustomRuleContext<'input> for SpecialDateTimeFunctionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for SpecialDateTimeFunctionContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SpecialDateTimeFunctionContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for SpecialDateTimeFunctionContext<'input> {} + +impl<'input> SpecialDateTimeFunctionContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::SpecialDateTimeFunctionContext( + BaseParserRuleContext::copy_from(ctx,SpecialDateTimeFunctionContextExt{ + name:None, precision:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SubstringContext<'input> = BaseParserRuleContext<'input,SubstringContextExt<'input>>; + +pub trait SubstringContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SUBSTRING + /// Returns `None` if there is no child corresponding to token SUBSTRING + fn SUBSTRING(&self) -> Option>> where Self:Sized{ + self.get_token(SUBSTRING, 0) + } + fn valueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn valueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + /// Retrieves first TerminalNode corresponding to token FOR + /// Returns `None` if there is no child corresponding to token FOR + fn FOR(&self) -> Option>> where Self:Sized{ + self.get_token(FOR, 0) + } +} + +impl<'input> SubstringContextAttrs<'input> for SubstringContext<'input>{} + +pub struct SubstringContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SubstringContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SubstringContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SubstringContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_substring(self); + } +} + +impl<'input> CustomRuleContext<'input> for SubstringContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for SubstringContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SubstringContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for SubstringContext<'input> {} + +impl<'input> SubstringContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::SubstringContext( + BaseParserRuleContext::copy_from(ctx,SubstringContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CastContext<'input> = BaseParserRuleContext<'input,CastContextExt<'input>>; + +pub trait CastContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CAST + /// Returns `None` if there is no child corresponding to token CAST + fn CAST(&self) -> Option>> where Self:Sized{ + self.get_token(CAST, 0) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token AS + /// Returns `None` if there is no child corresponding to token AS + fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) + } + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token TRY_CAST + /// Returns `None` if there is no child corresponding to token TRY_CAST + fn TRY_CAST(&self) -> Option>> where Self:Sized{ + self.get_token(TRY_CAST, 0) + } +} + +impl<'input> CastContextAttrs<'input> for CastContext<'input>{} + +pub struct CastContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CastContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CastContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CastContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_cast(self); + } +} + +impl<'input> CustomRuleContext<'input> for CastContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for CastContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CastContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for CastContext<'input> {} + +impl<'input> CastContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::CastContext( + BaseParserRuleContext::copy_from(ctx,CastContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type LambdaContext<'input> = BaseParserRuleContext<'input,LambdaContextExt<'input>>; + +pub trait LambdaContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> LambdaContextAttrs<'input> for LambdaContext<'input>{} + +pub struct LambdaContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{LambdaContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for LambdaContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LambdaContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_lambda(self); + } +} + +impl<'input> CustomRuleContext<'input> for LambdaContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for LambdaContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for LambdaContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for LambdaContext<'input> {} + +impl<'input> LambdaContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::LambdaContext( + BaseParserRuleContext::copy_from(ctx,LambdaContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ParenthesizedExpressionContext<'input> = BaseParserRuleContext<'input,ParenthesizedExpressionContextExt<'input>>; + +pub trait ParenthesizedExpressionContextAttrs<'input>: PrestoParserContext<'input>{ + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ParenthesizedExpressionContextAttrs<'input> for ParenthesizedExpressionContext<'input>{} + +pub struct ParenthesizedExpressionContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ParenthesizedExpressionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ParenthesizedExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ParenthesizedExpressionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_parenthesizedExpression(self); + } +} + +impl<'input> CustomRuleContext<'input> for ParenthesizedExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for ParenthesizedExpressionContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ParenthesizedExpressionContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for ParenthesizedExpressionContext<'input> {} + +impl<'input> ParenthesizedExpressionContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::ParenthesizedExpressionContext( + BaseParserRuleContext::copy_from(ctx,ParenthesizedExpressionContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TrimContext<'input> = BaseParserRuleContext<'input,TrimContextExt<'input>>; + +pub trait TrimContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TRIM + /// Returns `None` if there is no child corresponding to token TRIM + fn TRIM(&self) -> Option>> where Self:Sized{ + self.get_token(TRIM, 0) + } + fn valueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn valueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + fn trimsSpecification(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token COMMA + /// Returns `None` if there is no child corresponding to token COMMA + fn COMMA(&self) -> Option>> where Self:Sized{ + self.get_token(COMMA, 0) + } +} + +impl<'input> TrimContextAttrs<'input> for TrimContext<'input>{} + +pub struct TrimContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub trimChar: Option>>, + pub trimSource: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TrimContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TrimContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TrimContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_trim(self); + } +} + +impl<'input> CustomRuleContext<'input> for TrimContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for TrimContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TrimContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for TrimContext<'input> {} + +impl<'input> TrimContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::TrimContext( + BaseParserRuleContext::copy_from(ctx,TrimContextExt{ + trimChar:None, trimSource:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ParameterContext<'input> = BaseParserRuleContext<'input,ParameterContextExt<'input>>; + +pub trait ParameterContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token QUESTION_MARK + /// Returns `None` if there is no child corresponding to token QUESTION_MARK + fn QUESTION_MARK(&self) -> Option>> where Self:Sized{ + self.get_token(QUESTION_MARK, 0) + } +} + +impl<'input> ParameterContextAttrs<'input> for ParameterContext<'input>{} + +pub struct ParameterContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ParameterContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ParameterContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ParameterContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_parameter(self); + } +} + +impl<'input> CustomRuleContext<'input> for ParameterContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for ParameterContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ParameterContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for ParameterContext<'input> {} + +impl<'input> ParameterContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::ParameterContext( + BaseParserRuleContext::copy_from(ctx,ParameterContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type NormalizeContext<'input> = BaseParserRuleContext<'input,NormalizeContextExt<'input>>; + +pub trait NormalizeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token NORMALIZE + /// Returns `None` if there is no child corresponding to token NORMALIZE + fn NORMALIZE(&self) -> Option>> where Self:Sized{ + self.get_token(NORMALIZE, 0) + } + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token COMMA + /// Returns `None` if there is no child corresponding to token COMMA + fn COMMA(&self) -> Option>> where Self:Sized{ + self.get_token(COMMA, 0) + } + fn normalForm(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> NormalizeContextAttrs<'input> for NormalizeContext<'input>{} + +pub struct NormalizeContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{NormalizeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for NormalizeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NormalizeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_normalize(self); + } +} + +impl<'input> CustomRuleContext<'input> for NormalizeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for NormalizeContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for NormalizeContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for NormalizeContext<'input> {} + +impl<'input> NormalizeContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::NormalizeContext( + BaseParserRuleContext::copy_from(ctx,NormalizeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type JsonObjectContext<'input> = BaseParserRuleContext<'input,JsonObjectContextExt<'input>>; + +pub trait JsonObjectContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token JSON_OBJECT + /// Returns `None` if there is no child corresponding to token JSON_OBJECT + fn JSON_OBJECT(&self) -> Option>> where Self:Sized{ + self.get_token(JSON_OBJECT, 0) + } + fn jsonObjectMember_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn jsonObjectMember(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token RETURNING + /// Returns `None` if there is no child corresponding to token RETURNING + fn RETURNING(&self) -> Option>> where Self:Sized{ + self.get_token(RETURNING, 0) + } + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves all `TerminalNode`s corresponding to token NULL in current rule + fn NULL_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token NULL, starting from 0. + /// Returns `None` if number of children corresponding to token NULL is less or equal than `i`. + fn NULL(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(NULL, i) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + /// Retrieves first TerminalNode corresponding to token ABSENT + /// Returns `None` if there is no child corresponding to token ABSENT + fn ABSENT(&self) -> Option>> where Self:Sized{ + self.get_token(ABSENT, 0) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } + /// Retrieves first TerminalNode corresponding to token UNIQUE + /// Returns `None` if there is no child corresponding to token UNIQUE + fn UNIQUE(&self) -> Option>> where Self:Sized{ + self.get_token(UNIQUE, 0) + } + /// Retrieves first TerminalNode corresponding to token WITHOUT + /// Returns `None` if there is no child corresponding to token WITHOUT + fn WITHOUT(&self) -> Option>> where Self:Sized{ + self.get_token(WITHOUT, 0) + } + /// Retrieves first TerminalNode corresponding to token FORMAT + /// Returns `None` if there is no child corresponding to token FORMAT + fn FORMAT(&self) -> Option>> where Self:Sized{ + self.get_token(FORMAT, 0) + } + fn jsonRepresentation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token KEYS + /// Returns `None` if there is no child corresponding to token KEYS + fn KEYS(&self) -> Option>> where Self:Sized{ + self.get_token(KEYS, 0) + } +} + +impl<'input> JsonObjectContextAttrs<'input> for JsonObjectContext<'input>{} + +pub struct JsonObjectContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{JsonObjectContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for JsonObjectContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonObjectContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonObject(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonObjectContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for JsonObjectContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for JsonObjectContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for JsonObjectContext<'input> {} + +impl<'input> JsonObjectContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::JsonObjectContext( + BaseParserRuleContext::copy_from(ctx,JsonObjectContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type IntervalLiteralContext<'input> = BaseParserRuleContext<'input,IntervalLiteralContextExt<'input>>; + +pub trait IntervalLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + fn interval(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> IntervalLiteralContextAttrs<'input> for IntervalLiteralContext<'input>{} + +pub struct IntervalLiteralContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{IntervalLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for IntervalLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for IntervalLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_intervalLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for IntervalLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for IntervalLiteralContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for IntervalLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for IntervalLiteralContext<'input> {} + +impl<'input> IntervalLiteralContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::IntervalLiteralContext( + BaseParserRuleContext::copy_from(ctx,IntervalLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type NumericLiteralContext<'input> = BaseParserRuleContext<'input,NumericLiteralContextExt<'input>>; + +pub trait NumericLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + fn number(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> NumericLiteralContextAttrs<'input> for NumericLiteralContext<'input>{} + +pub struct NumericLiteralContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{NumericLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for NumericLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NumericLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_numericLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for NumericLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for NumericLiteralContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for NumericLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for NumericLiteralContext<'input> {} + +impl<'input> NumericLiteralContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::NumericLiteralContext( + BaseParserRuleContext::copy_from(ctx,NumericLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type BooleanLiteralContext<'input> = BaseParserRuleContext<'input,BooleanLiteralContextExt<'input>>; + +pub trait BooleanLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + fn booleanValue(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> BooleanLiteralContextAttrs<'input> for BooleanLiteralContext<'input>{} + +pub struct BooleanLiteralContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{BooleanLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for BooleanLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BooleanLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_booleanLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for BooleanLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for BooleanLiteralContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for BooleanLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for BooleanLiteralContext<'input> {} + +impl<'input> BooleanLiteralContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::BooleanLiteralContext( + BaseParserRuleContext::copy_from(ctx,BooleanLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type JsonArrayContext<'input> = BaseParserRuleContext<'input,JsonArrayContextExt<'input>>; + +pub trait JsonArrayContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token JSON_ARRAY + /// Returns `None` if there is no child corresponding to token JSON_ARRAY + fn JSON_ARRAY(&self) -> Option>> where Self:Sized{ + self.get_token(JSON_ARRAY, 0) + } + fn jsonValueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn jsonValueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token RETURNING + /// Returns `None` if there is no child corresponding to token RETURNING + fn RETURNING(&self) -> Option>> where Self:Sized{ + self.get_token(RETURNING, 0) + } + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves all `TerminalNode`s corresponding to token NULL in current rule + fn NULL_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token NULL, starting from 0. + /// Returns `None` if number of children corresponding to token NULL is less or equal than `i`. + fn NULL(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(NULL, i) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + /// Retrieves first TerminalNode corresponding to token ABSENT + /// Returns `None` if there is no child corresponding to token ABSENT + fn ABSENT(&self) -> Option>> where Self:Sized{ + self.get_token(ABSENT, 0) + } + /// Retrieves first TerminalNode corresponding to token FORMAT + /// Returns `None` if there is no child corresponding to token FORMAT + fn FORMAT(&self) -> Option>> where Self:Sized{ + self.get_token(FORMAT, 0) + } + fn jsonRepresentation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> JsonArrayContextAttrs<'input> for JsonArrayContext<'input>{} + +pub struct JsonArrayContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{JsonArrayContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for JsonArrayContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonArrayContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonArray(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonArrayContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for JsonArrayContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for JsonArrayContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for JsonArrayContext<'input> {} + +impl<'input> JsonArrayContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::JsonArrayContext( + BaseParserRuleContext::copy_from(ctx,JsonArrayContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SimpleCaseContext<'input> = BaseParserRuleContext<'input,SimpleCaseContextExt<'input>>; + +pub trait SimpleCaseContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CASE + /// Returns `None` if there is no child corresponding to token CASE + fn CASE(&self) -> Option>> where Self:Sized{ + self.get_token(CASE, 0) + } + /// Retrieves first TerminalNode corresponding to token END + /// Returns `None` if there is no child corresponding to token END + fn END(&self) -> Option>> where Self:Sized{ + self.get_token(END, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + fn whenClause_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn whenClause(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ELSE + /// Returns `None` if there is no child corresponding to token ELSE + fn ELSE(&self) -> Option>> where Self:Sized{ + self.get_token(ELSE, 0) + } +} + +impl<'input> SimpleCaseContextAttrs<'input> for SimpleCaseContext<'input>{} + +pub struct SimpleCaseContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub operand: Option>>, + pub elseExpression: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SimpleCaseContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SimpleCaseContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SimpleCaseContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_simpleCase(self); + } +} + +impl<'input> CustomRuleContext<'input> for SimpleCaseContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for SimpleCaseContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SimpleCaseContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for SimpleCaseContext<'input> {} + +impl<'input> SimpleCaseContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::SimpleCaseContext( + BaseParserRuleContext::copy_from(ctx,SimpleCaseContextExt{ + operand:None, elseExpression:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ColumnReferenceContext<'input> = BaseParserRuleContext<'input,ColumnReferenceContextExt<'input>>; + +pub trait ColumnReferenceContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ColumnReferenceContextAttrs<'input> for ColumnReferenceContext<'input>{} + +pub struct ColumnReferenceContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ColumnReferenceContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ColumnReferenceContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ColumnReferenceContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_columnReference(self); + } +} + +impl<'input> CustomRuleContext<'input> for ColumnReferenceContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for ColumnReferenceContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ColumnReferenceContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for ColumnReferenceContext<'input> {} + +impl<'input> ColumnReferenceContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::ColumnReferenceContext( + BaseParserRuleContext::copy_from(ctx,ColumnReferenceContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type NullLiteralContext<'input> = BaseParserRuleContext<'input,NullLiteralContextExt<'input>>; + +pub trait NullLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token NULL + /// Returns `None` if there is no child corresponding to token NULL + fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) + } +} + +impl<'input> NullLiteralContextAttrs<'input> for NullLiteralContext<'input>{} + +pub struct NullLiteralContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{NullLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for NullLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NullLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_nullLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for NullLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for NullLiteralContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for NullLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for NullLiteralContext<'input> {} + +impl<'input> NullLiteralContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::NullLiteralContext( + BaseParserRuleContext::copy_from(ctx,NullLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RowConstructorContext<'input> = BaseParserRuleContext<'input,RowConstructorContextExt<'input>>; + +pub trait RowConstructorContextAttrs<'input>: PrestoParserContext<'input>{ + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + /// Retrieves first TerminalNode corresponding to token ROW + /// Returns `None` if there is no child corresponding to token ROW + fn ROW(&self) -> Option>> where Self:Sized{ + self.get_token(ROW, 0) + } +} + +impl<'input> RowConstructorContextAttrs<'input> for RowConstructorContext<'input>{} + +pub struct RowConstructorContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RowConstructorContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RowConstructorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RowConstructorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rowConstructor(self); + } +} + +impl<'input> CustomRuleContext<'input> for RowConstructorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for RowConstructorContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RowConstructorContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for RowConstructorContext<'input> {} + +impl<'input> RowConstructorContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::RowConstructorContext( + BaseParserRuleContext::copy_from(ctx,RowConstructorContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SubscriptContext<'input> = BaseParserRuleContext<'input,SubscriptContextExt<'input>>; + +pub trait SubscriptContextAttrs<'input>: PrestoParserContext<'input>{ + fn primaryExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SubscriptContextAttrs<'input> for SubscriptContext<'input>{} + +pub struct SubscriptContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub value: Option>>, + pub index: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SubscriptContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SubscriptContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SubscriptContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_subscript(self); + } +} + +impl<'input> CustomRuleContext<'input> for SubscriptContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for SubscriptContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SubscriptContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for SubscriptContext<'input> {} + +impl<'input> SubscriptContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::SubscriptContext( + BaseParserRuleContext::copy_from(ctx,SubscriptContextExt{ + value:None, index:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type JsonExistsContext<'input> = BaseParserRuleContext<'input,JsonExistsContextExt<'input>>; + +pub trait JsonExistsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token JSON_EXISTS + /// Returns `None` if there is no child corresponding to token JSON_EXISTS + fn JSON_EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(JSON_EXISTS, 0) + } + fn jsonPathInvocation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn jsonExistsErrorBehavior(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + /// Retrieves first TerminalNode corresponding to token ERROR + /// Returns `None` if there is no child corresponding to token ERROR + fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) + } +} + +impl<'input> JsonExistsContextAttrs<'input> for JsonExistsContext<'input>{} + +pub struct JsonExistsContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{JsonExistsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for JsonExistsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonExistsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonExists(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonExistsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for JsonExistsContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for JsonExistsContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for JsonExistsContext<'input> {} + +impl<'input> JsonExistsContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::JsonExistsContext( + BaseParserRuleContext::copy_from(ctx,JsonExistsContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CurrentPathContext<'input> = BaseParserRuleContext<'input,CurrentPathContextExt<'input>>; + +pub trait CurrentPathContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT_PATH + /// Returns `None` if there is no child corresponding to token CURRENT_PATH + fn CURRENT_PATH(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_PATH, 0) + } +} + +impl<'input> CurrentPathContextAttrs<'input> for CurrentPathContext<'input>{} + +pub struct CurrentPathContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub name: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CurrentPathContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CurrentPathContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CurrentPathContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_currentPath(self); + } +} + +impl<'input> CustomRuleContext<'input> for CurrentPathContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for CurrentPathContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CurrentPathContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for CurrentPathContext<'input> {} + +impl<'input> CurrentPathContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::CurrentPathContext( + BaseParserRuleContext::copy_from(ctx,CurrentPathContextExt{ + name:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SubqueryExpressionContext<'input> = BaseParserRuleContext<'input,SubqueryExpressionContextExt<'input>>; + +pub trait SubqueryExpressionContextAttrs<'input>: PrestoParserContext<'input>{ + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SubqueryExpressionContextAttrs<'input> for SubqueryExpressionContext<'input>{} + +pub struct SubqueryExpressionContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SubqueryExpressionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SubqueryExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SubqueryExpressionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_subqueryExpression(self); + } +} + +impl<'input> CustomRuleContext<'input> for SubqueryExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for SubqueryExpressionContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SubqueryExpressionContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for SubqueryExpressionContext<'input> {} + +impl<'input> SubqueryExpressionContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::SubqueryExpressionContext( + BaseParserRuleContext::copy_from(ctx,SubqueryExpressionContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type BinaryLiteralContext<'input> = BaseParserRuleContext<'input,BinaryLiteralContextExt<'input>>; + +pub trait BinaryLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token BINARY_LITERAL + /// Returns `None` if there is no child corresponding to token BINARY_LITERAL + fn BINARY_LITERAL(&self) -> Option>> where Self:Sized{ + self.get_token(BINARY_LITERAL, 0) + } +} + +impl<'input> BinaryLiteralContextAttrs<'input> for BinaryLiteralContext<'input>{} + +pub struct BinaryLiteralContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{BinaryLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for BinaryLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BinaryLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_binaryLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for BinaryLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for BinaryLiteralContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for BinaryLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for BinaryLiteralContext<'input> {} + +impl<'input> BinaryLiteralContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::BinaryLiteralContext( + BaseParserRuleContext::copy_from(ctx,BinaryLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CurrentUserContext<'input> = BaseParserRuleContext<'input,CurrentUserContextExt<'input>>; + +pub trait CurrentUserContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT_USER + /// Returns `None` if there is no child corresponding to token CURRENT_USER + fn CURRENT_USER(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_USER, 0) + } +} + +impl<'input> CurrentUserContextAttrs<'input> for CurrentUserContext<'input>{} + +pub struct CurrentUserContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub name: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CurrentUserContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CurrentUserContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CurrentUserContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_currentUser(self); + } +} + +impl<'input> CustomRuleContext<'input> for CurrentUserContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for CurrentUserContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CurrentUserContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for CurrentUserContext<'input> {} + +impl<'input> CurrentUserContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::CurrentUserContext( + BaseParserRuleContext::copy_from(ctx,CurrentUserContextExt{ + name:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type JsonQueryContext<'input> = BaseParserRuleContext<'input,JsonQueryContextExt<'input>>; + +pub trait JsonQueryContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token JSON_QUERY + /// Returns `None` if there is no child corresponding to token JSON_QUERY + fn JSON_QUERY(&self) -> Option>> where Self:Sized{ + self.get_token(JSON_QUERY, 0) + } + fn jsonPathInvocation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token RETURNING + /// Returns `None` if there is no child corresponding to token RETURNING + fn RETURNING(&self) -> Option>> where Self:Sized{ + self.get_token(RETURNING, 0) + } + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn jsonQueryWrapperBehavior(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WRAPPER + /// Returns `None` if there is no child corresponding to token WRAPPER + fn WRAPPER(&self) -> Option>> where Self:Sized{ + self.get_token(WRAPPER, 0) + } + /// Retrieves first TerminalNode corresponding to token QUOTES + /// Returns `None` if there is no child corresponding to token QUOTES + fn QUOTES(&self) -> Option>> where Self:Sized{ + self.get_token(QUOTES, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token ON in current rule + fn ON_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token ON, starting from 0. + /// Returns `None` if number of children corresponding to token ON is less or equal than `i`. + fn ON(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(ON, i) + } + /// Retrieves first TerminalNode corresponding to token EMPTY + /// Returns `None` if there is no child corresponding to token EMPTY + fn EMPTY(&self) -> Option>> where Self:Sized{ + self.get_token(EMPTY, 0) + } + /// Retrieves first TerminalNode corresponding to token ERROR + /// Returns `None` if there is no child corresponding to token ERROR + fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) + } + /// Retrieves first TerminalNode corresponding to token KEEP + /// Returns `None` if there is no child corresponding to token KEEP + fn KEEP(&self) -> Option>> where Self:Sized{ + self.get_token(KEEP, 0) + } + /// Retrieves first TerminalNode corresponding to token OMIT + /// Returns `None` if there is no child corresponding to token OMIT + fn OMIT(&self) -> Option>> where Self:Sized{ + self.get_token(OMIT, 0) + } + fn jsonQueryBehavior_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn jsonQueryBehavior(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token FORMAT + /// Returns `None` if there is no child corresponding to token FORMAT + fn FORMAT(&self) -> Option>> where Self:Sized{ + self.get_token(FORMAT, 0) + } + fn jsonRepresentation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token SCALAR + /// Returns `None` if there is no child corresponding to token SCALAR + fn SCALAR(&self) -> Option>> where Self:Sized{ + self.get_token(SCALAR, 0) + } + /// Retrieves first TerminalNode corresponding to token TEXT_STRING + /// Returns `None` if there is no child corresponding to token TEXT_STRING + fn TEXT_STRING(&self) -> Option>> where Self:Sized{ + self.get_token(TEXT_STRING, 0) + } +} + +impl<'input> JsonQueryContextAttrs<'input> for JsonQueryContext<'input>{} + +pub struct JsonQueryContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub emptyBehavior: Option>>, + pub errorBehavior: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{JsonQueryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for JsonQueryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonQueryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonQuery(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonQueryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for JsonQueryContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for JsonQueryContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for JsonQueryContext<'input> {} + +impl<'input> JsonQueryContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::JsonQueryContext( + BaseParserRuleContext::copy_from(ctx,JsonQueryContextExt{ + emptyBehavior:None, errorBehavior:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type MeasureContext<'input> = BaseParserRuleContext<'input,MeasureContextExt<'input>>; + +pub trait MeasureContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn over(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> MeasureContextAttrs<'input> for MeasureContext<'input>{} + +pub struct MeasureContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{MeasureContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for MeasureContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MeasureContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_measure(self); + } +} + +impl<'input> CustomRuleContext<'input> for MeasureContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for MeasureContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for MeasureContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for MeasureContext<'input> {} + +impl<'input> MeasureContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::MeasureContext( + BaseParserRuleContext::copy_from(ctx,MeasureContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ExtractContext<'input> = BaseParserRuleContext<'input,ExtractContextExt<'input>>; + +pub trait ExtractContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token EXTRACT + /// Returns `None` if there is no child corresponding to token EXTRACT + fn EXTRACT(&self) -> Option>> where Self:Sized{ + self.get_token(EXTRACT, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token FROM + /// Returns `None` if there is no child corresponding to token FROM + fn FROM(&self) -> Option>> where Self:Sized{ + self.get_token(FROM, 0) + } + fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ExtractContextAttrs<'input> for ExtractContext<'input>{} + +pub struct ExtractContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExtractContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExtractContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExtractContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_extract(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExtractContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for ExtractContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExtractContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for ExtractContext<'input> {} + +impl<'input> ExtractContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::ExtractContext( + BaseParserRuleContext::copy_from(ctx,ExtractContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type StringLiteralContext<'input> = BaseParserRuleContext<'input,StringLiteralContextExt<'input>>; + +pub trait StringLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> StringLiteralContextAttrs<'input> for StringLiteralContext<'input>{} + +pub struct StringLiteralContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{StringLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for StringLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StringLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_stringLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for StringLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for StringLiteralContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for StringLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for StringLiteralContext<'input> {} + +impl<'input> StringLiteralContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::StringLiteralContext( + BaseParserRuleContext::copy_from(ctx,StringLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ArrayConstructorContext<'input> = BaseParserRuleContext<'input,ArrayConstructorContextExt<'input>>; + +pub trait ArrayConstructorContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ARRAY + /// Returns `None` if there is no child corresponding to token ARRAY + fn ARRAY(&self) -> Option>> where Self:Sized{ + self.get_token(ARRAY, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> ArrayConstructorContextAttrs<'input> for ArrayConstructorContext<'input>{} + +pub struct ArrayConstructorContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ArrayConstructorContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ArrayConstructorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ArrayConstructorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_arrayConstructor(self); + } +} + +impl<'input> CustomRuleContext<'input> for ArrayConstructorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for ArrayConstructorContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ArrayConstructorContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for ArrayConstructorContext<'input> {} + +impl<'input> ArrayConstructorContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::ArrayConstructorContext( + BaseParserRuleContext::copy_from(ctx,ArrayConstructorContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type FunctionCallContext<'input> = BaseParserRuleContext<'input,FunctionCallContextExt<'input>>; + +pub trait FunctionCallContextAttrs<'input>: PrestoParserContext<'input>{ + fn qualifiedName(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token ASTERISK + /// Returns `None` if there is no child corresponding to token ASTERISK + fn ASTERISK(&self) -> Option>> where Self:Sized{ + self.get_token(ASTERISK, 0) + } + fn processingMode(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn filter(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn over(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ORDER + /// Returns `None` if there is no child corresponding to token ORDER + fn ORDER(&self) -> Option>> where Self:Sized{ + self.get_token(ORDER, 0) + } + /// Retrieves first TerminalNode corresponding to token BY + /// Returns `None` if there is no child corresponding to token BY + fn BY(&self) -> Option>> where Self:Sized{ + self.get_token(BY, 0) + } + fn sortItem_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn sortItem(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + fn setQuantifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + fn nullTreatment(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> FunctionCallContextAttrs<'input> for FunctionCallContext<'input>{} + +pub struct FunctionCallContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub label: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{FunctionCallContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for FunctionCallContext<'input>{} + +impl<'input,'a> Listenable + 'a> for FunctionCallContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_functionCall(self); + } +} + +impl<'input> CustomRuleContext<'input> for FunctionCallContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for FunctionCallContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for FunctionCallContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for FunctionCallContext<'input> {} + +impl<'input> FunctionCallContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::FunctionCallContext( + BaseParserRuleContext::copy_from(ctx,FunctionCallContextExt{ + label:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CurrentSchemaContext<'input> = BaseParserRuleContext<'input,CurrentSchemaContextExt<'input>>; + +pub trait CurrentSchemaContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT_SCHEMA + /// Returns `None` if there is no child corresponding to token CURRENT_SCHEMA + fn CURRENT_SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_SCHEMA, 0) + } +} + +impl<'input> CurrentSchemaContextAttrs<'input> for CurrentSchemaContext<'input>{} + +pub struct CurrentSchemaContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub name: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CurrentSchemaContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CurrentSchemaContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CurrentSchemaContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_currentSchema(self); + } +} + +impl<'input> CustomRuleContext<'input> for CurrentSchemaContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for CurrentSchemaContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CurrentSchemaContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for CurrentSchemaContext<'input> {} + +impl<'input> CurrentSchemaContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::CurrentSchemaContext( + BaseParserRuleContext::copy_from(ctx,CurrentSchemaContextExt{ + name:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ExistsContext<'input> = BaseParserRuleContext<'input,ExistsContextExt<'input>>; + +pub trait ExistsContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token EXISTS + /// Returns `None` if there is no child corresponding to token EXISTS + fn EXISTS(&self) -> Option>> where Self:Sized{ + self.get_token(EXISTS, 0) + } + fn query(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ExistsContextAttrs<'input> for ExistsContext<'input>{} + +pub struct ExistsContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExistsContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExistsContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExistsContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_exists(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExistsContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for ExistsContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExistsContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for ExistsContext<'input> {} + +impl<'input> ExistsContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::ExistsContext( + BaseParserRuleContext::copy_from(ctx,ExistsContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PositionContext<'input> = BaseParserRuleContext<'input,PositionContextExt<'input>>; + +pub trait PositionContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token POSITION + /// Returns `None` if there is no child corresponding to token POSITION + fn POSITION(&self) -> Option>> where Self:Sized{ + self.get_token(POSITION, 0) + } + fn valueExpression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn valueExpression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token IN + /// Returns `None` if there is no child corresponding to token IN + fn IN(&self) -> Option>> where Self:Sized{ + self.get_token(IN, 0) + } +} + +impl<'input> PositionContextAttrs<'input> for PositionContext<'input>{} + +pub struct PositionContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PositionContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PositionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PositionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_position(self); + } +} + +impl<'input> CustomRuleContext<'input> for PositionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for PositionContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PositionContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for PositionContext<'input> {} + +impl<'input> PositionContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::PositionContext( + BaseParserRuleContext::copy_from(ctx,PositionContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ListaggContext<'input> = BaseParserRuleContext<'input,ListaggContextExt<'input>>; + +pub trait ListaggContextAttrs<'input>: PrestoParserContext<'input>{ + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token LISTAGG + /// Returns `None` if there is no child corresponding to token LISTAGG + fn LISTAGG(&self) -> Option>> where Self:Sized{ + self.get_token(LISTAGG, 0) + } + /// Retrieves first TerminalNode corresponding to token WITHIN + /// Returns `None` if there is no child corresponding to token WITHIN + fn WITHIN(&self) -> Option>> where Self:Sized{ + self.get_token(WITHIN, 0) + } + /// Retrieves first TerminalNode corresponding to token GROUP + /// Returns `None` if there is no child corresponding to token GROUP + fn GROUP(&self) -> Option>> where Self:Sized{ + self.get_token(GROUP, 0) + } + /// Retrieves first TerminalNode corresponding to token ORDER + /// Returns `None` if there is no child corresponding to token ORDER + fn ORDER(&self) -> Option>> where Self:Sized{ + self.get_token(ORDER, 0) + } + /// Retrieves first TerminalNode corresponding to token BY + /// Returns `None` if there is no child corresponding to token BY + fn BY(&self) -> Option>> where Self:Sized{ + self.get_token(BY, 0) + } + fn sortItem_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn sortItem(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + fn setQuantifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token ON + /// Returns `None` if there is no child corresponding to token ON + fn ON(&self) -> Option>> where Self:Sized{ + self.get_token(ON, 0) + } + /// Retrieves first TerminalNode corresponding to token OVERFLOW + /// Returns `None` if there is no child corresponding to token OVERFLOW + fn OVERFLOW(&self) -> Option>> where Self:Sized{ + self.get_token(OVERFLOW, 0) + } + fn listAggOverflowBehavior(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ListaggContextAttrs<'input> for ListaggContext<'input>{} + +pub struct ListaggContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub name: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ListaggContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ListaggContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ListaggContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_listagg(self); + } +} + +impl<'input> CustomRuleContext<'input> for ListaggContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for ListaggContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ListaggContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for ListaggContext<'input> {} + +impl<'input> ListaggContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::ListaggContext( + BaseParserRuleContext::copy_from(ctx,ListaggContextExt{ + name:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SearchedCaseContext<'input> = BaseParserRuleContext<'input,SearchedCaseContextExt<'input>>; + +pub trait SearchedCaseContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CASE + /// Returns `None` if there is no child corresponding to token CASE + fn CASE(&self) -> Option>> where Self:Sized{ + self.get_token(CASE, 0) + } + /// Retrieves first TerminalNode corresponding to token END + /// Returns `None` if there is no child corresponding to token END + fn END(&self) -> Option>> where Self:Sized{ + self.get_token(END, 0) + } + fn whenClause_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn whenClause(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token ELSE + /// Returns `None` if there is no child corresponding to token ELSE + fn ELSE(&self) -> Option>> where Self:Sized{ + self.get_token(ELSE, 0) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SearchedCaseContextAttrs<'input> for SearchedCaseContext<'input>{} + +pub struct SearchedCaseContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub elseExpression: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SearchedCaseContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SearchedCaseContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SearchedCaseContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_searchedCase(self); + } +} + +impl<'input> CustomRuleContext<'input> for SearchedCaseContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for SearchedCaseContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SearchedCaseContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for SearchedCaseContext<'input> {} + +impl<'input> SearchedCaseContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::SearchedCaseContext( + BaseParserRuleContext::copy_from(ctx,SearchedCaseContextExt{ + elseExpression:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CurrentCatalogContext<'input> = BaseParserRuleContext<'input,CurrentCatalogContextExt<'input>>; + +pub trait CurrentCatalogContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT_CATALOG + /// Returns `None` if there is no child corresponding to token CURRENT_CATALOG + fn CURRENT_CATALOG(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_CATALOG, 0) + } +} + +impl<'input> CurrentCatalogContextAttrs<'input> for CurrentCatalogContext<'input>{} + +pub struct CurrentCatalogContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + pub name: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CurrentCatalogContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CurrentCatalogContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CurrentCatalogContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_currentCatalog(self); + } +} + +impl<'input> CustomRuleContext<'input> for CurrentCatalogContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for CurrentCatalogContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CurrentCatalogContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for CurrentCatalogContext<'input> {} + +impl<'input> CurrentCatalogContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::CurrentCatalogContext( + BaseParserRuleContext::copy_from(ctx,CurrentCatalogContextExt{ + name:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type GroupingOperationContext<'input> = BaseParserRuleContext<'input,GroupingOperationContextExt<'input>>; + +pub trait GroupingOperationContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token GROUPING + /// Returns `None` if there is no child corresponding to token GROUPING + fn GROUPING(&self) -> Option>> where Self:Sized{ + self.get_token(GROUPING, 0) + } + fn qualifiedName_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn qualifiedName(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> GroupingOperationContextAttrs<'input> for GroupingOperationContext<'input>{} + +pub struct GroupingOperationContextExt<'input>{ + base:PrimaryExpressionContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{GroupingOperationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for GroupingOperationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GroupingOperationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_groupingOperation(self); + } +} + +impl<'input> CustomRuleContext<'input> for GroupingOperationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_primaryExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_primaryExpression } +} + +impl<'input> Borrow> for GroupingOperationContext<'input>{ + fn borrow(&self) -> &PrimaryExpressionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for GroupingOperationContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrimaryExpressionContextExt<'input> { &mut self.base } +} + +impl<'input> PrimaryExpressionContextAttrs<'input> for GroupingOperationContext<'input> {} + +impl<'input> GroupingOperationContextExt<'input>{ + fn new(ctx: &dyn PrimaryExpressionContextAttrs<'input>) -> Rc> { + Rc::new( + PrimaryExpressionContextAll::GroupingOperationContext( + BaseParserRuleContext::copy_from(ctx,GroupingOperationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn primaryExpression(&mut self,) + -> Result>,ANTLRError> { + self.primaryExpression_rec(0) + } + + fn primaryExpression_rec(&mut self, _p: isize) + -> Result>,ANTLRError> { + let recog = self; + let _parentctx = recog.ctx.take(); + let _parentState = recog.base.get_state(); + let mut _localctx = PrimaryExpressionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_recursion_rule(_localctx.clone(), 120, RULE_primaryExpression, _p); + let mut _localctx: Rc = _localctx; + let mut _prevctx = _localctx.clone(); + let _startState = 120; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2357); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(310,&mut recog.base)? { + 1 =>{ + { + let mut tmp = NullLiteralContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + + + recog.base.set_state(1908); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + { + let mut tmp = IntervalLiteralContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule interval*/ + recog.base.set_state(1909); + recog.interval()?; + + } + } + , + 3 =>{ + { + let mut tmp = TypeConstructorContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule identifier*/ + recog.base.set_state(1910); + recog.identifier()?; + + /*InvokeRule string*/ + recog.base.set_state(1911); + recog.string()?; + + } + } + , + 4 =>{ + { + let mut tmp = TypeConstructorContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1913); + recog.base.match_token(DOUBLE,&mut recog.err_handler)?; + + recog.base.set_state(1914); + recog.base.match_token(PRECISION,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(1915); + recog.string()?; + + } + } + , + 5 =>{ + { + let mut tmp = NumericLiteralContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule number*/ + recog.base.set_state(1916); + recog.number()?; + + } + } + , + 6 =>{ + { + let mut tmp = BooleanLiteralContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule booleanValue*/ + recog.base.set_state(1917); + recog.booleanValue()?; + + } + } + , + 7 =>{ + { + let mut tmp = StringLiteralContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule string*/ + recog.base.set_state(1918); + recog.string()?; + + } + } + , + 8 =>{ + { + let mut tmp = BinaryLiteralContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1919); + recog.base.match_token(BINARY_LITERAL,&mut recog.err_handler)?; + + } + } + , + 9 =>{ + { + let mut tmp = ParameterContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1920); + recog.base.match_token(QUESTION_MARK,&mut recog.err_handler)?; + + } + } + , + 10 =>{ + { + let mut tmp = PositionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1921); + recog.base.match_token(POSITION,&mut recog.err_handler)?; + + recog.base.set_state(1922); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1923); + recog.valueExpression_rec(0)?; + + recog.base.set_state(1924); + recog.base.match_token(IN,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(1925); + recog.valueExpression_rec(0)?; + + recog.base.set_state(1926); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 11 =>{ + { + let mut tmp = RowConstructorContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1928); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1929); + recog.expression()?; + + recog.base.set_state(1932); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + loop { + { + { + recog.base.set_state(1930); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1931); + recog.expression()?; + + } + } + recog.base.set_state(1934); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if !(_la==COMMA) {break} + } + recog.base.set_state(1936); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 12 =>{ + { + let mut tmp = RowConstructorContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1938); + recog.base.match_token(ROW,&mut recog.err_handler)?; + + recog.base.set_state(1939); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1940); + recog.expression()?; + + recog.base.set_state(1945); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1941); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(1942); + recog.expression()?; + + } + } + recog.base.set_state(1947); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1948); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 13 =>{ + { + let mut tmp = ListaggContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1950); + let tmp = recog.base.match_token(LISTAGG,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::ListaggContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(1951); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1953); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(250,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule setQuantifier*/ + recog.base.set_state(1952); + recog.setQuantifier()?; + + } + } + + _ => {} + } + /*InvokeRule expression*/ + recog.base.set_state(1955); + recog.expression()?; + + recog.base.set_state(1958); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COMMA { + { + recog.base.set_state(1956); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(1957); + recog.string()?; + + } + } + + recog.base.set_state(1963); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ON { + { + recog.base.set_state(1960); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(1961); + recog.base.match_token(OVERFLOW,&mut recog.err_handler)?; + + /*InvokeRule listAggOverflowBehavior*/ + recog.base.set_state(1962); + recog.listAggOverflowBehavior()?; + + } + } + + recog.base.set_state(1965); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + { + recog.base.set_state(1966); + recog.base.match_token(WITHIN,&mut recog.err_handler)?; + + recog.base.set_state(1967); + recog.base.match_token(GROUP,&mut recog.err_handler)?; + + recog.base.set_state(1968); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1969); + recog.base.match_token(ORDER,&mut recog.err_handler)?; + + recog.base.set_state(1970); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1971); + recog.sortItem()?; + + recog.base.set_state(1976); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(1972); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(1973); + recog.sortItem()?; + + } + } + recog.base.set_state(1978); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(1979); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + } + , + 14 =>{ + { + let mut tmp = FunctionCallContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(1982); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(254,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule processingMode*/ + recog.base.set_state(1981); + recog.processingMode()?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(1984); + recog.qualifiedName()?; + + recog.base.set_state(1985); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(1989); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)))) != 0) || ((((_la - 133)) & !0x3f) == 0 && ((1usize << (_la - 133)) & ((1usize << (KEEP - 133)) | (1usize << (KEY - 133)) | (1usize << (KEYS - 133)) | (1usize << (LAST - 133)) | (1usize << (LATERAL - 133)) | (1usize << (LEADING - 133)) | (1usize << (LEVEL - 133)) | (1usize << (LIMIT - 133)) | (1usize << (LOCAL - 133)) | (1usize << (LOGICAL - 133)) | (1usize << (MAP - 133)) | (1usize << (MATCH - 133)) | (1usize << (MATCHED - 133)) | (1usize << (MATCHES - 133)) | (1usize << (MATCH_RECOGNIZE - 133)) | (1usize << (MATERIALIZED - 133)) | (1usize << (MEASURES - 133)) | (1usize << (MERGE - 133)) | (1usize << (MINUTE - 133)) | (1usize << (MONTH - 133)) | (1usize << (NEXT - 133)) | (1usize << (NFC - 133)) | (1usize << (NFD - 133)) | (1usize << (NFKC - 133)) | (1usize << (NFKD - 133)) | (1usize << (NO - 133)))) != 0) || ((((_la - 165)) & !0x3f) == 0 && ((1usize << (_la - 165)) & ((1usize << (NONE - 165)) | (1usize << (NULLIF - 165)) | (1usize << (NULLS - 165)) | (1usize << (OBJECT - 165)) | (1usize << (OF - 165)) | (1usize << (OFFSET - 165)) | (1usize << (OMIT - 165)) | (1usize << (ONE - 165)) | (1usize << (ONLY - 165)) | (1usize << (OPTION - 165)) | (1usize << (ORDINALITY - 165)) | (1usize << (OUTPUT - 165)) | (1usize << (OVER - 165)) | (1usize << (OVERFLOW - 165)) | (1usize << (PARTITION - 165)) | (1usize << (PARTITIONS - 165)) | (1usize << (PASSING - 165)) | (1usize << (PAST - 165)) | (1usize << (PATH - 165)) | (1usize << (PATTERN - 165)) | (1usize << (PER - 165)) | (1usize << (PERIOD - 165)) | (1usize << (PERMUTE - 165)) | (1usize << (POSITION - 165)) | (1usize << (PRECEDING - 165)))) != 0) || ((((_la - 197)) & !0x3f) == 0 && ((1usize << (_la - 197)) & ((1usize << (PRECISION - 197)) | (1usize << (PRIVILEGES - 197)) | (1usize << (PROPERTIES - 197)) | (1usize << (PRUNE - 197)) | (1usize << (QUOTES - 197)) | (1usize << (RANGE - 197)) | (1usize << (READ - 197)) | (1usize << (REFRESH - 197)) | (1usize << (RENAME - 197)) | (1usize << (REPEATABLE - 197)) | (1usize << (REPLACE - 197)) | (1usize << (RESET - 197)) | (1usize << (RESPECT - 197)) | (1usize << (RESTRICT - 197)) | (1usize << (RETURNING - 197)) | (1usize << (REVOKE - 197)) | (1usize << (ROLE - 197)) | (1usize << (ROLES - 197)) | (1usize << (ROLLBACK - 197)) | (1usize << (ROW - 197)) | (1usize << (ROWS - 197)) | (1usize << (RUNNING - 197)) | (1usize << (SCALAR - 197)) | (1usize << (SCHEMA - 197)) | (1usize << (SCHEMAS - 197)) | (1usize << (SECOND - 197)) | (1usize << (SECURITY - 197)) | (1usize << (SEEK - 197)))) != 0) || ((((_la - 230)) & !0x3f) == 0 && ((1usize << (_la - 230)) & ((1usize << (SERIALIZABLE - 230)) | (1usize << (SESSION - 230)) | (1usize << (SET - 230)) | (1usize << (SETS - 230)) | (1usize << (SHOW - 230)) | (1usize << (SOME - 230)) | (1usize << (START - 230)) | (1usize << (STATS - 230)) | (1usize << (SUBSET - 230)) | (1usize << (SUBSTRING - 230)) | (1usize << (SYSTEM - 230)) | (1usize << (TABLES - 230)) | (1usize << (TABLESAMPLE - 230)) | (1usize << (TEXT - 230)) | (1usize << (TEXT_STRING - 230)) | (1usize << (TIES - 230)) | (1usize << (TIME - 230)) | (1usize << (TIMESTAMP - 230)) | (1usize << (TO - 230)) | (1usize << (TRAILING - 230)) | (1usize << (TRANSACTION - 230)) | (1usize << (TRUNCATE - 230)) | (1usize << (TRY_CAST - 230)) | (1usize << (TYPE - 230)) | (1usize << (UNBOUNDED - 230)) | (1usize << (UNCOMMITTED - 230)) | (1usize << (UNCONDITIONAL - 230)))) != 0) || ((((_la - 263)) & !0x3f) == 0 && ((1usize << (_la - 263)) & ((1usize << (UNIQUE - 263)) | (1usize << (UNKNOWN - 263)) | (1usize << (UNMATCHED - 263)) | (1usize << (UPDATE - 263)) | (1usize << (USE - 263)) | (1usize << (USER - 263)) | (1usize << (UTF16 - 263)) | (1usize << (UTF32 - 263)) | (1usize << (UTF8 - 263)) | (1usize << (VALIDATE - 263)) | (1usize << (VALUE - 263)) | (1usize << (VERBOSE - 263)) | (1usize << (VERSION - 263)) | (1usize << (VIEW - 263)) | (1usize << (WINDOW - 263)) | (1usize << (WITHIN - 263)) | (1usize << (WITHOUT - 263)) | (1usize << (WORK - 263)) | (1usize << (WRAPPER - 263)) | (1usize << (WRITE - 263)) | (1usize << (YEAR - 263)) | (1usize << (ZONE - 263)))) != 0) || ((((_la - 310)) & !0x3f) == 0 && ((1usize << (_la - 310)) & ((1usize << (IDENTIFIER - 310)) | (1usize << (DIGIT_IDENTIFIER - 310)) | (1usize << (QUOTED_IDENTIFIER - 310)) | (1usize << (BACKQUOTED_IDENTIFIER - 310)))) != 0) { + { + /*InvokeRule identifier*/ + recog.base.set_state(1986); + let tmp = recog.identifier()?; + if let PrimaryExpressionContextAll::FunctionCallContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.label = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(1987); + recog.base.match_token(T__0,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(1991); + recog.base.match_token(ASTERISK,&mut recog.err_handler)?; + + recog.base.set_state(1992); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(1994); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(256,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule filter*/ + recog.base.set_state(1993); + recog.filter()?; + + } + } + + _ => {} + } + recog.base.set_state(1997); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(257,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule over*/ + recog.base.set_state(1996); + recog.over()?; + + } + } + + _ => {} + } + } + } + , + 15 =>{ + { + let mut tmp = FunctionCallContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2000); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(258,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule processingMode*/ + recog.base.set_state(1999); + recog.processingMode()?; + + } + } + + _ => {} + } + /*InvokeRule qualifiedName*/ + recog.base.set_state(2002); + recog.qualifiedName()?; + + recog.base.set_state(2003); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2015); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTINCT - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + recog.base.set_state(2005); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(259,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule setQuantifier*/ + recog.base.set_state(2004); + recog.setQuantifier()?; + + } + } + + _ => {} + } + /*InvokeRule expression*/ + recog.base.set_state(2007); + recog.expression()?; + + recog.base.set_state(2012); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2008); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2009); + recog.expression()?; + + } + } + recog.base.set_state(2014); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(2027); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ORDER { + { + recog.base.set_state(2017); + recog.base.match_token(ORDER,&mut recog.err_handler)?; + + recog.base.set_state(2018); + recog.base.match_token(BY,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(2019); + recog.sortItem()?; + + recog.base.set_state(2024); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2020); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule sortItem*/ + recog.base.set_state(2021); + recog.sortItem()?; + + } + } + recog.base.set_state(2026); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(2029); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(2031); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(264,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule filter*/ + recog.base.set_state(2030); + recog.filter()?; + + } + } + + _ => {} + } + recog.base.set_state(2037); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(266,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2034); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==IGNORE || _la==RESPECT { + { + /*InvokeRule nullTreatment*/ + recog.base.set_state(2033); + recog.nullTreatment()?; + + } + } + + /*InvokeRule over*/ + recog.base.set_state(2036); + recog.over()?; + + } + } + + _ => {} + } + } + } + , + 16 =>{ + { + let mut tmp = MeasureContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule identifier*/ + recog.base.set_state(2039); + recog.identifier()?; + + /*InvokeRule over*/ + recog.base.set_state(2040); + recog.over()?; + + } + } + , + 17 =>{ + { + let mut tmp = LambdaContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule identifier*/ + recog.base.set_state(2042); + recog.identifier()?; + + recog.base.set_state(2043); + recog.base.match_token(T__5,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2044); + recog.expression()?; + + } + } + , + 18 =>{ + { + let mut tmp = LambdaContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2046); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2055); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)))) != 0) || ((((_la - 133)) & !0x3f) == 0 && ((1usize << (_la - 133)) & ((1usize << (KEEP - 133)) | (1usize << (KEY - 133)) | (1usize << (KEYS - 133)) | (1usize << (LAST - 133)) | (1usize << (LATERAL - 133)) | (1usize << (LEADING - 133)) | (1usize << (LEVEL - 133)) | (1usize << (LIMIT - 133)) | (1usize << (LOCAL - 133)) | (1usize << (LOGICAL - 133)) | (1usize << (MAP - 133)) | (1usize << (MATCH - 133)) | (1usize << (MATCHED - 133)) | (1usize << (MATCHES - 133)) | (1usize << (MATCH_RECOGNIZE - 133)) | (1usize << (MATERIALIZED - 133)) | (1usize << (MEASURES - 133)) | (1usize << (MERGE - 133)) | (1usize << (MINUTE - 133)) | (1usize << (MONTH - 133)) | (1usize << (NEXT - 133)) | (1usize << (NFC - 133)) | (1usize << (NFD - 133)) | (1usize << (NFKC - 133)) | (1usize << (NFKD - 133)) | (1usize << (NO - 133)))) != 0) || ((((_la - 165)) & !0x3f) == 0 && ((1usize << (_la - 165)) & ((1usize << (NONE - 165)) | (1usize << (NULLIF - 165)) | (1usize << (NULLS - 165)) | (1usize << (OBJECT - 165)) | (1usize << (OF - 165)) | (1usize << (OFFSET - 165)) | (1usize << (OMIT - 165)) | (1usize << (ONE - 165)) | (1usize << (ONLY - 165)) | (1usize << (OPTION - 165)) | (1usize << (ORDINALITY - 165)) | (1usize << (OUTPUT - 165)) | (1usize << (OVER - 165)) | (1usize << (OVERFLOW - 165)) | (1usize << (PARTITION - 165)) | (1usize << (PARTITIONS - 165)) | (1usize << (PASSING - 165)) | (1usize << (PAST - 165)) | (1usize << (PATH - 165)) | (1usize << (PATTERN - 165)) | (1usize << (PER - 165)) | (1usize << (PERIOD - 165)) | (1usize << (PERMUTE - 165)) | (1usize << (POSITION - 165)) | (1usize << (PRECEDING - 165)))) != 0) || ((((_la - 197)) & !0x3f) == 0 && ((1usize << (_la - 197)) & ((1usize << (PRECISION - 197)) | (1usize << (PRIVILEGES - 197)) | (1usize << (PROPERTIES - 197)) | (1usize << (PRUNE - 197)) | (1usize << (QUOTES - 197)) | (1usize << (RANGE - 197)) | (1usize << (READ - 197)) | (1usize << (REFRESH - 197)) | (1usize << (RENAME - 197)) | (1usize << (REPEATABLE - 197)) | (1usize << (REPLACE - 197)) | (1usize << (RESET - 197)) | (1usize << (RESPECT - 197)) | (1usize << (RESTRICT - 197)) | (1usize << (RETURNING - 197)) | (1usize << (REVOKE - 197)) | (1usize << (ROLE - 197)) | (1usize << (ROLES - 197)) | (1usize << (ROLLBACK - 197)) | (1usize << (ROW - 197)) | (1usize << (ROWS - 197)) | (1usize << (RUNNING - 197)) | (1usize << (SCALAR - 197)) | (1usize << (SCHEMA - 197)) | (1usize << (SCHEMAS - 197)) | (1usize << (SECOND - 197)) | (1usize << (SECURITY - 197)) | (1usize << (SEEK - 197)))) != 0) || ((((_la - 230)) & !0x3f) == 0 && ((1usize << (_la - 230)) & ((1usize << (SERIALIZABLE - 230)) | (1usize << (SESSION - 230)) | (1usize << (SET - 230)) | (1usize << (SETS - 230)) | (1usize << (SHOW - 230)) | (1usize << (SOME - 230)) | (1usize << (START - 230)) | (1usize << (STATS - 230)) | (1usize << (SUBSET - 230)) | (1usize << (SUBSTRING - 230)) | (1usize << (SYSTEM - 230)) | (1usize << (TABLES - 230)) | (1usize << (TABLESAMPLE - 230)) | (1usize << (TEXT - 230)) | (1usize << (TEXT_STRING - 230)) | (1usize << (TIES - 230)) | (1usize << (TIME - 230)) | (1usize << (TIMESTAMP - 230)) | (1usize << (TO - 230)) | (1usize << (TRAILING - 230)) | (1usize << (TRANSACTION - 230)) | (1usize << (TRUNCATE - 230)) | (1usize << (TRY_CAST - 230)) | (1usize << (TYPE - 230)) | (1usize << (UNBOUNDED - 230)) | (1usize << (UNCOMMITTED - 230)) | (1usize << (UNCONDITIONAL - 230)))) != 0) || ((((_la - 263)) & !0x3f) == 0 && ((1usize << (_la - 263)) & ((1usize << (UNIQUE - 263)) | (1usize << (UNKNOWN - 263)) | (1usize << (UNMATCHED - 263)) | (1usize << (UPDATE - 263)) | (1usize << (USE - 263)) | (1usize << (USER - 263)) | (1usize << (UTF16 - 263)) | (1usize << (UTF32 - 263)) | (1usize << (UTF8 - 263)) | (1usize << (VALIDATE - 263)) | (1usize << (VALUE - 263)) | (1usize << (VERBOSE - 263)) | (1usize << (VERSION - 263)) | (1usize << (VIEW - 263)) | (1usize << (WINDOW - 263)) | (1usize << (WITHIN - 263)) | (1usize << (WITHOUT - 263)) | (1usize << (WORK - 263)) | (1usize << (WRAPPER - 263)) | (1usize << (WRITE - 263)) | (1usize << (YEAR - 263)) | (1usize << (ZONE - 263)))) != 0) || ((((_la - 310)) & !0x3f) == 0 && ((1usize << (_la - 310)) & ((1usize << (IDENTIFIER - 310)) | (1usize << (DIGIT_IDENTIFIER - 310)) | (1usize << (QUOTED_IDENTIFIER - 310)) | (1usize << (BACKQUOTED_IDENTIFIER - 310)))) != 0) { + { + /*InvokeRule identifier*/ + recog.base.set_state(2047); + recog.identifier()?; + + recog.base.set_state(2052); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2048); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2049); + recog.identifier()?; + + } + } + recog.base.set_state(2054); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(2057); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + recog.base.set_state(2058); + recog.base.match_token(T__5,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2059); + recog.expression()?; + + } + } + , + 19 =>{ + { + let mut tmp = SubqueryExpressionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2060); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(2061); + recog.query()?; + + recog.base.set_state(2062); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 20 =>{ + { + let mut tmp = ExistsContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2064); + recog.base.match_token(EXISTS,&mut recog.err_handler)?; + + recog.base.set_state(2065); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule query*/ + recog.base.set_state(2066); + recog.query()?; + + recog.base.set_state(2067); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 21 =>{ + { + let mut tmp = SimpleCaseContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2069); + recog.base.match_token(CASE,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2070); + let tmp = recog.expression()?; + if let PrimaryExpressionContextAll::SimpleCaseContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.operand = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2072); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + loop { + { + { + /*InvokeRule whenClause*/ + recog.base.set_state(2071); + recog.whenClause()?; + + } + } + recog.base.set_state(2074); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if !(_la==WHEN) {break} + } + recog.base.set_state(2078); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ELSE { + { + recog.base.set_state(2076); + recog.base.match_token(ELSE,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2077); + let tmp = recog.expression()?; + if let PrimaryExpressionContextAll::SimpleCaseContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.elseExpression = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2080); + recog.base.match_token(END,&mut recog.err_handler)?; + + } + } + , + 22 =>{ + { + let mut tmp = SearchedCaseContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2082); + recog.base.match_token(CASE,&mut recog.err_handler)?; + + recog.base.set_state(2084); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + loop { + { + { + /*InvokeRule whenClause*/ + recog.base.set_state(2083); + recog.whenClause()?; + + } + } + recog.base.set_state(2086); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if !(_la==WHEN) {break} + } + recog.base.set_state(2090); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ELSE { + { + recog.base.set_state(2088); + recog.base.match_token(ELSE,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2089); + let tmp = recog.expression()?; + if let PrimaryExpressionContextAll::SearchedCaseContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.elseExpression = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2092); + recog.base.match_token(END,&mut recog.err_handler)?; + + } + } + , + 23 =>{ + { + let mut tmp = CastContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2094); + recog.base.match_token(CAST,&mut recog.err_handler)?; + + recog.base.set_state(2095); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2096); + recog.expression()?; + + recog.base.set_state(2097); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2098); + recog.type__rec(0)?; + + recog.base.set_state(2099); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 24 =>{ + { + let mut tmp = CastContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2101); + recog.base.match_token(TRY_CAST,&mut recog.err_handler)?; + + recog.base.set_state(2102); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2103); + recog.expression()?; + + recog.base.set_state(2104); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2105); + recog.type__rec(0)?; + + recog.base.set_state(2106); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 25 =>{ + { + let mut tmp = ArrayConstructorContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2108); + recog.base.match_token(ARRAY,&mut recog.err_handler)?; + + recog.base.set_state(2109); + recog.base.match_token(T__6,&mut recog.err_handler)?; + + recog.base.set_state(2118); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NOT - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule expression*/ + recog.base.set_state(2110); + recog.expression()?; + + recog.base.set_state(2115); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2111); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2112); + recog.expression()?; + + } + } + recog.base.set_state(2117); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(2120); + recog.base.match_token(T__7,&mut recog.err_handler)?; + + } + } + , + 26 =>{ + { + let mut tmp = ColumnReferenceContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule identifier*/ + recog.base.set_state(2121); + recog.identifier()?; + + } + } + , + 27 =>{ + { + let mut tmp = SpecialDateTimeFunctionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2122); + let tmp = recog.base.match_token(CURRENT_DATE,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + , + 28 =>{ + { + let mut tmp = SpecialDateTimeFunctionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2123); + let tmp = recog.base.match_token(CURRENT_TIME,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2127); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(275,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2124); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2125); + let tmp = recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.precision = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2126); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + , + 29 =>{ + { + let mut tmp = SpecialDateTimeFunctionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2129); + let tmp = recog.base.match_token(CURRENT_TIMESTAMP,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2133); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(276,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2130); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2131); + let tmp = recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.precision = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2132); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + , + 30 =>{ + { + let mut tmp = SpecialDateTimeFunctionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2135); + let tmp = recog.base.match_token(LOCALTIME,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2139); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(277,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2136); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2137); + let tmp = recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.precision = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2138); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + , + 31 =>{ + { + let mut tmp = SpecialDateTimeFunctionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2141); + let tmp = recog.base.match_token(LOCALTIMESTAMP,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2145); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(278,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2142); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2143); + let tmp = recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::SpecialDateTimeFunctionContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.precision = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2144); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + , + 32 =>{ + { + let mut tmp = CurrentUserContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2147); + let tmp = recog.base.match_token(CURRENT_USER,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::CurrentUserContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + , + 33 =>{ + { + let mut tmp = CurrentCatalogContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2148); + let tmp = recog.base.match_token(CURRENT_CATALOG,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::CurrentCatalogContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + , + 34 =>{ + { + let mut tmp = CurrentSchemaContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2149); + let tmp = recog.base.match_token(CURRENT_SCHEMA,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::CurrentSchemaContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + , + 35 =>{ + { + let mut tmp = CurrentPathContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2150); + let tmp = recog.base.match_token(CURRENT_PATH,&mut recog.err_handler)?; + if let PrimaryExpressionContextAll::CurrentPathContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.name = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + , + 36 =>{ + { + let mut tmp = TrimContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2151); + recog.base.match_token(TRIM,&mut recog.err_handler)?; + + recog.base.set_state(2152); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2160); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(281,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2154); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(279,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule trimsSpecification*/ + recog.base.set_state(2153); + recog.trimsSpecification()?; + + } + } + + _ => {} + } + recog.base.set_state(2157); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << T__1) | (1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CASE - 33)) | (1usize << (CAST - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (CURRENT_CATALOG - 33)) | (1usize << (CURRENT_DATE - 33)) | (1usize << (CURRENT_PATH - 33)) | (1usize << (CURRENT_SCHEMA - 33)) | (1usize << (CURRENT_TIME - 33)) | (1usize << (CURRENT_TIMESTAMP - 33)) | (1usize << (CURRENT_USER - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXISTS - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (EXTRACT - 66)) | (1usize << (FALSE - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPING - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)) | (1usize << (JSON_ARRAY - 100)) | (1usize << (JSON_EXISTS - 100)) | (1usize << (JSON_OBJECT - 100)) | (1usize << (JSON_QUERY - 100)))) != 0) || ((((_la - 132)) & !0x3f) == 0 && ((1usize << (_la - 132)) & ((1usize << (JSON_VALUE - 132)) | (1usize << (KEEP - 132)) | (1usize << (KEY - 132)) | (1usize << (KEYS - 132)) | (1usize << (LAST - 132)) | (1usize << (LATERAL - 132)) | (1usize << (LEADING - 132)) | (1usize << (LEVEL - 132)) | (1usize << (LIMIT - 132)) | (1usize << (LISTAGG - 132)) | (1usize << (LOCAL - 132)) | (1usize << (LOCALTIME - 132)) | (1usize << (LOCALTIMESTAMP - 132)) | (1usize << (LOGICAL - 132)) | (1usize << (MAP - 132)) | (1usize << (MATCH - 132)) | (1usize << (MATCHED - 132)) | (1usize << (MATCHES - 132)) | (1usize << (MATCH_RECOGNIZE - 132)) | (1usize << (MATERIALIZED - 132)) | (1usize << (MEASURES - 132)) | (1usize << (MERGE - 132)) | (1usize << (MINUTE - 132)) | (1usize << (MONTH - 132)) | (1usize << (NEXT - 132)) | (1usize << (NFC - 132)) | (1usize << (NFD - 132)) | (1usize << (NFKC - 132)) | (1usize << (NFKD - 132)))) != 0) || ((((_la - 164)) & !0x3f) == 0 && ((1usize << (_la - 164)) & ((1usize << (NO - 164)) | (1usize << (NONE - 164)) | (1usize << (NORMALIZE - 164)) | (1usize << (NULL - 164)) | (1usize << (NULLIF - 164)) | (1usize << (NULLS - 164)) | (1usize << (OBJECT - 164)) | (1usize << (OF - 164)) | (1usize << (OFFSET - 164)) | (1usize << (OMIT - 164)) | (1usize << (ONE - 164)) | (1usize << (ONLY - 164)) | (1usize << (OPTION - 164)) | (1usize << (ORDINALITY - 164)) | (1usize << (OUTPUT - 164)) | (1usize << (OVER - 164)) | (1usize << (OVERFLOW - 164)) | (1usize << (PARTITION - 164)) | (1usize << (PARTITIONS - 164)) | (1usize << (PASSING - 164)) | (1usize << (PAST - 164)) | (1usize << (PATH - 164)) | (1usize << (PATTERN - 164)) | (1usize << (PER - 164)) | (1usize << (PERIOD - 164)) | (1usize << (PERMUTE - 164)) | (1usize << (POSITION - 164)))) != 0) || ((((_la - 196)) & !0x3f) == 0 && ((1usize << (_la - 196)) & ((1usize << (PRECEDING - 196)) | (1usize << (PRECISION - 196)) | (1usize << (PRIVILEGES - 196)) | (1usize << (PROPERTIES - 196)) | (1usize << (PRUNE - 196)) | (1usize << (QUOTES - 196)) | (1usize << (RANGE - 196)) | (1usize << (READ - 196)) | (1usize << (REFRESH - 196)) | (1usize << (RENAME - 196)) | (1usize << (REPEATABLE - 196)) | (1usize << (REPLACE - 196)) | (1usize << (RESET - 196)) | (1usize << (RESPECT - 196)) | (1usize << (RESTRICT - 196)) | (1usize << (RETURNING - 196)) | (1usize << (REVOKE - 196)) | (1usize << (ROLE - 196)) | (1usize << (ROLES - 196)) | (1usize << (ROLLBACK - 196)) | (1usize << (ROW - 196)) | (1usize << (ROWS - 196)) | (1usize << (RUNNING - 196)) | (1usize << (SCALAR - 196)) | (1usize << (SCHEMA - 196)) | (1usize << (SCHEMAS - 196)) | (1usize << (SECOND - 196)) | (1usize << (SECURITY - 196)))) != 0) || ((((_la - 228)) & !0x3f) == 0 && ((1usize << (_la - 228)) & ((1usize << (SEEK - 228)) | (1usize << (SERIALIZABLE - 228)) | (1usize << (SESSION - 228)) | (1usize << (SET - 228)) | (1usize << (SETS - 228)) | (1usize << (SHOW - 228)) | (1usize << (SOME - 228)) | (1usize << (START - 228)) | (1usize << (STATS - 228)) | (1usize << (SUBSET - 228)) | (1usize << (SUBSTRING - 228)) | (1usize << (SYSTEM - 228)) | (1usize << (TABLES - 228)) | (1usize << (TABLESAMPLE - 228)) | (1usize << (TEXT - 228)) | (1usize << (TEXT_STRING - 228)) | (1usize << (TIES - 228)) | (1usize << (TIME - 228)) | (1usize << (TIMESTAMP - 228)) | (1usize << (TO - 228)) | (1usize << (TRAILING - 228)) | (1usize << (TRANSACTION - 228)) | (1usize << (TRIM - 228)) | (1usize << (TRUE - 228)) | (1usize << (TRUNCATE - 228)) | (1usize << (TRY_CAST - 228)) | (1usize << (TYPE - 228)) | (1usize << (UNBOUNDED - 228)))) != 0) || ((((_la - 260)) & !0x3f) == 0 && ((1usize << (_la - 260)) & ((1usize << (UNCOMMITTED - 260)) | (1usize << (UNCONDITIONAL - 260)) | (1usize << (UNIQUE - 260)) | (1usize << (UNKNOWN - 260)) | (1usize << (UNMATCHED - 260)) | (1usize << (UPDATE - 260)) | (1usize << (USE - 260)) | (1usize << (USER - 260)) | (1usize << (UTF16 - 260)) | (1usize << (UTF32 - 260)) | (1usize << (UTF8 - 260)) | (1usize << (VALIDATE - 260)) | (1usize << (VALUE - 260)) | (1usize << (VERBOSE - 260)) | (1usize << (VERSION - 260)) | (1usize << (VIEW - 260)) | (1usize << (WINDOW - 260)) | (1usize << (WITHIN - 260)) | (1usize << (WITHOUT - 260)) | (1usize << (WORK - 260)) | (1usize << (WRAPPER - 260)) | (1usize << (WRITE - 260)) | (1usize << (YEAR - 260)) | (1usize << (ZONE - 260)))) != 0) || ((((_la - 297)) & !0x3f) == 0 && ((1usize << (_la - 297)) & ((1usize << (PLUS - 297)) | (1usize << (MINUS - 297)) | (1usize << (QUESTION_MARK - 297)) | (1usize << (STRING - 297)) | (1usize << (UNICODE_STRING - 297)) | (1usize << (BINARY_LITERAL - 297)) | (1usize << (INTEGER_VALUE - 297)) | (1usize << (DECIMAL_VALUE - 297)) | (1usize << (DOUBLE_VALUE - 297)) | (1usize << (IDENTIFIER - 297)) | (1usize << (DIGIT_IDENTIFIER - 297)) | (1usize << (QUOTED_IDENTIFIER - 297)) | (1usize << (BACKQUOTED_IDENTIFIER - 297)))) != 0) { + { + /*InvokeRule valueExpression*/ + recog.base.set_state(2156); + let tmp = recog.valueExpression_rec(0)?; + if let PrimaryExpressionContextAll::TrimContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.trimChar = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2159); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule valueExpression*/ + recog.base.set_state(2162); + let tmp = recog.valueExpression_rec(0)?; + if let PrimaryExpressionContextAll::TrimContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.trimSource = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2163); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 37 =>{ + { + let mut tmp = TrimContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2165); + recog.base.match_token(TRIM,&mut recog.err_handler)?; + + recog.base.set_state(2166); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2167); + let tmp = recog.valueExpression_rec(0)?; + if let PrimaryExpressionContextAll::TrimContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.trimSource = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2168); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2169); + let tmp = recog.valueExpression_rec(0)?; + if let PrimaryExpressionContextAll::TrimContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.trimChar = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2170); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 38 =>{ + { + let mut tmp = SubstringContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2172); + recog.base.match_token(SUBSTRING,&mut recog.err_handler)?; + + recog.base.set_state(2173); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2174); + recog.valueExpression_rec(0)?; + + recog.base.set_state(2175); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2176); + recog.valueExpression_rec(0)?; + + recog.base.set_state(2179); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FOR { + { + recog.base.set_state(2177); + recog.base.match_token(FOR,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2178); + recog.valueExpression_rec(0)?; + + } + } + + recog.base.set_state(2181); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 39 =>{ + { + let mut tmp = NormalizeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2183); + recog.base.match_token(NORMALIZE,&mut recog.err_handler)?; + + recog.base.set_state(2184); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2185); + recog.valueExpression_rec(0)?; + + recog.base.set_state(2188); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==COMMA { + { + recog.base.set_state(2186); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule normalForm*/ + recog.base.set_state(2187); + recog.normalForm()?; + + } + } + + recog.base.set_state(2190); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 40 =>{ + { + let mut tmp = ExtractContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2192); + recog.base.match_token(EXTRACT,&mut recog.err_handler)?; + + recog.base.set_state(2193); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2194); + recog.identifier()?; + + recog.base.set_state(2195); + recog.base.match_token(FROM,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2196); + recog.valueExpression_rec(0)?; + + recog.base.set_state(2197); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 41 =>{ + { + let mut tmp = ParenthesizedExpressionContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2199); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2200); + recog.expression()?; + + recog.base.set_state(2201); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 42 =>{ + { + let mut tmp = GroupingOperationContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2203); + recog.base.match_token(GROUPING,&mut recog.err_handler)?; + + recog.base.set_state(2204); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2213); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if (((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)))) != 0) || ((((_la - 133)) & !0x3f) == 0 && ((1usize << (_la - 133)) & ((1usize << (KEEP - 133)) | (1usize << (KEY - 133)) | (1usize << (KEYS - 133)) | (1usize << (LAST - 133)) | (1usize << (LATERAL - 133)) | (1usize << (LEADING - 133)) | (1usize << (LEVEL - 133)) | (1usize << (LIMIT - 133)) | (1usize << (LOCAL - 133)) | (1usize << (LOGICAL - 133)) | (1usize << (MAP - 133)) | (1usize << (MATCH - 133)) | (1usize << (MATCHED - 133)) | (1usize << (MATCHES - 133)) | (1usize << (MATCH_RECOGNIZE - 133)) | (1usize << (MATERIALIZED - 133)) | (1usize << (MEASURES - 133)) | (1usize << (MERGE - 133)) | (1usize << (MINUTE - 133)) | (1usize << (MONTH - 133)) | (1usize << (NEXT - 133)) | (1usize << (NFC - 133)) | (1usize << (NFD - 133)) | (1usize << (NFKC - 133)) | (1usize << (NFKD - 133)) | (1usize << (NO - 133)))) != 0) || ((((_la - 165)) & !0x3f) == 0 && ((1usize << (_la - 165)) & ((1usize << (NONE - 165)) | (1usize << (NULLIF - 165)) | (1usize << (NULLS - 165)) | (1usize << (OBJECT - 165)) | (1usize << (OF - 165)) | (1usize << (OFFSET - 165)) | (1usize << (OMIT - 165)) | (1usize << (ONE - 165)) | (1usize << (ONLY - 165)) | (1usize << (OPTION - 165)) | (1usize << (ORDINALITY - 165)) | (1usize << (OUTPUT - 165)) | (1usize << (OVER - 165)) | (1usize << (OVERFLOW - 165)) | (1usize << (PARTITION - 165)) | (1usize << (PARTITIONS - 165)) | (1usize << (PASSING - 165)) | (1usize << (PAST - 165)) | (1usize << (PATH - 165)) | (1usize << (PATTERN - 165)) | (1usize << (PER - 165)) | (1usize << (PERIOD - 165)) | (1usize << (PERMUTE - 165)) | (1usize << (POSITION - 165)) | (1usize << (PRECEDING - 165)))) != 0) || ((((_la - 197)) & !0x3f) == 0 && ((1usize << (_la - 197)) & ((1usize << (PRECISION - 197)) | (1usize << (PRIVILEGES - 197)) | (1usize << (PROPERTIES - 197)) | (1usize << (PRUNE - 197)) | (1usize << (QUOTES - 197)) | (1usize << (RANGE - 197)) | (1usize << (READ - 197)) | (1usize << (REFRESH - 197)) | (1usize << (RENAME - 197)) | (1usize << (REPEATABLE - 197)) | (1usize << (REPLACE - 197)) | (1usize << (RESET - 197)) | (1usize << (RESPECT - 197)) | (1usize << (RESTRICT - 197)) | (1usize << (RETURNING - 197)) | (1usize << (REVOKE - 197)) | (1usize << (ROLE - 197)) | (1usize << (ROLES - 197)) | (1usize << (ROLLBACK - 197)) | (1usize << (ROW - 197)) | (1usize << (ROWS - 197)) | (1usize << (RUNNING - 197)) | (1usize << (SCALAR - 197)) | (1usize << (SCHEMA - 197)) | (1usize << (SCHEMAS - 197)) | (1usize << (SECOND - 197)) | (1usize << (SECURITY - 197)) | (1usize << (SEEK - 197)))) != 0) || ((((_la - 230)) & !0x3f) == 0 && ((1usize << (_la - 230)) & ((1usize << (SERIALIZABLE - 230)) | (1usize << (SESSION - 230)) | (1usize << (SET - 230)) | (1usize << (SETS - 230)) | (1usize << (SHOW - 230)) | (1usize << (SOME - 230)) | (1usize << (START - 230)) | (1usize << (STATS - 230)) | (1usize << (SUBSET - 230)) | (1usize << (SUBSTRING - 230)) | (1usize << (SYSTEM - 230)) | (1usize << (TABLES - 230)) | (1usize << (TABLESAMPLE - 230)) | (1usize << (TEXT - 230)) | (1usize << (TEXT_STRING - 230)) | (1usize << (TIES - 230)) | (1usize << (TIME - 230)) | (1usize << (TIMESTAMP - 230)) | (1usize << (TO - 230)) | (1usize << (TRAILING - 230)) | (1usize << (TRANSACTION - 230)) | (1usize << (TRUNCATE - 230)) | (1usize << (TRY_CAST - 230)) | (1usize << (TYPE - 230)) | (1usize << (UNBOUNDED - 230)) | (1usize << (UNCOMMITTED - 230)) | (1usize << (UNCONDITIONAL - 230)))) != 0) || ((((_la - 263)) & !0x3f) == 0 && ((1usize << (_la - 263)) & ((1usize << (UNIQUE - 263)) | (1usize << (UNKNOWN - 263)) | (1usize << (UNMATCHED - 263)) | (1usize << (UPDATE - 263)) | (1usize << (USE - 263)) | (1usize << (USER - 263)) | (1usize << (UTF16 - 263)) | (1usize << (UTF32 - 263)) | (1usize << (UTF8 - 263)) | (1usize << (VALIDATE - 263)) | (1usize << (VALUE - 263)) | (1usize << (VERBOSE - 263)) | (1usize << (VERSION - 263)) | (1usize << (VIEW - 263)) | (1usize << (WINDOW - 263)) | (1usize << (WITHIN - 263)) | (1usize << (WITHOUT - 263)) | (1usize << (WORK - 263)) | (1usize << (WRAPPER - 263)) | (1usize << (WRITE - 263)) | (1usize << (YEAR - 263)) | (1usize << (ZONE - 263)))) != 0) || ((((_la - 310)) & !0x3f) == 0 && ((1usize << (_la - 310)) & ((1usize << (IDENTIFIER - 310)) | (1usize << (DIGIT_IDENTIFIER - 310)) | (1usize << (QUOTED_IDENTIFIER - 310)) | (1usize << (BACKQUOTED_IDENTIFIER - 310)))) != 0) { + { + /*InvokeRule qualifiedName*/ + recog.base.set_state(2205); + recog.qualifiedName()?; + + recog.base.set_state(2210); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2206); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule qualifiedName*/ + recog.base.set_state(2207); + recog.qualifiedName()?; + + } + } + recog.base.set_state(2212); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(2215); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 43 =>{ + { + let mut tmp = JsonExistsContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2216); + recog.base.match_token(JSON_EXISTS,&mut recog.err_handler)?; + + recog.base.set_state(2217); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule jsonPathInvocation*/ + recog.base.set_state(2218); + recog.jsonPathInvocation()?; + + recog.base.set_state(2223); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ERROR || _la==FALSE || _la==TRUE || _la==UNKNOWN { + { + /*InvokeRule jsonExistsErrorBehavior*/ + recog.base.set_state(2219); + recog.jsonExistsErrorBehavior()?; + + recog.base.set_state(2220); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2221); + recog.base.match_token(ERROR,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2225); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 44 =>{ + { + let mut tmp = JsonValueContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2227); + recog.base.match_token(JSON_VALUE,&mut recog.err_handler)?; + + recog.base.set_state(2228); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule jsonPathInvocation*/ + recog.base.set_state(2229); + recog.jsonPathInvocation()?; + + recog.base.set_state(2232); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==RETURNING { + { + recog.base.set_state(2230); + recog.base.match_token(RETURNING,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2231); + recog.type__rec(0)?; + + } + } + + recog.base.set_state(2238); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(288,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule jsonValueBehavior*/ + recog.base.set_state(2234); + let tmp = recog.jsonValueBehavior()?; + if let PrimaryExpressionContextAll::JsonValueContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.emptyBehavior = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2235); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2236); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + } + } + + _ => {} + } + recog.base.set_state(2244); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==DEFAULT || _la==ERROR || _la==NULL { + { + /*InvokeRule jsonValueBehavior*/ + recog.base.set_state(2240); + let tmp = recog.jsonValueBehavior()?; + if let PrimaryExpressionContextAll::JsonValueContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.errorBehavior = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2241); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2242); + recog.base.match_token(ERROR,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2246); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 45 =>{ + { + let mut tmp = JsonQueryContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2248); + recog.base.match_token(JSON_QUERY,&mut recog.err_handler)?; + + recog.base.set_state(2249); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule jsonPathInvocation*/ + recog.base.set_state(2250); + recog.jsonPathInvocation()?; + + recog.base.set_state(2257); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==RETURNING { + { + recog.base.set_state(2251); + recog.base.match_token(RETURNING,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2252); + recog.type__rec(0)?; + + recog.base.set_state(2255); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FORMAT { + { + recog.base.set_state(2253); + recog.base.match_token(FORMAT,&mut recog.err_handler)?; + + /*InvokeRule jsonRepresentation*/ + recog.base.set_state(2254); + recog.jsonRepresentation()?; + + } + } + + } + } + + recog.base.set_state(2262); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==WITH || _la==WITHOUT { + { + /*InvokeRule jsonQueryWrapperBehavior*/ + recog.base.set_state(2259); + recog.jsonQueryWrapperBehavior()?; + + recog.base.set_state(2260); + recog.base.match_token(WRAPPER,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2271); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==KEEP || _la==OMIT { + { + recog.base.set_state(2264); + _la = recog.base.input.la(1); + if { !(_la==KEEP || _la==OMIT) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + recog.base.set_state(2265); + recog.base.match_token(QUOTES,&mut recog.err_handler)?; + + recog.base.set_state(2269); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ON { + { + recog.base.set_state(2266); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2267); + recog.base.match_token(SCALAR,&mut recog.err_handler)?; + + recog.base.set_state(2268); + recog.base.match_token(TEXT_STRING,&mut recog.err_handler)?; + + } + } + + } + } + + recog.base.set_state(2277); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(295,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule jsonQueryBehavior*/ + recog.base.set_state(2273); + let tmp = recog.jsonQueryBehavior()?; + if let PrimaryExpressionContextAll::JsonQueryContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.emptyBehavior = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2274); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2275); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + } + } + + _ => {} + } + recog.base.set_state(2283); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==EMPTY || _la==ERROR || _la==NULL { + { + /*InvokeRule jsonQueryBehavior*/ + recog.base.set_state(2279); + let tmp = recog.jsonQueryBehavior()?; + if let PrimaryExpressionContextAll::JsonQueryContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.errorBehavior = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2280); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2281); + recog.base.match_token(ERROR,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2285); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 46 =>{ + { + let mut tmp = JsonObjectContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2287); + recog.base.match_token(JSON_OBJECT,&mut recog.err_handler)?; + + recog.base.set_state(2288); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2317); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(302,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule jsonObjectMember*/ + recog.base.set_state(2289); + recog.jsonObjectMember()?; + + recog.base.set_state(2294); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2290); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule jsonObjectMember*/ + recog.base.set_state(2291); + recog.jsonObjectMember()?; + + } + } + recog.base.set_state(2296); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(2303); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + NULL + => { + { + recog.base.set_state(2297); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + recog.base.set_state(2298); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2299); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + ABSENT + => { + { + recog.base.set_state(2300); + recog.base.match_token(ABSENT,&mut recog.err_handler)?; + + recog.base.set_state(2301); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2302); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + T__2 | RETURNING | WITH | WITHOUT + => { + } + + _ => {} + } + recog.base.set_state(2315); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + WITH + => { + { + recog.base.set_state(2305); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(2306); + recog.base.match_token(UNIQUE,&mut recog.err_handler)?; + + recog.base.set_state(2308); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==KEYS { + { + recog.base.set_state(2307); + recog.base.match_token(KEYS,&mut recog.err_handler)?; + + } + } + + } + } + + WITHOUT + => { + { + recog.base.set_state(2310); + recog.base.match_token(WITHOUT,&mut recog.err_handler)?; + + recog.base.set_state(2311); + recog.base.match_token(UNIQUE,&mut recog.err_handler)?; + + recog.base.set_state(2313); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==KEYS { + { + recog.base.set_state(2312); + recog.base.match_token(KEYS,&mut recog.err_handler)?; + + } + } + + } + } + + T__2 | RETURNING + => { + } + + _ => {} + } + } + } + + _ => {} + } + recog.base.set_state(2325); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==RETURNING { + { + recog.base.set_state(2319); + recog.base.match_token(RETURNING,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2320); + recog.type__rec(0)?; + + recog.base.set_state(2323); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FORMAT { + { + recog.base.set_state(2321); + recog.base.match_token(FORMAT,&mut recog.err_handler)?; + + /*InvokeRule jsonRepresentation*/ + recog.base.set_state(2322); + recog.jsonRepresentation()?; + + } + } + + } + } + + recog.base.set_state(2327); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 47 =>{ + { + let mut tmp = JsonArrayContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2328); + recog.base.match_token(JSON_ARRAY,&mut recog.err_handler)?; + + recog.base.set_state(2329); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2346); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(307,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule jsonValueExpression*/ + recog.base.set_state(2330); + recog.jsonValueExpression()?; + + recog.base.set_state(2335); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2331); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule jsonValueExpression*/ + recog.base.set_state(2332); + recog.jsonValueExpression()?; + + } + } + recog.base.set_state(2337); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(2344); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + NULL + => { + { + recog.base.set_state(2338); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + recog.base.set_state(2339); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2340); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + ABSENT + => { + { + recog.base.set_state(2341); + recog.base.match_token(ABSENT,&mut recog.err_handler)?; + + recog.base.set_state(2342); + recog.base.match_token(ON,&mut recog.err_handler)?; + + recog.base.set_state(2343); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + T__2 | RETURNING + => { + } + + _ => {} + } + } + } + + _ => {} + } + recog.base.set_state(2354); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==RETURNING { + { + recog.base.set_state(2348); + recog.base.match_token(RETURNING,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2349); + recog.type__rec(0)?; + + recog.base.set_state(2352); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FORMAT { + { + recog.base.set_state(2350); + recog.base.match_token(FORMAT,&mut recog.err_handler)?; + + /*InvokeRule jsonRepresentation*/ + recog.base.set_state(2351); + recog.jsonRepresentation()?; + + } + } + + } + } + + recog.base.set_state(2356); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + + let tmp = recog.input.lt(-1).cloned(); + recog.ctx.as_ref().unwrap().set_stop(tmp); + recog.base.set_state(2369); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(312,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + recog.trigger_exit_rule_event(); + _prevctx = _localctx.clone(); + { + recog.base.set_state(2367); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(311,&mut recog.base)? { + 1 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = SubscriptContextExt::new(&**PrimaryExpressionContextExt::new(_parentctx.clone(), _parentState)); + if let PrimaryExpressionContextAll::SubscriptContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut tmp){ + ctx.value = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_primaryExpression); + _localctx = tmp; + recog.base.set_state(2359); + if !({recog.precpred(None, 24)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 24)".to_owned()), None))?; + } + recog.base.set_state(2360); + recog.base.match_token(T__6,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2361); + let tmp = recog.valueExpression_rec(0)?; + if let PrimaryExpressionContextAll::SubscriptContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.index = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2362); + recog.base.match_token(T__7,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = DereferenceContextExt::new(&**PrimaryExpressionContextExt::new(_parentctx.clone(), _parentState)); + if let PrimaryExpressionContextAll::DereferenceContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut tmp){ + ctx.base_ = Some(_prevctx.clone()); + } else {unreachable!("cant cast");} + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_primaryExpression); + _localctx = tmp; + recog.base.set_state(2364); + if !({recog.precpred(None, 22)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 22)".to_owned()), None))?; + } + recog.base.set_state(2365); + recog.base.match_token(T__0,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2366); + let tmp = recog.identifier()?; + if let PrimaryExpressionContextAll::DereferenceContext(ctx) = cast_mut::<_,PrimaryExpressionContextAll >(&mut _localctx){ + ctx.fieldName = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + recog.base.set_state(2371); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(312,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_) => {}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re)=>{ + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?;} + } + recog.base.unroll_recursion_context(_parentctx); + + Ok(_localctx) + } +} +//------------------- jsonPathInvocation ---------------- +pub type JsonPathInvocationContextAll<'input> = JsonPathInvocationContext<'input>; + + +pub type JsonPathInvocationContext<'input> = BaseParserRuleContext<'input,JsonPathInvocationContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonPathInvocationContextExt<'input>{ + pub path: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonPathInvocationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonPathInvocationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonPathInvocation(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonPathInvocation(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonPathInvocationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonPathInvocation } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonPathInvocation } +} +antlr_rust::tid!{JsonPathInvocationContextExt<'a>} + +impl<'input> JsonPathInvocationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonPathInvocationContextExt{ + path: None, + ph:PhantomData + }), + ) + } +} + +pub trait JsonPathInvocationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn jsonValueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} +fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token PASSING +/// Returns `None` if there is no child corresponding to token PASSING +fn PASSING(&self) -> Option>> where Self:Sized{ + self.get_token(PASSING, 0) +} +fn jsonArgument_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn jsonArgument(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} + +} + +impl<'input> JsonPathInvocationContextAttrs<'input> for JsonPathInvocationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonPathInvocation(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonPathInvocationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 122, RULE_jsonPathInvocation); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule jsonValueExpression*/ + recog.base.set_state(2372); + recog.jsonValueExpression()?; + + recog.base.set_state(2373); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(2374); + let tmp = recog.string()?; + cast_mut::<_,JsonPathInvocationContext >(&mut _localctx).path = Some(tmp.clone()); + + + recog.base.set_state(2384); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==PASSING { + { + recog.base.set_state(2375); + recog.base.match_token(PASSING,&mut recog.err_handler)?; + + /*InvokeRule jsonArgument*/ + recog.base.set_state(2376); + recog.jsonArgument()?; + + recog.base.set_state(2381); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2377); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule jsonArgument*/ + recog.base.set_state(2378); + recog.jsonArgument()?; + + } + } + recog.base.set_state(2383); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonValueExpression ---------------- +pub type JsonValueExpressionContextAll<'input> = JsonValueExpressionContext<'input>; + + +pub type JsonValueExpressionContext<'input> = BaseParserRuleContext<'input,JsonValueExpressionContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonValueExpressionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonValueExpressionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonValueExpressionContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonValueExpression(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonValueExpression(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonValueExpressionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonValueExpression } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonValueExpression } +} +antlr_rust::tid!{JsonValueExpressionContextExt<'a>} + +impl<'input> JsonValueExpressionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonValueExpressionContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonValueExpressionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token FORMAT +/// Returns `None` if there is no child corresponding to token FORMAT +fn FORMAT(&self) -> Option>> where Self:Sized{ + self.get_token(FORMAT, 0) +} +fn jsonRepresentation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> JsonValueExpressionContextAttrs<'input> for JsonValueExpressionContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonValueExpression(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonValueExpressionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 124, RULE_jsonValueExpression); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule expression*/ + recog.base.set_state(2386); + recog.expression()?; + + recog.base.set_state(2389); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==FORMAT { + { + recog.base.set_state(2387); + recog.base.match_token(FORMAT,&mut recog.err_handler)?; + + /*InvokeRule jsonRepresentation*/ + recog.base.set_state(2388); + recog.jsonRepresentation()?; + + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonRepresentation ---------------- +pub type JsonRepresentationContextAll<'input> = JsonRepresentationContext<'input>; + + +pub type JsonRepresentationContext<'input> = BaseParserRuleContext<'input,JsonRepresentationContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonRepresentationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonRepresentationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonRepresentationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonRepresentation(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonRepresentation(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonRepresentationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonRepresentation } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonRepresentation } +} +antlr_rust::tid!{JsonRepresentationContextExt<'a>} + +impl<'input> JsonRepresentationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonRepresentationContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonRepresentationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token JSON +/// Returns `None` if there is no child corresponding to token JSON +fn JSON(&self) -> Option>> where Self:Sized{ + self.get_token(JSON, 0) +} +/// Retrieves first TerminalNode corresponding to token ENCODING +/// Returns `None` if there is no child corresponding to token ENCODING +fn ENCODING(&self) -> Option>> where Self:Sized{ + self.get_token(ENCODING, 0) +} +/// Retrieves first TerminalNode corresponding to token UTF8 +/// Returns `None` if there is no child corresponding to token UTF8 +fn UTF8(&self) -> Option>> where Self:Sized{ + self.get_token(UTF8, 0) +} +/// Retrieves first TerminalNode corresponding to token UTF16 +/// Returns `None` if there is no child corresponding to token UTF16 +fn UTF16(&self) -> Option>> where Self:Sized{ + self.get_token(UTF16, 0) +} +/// Retrieves first TerminalNode corresponding to token UTF32 +/// Returns `None` if there is no child corresponding to token UTF32 +fn UTF32(&self) -> Option>> where Self:Sized{ + self.get_token(UTF32, 0) +} + +} + +impl<'input> JsonRepresentationContextAttrs<'input> for JsonRepresentationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonRepresentation(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonRepresentationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 126, RULE_jsonRepresentation); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2391); + recog.base.match_token(JSON,&mut recog.err_handler)?; + + recog.base.set_state(2394); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ENCODING { + { + recog.base.set_state(2392); + recog.base.match_token(ENCODING,&mut recog.err_handler)?; + + recog.base.set_state(2393); + _la = recog.base.input.la(1); + if { !(((((_la - 271)) & !0x3f) == 0 && ((1usize << (_la - 271)) & ((1usize << (UTF16 - 271)) | (1usize << (UTF32 - 271)) | (1usize << (UTF8 - 271)))) != 0)) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonArgument ---------------- +pub type JsonArgumentContextAll<'input> = JsonArgumentContext<'input>; + + +pub type JsonArgumentContext<'input> = BaseParserRuleContext<'input,JsonArgumentContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonArgumentContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonArgument(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonArgument(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonArgument } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonArgument } +} +antlr_rust::tid!{JsonArgumentContextExt<'a>} + +impl<'input> JsonArgumentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonArgumentContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonArgumentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn jsonValueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> JsonArgumentContextAttrs<'input> for JsonArgumentContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonArgument(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonArgumentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 128, RULE_jsonArgument); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule jsonValueExpression*/ + recog.base.set_state(2396); + recog.jsonValueExpression()?; + + recog.base.set_state(2397); + recog.base.match_token(AS,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2398); + recog.identifier()?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonExistsErrorBehavior ---------------- +pub type JsonExistsErrorBehaviorContextAll<'input> = JsonExistsErrorBehaviorContext<'input>; + + +pub type JsonExistsErrorBehaviorContext<'input> = BaseParserRuleContext<'input,JsonExistsErrorBehaviorContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonExistsErrorBehaviorContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonExistsErrorBehaviorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonExistsErrorBehaviorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonExistsErrorBehavior(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonExistsErrorBehavior(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonExistsErrorBehaviorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonExistsErrorBehavior } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonExistsErrorBehavior } +} +antlr_rust::tid!{JsonExistsErrorBehaviorContextExt<'a>} + +impl<'input> JsonExistsErrorBehaviorContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonExistsErrorBehaviorContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonExistsErrorBehaviorContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token TRUE +/// Returns `None` if there is no child corresponding to token TRUE +fn TRUE(&self) -> Option>> where Self:Sized{ + self.get_token(TRUE, 0) +} +/// Retrieves first TerminalNode corresponding to token FALSE +/// Returns `None` if there is no child corresponding to token FALSE +fn FALSE(&self) -> Option>> where Self:Sized{ + self.get_token(FALSE, 0) +} +/// Retrieves first TerminalNode corresponding to token UNKNOWN +/// Returns `None` if there is no child corresponding to token UNKNOWN +fn UNKNOWN(&self) -> Option>> where Self:Sized{ + self.get_token(UNKNOWN, 0) +} +/// Retrieves first TerminalNode corresponding to token ERROR +/// Returns `None` if there is no child corresponding to token ERROR +fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) +} + +} + +impl<'input> JsonExistsErrorBehaviorContextAttrs<'input> for JsonExistsErrorBehaviorContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonExistsErrorBehavior(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonExistsErrorBehaviorContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 130, RULE_jsonExistsErrorBehavior); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2400); + _la = recog.base.input.la(1); + if { !(_la==ERROR || _la==FALSE || _la==TRUE || _la==UNKNOWN) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonValueBehavior ---------------- +pub type JsonValueBehaviorContextAll<'input> = JsonValueBehaviorContext<'input>; + + +pub type JsonValueBehaviorContext<'input> = BaseParserRuleContext<'input,JsonValueBehaviorContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonValueBehaviorContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonValueBehaviorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonValueBehaviorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonValueBehavior(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonValueBehavior(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonValueBehaviorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonValueBehavior } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonValueBehavior } +} +antlr_rust::tid!{JsonValueBehaviorContextExt<'a>} + +impl<'input> JsonValueBehaviorContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonValueBehaviorContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonValueBehaviorContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ERROR +/// Returns `None` if there is no child corresponding to token ERROR +fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) +} +/// Retrieves first TerminalNode corresponding to token NULL +/// Returns `None` if there is no child corresponding to token NULL +fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) +} +/// Retrieves first TerminalNode corresponding to token DEFAULT +/// Returns `None` if there is no child corresponding to token DEFAULT +fn DEFAULT(&self) -> Option>> where Self:Sized{ + self.get_token(DEFAULT, 0) +} +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> JsonValueBehaviorContextAttrs<'input> for JsonValueBehaviorContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonValueBehavior(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonValueBehaviorContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 132, RULE_jsonValueBehavior); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2406); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ERROR + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2402); + recog.base.match_token(ERROR,&mut recog.err_handler)?; + + } + } + + NULL + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(2403); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + + DEFAULT + => { + //recog.base.enter_outer_alt(_localctx.clone(), 3); + recog.base.enter_outer_alt(None, 3); + { + recog.base.set_state(2404); + recog.base.match_token(DEFAULT,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2405); + recog.expression()?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonQueryWrapperBehavior ---------------- +pub type JsonQueryWrapperBehaviorContextAll<'input> = JsonQueryWrapperBehaviorContext<'input>; + + +pub type JsonQueryWrapperBehaviorContext<'input> = BaseParserRuleContext<'input,JsonQueryWrapperBehaviorContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonQueryWrapperBehaviorContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonQueryWrapperBehaviorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonQueryWrapperBehaviorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonQueryWrapperBehavior(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonQueryWrapperBehavior(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonQueryWrapperBehaviorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonQueryWrapperBehavior } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonQueryWrapperBehavior } +} +antlr_rust::tid!{JsonQueryWrapperBehaviorContextExt<'a>} + +impl<'input> JsonQueryWrapperBehaviorContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonQueryWrapperBehaviorContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonQueryWrapperBehaviorContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token WITHOUT +/// Returns `None` if there is no child corresponding to token WITHOUT +fn WITHOUT(&self) -> Option>> where Self:Sized{ + self.get_token(WITHOUT, 0) +} +/// Retrieves first TerminalNode corresponding to token ARRAY +/// Returns `None` if there is no child corresponding to token ARRAY +fn ARRAY(&self) -> Option>> where Self:Sized{ + self.get_token(ARRAY, 0) +} +/// Retrieves first TerminalNode corresponding to token WITH +/// Returns `None` if there is no child corresponding to token WITH +fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) +} +/// Retrieves first TerminalNode corresponding to token CONDITIONAL +/// Returns `None` if there is no child corresponding to token CONDITIONAL +fn CONDITIONAL(&self) -> Option>> where Self:Sized{ + self.get_token(CONDITIONAL, 0) +} +/// Retrieves first TerminalNode corresponding to token UNCONDITIONAL +/// Returns `None` if there is no child corresponding to token UNCONDITIONAL +fn UNCONDITIONAL(&self) -> Option>> where Self:Sized{ + self.get_token(UNCONDITIONAL, 0) +} + +} + +impl<'input> JsonQueryWrapperBehaviorContextAttrs<'input> for JsonQueryWrapperBehaviorContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonQueryWrapperBehavior(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonQueryWrapperBehaviorContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 134, RULE_jsonQueryWrapperBehavior); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2419); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + WITHOUT + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2408); + recog.base.match_token(WITHOUT,&mut recog.err_handler)?; + + recog.base.set_state(2410); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ARRAY { + { + recog.base.set_state(2409); + recog.base.match_token(ARRAY,&mut recog.err_handler)?; + + } + } + + } + } + + WITH + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(2412); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(2414); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==CONDITIONAL || _la==UNCONDITIONAL { + { + recog.base.set_state(2413); + _la = recog.base.input.la(1); + if { !(_la==CONDITIONAL || _la==UNCONDITIONAL) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + recog.base.set_state(2417); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==ARRAY { + { + recog.base.set_state(2416); + recog.base.match_token(ARRAY,&mut recog.err_handler)?; + + } + } + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonQueryBehavior ---------------- +pub type JsonQueryBehaviorContextAll<'input> = JsonQueryBehaviorContext<'input>; + + +pub type JsonQueryBehaviorContext<'input> = BaseParserRuleContext<'input,JsonQueryBehaviorContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonQueryBehaviorContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonQueryBehaviorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonQueryBehaviorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonQueryBehavior(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonQueryBehavior(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonQueryBehaviorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonQueryBehavior } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonQueryBehavior } +} +antlr_rust::tid!{JsonQueryBehaviorContextExt<'a>} + +impl<'input> JsonQueryBehaviorContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonQueryBehaviorContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonQueryBehaviorContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ERROR +/// Returns `None` if there is no child corresponding to token ERROR +fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) +} +/// Retrieves first TerminalNode corresponding to token NULL +/// Returns `None` if there is no child corresponding to token NULL +fn NULL(&self) -> Option>> where Self:Sized{ + self.get_token(NULL, 0) +} +/// Retrieves first TerminalNode corresponding to token EMPTY +/// Returns `None` if there is no child corresponding to token EMPTY +fn EMPTY(&self) -> Option>> where Self:Sized{ + self.get_token(EMPTY, 0) +} +/// Retrieves first TerminalNode corresponding to token ARRAY +/// Returns `None` if there is no child corresponding to token ARRAY +fn ARRAY(&self) -> Option>> where Self:Sized{ + self.get_token(ARRAY, 0) +} +/// Retrieves first TerminalNode corresponding to token OBJECT +/// Returns `None` if there is no child corresponding to token OBJECT +fn OBJECT(&self) -> Option>> where Self:Sized{ + self.get_token(OBJECT, 0) +} + +} + +impl<'input> JsonQueryBehaviorContextAttrs<'input> for JsonQueryBehaviorContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonQueryBehavior(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonQueryBehaviorContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 136, RULE_jsonQueryBehavior); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2427); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(322,&mut recog.base)? { + 1 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2421); + recog.base.match_token(ERROR,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(2422); + recog.base.match_token(NULL,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 3); + recog.base.enter_outer_alt(None, 3); + { + recog.base.set_state(2423); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + recog.base.set_state(2424); + recog.base.match_token(ARRAY,&mut recog.err_handler)?; + + } + } + , + 4 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 4); + recog.base.enter_outer_alt(None, 4); + { + recog.base.set_state(2425); + recog.base.match_token(EMPTY,&mut recog.err_handler)?; + + recog.base.set_state(2426); + recog.base.match_token(OBJECT,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- jsonObjectMember ---------------- +pub type JsonObjectMemberContextAll<'input> = JsonObjectMemberContext<'input>; + + +pub type JsonObjectMemberContext<'input> = BaseParserRuleContext<'input,JsonObjectMemberContextExt<'input>>; + +#[derive(Clone)] +pub struct JsonObjectMemberContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for JsonObjectMemberContext<'input>{} + +impl<'input,'a> Listenable + 'a> for JsonObjectMemberContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_jsonObjectMember(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_jsonObjectMember(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for JsonObjectMemberContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_jsonObjectMember } + //fn type_rule_index() -> usize where Self: Sized { RULE_jsonObjectMember } +} +antlr_rust::tid!{JsonObjectMemberContextExt<'a>} + +impl<'input> JsonObjectMemberContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,JsonObjectMemberContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait JsonObjectMemberContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token VALUE +/// Returns `None` if there is no child corresponding to token VALUE +fn VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(VALUE, 0) +} +fn jsonValueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token KEY +/// Returns `None` if there is no child corresponding to token KEY +fn KEY(&self) -> Option>> where Self:Sized{ + self.get_token(KEY, 0) +} + +} + +impl<'input> JsonObjectMemberContextAttrs<'input> for JsonObjectMemberContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn jsonObjectMember(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = JsonObjectMemberContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 138, RULE_jsonObjectMember); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2440); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(324,&mut recog.base)? { + 1 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2430); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(323,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2429); + recog.base.match_token(KEY,&mut recog.err_handler)?; + + } + } + + _ => {} + } + /*InvokeRule expression*/ + recog.base.set_state(2432); + recog.expression()?; + + recog.base.set_state(2433); + recog.base.match_token(VALUE,&mut recog.err_handler)?; + + /*InvokeRule jsonValueExpression*/ + recog.base.set_state(2434); + recog.jsonValueExpression()?; + + } + } + , + 2 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + /*InvokeRule expression*/ + recog.base.set_state(2436); + recog.expression()?; + + recog.base.set_state(2437); + recog.base.match_token(T__8,&mut recog.err_handler)?; + + /*InvokeRule jsonValueExpression*/ + recog.base.set_state(2438); + recog.jsonValueExpression()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- processingMode ---------------- +pub type ProcessingModeContextAll<'input> = ProcessingModeContext<'input>; + + +pub type ProcessingModeContext<'input> = BaseParserRuleContext<'input,ProcessingModeContextExt<'input>>; + +#[derive(Clone)] +pub struct ProcessingModeContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ProcessingModeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ProcessingModeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_processingMode(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_processingMode(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ProcessingModeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_processingMode } + //fn type_rule_index() -> usize where Self: Sized { RULE_processingMode } +} +antlr_rust::tid!{ProcessingModeContextExt<'a>} + +impl<'input> ProcessingModeContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ProcessingModeContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ProcessingModeContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token RUNNING +/// Returns `None` if there is no child corresponding to token RUNNING +fn RUNNING(&self) -> Option>> where Self:Sized{ + self.get_token(RUNNING, 0) +} +/// Retrieves first TerminalNode corresponding to token FINAL +/// Returns `None` if there is no child corresponding to token FINAL +fn FINAL(&self) -> Option>> where Self:Sized{ + self.get_token(FINAL, 0) +} + +} + +impl<'input> ProcessingModeContextAttrs<'input> for ProcessingModeContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn processingMode(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ProcessingModeContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 140, RULE_processingMode); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2442); + _la = recog.base.input.la(1); + if { !(_la==FINAL || _la==RUNNING) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- nullTreatment ---------------- +pub type NullTreatmentContextAll<'input> = NullTreatmentContext<'input>; + + +pub type NullTreatmentContext<'input> = BaseParserRuleContext<'input,NullTreatmentContextExt<'input>>; + +#[derive(Clone)] +pub struct NullTreatmentContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for NullTreatmentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NullTreatmentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_nullTreatment(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_nullTreatment(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for NullTreatmentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_nullTreatment } + //fn type_rule_index() -> usize where Self: Sized { RULE_nullTreatment } +} +antlr_rust::tid!{NullTreatmentContextExt<'a>} + +impl<'input> NullTreatmentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,NullTreatmentContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait NullTreatmentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token IGNORE +/// Returns `None` if there is no child corresponding to token IGNORE +fn IGNORE(&self) -> Option>> where Self:Sized{ + self.get_token(IGNORE, 0) +} +/// Retrieves first TerminalNode corresponding to token NULLS +/// Returns `None` if there is no child corresponding to token NULLS +fn NULLS(&self) -> Option>> where Self:Sized{ + self.get_token(NULLS, 0) +} +/// Retrieves first TerminalNode corresponding to token RESPECT +/// Returns `None` if there is no child corresponding to token RESPECT +fn RESPECT(&self) -> Option>> where Self:Sized{ + self.get_token(RESPECT, 0) +} + +} + +impl<'input> NullTreatmentContextAttrs<'input> for NullTreatmentContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn nullTreatment(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = NullTreatmentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 142, RULE_nullTreatment); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2448); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + IGNORE + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2444); + recog.base.match_token(IGNORE,&mut recog.err_handler)?; + + recog.base.set_state(2445); + recog.base.match_token(NULLS,&mut recog.err_handler)?; + + } + } + + RESPECT + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(2446); + recog.base.match_token(RESPECT,&mut recog.err_handler)?; + + recog.base.set_state(2447); + recog.base.match_token(NULLS,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- string ---------------- +#[derive(Debug)] +pub enum StringContextAll<'input>{ + UnicodeStringLiteralContext(UnicodeStringLiteralContext<'input>), + BasicStringLiteralContext(BasicStringLiteralContext<'input>), +Error(StringContext<'input>) +} +antlr_rust::tid!{StringContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for StringContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for StringContextAll<'input>{} + +impl<'input> Deref for StringContextAll<'input>{ + type Target = dyn StringContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use StringContextAll::*; + match self{ + UnicodeStringLiteralContext(inner) => inner, + BasicStringLiteralContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for StringContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type StringContext<'input> = BaseParserRuleContext<'input,StringContextExt<'input>>; + +#[derive(Clone)] +pub struct StringContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for StringContext<'input>{} + +impl<'input,'a> Listenable + 'a> for StringContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for StringContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_string } + //fn type_rule_index() -> usize where Self: Sized { RULE_string } +} +antlr_rust::tid!{StringContextExt<'a>} + +impl<'input> StringContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + StringContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,StringContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait StringContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> StringContextAttrs<'input> for StringContext<'input>{} + +pub type UnicodeStringLiteralContext<'input> = BaseParserRuleContext<'input,UnicodeStringLiteralContextExt<'input>>; + +pub trait UnicodeStringLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token UNICODE_STRING + /// Returns `None` if there is no child corresponding to token UNICODE_STRING + fn UNICODE_STRING(&self) -> Option>> where Self:Sized{ + self.get_token(UNICODE_STRING, 0) + } + /// Retrieves first TerminalNode corresponding to token UESCAPE + /// Returns `None` if there is no child corresponding to token UESCAPE + fn UESCAPE(&self) -> Option>> where Self:Sized{ + self.get_token(UESCAPE, 0) + } + /// Retrieves first TerminalNode corresponding to token STRING + /// Returns `None` if there is no child corresponding to token STRING + fn STRING(&self) -> Option>> where Self:Sized{ + self.get_token(STRING, 0) + } +} + +impl<'input> UnicodeStringLiteralContextAttrs<'input> for UnicodeStringLiteralContext<'input>{} + +pub struct UnicodeStringLiteralContextExt<'input>{ + base:StringContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UnicodeStringLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UnicodeStringLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UnicodeStringLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_unicodeStringLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for UnicodeStringLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_string } + //fn type_rule_index() -> usize where Self: Sized { RULE_string } +} + +impl<'input> Borrow> for UnicodeStringLiteralContext<'input>{ + fn borrow(&self) -> &StringContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UnicodeStringLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut StringContextExt<'input> { &mut self.base } +} + +impl<'input> StringContextAttrs<'input> for UnicodeStringLiteralContext<'input> {} + +impl<'input> UnicodeStringLiteralContextExt<'input>{ + fn new(ctx: &dyn StringContextAttrs<'input>) -> Rc> { + Rc::new( + StringContextAll::UnicodeStringLiteralContext( + BaseParserRuleContext::copy_from(ctx,UnicodeStringLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type BasicStringLiteralContext<'input> = BaseParserRuleContext<'input,BasicStringLiteralContextExt<'input>>; + +pub trait BasicStringLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token STRING + /// Returns `None` if there is no child corresponding to token STRING + fn STRING(&self) -> Option>> where Self:Sized{ + self.get_token(STRING, 0) + } +} + +impl<'input> BasicStringLiteralContextAttrs<'input> for BasicStringLiteralContext<'input>{} + +pub struct BasicStringLiteralContextExt<'input>{ + base:StringContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{BasicStringLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for BasicStringLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BasicStringLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_basicStringLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for BasicStringLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_string } + //fn type_rule_index() -> usize where Self: Sized { RULE_string } +} + +impl<'input> Borrow> for BasicStringLiteralContext<'input>{ + fn borrow(&self) -> &StringContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for BasicStringLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut StringContextExt<'input> { &mut self.base } +} + +impl<'input> StringContextAttrs<'input> for BasicStringLiteralContext<'input> {} + +impl<'input> BasicStringLiteralContextExt<'input>{ + fn new(ctx: &dyn StringContextAttrs<'input>) -> Rc> { + Rc::new( + StringContextAll::BasicStringLiteralContext( + BaseParserRuleContext::copy_from(ctx,BasicStringLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn string(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = StringContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 144, RULE_string); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2456); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + STRING + => { + let tmp = BasicStringLiteralContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2450); + recog.base.match_token(STRING,&mut recog.err_handler)?; + + } + } + + UNICODE_STRING + => { + let tmp = UnicodeStringLiteralContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2451); + recog.base.match_token(UNICODE_STRING,&mut recog.err_handler)?; + + recog.base.set_state(2454); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(326,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2452); + recog.base.match_token(UESCAPE,&mut recog.err_handler)?; + + recog.base.set_state(2453); + recog.base.match_token(STRING,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- timeZoneSpecifier ---------------- +#[derive(Debug)] +pub enum TimeZoneSpecifierContextAll<'input>{ + TimeZoneIntervalContext(TimeZoneIntervalContext<'input>), + TimeZoneStringContext(TimeZoneStringContext<'input>), +Error(TimeZoneSpecifierContext<'input>) +} +antlr_rust::tid!{TimeZoneSpecifierContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for TimeZoneSpecifierContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for TimeZoneSpecifierContextAll<'input>{} + +impl<'input> Deref for TimeZoneSpecifierContextAll<'input>{ + type Target = dyn TimeZoneSpecifierContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use TimeZoneSpecifierContextAll::*; + match self{ + TimeZoneIntervalContext(inner) => inner, + TimeZoneStringContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for TimeZoneSpecifierContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type TimeZoneSpecifierContext<'input> = BaseParserRuleContext<'input,TimeZoneSpecifierContextExt<'input>>; + +#[derive(Clone)] +pub struct TimeZoneSpecifierContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TimeZoneSpecifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TimeZoneSpecifierContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for TimeZoneSpecifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_timeZoneSpecifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_timeZoneSpecifier } +} +antlr_rust::tid!{TimeZoneSpecifierContextExt<'a>} + +impl<'input> TimeZoneSpecifierContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + TimeZoneSpecifierContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TimeZoneSpecifierContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait TimeZoneSpecifierContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> TimeZoneSpecifierContextAttrs<'input> for TimeZoneSpecifierContext<'input>{} + +pub type TimeZoneIntervalContext<'input> = BaseParserRuleContext<'input,TimeZoneIntervalContextExt<'input>>; + +pub trait TimeZoneIntervalContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TIME + /// Returns `None` if there is no child corresponding to token TIME + fn TIME(&self) -> Option>> where Self:Sized{ + self.get_token(TIME, 0) + } + /// Retrieves first TerminalNode corresponding to token ZONE + /// Returns `None` if there is no child corresponding to token ZONE + fn ZONE(&self) -> Option>> where Self:Sized{ + self.get_token(ZONE, 0) + } + fn interval(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TimeZoneIntervalContextAttrs<'input> for TimeZoneIntervalContext<'input>{} + +pub struct TimeZoneIntervalContextExt<'input>{ + base:TimeZoneSpecifierContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TimeZoneIntervalContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TimeZoneIntervalContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TimeZoneIntervalContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_timeZoneInterval(self); + } +} + +impl<'input> CustomRuleContext<'input> for TimeZoneIntervalContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_timeZoneSpecifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_timeZoneSpecifier } +} + +impl<'input> Borrow> for TimeZoneIntervalContext<'input>{ + fn borrow(&self) -> &TimeZoneSpecifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TimeZoneIntervalContext<'input>{ + fn borrow_mut(&mut self) -> &mut TimeZoneSpecifierContextExt<'input> { &mut self.base } +} + +impl<'input> TimeZoneSpecifierContextAttrs<'input> for TimeZoneIntervalContext<'input> {} + +impl<'input> TimeZoneIntervalContextExt<'input>{ + fn new(ctx: &dyn TimeZoneSpecifierContextAttrs<'input>) -> Rc> { + Rc::new( + TimeZoneSpecifierContextAll::TimeZoneIntervalContext( + BaseParserRuleContext::copy_from(ctx,TimeZoneIntervalContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type TimeZoneStringContext<'input> = BaseParserRuleContext<'input,TimeZoneStringContextExt<'input>>; + +pub trait TimeZoneStringContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TIME + /// Returns `None` if there is no child corresponding to token TIME + fn TIME(&self) -> Option>> where Self:Sized{ + self.get_token(TIME, 0) + } + /// Retrieves first TerminalNode corresponding to token ZONE + /// Returns `None` if there is no child corresponding to token ZONE + fn ZONE(&self) -> Option>> where Self:Sized{ + self.get_token(ZONE, 0) + } + fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> TimeZoneStringContextAttrs<'input> for TimeZoneStringContext<'input>{} + +pub struct TimeZoneStringContextExt<'input>{ + base:TimeZoneSpecifierContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TimeZoneStringContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TimeZoneStringContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TimeZoneStringContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_timeZoneString(self); + } +} + +impl<'input> CustomRuleContext<'input> for TimeZoneStringContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_timeZoneSpecifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_timeZoneSpecifier } +} + +impl<'input> Borrow> for TimeZoneStringContext<'input>{ + fn borrow(&self) -> &TimeZoneSpecifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TimeZoneStringContext<'input>{ + fn borrow_mut(&mut self) -> &mut TimeZoneSpecifierContextExt<'input> { &mut self.base } +} + +impl<'input> TimeZoneSpecifierContextAttrs<'input> for TimeZoneStringContext<'input> {} + +impl<'input> TimeZoneStringContextExt<'input>{ + fn new(ctx: &dyn TimeZoneSpecifierContextAttrs<'input>) -> Rc> { + Rc::new( + TimeZoneSpecifierContextAll::TimeZoneStringContext( + BaseParserRuleContext::copy_from(ctx,TimeZoneStringContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn timeZoneSpecifier(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TimeZoneSpecifierContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 146, RULE_timeZoneSpecifier); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2464); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(328,&mut recog.base)? { + 1 =>{ + let tmp = TimeZoneIntervalContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2458); + recog.base.match_token(TIME,&mut recog.err_handler)?; + + recog.base.set_state(2459); + recog.base.match_token(ZONE,&mut recog.err_handler)?; + + /*InvokeRule interval*/ + recog.base.set_state(2460); + recog.interval()?; + + } + } + , + 2 =>{ + let tmp = TimeZoneStringContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2461); + recog.base.match_token(TIME,&mut recog.err_handler)?; + + recog.base.set_state(2462); + recog.base.match_token(ZONE,&mut recog.err_handler)?; + + /*InvokeRule string*/ + recog.base.set_state(2463); + recog.string()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- comparisonOperator ---------------- +pub type ComparisonOperatorContextAll<'input> = ComparisonOperatorContext<'input>; + + +pub type ComparisonOperatorContext<'input> = BaseParserRuleContext<'input,ComparisonOperatorContextExt<'input>>; + +#[derive(Clone)] +pub struct ComparisonOperatorContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ComparisonOperatorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ComparisonOperatorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_comparisonOperator(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_comparisonOperator(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ComparisonOperatorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_comparisonOperator } + //fn type_rule_index() -> usize where Self: Sized { RULE_comparisonOperator } +} +antlr_rust::tid!{ComparisonOperatorContextExt<'a>} + +impl<'input> ComparisonOperatorContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ComparisonOperatorContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ComparisonOperatorContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token EQ +/// Returns `None` if there is no child corresponding to token EQ +fn EQ(&self) -> Option>> where Self:Sized{ + self.get_token(EQ, 0) +} +/// Retrieves first TerminalNode corresponding to token NEQ +/// Returns `None` if there is no child corresponding to token NEQ +fn NEQ(&self) -> Option>> where Self:Sized{ + self.get_token(NEQ, 0) +} +/// Retrieves first TerminalNode corresponding to token LT +/// Returns `None` if there is no child corresponding to token LT +fn LT(&self) -> Option>> where Self:Sized{ + self.get_token(LT, 0) +} +/// Retrieves first TerminalNode corresponding to token LTE +/// Returns `None` if there is no child corresponding to token LTE +fn LTE(&self) -> Option>> where Self:Sized{ + self.get_token(LTE, 0) +} +/// Retrieves first TerminalNode corresponding to token GT +/// Returns `None` if there is no child corresponding to token GT +fn GT(&self) -> Option>> where Self:Sized{ + self.get_token(GT, 0) +} +/// Retrieves first TerminalNode corresponding to token GTE +/// Returns `None` if there is no child corresponding to token GTE +fn GTE(&self) -> Option>> where Self:Sized{ + self.get_token(GTE, 0) +} + +} + +impl<'input> ComparisonOperatorContextAttrs<'input> for ComparisonOperatorContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn comparisonOperator(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ComparisonOperatorContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 148, RULE_comparisonOperator); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2466); + _la = recog.base.input.la(1); + if { !(((((_la - 291)) & !0x3f) == 0 && ((1usize << (_la - 291)) & ((1usize << (EQ - 291)) | (1usize << (NEQ - 291)) | (1usize << (LT - 291)) | (1usize << (LTE - 291)) | (1usize << (GT - 291)) | (1usize << (GTE - 291)))) != 0)) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- comparisonQuantifier ---------------- +pub type ComparisonQuantifierContextAll<'input> = ComparisonQuantifierContext<'input>; + + +pub type ComparisonQuantifierContext<'input> = BaseParserRuleContext<'input,ComparisonQuantifierContextExt<'input>>; + +#[derive(Clone)] +pub struct ComparisonQuantifierContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ComparisonQuantifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ComparisonQuantifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_comparisonQuantifier(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_comparisonQuantifier(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for ComparisonQuantifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_comparisonQuantifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_comparisonQuantifier } +} +antlr_rust::tid!{ComparisonQuantifierContextExt<'a>} + +impl<'input> ComparisonQuantifierContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ComparisonQuantifierContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait ComparisonQuantifierContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ALL +/// Returns `None` if there is no child corresponding to token ALL +fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) +} +/// Retrieves first TerminalNode corresponding to token SOME +/// Returns `None` if there is no child corresponding to token SOME +fn SOME(&self) -> Option>> where Self:Sized{ + self.get_token(SOME, 0) +} +/// Retrieves first TerminalNode corresponding to token ANY +/// Returns `None` if there is no child corresponding to token ANY +fn ANY(&self) -> Option>> where Self:Sized{ + self.get_token(ANY, 0) +} + +} + +impl<'input> ComparisonQuantifierContextAttrs<'input> for ComparisonQuantifierContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn comparisonQuantifier(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ComparisonQuantifierContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 150, RULE_comparisonQuantifier); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2468); + _la = recog.base.input.la(1); + if { !(_la==ALL || _la==ANY || _la==SOME) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- booleanValue ---------------- +pub type BooleanValueContextAll<'input> = BooleanValueContext<'input>; + + +pub type BooleanValueContext<'input> = BaseParserRuleContext<'input,BooleanValueContextExt<'input>>; + +#[derive(Clone)] +pub struct BooleanValueContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for BooleanValueContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BooleanValueContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_booleanValue(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_booleanValue(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for BooleanValueContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_booleanValue } + //fn type_rule_index() -> usize where Self: Sized { RULE_booleanValue } +} +antlr_rust::tid!{BooleanValueContextExt<'a>} + +impl<'input> BooleanValueContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,BooleanValueContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait BooleanValueContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token TRUE +/// Returns `None` if there is no child corresponding to token TRUE +fn TRUE(&self) -> Option>> where Self:Sized{ + self.get_token(TRUE, 0) +} +/// Retrieves first TerminalNode corresponding to token FALSE +/// Returns `None` if there is no child corresponding to token FALSE +fn FALSE(&self) -> Option>> where Self:Sized{ + self.get_token(FALSE, 0) +} + +} + +impl<'input> BooleanValueContextAttrs<'input> for BooleanValueContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn booleanValue(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = BooleanValueContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 152, RULE_booleanValue); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2470); + _la = recog.base.input.la(1); + if { !(_la==FALSE || _la==TRUE) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- interval ---------------- +pub type IntervalContextAll<'input> = IntervalContext<'input>; + + +pub type IntervalContext<'input> = BaseParserRuleContext<'input,IntervalContextExt<'input>>; + +#[derive(Clone)] +pub struct IntervalContextExt<'input>{ + pub sign: Option>, + pub from: Option>>, + pub to: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for IntervalContext<'input>{} + +impl<'input,'a> Listenable + 'a> for IntervalContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_interval(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_interval(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for IntervalContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_interval } + //fn type_rule_index() -> usize where Self: Sized { RULE_interval } +} +antlr_rust::tid!{IntervalContextExt<'a>} + +impl<'input> IntervalContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,IntervalContextExt{ + sign: None, + from: None, to: None, + ph:PhantomData + }), + ) + } +} + +pub trait IntervalContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token INTERVAL +/// Returns `None` if there is no child corresponding to token INTERVAL +fn INTERVAL(&self) -> Option>> where Self:Sized{ + self.get_token(INTERVAL, 0) +} +fn string(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn intervalField_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn intervalField(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token TO +/// Returns `None` if there is no child corresponding to token TO +fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) +} +/// Retrieves first TerminalNode corresponding to token PLUS +/// Returns `None` if there is no child corresponding to token PLUS +fn PLUS(&self) -> Option>> where Self:Sized{ + self.get_token(PLUS, 0) +} +/// Retrieves first TerminalNode corresponding to token MINUS +/// Returns `None` if there is no child corresponding to token MINUS +fn MINUS(&self) -> Option>> where Self:Sized{ + self.get_token(MINUS, 0) +} + +} + +impl<'input> IntervalContextAttrs<'input> for IntervalContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn interval(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = IntervalContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 154, RULE_interval); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2472); + recog.base.match_token(INTERVAL,&mut recog.err_handler)?; + + recog.base.set_state(2474); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==PLUS || _la==MINUS { + { + recog.base.set_state(2473); + cast_mut::<_,IntervalContext >(&mut _localctx).sign = recog.base.input.lt(1).cloned(); + + _la = recog.base.input.la(1); + if { !(_la==PLUS || _la==MINUS) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + cast_mut::<_,IntervalContext >(&mut _localctx).sign = Some(&tmp); + + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + /*InvokeRule string*/ + recog.base.set_state(2476); + recog.string()?; + + /*InvokeRule intervalField*/ + recog.base.set_state(2477); + let tmp = recog.intervalField()?; + cast_mut::<_,IntervalContext >(&mut _localctx).from = Some(tmp.clone()); + + + recog.base.set_state(2480); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(330,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2478); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule intervalField*/ + recog.base.set_state(2479); + let tmp = recog.intervalField()?; + cast_mut::<_,IntervalContext >(&mut _localctx).to = Some(tmp.clone()); + + + } + } + + _ => {} + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- intervalField ---------------- +pub type IntervalFieldContextAll<'input> = IntervalFieldContext<'input>; + + +pub type IntervalFieldContext<'input> = BaseParserRuleContext<'input,IntervalFieldContextExt<'input>>; + +#[derive(Clone)] +pub struct IntervalFieldContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for IntervalFieldContext<'input>{} + +impl<'input,'a> Listenable + 'a> for IntervalFieldContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_intervalField(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_intervalField(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for IntervalFieldContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_intervalField } + //fn type_rule_index() -> usize where Self: Sized { RULE_intervalField } +} +antlr_rust::tid!{IntervalFieldContextExt<'a>} + +impl<'input> IntervalFieldContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,IntervalFieldContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait IntervalFieldContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token YEAR +/// Returns `None` if there is no child corresponding to token YEAR +fn YEAR(&self) -> Option>> where Self:Sized{ + self.get_token(YEAR, 0) +} +/// Retrieves first TerminalNode corresponding to token MONTH +/// Returns `None` if there is no child corresponding to token MONTH +fn MONTH(&self) -> Option>> where Self:Sized{ + self.get_token(MONTH, 0) +} +/// Retrieves first TerminalNode corresponding to token DAY +/// Returns `None` if there is no child corresponding to token DAY +fn DAY(&self) -> Option>> where Self:Sized{ + self.get_token(DAY, 0) +} +/// Retrieves first TerminalNode corresponding to token HOUR +/// Returns `None` if there is no child corresponding to token HOUR +fn HOUR(&self) -> Option>> where Self:Sized{ + self.get_token(HOUR, 0) +} +/// Retrieves first TerminalNode corresponding to token MINUTE +/// Returns `None` if there is no child corresponding to token MINUTE +fn MINUTE(&self) -> Option>> where Self:Sized{ + self.get_token(MINUTE, 0) +} +/// Retrieves first TerminalNode corresponding to token SECOND +/// Returns `None` if there is no child corresponding to token SECOND +fn SECOND(&self) -> Option>> where Self:Sized{ + self.get_token(SECOND, 0) +} + +} + +impl<'input> IntervalFieldContextAttrs<'input> for IntervalFieldContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn intervalField(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = IntervalFieldContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 156, RULE_intervalField); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2482); + _la = recog.base.input.la(1); + if { !(_la==DAY || _la==HOUR || _la==MINUTE || _la==MONTH || _la==SECOND || _la==YEAR) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- normalForm ---------------- +pub type NormalFormContextAll<'input> = NormalFormContext<'input>; + + +pub type NormalFormContext<'input> = BaseParserRuleContext<'input,NormalFormContextExt<'input>>; + +#[derive(Clone)] +pub struct NormalFormContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for NormalFormContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NormalFormContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_normalForm(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_normalForm(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for NormalFormContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_normalForm } + //fn type_rule_index() -> usize where Self: Sized { RULE_normalForm } +} +antlr_rust::tid!{NormalFormContextExt<'a>} + +impl<'input> NormalFormContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,NormalFormContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait NormalFormContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token NFD +/// Returns `None` if there is no child corresponding to token NFD +fn NFD(&self) -> Option>> where Self:Sized{ + self.get_token(NFD, 0) +} +/// Retrieves first TerminalNode corresponding to token NFC +/// Returns `None` if there is no child corresponding to token NFC +fn NFC(&self) -> Option>> where Self:Sized{ + self.get_token(NFC, 0) +} +/// Retrieves first TerminalNode corresponding to token NFKD +/// Returns `None` if there is no child corresponding to token NFKD +fn NFKD(&self) -> Option>> where Self:Sized{ + self.get_token(NFKD, 0) +} +/// Retrieves first TerminalNode corresponding to token NFKC +/// Returns `None` if there is no child corresponding to token NFKC +fn NFKC(&self) -> Option>> where Self:Sized{ + self.get_token(NFKC, 0) +} + +} + +impl<'input> NormalFormContextAttrs<'input> for NormalFormContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn normalForm(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = NormalFormContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 158, RULE_normalForm); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2484); + _la = recog.base.input.la(1); + if { !(((((_la - 160)) & !0x3f) == 0 && ((1usize << (_la - 160)) & ((1usize << (NFC - 160)) | (1usize << (NFD - 160)) | (1usize << (NFKC - 160)) | (1usize << (NFKD - 160)))) != 0)) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- type_ ---------------- +#[derive(Debug)] +pub enum Type_ContextAll<'input>{ + RowTypeContext(RowTypeContext<'input>), + IntervalTypeContext(IntervalTypeContext<'input>), + ArrayTypeContext(ArrayTypeContext<'input>), + DoublePrecisionTypeContext(DoublePrecisionTypeContext<'input>), + LegacyArrayTypeContext(LegacyArrayTypeContext<'input>), + GenericTypeContext(GenericTypeContext<'input>), + DateTimeTypeContext(DateTimeTypeContext<'input>), + LegacyMapTypeContext(LegacyMapTypeContext<'input>), +Error(Type_Context<'input>) +} +antlr_rust::tid!{Type_ContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for Type_ContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for Type_ContextAll<'input>{} + +impl<'input> Deref for Type_ContextAll<'input>{ + type Target = dyn Type_ContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use Type_ContextAll::*; + match self{ + RowTypeContext(inner) => inner, + IntervalTypeContext(inner) => inner, + ArrayTypeContext(inner) => inner, + DoublePrecisionTypeContext(inner) => inner, + LegacyArrayTypeContext(inner) => inner, + GenericTypeContext(inner) => inner, + DateTimeTypeContext(inner) => inner, + LegacyMapTypeContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for Type_ContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type Type_Context<'input> = BaseParserRuleContext<'input,Type_ContextExt<'input>>; + +#[derive(Clone)] +pub struct Type_ContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for Type_Context<'input>{} + +impl<'input,'a> Listenable + 'a> for Type_Context<'input>{ +} + +impl<'input> CustomRuleContext<'input> for Type_ContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} +antlr_rust::tid!{Type_ContextExt<'a>} + +impl<'input> Type_ContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + Type_ContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,Type_ContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait Type_ContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> Type_ContextAttrs<'input> for Type_Context<'input>{} + +pub type RowTypeContext<'input> = BaseParserRuleContext<'input,RowTypeContextExt<'input>>; + +pub trait RowTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ROW + /// Returns `None` if there is no child corresponding to token ROW + fn ROW(&self) -> Option>> where Self:Sized{ + self.get_token(ROW, 0) + } + fn rowField_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn rowField(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> RowTypeContextAttrs<'input> for RowTypeContext<'input>{} + +pub struct RowTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RowTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RowTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RowTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rowType(self); + } +} + +impl<'input> CustomRuleContext<'input> for RowTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for RowTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RowTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for RowTypeContext<'input> {} + +impl<'input> RowTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::RowTypeContext( + BaseParserRuleContext::copy_from(ctx,RowTypeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type IntervalTypeContext<'input> = BaseParserRuleContext<'input,IntervalTypeContextExt<'input>>; + +pub trait IntervalTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token INTERVAL + /// Returns `None` if there is no child corresponding to token INTERVAL + fn INTERVAL(&self) -> Option>> where Self:Sized{ + self.get_token(INTERVAL, 0) + } + fn intervalField_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn intervalField(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token TO + /// Returns `None` if there is no child corresponding to token TO + fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) + } +} + +impl<'input> IntervalTypeContextAttrs<'input> for IntervalTypeContext<'input>{} + +pub struct IntervalTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + pub from: Option>>, + pub to: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{IntervalTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for IntervalTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for IntervalTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_intervalType(self); + } +} + +impl<'input> CustomRuleContext<'input> for IntervalTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for IntervalTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for IntervalTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for IntervalTypeContext<'input> {} + +impl<'input> IntervalTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::IntervalTypeContext( + BaseParserRuleContext::copy_from(ctx,IntervalTypeContextExt{ + from:None, to:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ArrayTypeContext<'input> = BaseParserRuleContext<'input,ArrayTypeContextExt<'input>>; + +pub trait ArrayTypeContextAttrs<'input>: PrestoParserContext<'input>{ + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token ARRAY + /// Returns `None` if there is no child corresponding to token ARRAY + fn ARRAY(&self) -> Option>> where Self:Sized{ + self.get_token(ARRAY, 0) + } + /// Retrieves first TerminalNode corresponding to token INTEGER_VALUE + /// Returns `None` if there is no child corresponding to token INTEGER_VALUE + fn INTEGER_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(INTEGER_VALUE, 0) + } +} + +impl<'input> ArrayTypeContextAttrs<'input> for ArrayTypeContext<'input>{} + +pub struct ArrayTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ArrayTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ArrayTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ArrayTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_arrayType(self); + } +} + +impl<'input> CustomRuleContext<'input> for ArrayTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for ArrayTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ArrayTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for ArrayTypeContext<'input> {} + +impl<'input> ArrayTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::ArrayTypeContext( + BaseParserRuleContext::copy_from(ctx,ArrayTypeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DoublePrecisionTypeContext<'input> = BaseParserRuleContext<'input,DoublePrecisionTypeContextExt<'input>>; + +pub trait DoublePrecisionTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DOUBLE + /// Returns `None` if there is no child corresponding to token DOUBLE + fn DOUBLE(&self) -> Option>> where Self:Sized{ + self.get_token(DOUBLE, 0) + } + /// Retrieves first TerminalNode corresponding to token PRECISION + /// Returns `None` if there is no child corresponding to token PRECISION + fn PRECISION(&self) -> Option>> where Self:Sized{ + self.get_token(PRECISION, 0) + } +} + +impl<'input> DoublePrecisionTypeContextAttrs<'input> for DoublePrecisionTypeContext<'input>{} + +pub struct DoublePrecisionTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DoublePrecisionTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DoublePrecisionTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DoublePrecisionTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_doublePrecisionType(self); + } +} + +impl<'input> CustomRuleContext<'input> for DoublePrecisionTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for DoublePrecisionTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DoublePrecisionTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for DoublePrecisionTypeContext<'input> {} + +impl<'input> DoublePrecisionTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::DoublePrecisionTypeContext( + BaseParserRuleContext::copy_from(ctx,DoublePrecisionTypeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type LegacyArrayTypeContext<'input> = BaseParserRuleContext<'input,LegacyArrayTypeContextExt<'input>>; + +pub trait LegacyArrayTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ARRAY + /// Returns `None` if there is no child corresponding to token ARRAY + fn ARRAY(&self) -> Option>> where Self:Sized{ + self.get_token(ARRAY, 0) + } + /// Retrieves first TerminalNode corresponding to token LT + /// Returns `None` if there is no child corresponding to token LT + fn LT(&self) -> Option>> where Self:Sized{ + self.get_token(LT, 0) + } + fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token GT + /// Returns `None` if there is no child corresponding to token GT + fn GT(&self) -> Option>> where Self:Sized{ + self.get_token(GT, 0) + } +} + +impl<'input> LegacyArrayTypeContextAttrs<'input> for LegacyArrayTypeContext<'input>{} + +pub struct LegacyArrayTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{LegacyArrayTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for LegacyArrayTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LegacyArrayTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_legacyArrayType(self); + } +} + +impl<'input> CustomRuleContext<'input> for LegacyArrayTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for LegacyArrayTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for LegacyArrayTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for LegacyArrayTypeContext<'input> {} + +impl<'input> LegacyArrayTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::LegacyArrayTypeContext( + BaseParserRuleContext::copy_from(ctx,LegacyArrayTypeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type GenericTypeContext<'input> = BaseParserRuleContext<'input,GenericTypeContextExt<'input>>; + +pub trait GenericTypeContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn typeParameter_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn typeParameter(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> GenericTypeContextAttrs<'input> for GenericTypeContext<'input>{} + +pub struct GenericTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{GenericTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for GenericTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GenericTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_genericType(self); + } +} + +impl<'input> CustomRuleContext<'input> for GenericTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for GenericTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for GenericTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for GenericTypeContext<'input> {} + +impl<'input> GenericTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::GenericTypeContext( + BaseParserRuleContext::copy_from(ctx,GenericTypeContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DateTimeTypeContext<'input> = BaseParserRuleContext<'input,DateTimeTypeContextExt<'input>>; + +pub trait DateTimeTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TIMESTAMP + /// Returns `None` if there is no child corresponding to token TIMESTAMP + fn TIMESTAMP(&self) -> Option>> where Self:Sized{ + self.get_token(TIMESTAMP, 0) + } + /// Retrieves first TerminalNode corresponding to token WITHOUT + /// Returns `None` if there is no child corresponding to token WITHOUT + fn WITHOUT(&self) -> Option>> where Self:Sized{ + self.get_token(WITHOUT, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token TIME in current rule + fn TIME_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token TIME, starting from 0. + /// Returns `None` if number of children corresponding to token TIME is less or equal than `i`. + fn TIME(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(TIME, i) + } + /// Retrieves first TerminalNode corresponding to token ZONE + /// Returns `None` if there is no child corresponding to token ZONE + fn ZONE(&self) -> Option>> where Self:Sized{ + self.get_token(ZONE, 0) + } + fn typeParameter(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token WITH + /// Returns `None` if there is no child corresponding to token WITH + fn WITH(&self) -> Option>> where Self:Sized{ + self.get_token(WITH, 0) + } +} + +impl<'input> DateTimeTypeContextAttrs<'input> for DateTimeTypeContext<'input>{} + +pub struct DateTimeTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + pub base_: Option>, + pub precision: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DateTimeTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DateTimeTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DateTimeTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_dateTimeType(self); + } +} + +impl<'input> CustomRuleContext<'input> for DateTimeTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for DateTimeTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DateTimeTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for DateTimeTypeContext<'input> {} + +impl<'input> DateTimeTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::DateTimeTypeContext( + BaseParserRuleContext::copy_from(ctx,DateTimeTypeContextExt{ + base_:None, + precision:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type LegacyMapTypeContext<'input> = BaseParserRuleContext<'input,LegacyMapTypeContextExt<'input>>; + +pub trait LegacyMapTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token MAP + /// Returns `None` if there is no child corresponding to token MAP + fn MAP(&self) -> Option>> where Self:Sized{ + self.get_token(MAP, 0) + } + /// Retrieves first TerminalNode corresponding to token LT + /// Returns `None` if there is no child corresponding to token LT + fn LT(&self) -> Option>> where Self:Sized{ + self.get_token(LT, 0) + } + /// Retrieves first TerminalNode corresponding to token COMMA + /// Returns `None` if there is no child corresponding to token COMMA + fn COMMA(&self) -> Option>> where Self:Sized{ + self.get_token(COMMA, 0) + } + /// Retrieves first TerminalNode corresponding to token GT + /// Returns `None` if there is no child corresponding to token GT + fn GT(&self) -> Option>> where Self:Sized{ + self.get_token(GT, 0) + } + fn type__all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn type_(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> LegacyMapTypeContextAttrs<'input> for LegacyMapTypeContext<'input>{} + +pub struct LegacyMapTypeContextExt<'input>{ + base:Type_ContextExt<'input>, + pub keyType: Option>>, + pub valueType: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{LegacyMapTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for LegacyMapTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LegacyMapTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_legacyMapType(self); + } +} + +impl<'input> CustomRuleContext<'input> for LegacyMapTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_type_ } + //fn type_rule_index() -> usize where Self: Sized { RULE_type_ } +} + +impl<'input> Borrow> for LegacyMapTypeContext<'input>{ + fn borrow(&self) -> &Type_ContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for LegacyMapTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut Type_ContextExt<'input> { &mut self.base } +} + +impl<'input> Type_ContextAttrs<'input> for LegacyMapTypeContext<'input> {} + +impl<'input> LegacyMapTypeContextExt<'input>{ + fn new(ctx: &dyn Type_ContextAttrs<'input>) -> Rc> { + Rc::new( + Type_ContextAll::LegacyMapTypeContext( + BaseParserRuleContext::copy_from(ctx,LegacyMapTypeContextExt{ + keyType:None, valueType:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn type_(&mut self,) + -> Result>,ANTLRError> { + self.type__rec(0) + } + + fn type__rec(&mut self, _p: isize) + -> Result>,ANTLRError> { + let recog = self; + let _parentctx = recog.ctx.take(); + let _parentState = recog.base.get_state(); + let mut _localctx = Type_ContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_recursion_rule(_localctx.clone(), 160, RULE_type_, _p); + let mut _localctx: Rc = _localctx; + let mut _prevctx = _localctx.clone(); + let _startState = 160; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2577); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(341,&mut recog.base)? { + 1 =>{ + { + let mut tmp = RowTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + + + recog.base.set_state(2487); + recog.base.match_token(ROW,&mut recog.err_handler)?; + + recog.base.set_state(2488); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule rowField*/ + recog.base.set_state(2489); + recog.rowField()?; + + recog.base.set_state(2494); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2490); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule rowField*/ + recog.base.set_state(2491); + recog.rowField()?; + + } + } + recog.base.set_state(2496); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(2497); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + { + let mut tmp = IntervalTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2499); + recog.base.match_token(INTERVAL,&mut recog.err_handler)?; + + /*InvokeRule intervalField*/ + recog.base.set_state(2500); + let tmp = recog.intervalField()?; + if let Type_ContextAll::IntervalTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.from = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2503); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(332,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2501); + recog.base.match_token(TO,&mut recog.err_handler)?; + + /*InvokeRule intervalField*/ + recog.base.set_state(2502); + let tmp = recog.intervalField()?; + if let Type_ContextAll::IntervalTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.to = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + , + 3 =>{ + { + let mut tmp = DateTimeTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2505); + let tmp = recog.base.match_token(TIMESTAMP,&mut recog.err_handler)?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.base_ = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2510); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(333,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2506); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule typeParameter*/ + recog.base.set_state(2507); + let tmp = recog.typeParameter()?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.precision = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2508); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + recog.base.set_state(2515); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(334,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2512); + recog.base.match_token(WITHOUT,&mut recog.err_handler)?; + + recog.base.set_state(2513); + recog.base.match_token(TIME,&mut recog.err_handler)?; + + recog.base.set_state(2514); + recog.base.match_token(ZONE,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + , + 4 =>{ + { + let mut tmp = DateTimeTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2517); + let tmp = recog.base.match_token(TIMESTAMP,&mut recog.err_handler)?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.base_ = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2522); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + recog.base.set_state(2518); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule typeParameter*/ + recog.base.set_state(2519); + let tmp = recog.typeParameter()?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.precision = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2520); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2524); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(2525); + recog.base.match_token(TIME,&mut recog.err_handler)?; + + recog.base.set_state(2526); + recog.base.match_token(ZONE,&mut recog.err_handler)?; + + } + } + , + 5 =>{ + { + let mut tmp = DateTimeTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2527); + let tmp = recog.base.match_token(TIME,&mut recog.err_handler)?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.base_ = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2532); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(336,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2528); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule typeParameter*/ + recog.base.set_state(2529); + let tmp = recog.typeParameter()?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.precision = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2530); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + recog.base.set_state(2537); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(337,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2534); + recog.base.match_token(WITHOUT,&mut recog.err_handler)?; + + recog.base.set_state(2535); + recog.base.match_token(TIME,&mut recog.err_handler)?; + + recog.base.set_state(2536); + recog.base.match_token(ZONE,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + , + 6 =>{ + { + let mut tmp = DateTimeTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2539); + let tmp = recog.base.match_token(TIME,&mut recog.err_handler)?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.base_ = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2544); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + recog.base.set_state(2540); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule typeParameter*/ + recog.base.set_state(2541); + let tmp = recog.typeParameter()?; + if let Type_ContextAll::DateTimeTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.precision = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2542); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2546); + recog.base.match_token(WITH,&mut recog.err_handler)?; + + recog.base.set_state(2547); + recog.base.match_token(TIME,&mut recog.err_handler)?; + + recog.base.set_state(2548); + recog.base.match_token(ZONE,&mut recog.err_handler)?; + + } + } + , + 7 =>{ + { + let mut tmp = DoublePrecisionTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2549); + recog.base.match_token(DOUBLE,&mut recog.err_handler)?; + + recog.base.set_state(2550); + recog.base.match_token(PRECISION,&mut recog.err_handler)?; + + } + } + , + 8 =>{ + { + let mut tmp = LegacyArrayTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2551); + recog.base.match_token(ARRAY,&mut recog.err_handler)?; + + recog.base.set_state(2552); + recog.base.match_token(LT,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2553); + recog.type__rec(0)?; + + recog.base.set_state(2554); + recog.base.match_token(GT,&mut recog.err_handler)?; + + } + } + , + 9 =>{ + { + let mut tmp = LegacyMapTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + recog.base.set_state(2556); + recog.base.match_token(MAP,&mut recog.err_handler)?; + + recog.base.set_state(2557); + recog.base.match_token(LT,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2558); + let tmp = recog.type__rec(0)?; + if let Type_ContextAll::LegacyMapTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.keyType = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2559); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule type_*/ + recog.base.set_state(2560); + let tmp = recog.type__rec(0)?; + if let Type_ContextAll::LegacyMapTypeContext(ctx) = cast_mut::<_,Type_ContextAll >(&mut _localctx){ + ctx.valueType = Some(tmp.clone()); } else {unreachable!("cant cast");} + + recog.base.set_state(2561); + recog.base.match_token(GT,&mut recog.err_handler)?; + + } + } + , + 10 =>{ + { + let mut tmp = GenericTypeContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + /*InvokeRule identifier*/ + recog.base.set_state(2563); + recog.identifier()?; + + recog.base.set_state(2575); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(340,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2564); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule typeParameter*/ + recog.base.set_state(2565); + recog.typeParameter()?; + + recog.base.set_state(2570); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2566); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule typeParameter*/ + recog.base.set_state(2567); + recog.typeParameter()?; + + } + } + recog.base.set_state(2572); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(2573); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + + _ => {} + } + + let tmp = recog.input.lt(-1).cloned(); + recog.ctx.as_ref().unwrap().set_stop(tmp); + recog.base.set_state(2588); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(343,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + recog.trigger_exit_rule_event(); + _prevctx = _localctx.clone(); + { + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = ArrayTypeContextExt::new(&**Type_ContextExt::new(_parentctx.clone(), _parentState)); + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_type_); + _localctx = tmp; + recog.base.set_state(2579); + if !({recog.precpred(None, 2)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 2)".to_owned()), None))?; + } + recog.base.set_state(2580); + recog.base.match_token(ARRAY,&mut recog.err_handler)?; + + recog.base.set_state(2584); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(342,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2581); + recog.base.match_token(T__6,&mut recog.err_handler)?; + + recog.base.set_state(2582); + recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + + recog.base.set_state(2583); + recog.base.match_token(T__7,&mut recog.err_handler)?; + + } + } + + _ => {} + } + } + } + } + recog.base.set_state(2590); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(343,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_) => {}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re)=>{ + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?;} + } + recog.base.unroll_recursion_context(_parentctx); + + Ok(_localctx) + } +} +//------------------- rowField ---------------- +pub type RowFieldContextAll<'input> = RowFieldContext<'input>; + + +pub type RowFieldContext<'input> = BaseParserRuleContext<'input,RowFieldContextExt<'input>>; + +#[derive(Clone)] +pub struct RowFieldContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RowFieldContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RowFieldContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rowField(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_rowField(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for RowFieldContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rowField } + //fn type_rule_index() -> usize where Self: Sized { RULE_rowField } +} +antlr_rust::tid!{RowFieldContextExt<'a>} + +impl<'input> RowFieldContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RowFieldContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait RowFieldContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> RowFieldContextAttrs<'input> for RowFieldContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn rowField(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = RowFieldContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 162, RULE_rowField); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2595); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(344,&mut recog.base)? { + 1 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule type_*/ + recog.base.set_state(2591); + recog.type__rec(0)?; + + } + } + , + 2 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + /*InvokeRule identifier*/ + recog.base.set_state(2592); + recog.identifier()?; + + /*InvokeRule type_*/ + recog.base.set_state(2593); + recog.type__rec(0)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- typeParameter ---------------- +pub type TypeParameterContextAll<'input> = TypeParameterContext<'input>; + + +pub type TypeParameterContext<'input> = BaseParserRuleContext<'input,TypeParameterContextExt<'input>>; + +#[derive(Clone)] +pub struct TypeParameterContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TypeParameterContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TypeParameterContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_typeParameter(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_typeParameter(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for TypeParameterContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_typeParameter } + //fn type_rule_index() -> usize where Self: Sized { RULE_typeParameter } +} +antlr_rust::tid!{TypeParameterContextExt<'a>} + +impl<'input> TypeParameterContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TypeParameterContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait TypeParameterContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token INTEGER_VALUE +/// Returns `None` if there is no child corresponding to token INTEGER_VALUE +fn INTEGER_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(INTEGER_VALUE, 0) +} +fn type_(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> TypeParameterContextAttrs<'input> for TypeParameterContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn typeParameter(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TypeParameterContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 164, RULE_typeParameter); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2599); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + INTEGER_VALUE + => { + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2597); + recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + + } + } + + ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | + AUTHORIZATION | BERNOULLI | BOTH | CALL | CASCADE | CATALOGS | COLUMN | + COLUMNS | COMMENT | COMMIT | COMMITTED | CONDITIONAL | COUNT | COPARTITION | + CURRENT | DATA | DATE | DAY | DEFAULT | DEFINE | DEFINER | DENY | DESC | + DESCRIPTOR | DISTRIBUTED | DOUBLE | EMPTY | ENCODING | ERROR | EXCLUDING | + EXPLAIN | FETCH | FILTER | FINAL | FIRST | FOLLOWING | FORMAT | FUNCTIONS | + GRACE | GRANT | GRANTED | GRANTS | GRAPHVIZ | GROUPS | HOUR | IF | IGNORE | + INCLUDING | INITIAL | INPUT | INTERVAL | INVOKER | IO | ISOLATION | JSON | + KEEP | KEY | KEYS | LAST | LATERAL | LEADING | LEVEL | LIMIT | LOCAL | + LOGICAL | MAP | MATCH | MATCHED | MATCHES | MATCH_RECOGNIZE | MATERIALIZED | + MEASURES | MERGE | MINUTE | MONTH | NEXT | NFC | NFD | NFKC | NFKD | + NO | NONE | NULLIF | NULLS | OBJECT | OF | OFFSET | OMIT | ONE | ONLY | + OPTION | ORDINALITY | OUTPUT | OVER | OVERFLOW | PARTITION | PARTITIONS | + PASSING | PAST | PATH | PATTERN | PER | PERIOD | PERMUTE | POSITION | + PRECEDING | PRECISION | PRIVILEGES | PROPERTIES | PRUNE | QUOTES | RANGE | + READ | REFRESH | RENAME | REPEATABLE | REPLACE | RESET | RESPECT | RESTRICT | + RETURNING | REVOKE | ROLE | ROLES | ROLLBACK | ROW | ROWS | RUNNING | + SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | SERIALIZABLE | + SESSION | SET | SETS | SHOW | SOME | START | STATS | SUBSET | SUBSTRING | + SYSTEM | TABLES | TABLESAMPLE | TEXT | TEXT_STRING | TIES | TIME | TIMESTAMP | + TO | TRAILING | TRANSACTION | TRUNCATE | TRY_CAST | TYPE | UNBOUNDED | + UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | UPDATE | + USE | USER | UTF16 | UTF32 | UTF8 | VALIDATE | VALUE | VERBOSE | VERSION | + VIEW | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE | YEAR | ZONE | + IDENTIFIER | DIGIT_IDENTIFIER | QUOTED_IDENTIFIER | BACKQUOTED_IDENTIFIER + => { + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + /*InvokeRule type_*/ + recog.base.set_state(2598); + recog.type__rec(0)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- whenClause ---------------- +pub type WhenClauseContextAll<'input> = WhenClauseContext<'input>; + + +pub type WhenClauseContext<'input> = BaseParserRuleContext<'input,WhenClauseContextExt<'input>>; + +#[derive(Clone)] +pub struct WhenClauseContextExt<'input>{ + pub condition: Option>>, + pub result: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for WhenClauseContext<'input>{} + +impl<'input,'a> Listenable + 'a> for WhenClauseContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_whenClause(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_whenClause(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for WhenClauseContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_whenClause } + //fn type_rule_index() -> usize where Self: Sized { RULE_whenClause } +} +antlr_rust::tid!{WhenClauseContextExt<'a>} + +impl<'input> WhenClauseContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,WhenClauseContextExt{ + condition: None, result: None, + ph:PhantomData + }), + ) + } +} + +pub trait WhenClauseContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token WHEN +/// Returns `None` if there is no child corresponding to token WHEN +fn WHEN(&self) -> Option>> where Self:Sized{ + self.get_token(WHEN, 0) +} +/// Retrieves first TerminalNode corresponding to token THEN +/// Returns `None` if there is no child corresponding to token THEN +fn THEN(&self) -> Option>> where Self:Sized{ + self.get_token(THEN, 0) +} +fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} + +} + +impl<'input> WhenClauseContextAttrs<'input> for WhenClauseContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn whenClause(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = WhenClauseContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 166, RULE_whenClause); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2601); + recog.base.match_token(WHEN,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2602); + let tmp = recog.expression()?; + cast_mut::<_,WhenClauseContext >(&mut _localctx).condition = Some(tmp.clone()); + + + recog.base.set_state(2603); + recog.base.match_token(THEN,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2604); + let tmp = recog.expression()?; + cast_mut::<_,WhenClauseContext >(&mut _localctx).result = Some(tmp.clone()); + + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- filter ---------------- +pub type FilterContextAll<'input> = FilterContext<'input>; + + +pub type FilterContext<'input> = BaseParserRuleContext<'input,FilterContextExt<'input>>; + +#[derive(Clone)] +pub struct FilterContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for FilterContext<'input>{} + +impl<'input,'a> Listenable + 'a> for FilterContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_filter(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_filter(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for FilterContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_filter } + //fn type_rule_index() -> usize where Self: Sized { RULE_filter } +} +antlr_rust::tid!{FilterContextExt<'a>} + +impl<'input> FilterContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,FilterContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait FilterContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token FILTER +/// Returns `None` if there is no child corresponding to token FILTER +fn FILTER(&self) -> Option>> where Self:Sized{ + self.get_token(FILTER, 0) +} +/// Retrieves first TerminalNode corresponding to token WHERE +/// Returns `None` if there is no child corresponding to token WHERE +fn WHERE(&self) -> Option>> where Self:Sized{ + self.get_token(WHERE, 0) +} +fn booleanExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> FilterContextAttrs<'input> for FilterContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn filter(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = FilterContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 168, RULE_filter); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2606); + recog.base.match_token(FILTER,&mut recog.err_handler)?; + + recog.base.set_state(2607); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2608); + recog.base.match_token(WHERE,&mut recog.err_handler)?; + + /*InvokeRule booleanExpression*/ + recog.base.set_state(2609); + recog.booleanExpression_rec(0)?; + + recog.base.set_state(2610); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- mergeCase ---------------- +#[derive(Debug)] +pub enum MergeCaseContextAll<'input>{ + MergeInsertContext(MergeInsertContext<'input>), + MergeUpdateContext(MergeUpdateContext<'input>), + MergeDeleteContext(MergeDeleteContext<'input>), +Error(MergeCaseContext<'input>) +} +antlr_rust::tid!{MergeCaseContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for MergeCaseContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for MergeCaseContextAll<'input>{} + +impl<'input> Deref for MergeCaseContextAll<'input>{ + type Target = dyn MergeCaseContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use MergeCaseContextAll::*; + match self{ + MergeInsertContext(inner) => inner, + MergeUpdateContext(inner) => inner, + MergeDeleteContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for MergeCaseContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type MergeCaseContext<'input> = BaseParserRuleContext<'input,MergeCaseContextExt<'input>>; + +#[derive(Clone)] +pub struct MergeCaseContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for MergeCaseContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MergeCaseContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for MergeCaseContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_mergeCase } + //fn type_rule_index() -> usize where Self: Sized { RULE_mergeCase } +} +antlr_rust::tid!{MergeCaseContextExt<'a>} + +impl<'input> MergeCaseContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + MergeCaseContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,MergeCaseContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait MergeCaseContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> MergeCaseContextAttrs<'input> for MergeCaseContext<'input>{} + +pub type MergeInsertContext<'input> = BaseParserRuleContext<'input,MergeInsertContextExt<'input>>; + +pub trait MergeInsertContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token WHEN + /// Returns `None` if there is no child corresponding to token WHEN + fn WHEN(&self) -> Option>> where Self:Sized{ + self.get_token(WHEN, 0) + } + /// Retrieves first TerminalNode corresponding to token NOT + /// Returns `None` if there is no child corresponding to token NOT + fn NOT(&self) -> Option>> where Self:Sized{ + self.get_token(NOT, 0) + } + /// Retrieves first TerminalNode corresponding to token MATCHED + /// Returns `None` if there is no child corresponding to token MATCHED + fn MATCHED(&self) -> Option>> where Self:Sized{ + self.get_token(MATCHED, 0) + } + /// Retrieves first TerminalNode corresponding to token THEN + /// Returns `None` if there is no child corresponding to token THEN + fn THEN(&self) -> Option>> where Self:Sized{ + self.get_token(THEN, 0) + } + /// Retrieves first TerminalNode corresponding to token INSERT + /// Returns `None` if there is no child corresponding to token INSERT + fn INSERT(&self) -> Option>> where Self:Sized{ + self.get_token(INSERT, 0) + } + /// Retrieves first TerminalNode corresponding to token VALUES + /// Returns `None` if there is no child corresponding to token VALUES + fn VALUES(&self) -> Option>> where Self:Sized{ + self.get_token(VALUES, 0) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token AND + /// Returns `None` if there is no child corresponding to token AND + fn AND(&self) -> Option>> where Self:Sized{ + self.get_token(AND, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> MergeInsertContextAttrs<'input> for MergeInsertContext<'input>{} + +pub struct MergeInsertContextExt<'input>{ + base:MergeCaseContextExt<'input>, + pub condition: Option>>, + pub identifier: Option>>, + pub targets:Vec>>, + pub expression: Option>>, + pub values:Vec>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{MergeInsertContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for MergeInsertContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MergeInsertContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_mergeInsert(self); + } +} + +impl<'input> CustomRuleContext<'input> for MergeInsertContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_mergeCase } + //fn type_rule_index() -> usize where Self: Sized { RULE_mergeCase } +} + +impl<'input> Borrow> for MergeInsertContext<'input>{ + fn borrow(&self) -> &MergeCaseContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for MergeInsertContext<'input>{ + fn borrow_mut(&mut self) -> &mut MergeCaseContextExt<'input> { &mut self.base } +} + +impl<'input> MergeCaseContextAttrs<'input> for MergeInsertContext<'input> {} + +impl<'input> MergeInsertContextExt<'input>{ + fn new(ctx: &dyn MergeCaseContextAttrs<'input>) -> Rc> { + Rc::new( + MergeCaseContextAll::MergeInsertContext( + BaseParserRuleContext::copy_from(ctx,MergeInsertContextExt{ + condition:None, identifier:None, expression:None, + targets:Vec::new(), values:Vec::new(), + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type MergeUpdateContext<'input> = BaseParserRuleContext<'input,MergeUpdateContextExt<'input>>; + +pub trait MergeUpdateContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token WHEN + /// Returns `None` if there is no child corresponding to token WHEN + fn WHEN(&self) -> Option>> where Self:Sized{ + self.get_token(WHEN, 0) + } + /// Retrieves first TerminalNode corresponding to token MATCHED + /// Returns `None` if there is no child corresponding to token MATCHED + fn MATCHED(&self) -> Option>> where Self:Sized{ + self.get_token(MATCHED, 0) + } + /// Retrieves first TerminalNode corresponding to token THEN + /// Returns `None` if there is no child corresponding to token THEN + fn THEN(&self) -> Option>> where Self:Sized{ + self.get_token(THEN, 0) + } + /// Retrieves first TerminalNode corresponding to token UPDATE + /// Returns `None` if there is no child corresponding to token UPDATE + fn UPDATE(&self) -> Option>> where Self:Sized{ + self.get_token(UPDATE, 0) + } + /// Retrieves first TerminalNode corresponding to token SET + /// Returns `None` if there is no child corresponding to token SET + fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token EQ in current rule + fn EQ_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token EQ, starting from 0. + /// Returns `None` if number of children corresponding to token EQ is less or equal than `i`. + fn EQ(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(EQ, i) + } + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + fn expression_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn expression(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves first TerminalNode corresponding to token AND + /// Returns `None` if there is no child corresponding to token AND + fn AND(&self) -> Option>> where Self:Sized{ + self.get_token(AND, 0) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> MergeUpdateContextAttrs<'input> for MergeUpdateContext<'input>{} + +pub struct MergeUpdateContextExt<'input>{ + base:MergeCaseContextExt<'input>, + pub condition: Option>>, + pub identifier: Option>>, + pub targets:Vec>>, + pub expression: Option>>, + pub values:Vec>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{MergeUpdateContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for MergeUpdateContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MergeUpdateContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_mergeUpdate(self); + } +} + +impl<'input> CustomRuleContext<'input> for MergeUpdateContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_mergeCase } + //fn type_rule_index() -> usize where Self: Sized { RULE_mergeCase } +} + +impl<'input> Borrow> for MergeUpdateContext<'input>{ + fn borrow(&self) -> &MergeCaseContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for MergeUpdateContext<'input>{ + fn borrow_mut(&mut self) -> &mut MergeCaseContextExt<'input> { &mut self.base } +} + +impl<'input> MergeCaseContextAttrs<'input> for MergeUpdateContext<'input> {} + +impl<'input> MergeUpdateContextExt<'input>{ + fn new(ctx: &dyn MergeCaseContextAttrs<'input>) -> Rc> { + Rc::new( + MergeCaseContextAll::MergeUpdateContext( + BaseParserRuleContext::copy_from(ctx,MergeUpdateContextExt{ + condition:None, identifier:None, expression:None, + targets:Vec::new(), values:Vec::new(), + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type MergeDeleteContext<'input> = BaseParserRuleContext<'input,MergeDeleteContextExt<'input>>; + +pub trait MergeDeleteContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token WHEN + /// Returns `None` if there is no child corresponding to token WHEN + fn WHEN(&self) -> Option>> where Self:Sized{ + self.get_token(WHEN, 0) + } + /// Retrieves first TerminalNode corresponding to token MATCHED + /// Returns `None` if there is no child corresponding to token MATCHED + fn MATCHED(&self) -> Option>> where Self:Sized{ + self.get_token(MATCHED, 0) + } + /// Retrieves first TerminalNode corresponding to token THEN + /// Returns `None` if there is no child corresponding to token THEN + fn THEN(&self) -> Option>> where Self:Sized{ + self.get_token(THEN, 0) + } + /// Retrieves first TerminalNode corresponding to token DELETE + /// Returns `None` if there is no child corresponding to token DELETE + fn DELETE(&self) -> Option>> where Self:Sized{ + self.get_token(DELETE, 0) + } + /// Retrieves first TerminalNode corresponding to token AND + /// Returns `None` if there is no child corresponding to token AND + fn AND(&self) -> Option>> where Self:Sized{ + self.get_token(AND, 0) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> MergeDeleteContextAttrs<'input> for MergeDeleteContext<'input>{} + +pub struct MergeDeleteContextExt<'input>{ + base:MergeCaseContextExt<'input>, + pub condition: Option>>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{MergeDeleteContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for MergeDeleteContext<'input>{} + +impl<'input,'a> Listenable + 'a> for MergeDeleteContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_mergeDelete(self); + } +} + +impl<'input> CustomRuleContext<'input> for MergeDeleteContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_mergeCase } + //fn type_rule_index() -> usize where Self: Sized { RULE_mergeCase } +} + +impl<'input> Borrow> for MergeDeleteContext<'input>{ + fn borrow(&self) -> &MergeCaseContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for MergeDeleteContext<'input>{ + fn borrow_mut(&mut self) -> &mut MergeCaseContextExt<'input> { &mut self.base } +} + +impl<'input> MergeCaseContextAttrs<'input> for MergeDeleteContext<'input> {} + +impl<'input> MergeDeleteContextExt<'input>{ + fn new(ctx: &dyn MergeCaseContextAttrs<'input>) -> Rc> { + Rc::new( + MergeCaseContextAll::MergeDeleteContext( + BaseParserRuleContext::copy_from(ctx,MergeDeleteContextExt{ + condition:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn mergeCase(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = MergeCaseContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 170, RULE_mergeCase); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2676); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(353,&mut recog.base)? { + 1 =>{ + let tmp = MergeUpdateContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2612); + recog.base.match_token(WHEN,&mut recog.err_handler)?; + + recog.base.set_state(2613); + recog.base.match_token(MATCHED,&mut recog.err_handler)?; + + recog.base.set_state(2616); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AND { + { + recog.base.set_state(2614); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2615); + let tmp = recog.expression()?; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.condition = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2618); + recog.base.match_token(THEN,&mut recog.err_handler)?; + + recog.base.set_state(2619); + recog.base.match_token(UPDATE,&mut recog.err_handler)?; + + recog.base.set_state(2620); + recog.base.match_token(SET,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2621); + let tmp = recog.identifier()?; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.targets.push(temp); } else {unreachable!("cant cast");} + recog.base.set_state(2622); + recog.base.match_token(EQ,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2623); + let tmp = recog.expression()?; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.values.push(temp); } else {unreachable!("cant cast");} + recog.base.set_state(2631); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2624); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2625); + let tmp = recog.identifier()?; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.targets.push(temp); } else {unreachable!("cant cast");} + recog.base.set_state(2626); + recog.base.match_token(EQ,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2627); + let tmp = recog.expression()?; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeUpdateContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.values.push(temp); } else {unreachable!("cant cast");} + } + } + recog.base.set_state(2633); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + , + 2 =>{ + let tmp = MergeDeleteContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2634); + recog.base.match_token(WHEN,&mut recog.err_handler)?; + + recog.base.set_state(2635); + recog.base.match_token(MATCHED,&mut recog.err_handler)?; + + recog.base.set_state(2638); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AND { + { + recog.base.set_state(2636); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2637); + let tmp = recog.expression()?; + if let MergeCaseContextAll::MergeDeleteContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.condition = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2640); + recog.base.match_token(THEN,&mut recog.err_handler)?; + + recog.base.set_state(2641); + recog.base.match_token(DELETE,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + let tmp = MergeInsertContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2642); + recog.base.match_token(WHEN,&mut recog.err_handler)?; + + recog.base.set_state(2643); + recog.base.match_token(NOT,&mut recog.err_handler)?; + + recog.base.set_state(2644); + recog.base.match_token(MATCHED,&mut recog.err_handler)?; + + recog.base.set_state(2647); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AND { + { + recog.base.set_state(2645); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2646); + let tmp = recog.expression()?; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.condition = Some(tmp.clone()); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2649); + recog.base.match_token(THEN,&mut recog.err_handler)?; + + recog.base.set_state(2650); + recog.base.match_token(INSERT,&mut recog.err_handler)?; + + recog.base.set_state(2662); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==T__1 { + { + recog.base.set_state(2651); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2652); + let tmp = recog.identifier()?; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.targets.push(temp); } else {unreachable!("cant cast");} + recog.base.set_state(2657); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2653); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2654); + let tmp = recog.identifier()?; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.identifier.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.targets.push(temp); } else {unreachable!("cant cast");} + } + } + recog.base.set_state(2659); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(2660); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2664); + recog.base.match_token(VALUES,&mut recog.err_handler)?; + + recog.base.set_state(2665); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2666); + let tmp = recog.expression()?; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.values.push(temp); } else {unreachable!("cant cast");} + recog.base.set_state(2671); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2667); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2668); + let tmp = recog.expression()?; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression = Some(tmp.clone()); } else {unreachable!("cant cast");} + + let temp = if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.expression.clone().unwrap() } else {unreachable!("cant cast");} ; + if let MergeCaseContextAll::MergeInsertContext(ctx) = cast_mut::<_,MergeCaseContextAll >(&mut _localctx){ + ctx.values.push(temp); } else {unreachable!("cant cast");} + } + } + recog.base.set_state(2673); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(2674); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- over ---------------- +pub type OverContextAll<'input> = OverContext<'input>; + + +pub type OverContext<'input> = BaseParserRuleContext<'input,OverContextExt<'input>>; + +#[derive(Clone)] +pub struct OverContextExt<'input>{ + pub windowName: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for OverContext<'input>{} + +impl<'input,'a> Listenable + 'a> for OverContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_over(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_over(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for OverContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_over } + //fn type_rule_index() -> usize where Self: Sized { RULE_over } +} +antlr_rust::tid!{OverContextExt<'a>} + +impl<'input> OverContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,OverContextExt{ + windowName: None, + ph:PhantomData + }), + ) + } +} + +pub trait OverContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token OVER +/// Returns `None` if there is no child corresponding to token OVER +fn OVER(&self) -> Option>> where Self:Sized{ + self.get_token(OVER, 0) +} +fn windowSpecification(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> OverContextAttrs<'input> for OverContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn over(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = OverContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 172, RULE_over); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2678); + recog.base.match_token(OVER,&mut recog.err_handler)?; + + recog.base.set_state(2684); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | + AUTHORIZATION | BERNOULLI | BOTH | CALL | CASCADE | CATALOGS | COLUMN | + COLUMNS | COMMENT | COMMIT | COMMITTED | CONDITIONAL | COUNT | COPARTITION | + CURRENT | DATA | DATE | DAY | DEFAULT | DEFINE | DEFINER | DENY | DESC | + DESCRIPTOR | DISTRIBUTED | DOUBLE | EMPTY | ENCODING | ERROR | EXCLUDING | + EXPLAIN | FETCH | FILTER | FINAL | FIRST | FOLLOWING | FORMAT | FUNCTIONS | + GRACE | GRANT | GRANTED | GRANTS | GRAPHVIZ | GROUPS | HOUR | IF | IGNORE | + INCLUDING | INITIAL | INPUT | INTERVAL | INVOKER | IO | ISOLATION | JSON | + KEEP | KEY | KEYS | LAST | LATERAL | LEADING | LEVEL | LIMIT | LOCAL | + LOGICAL | MAP | MATCH | MATCHED | MATCHES | MATCH_RECOGNIZE | MATERIALIZED | + MEASURES | MERGE | MINUTE | MONTH | NEXT | NFC | NFD | NFKC | NFKD | + NO | NONE | NULLIF | NULLS | OBJECT | OF | OFFSET | OMIT | ONE | ONLY | + OPTION | ORDINALITY | OUTPUT | OVER | OVERFLOW | PARTITION | PARTITIONS | + PASSING | PAST | PATH | PATTERN | PER | PERIOD | PERMUTE | POSITION | + PRECEDING | PRECISION | PRIVILEGES | PROPERTIES | PRUNE | QUOTES | RANGE | + READ | REFRESH | RENAME | REPEATABLE | REPLACE | RESET | RESPECT | RESTRICT | + RETURNING | REVOKE | ROLE | ROLES | ROLLBACK | ROW | ROWS | RUNNING | + SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | SERIALIZABLE | + SESSION | SET | SETS | SHOW | SOME | START | STATS | SUBSET | SUBSTRING | + SYSTEM | TABLES | TABLESAMPLE | TEXT | TEXT_STRING | TIES | TIME | TIMESTAMP | + TO | TRAILING | TRANSACTION | TRUNCATE | TRY_CAST | TYPE | UNBOUNDED | + UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | UPDATE | + USE | USER | UTF16 | UTF32 | UTF8 | VALIDATE | VALUE | VERBOSE | VERSION | + VIEW | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE | YEAR | ZONE | + IDENTIFIER | DIGIT_IDENTIFIER | QUOTED_IDENTIFIER | BACKQUOTED_IDENTIFIER + => { + { + /*InvokeRule identifier*/ + recog.base.set_state(2679); + let tmp = recog.identifier()?; + cast_mut::<_,OverContext >(&mut _localctx).windowName = Some(tmp.clone()); + + + } + } + + T__1 + => { + { + recog.base.set_state(2680); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule windowSpecification*/ + recog.base.set_state(2681); + recog.windowSpecification()?; + + recog.base.set_state(2682); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- windowFrame ---------------- +pub type WindowFrameContextAll<'input> = WindowFrameContext<'input>; + + +pub type WindowFrameContext<'input> = BaseParserRuleContext<'input,WindowFrameContextExt<'input>>; + +#[derive(Clone)] +pub struct WindowFrameContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for WindowFrameContext<'input>{} + +impl<'input,'a> Listenable + 'a> for WindowFrameContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_windowFrame(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_windowFrame(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for WindowFrameContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_windowFrame } + //fn type_rule_index() -> usize where Self: Sized { RULE_windowFrame } +} +antlr_rust::tid!{WindowFrameContextExt<'a>} + +impl<'input> WindowFrameContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,WindowFrameContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait WindowFrameContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn frameExtent(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token MEASURES +/// Returns `None` if there is no child corresponding to token MEASURES +fn MEASURES(&self) -> Option>> where Self:Sized{ + self.get_token(MEASURES, 0) +} +fn measureDefinition_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn measureDefinition(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token AFTER +/// Returns `None` if there is no child corresponding to token AFTER +fn AFTER(&self) -> Option>> where Self:Sized{ + self.get_token(AFTER, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCH +/// Returns `None` if there is no child corresponding to token MATCH +fn MATCH(&self) -> Option>> where Self:Sized{ + self.get_token(MATCH, 0) +} +fn skipTo(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token PATTERN +/// Returns `None` if there is no child corresponding to token PATTERN +fn PATTERN(&self) -> Option>> where Self:Sized{ + self.get_token(PATTERN, 0) +} +fn rowPattern(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token SUBSET +/// Returns `None` if there is no child corresponding to token SUBSET +fn SUBSET(&self) -> Option>> where Self:Sized{ + self.get_token(SUBSET, 0) +} +fn subsetDefinition_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn subsetDefinition(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token DEFINE +/// Returns `None` if there is no child corresponding to token DEFINE +fn DEFINE(&self) -> Option>> where Self:Sized{ + self.get_token(DEFINE, 0) +} +fn variableDefinition_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn variableDefinition(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token INITIAL +/// Returns `None` if there is no child corresponding to token INITIAL +fn INITIAL(&self) -> Option>> where Self:Sized{ + self.get_token(INITIAL, 0) +} +/// Retrieves first TerminalNode corresponding to token SEEK +/// Returns `None` if there is no child corresponding to token SEEK +fn SEEK(&self) -> Option>> where Self:Sized{ + self.get_token(SEEK, 0) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> WindowFrameContextAttrs<'input> for WindowFrameContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn windowFrame(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = WindowFrameContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 174, RULE_windowFrame); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2695); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==MEASURES { + { + recog.base.set_state(2686); + recog.base.match_token(MEASURES,&mut recog.err_handler)?; + + /*InvokeRule measureDefinition*/ + recog.base.set_state(2687); + recog.measureDefinition()?; + + recog.base.set_state(2692); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2688); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule measureDefinition*/ + recog.base.set_state(2689); + recog.measureDefinition()?; + + } + } + recog.base.set_state(2694); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + /*InvokeRule frameExtent*/ + recog.base.set_state(2697); + recog.frameExtent()?; + + recog.base.set_state(2701); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==AFTER { + { + recog.base.set_state(2698); + recog.base.match_token(AFTER,&mut recog.err_handler)?; + + recog.base.set_state(2699); + recog.base.match_token(MATCH,&mut recog.err_handler)?; + + /*InvokeRule skipTo*/ + recog.base.set_state(2700); + recog.skipTo()?; + + } + } + + recog.base.set_state(2704); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==INITIAL || _la==SEEK { + { + recog.base.set_state(2703); + _la = recog.base.input.la(1); + if { !(_la==INITIAL || _la==SEEK) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + recog.base.set_state(2711); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==PATTERN { + { + recog.base.set_state(2706); + recog.base.match_token(PATTERN,&mut recog.err_handler)?; + + recog.base.set_state(2707); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule rowPattern*/ + recog.base.set_state(2708); + recog.rowPattern_rec(0)?; + + recog.base.set_state(2709); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2722); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==SUBSET { + { + recog.base.set_state(2713); + recog.base.match_token(SUBSET,&mut recog.err_handler)?; + + /*InvokeRule subsetDefinition*/ + recog.base.set_state(2714); + recog.subsetDefinition()?; + + recog.base.set_state(2719); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2715); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule subsetDefinition*/ + recog.base.set_state(2716); + recog.subsetDefinition()?; + + } + } + recog.base.set_state(2721); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + recog.base.set_state(2733); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==DEFINE { + { + recog.base.set_state(2724); + recog.base.match_token(DEFINE,&mut recog.err_handler)?; + + /*InvokeRule variableDefinition*/ + recog.base.set_state(2725); + recog.variableDefinition()?; + + recog.base.set_state(2730); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2726); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule variableDefinition*/ + recog.base.set_state(2727); + recog.variableDefinition()?; + + } + } + recog.base.set_state(2732); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + } + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- frameExtent ---------------- +pub type FrameExtentContextAll<'input> = FrameExtentContext<'input>; + + +pub type FrameExtentContext<'input> = BaseParserRuleContext<'input,FrameExtentContextExt<'input>>; + +#[derive(Clone)] +pub struct FrameExtentContextExt<'input>{ + pub frameType: Option>, + pub start: Option>>, + pub end: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for FrameExtentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for FrameExtentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_frameExtent(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_frameExtent(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for FrameExtentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_frameExtent } + //fn type_rule_index() -> usize where Self: Sized { RULE_frameExtent } +} +antlr_rust::tid!{FrameExtentContextExt<'a>} + +impl<'input> FrameExtentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,FrameExtentContextExt{ + frameType: None, + start: None, end: None, + ph:PhantomData + }), + ) + } +} + +pub trait FrameExtentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token RANGE +/// Returns `None` if there is no child corresponding to token RANGE +fn RANGE(&self) -> Option>> where Self:Sized{ + self.get_token(RANGE, 0) +} +fn frameBound_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn frameBound(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves first TerminalNode corresponding to token ROWS +/// Returns `None` if there is no child corresponding to token ROWS +fn ROWS(&self) -> Option>> where Self:Sized{ + self.get_token(ROWS, 0) +} +/// Retrieves first TerminalNode corresponding to token GROUPS +/// Returns `None` if there is no child corresponding to token GROUPS +fn GROUPS(&self) -> Option>> where Self:Sized{ + self.get_token(GROUPS, 0) +} +/// Retrieves first TerminalNode corresponding to token BETWEEN +/// Returns `None` if there is no child corresponding to token BETWEEN +fn BETWEEN(&self) -> Option>> where Self:Sized{ + self.get_token(BETWEEN, 0) +} +/// Retrieves first TerminalNode corresponding to token AND +/// Returns `None` if there is no child corresponding to token AND +fn AND(&self) -> Option>> where Self:Sized{ + self.get_token(AND, 0) +} + +} + +impl<'input> FrameExtentContextAttrs<'input> for FrameExtentContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn frameExtent(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = FrameExtentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 176, RULE_frameExtent); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2759); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(364,&mut recog.base)? { + 1 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2735); + let tmp = recog.base.match_token(RANGE,&mut recog.err_handler)?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).frameType = Some(&tmp); + + + /*InvokeRule frameBound*/ + recog.base.set_state(2736); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).start = Some(tmp.clone()); + + + } + } + , + 2 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 2); + recog.base.enter_outer_alt(None, 2); + { + recog.base.set_state(2737); + let tmp = recog.base.match_token(ROWS,&mut recog.err_handler)?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).frameType = Some(&tmp); + + + /*InvokeRule frameBound*/ + recog.base.set_state(2738); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).start = Some(tmp.clone()); + + + } + } + , + 3 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 3); + recog.base.enter_outer_alt(None, 3); + { + recog.base.set_state(2739); + let tmp = recog.base.match_token(GROUPS,&mut recog.err_handler)?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).frameType = Some(&tmp); + + + /*InvokeRule frameBound*/ + recog.base.set_state(2740); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).start = Some(tmp.clone()); + + + } + } + , + 4 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 4); + recog.base.enter_outer_alt(None, 4); + { + recog.base.set_state(2741); + let tmp = recog.base.match_token(RANGE,&mut recog.err_handler)?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).frameType = Some(&tmp); + + + recog.base.set_state(2742); + recog.base.match_token(BETWEEN,&mut recog.err_handler)?; + + /*InvokeRule frameBound*/ + recog.base.set_state(2743); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).start = Some(tmp.clone()); + + + recog.base.set_state(2744); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule frameBound*/ + recog.base.set_state(2745); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).end = Some(tmp.clone()); + + + } + } + , + 5 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 5); + recog.base.enter_outer_alt(None, 5); + { + recog.base.set_state(2747); + let tmp = recog.base.match_token(ROWS,&mut recog.err_handler)?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).frameType = Some(&tmp); + + + recog.base.set_state(2748); + recog.base.match_token(BETWEEN,&mut recog.err_handler)?; + + /*InvokeRule frameBound*/ + recog.base.set_state(2749); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).start = Some(tmp.clone()); + + + recog.base.set_state(2750); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule frameBound*/ + recog.base.set_state(2751); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).end = Some(tmp.clone()); + + + } + } + , + 6 =>{ + //recog.base.enter_outer_alt(_localctx.clone(), 6); + recog.base.enter_outer_alt(None, 6); + { + recog.base.set_state(2753); + let tmp = recog.base.match_token(GROUPS,&mut recog.err_handler)?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).frameType = Some(&tmp); + + + recog.base.set_state(2754); + recog.base.match_token(BETWEEN,&mut recog.err_handler)?; + + /*InvokeRule frameBound*/ + recog.base.set_state(2755); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).start = Some(tmp.clone()); + + + recog.base.set_state(2756); + recog.base.match_token(AND,&mut recog.err_handler)?; + + /*InvokeRule frameBound*/ + recog.base.set_state(2757); + let tmp = recog.frameBound()?; + cast_mut::<_,FrameExtentContext >(&mut _localctx).end = Some(tmp.clone()); + + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- frameBound ---------------- +#[derive(Debug)] +pub enum FrameBoundContextAll<'input>{ + BoundedFrameContext(BoundedFrameContext<'input>), + UnboundedFrameContext(UnboundedFrameContext<'input>), + CurrentRowBoundContext(CurrentRowBoundContext<'input>), +Error(FrameBoundContext<'input>) +} +antlr_rust::tid!{FrameBoundContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for FrameBoundContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for FrameBoundContextAll<'input>{} + +impl<'input> Deref for FrameBoundContextAll<'input>{ + type Target = dyn FrameBoundContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use FrameBoundContextAll::*; + match self{ + BoundedFrameContext(inner) => inner, + UnboundedFrameContext(inner) => inner, + CurrentRowBoundContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for FrameBoundContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type FrameBoundContext<'input> = BaseParserRuleContext<'input,FrameBoundContextExt<'input>>; + +#[derive(Clone)] +pub struct FrameBoundContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for FrameBoundContext<'input>{} + +impl<'input,'a> Listenable + 'a> for FrameBoundContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for FrameBoundContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_frameBound } + //fn type_rule_index() -> usize where Self: Sized { RULE_frameBound } +} +antlr_rust::tid!{FrameBoundContextExt<'a>} + +impl<'input> FrameBoundContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + FrameBoundContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,FrameBoundContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait FrameBoundContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> FrameBoundContextAttrs<'input> for FrameBoundContext<'input>{} + +pub type BoundedFrameContext<'input> = BaseParserRuleContext<'input,BoundedFrameContextExt<'input>>; + +pub trait BoundedFrameContextAttrs<'input>: PrestoParserContext<'input>{ + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + /// Retrieves first TerminalNode corresponding to token PRECEDING + /// Returns `None` if there is no child corresponding to token PRECEDING + fn PRECEDING(&self) -> Option>> where Self:Sized{ + self.get_token(PRECEDING, 0) + } + /// Retrieves first TerminalNode corresponding to token FOLLOWING + /// Returns `None` if there is no child corresponding to token FOLLOWING + fn FOLLOWING(&self) -> Option>> where Self:Sized{ + self.get_token(FOLLOWING, 0) + } +} + +impl<'input> BoundedFrameContextAttrs<'input> for BoundedFrameContext<'input>{} + +pub struct BoundedFrameContextExt<'input>{ + base:FrameBoundContextExt<'input>, + pub boundType: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{BoundedFrameContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for BoundedFrameContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BoundedFrameContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_boundedFrame(self); + } +} + +impl<'input> CustomRuleContext<'input> for BoundedFrameContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_frameBound } + //fn type_rule_index() -> usize where Self: Sized { RULE_frameBound } +} + +impl<'input> Borrow> for BoundedFrameContext<'input>{ + fn borrow(&self) -> &FrameBoundContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for BoundedFrameContext<'input>{ + fn borrow_mut(&mut self) -> &mut FrameBoundContextExt<'input> { &mut self.base } +} + +impl<'input> FrameBoundContextAttrs<'input> for BoundedFrameContext<'input> {} + +impl<'input> BoundedFrameContextExt<'input>{ + fn new(ctx: &dyn FrameBoundContextAttrs<'input>) -> Rc> { + Rc::new( + FrameBoundContextAll::BoundedFrameContext( + BaseParserRuleContext::copy_from(ctx,BoundedFrameContextExt{ + boundType:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type UnboundedFrameContext<'input> = BaseParserRuleContext<'input,UnboundedFrameContextExt<'input>>; + +pub trait UnboundedFrameContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token UNBOUNDED + /// Returns `None` if there is no child corresponding to token UNBOUNDED + fn UNBOUNDED(&self) -> Option>> where Self:Sized{ + self.get_token(UNBOUNDED, 0) + } + /// Retrieves first TerminalNode corresponding to token PRECEDING + /// Returns `None` if there is no child corresponding to token PRECEDING + fn PRECEDING(&self) -> Option>> where Self:Sized{ + self.get_token(PRECEDING, 0) + } + /// Retrieves first TerminalNode corresponding to token FOLLOWING + /// Returns `None` if there is no child corresponding to token FOLLOWING + fn FOLLOWING(&self) -> Option>> where Self:Sized{ + self.get_token(FOLLOWING, 0) + } +} + +impl<'input> UnboundedFrameContextAttrs<'input> for UnboundedFrameContext<'input>{} + +pub struct UnboundedFrameContextExt<'input>{ + base:FrameBoundContextExt<'input>, + pub boundType: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UnboundedFrameContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UnboundedFrameContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UnboundedFrameContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_unboundedFrame(self); + } +} + +impl<'input> CustomRuleContext<'input> for UnboundedFrameContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_frameBound } + //fn type_rule_index() -> usize where Self: Sized { RULE_frameBound } +} + +impl<'input> Borrow> for UnboundedFrameContext<'input>{ + fn borrow(&self) -> &FrameBoundContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UnboundedFrameContext<'input>{ + fn borrow_mut(&mut self) -> &mut FrameBoundContextExt<'input> { &mut self.base } +} + +impl<'input> FrameBoundContextAttrs<'input> for UnboundedFrameContext<'input> {} + +impl<'input> UnboundedFrameContextExt<'input>{ + fn new(ctx: &dyn FrameBoundContextAttrs<'input>) -> Rc> { + Rc::new( + FrameBoundContextAll::UnboundedFrameContext( + BaseParserRuleContext::copy_from(ctx,UnboundedFrameContextExt{ + boundType:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CurrentRowBoundContext<'input> = BaseParserRuleContext<'input,CurrentRowBoundContextExt<'input>>; + +pub trait CurrentRowBoundContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT + /// Returns `None` if there is no child corresponding to token CURRENT + fn CURRENT(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT, 0) + } + /// Retrieves first TerminalNode corresponding to token ROW + /// Returns `None` if there is no child corresponding to token ROW + fn ROW(&self) -> Option>> where Self:Sized{ + self.get_token(ROW, 0) + } +} + +impl<'input> CurrentRowBoundContextAttrs<'input> for CurrentRowBoundContext<'input>{} + +pub struct CurrentRowBoundContextExt<'input>{ + base:FrameBoundContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CurrentRowBoundContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CurrentRowBoundContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CurrentRowBoundContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_currentRowBound(self); + } +} + +impl<'input> CustomRuleContext<'input> for CurrentRowBoundContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_frameBound } + //fn type_rule_index() -> usize where Self: Sized { RULE_frameBound } +} + +impl<'input> Borrow> for CurrentRowBoundContext<'input>{ + fn borrow(&self) -> &FrameBoundContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CurrentRowBoundContext<'input>{ + fn borrow_mut(&mut self) -> &mut FrameBoundContextExt<'input> { &mut self.base } +} + +impl<'input> FrameBoundContextAttrs<'input> for CurrentRowBoundContext<'input> {} + +impl<'input> CurrentRowBoundContextExt<'input>{ + fn new(ctx: &dyn FrameBoundContextAttrs<'input>) -> Rc> { + Rc::new( + FrameBoundContextAll::CurrentRowBoundContext( + BaseParserRuleContext::copy_from(ctx,CurrentRowBoundContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn frameBound(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = FrameBoundContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 178, RULE_frameBound); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2770); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(365,&mut recog.base)? { + 1 =>{ + let tmp = UnboundedFrameContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2761); + recog.base.match_token(UNBOUNDED,&mut recog.err_handler)?; + + recog.base.set_state(2762); + let tmp = recog.base.match_token(PRECEDING,&mut recog.err_handler)?; + if let FrameBoundContextAll::UnboundedFrameContext(ctx) = cast_mut::<_,FrameBoundContextAll >(&mut _localctx){ + ctx.boundType = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + , + 2 =>{ + let tmp = UnboundedFrameContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2763); + recog.base.match_token(UNBOUNDED,&mut recog.err_handler)?; + + recog.base.set_state(2764); + let tmp = recog.base.match_token(FOLLOWING,&mut recog.err_handler)?; + if let FrameBoundContextAll::UnboundedFrameContext(ctx) = cast_mut::<_,FrameBoundContextAll >(&mut _localctx){ + ctx.boundType = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + , + 3 =>{ + let tmp = CurrentRowBoundContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2765); + recog.base.match_token(CURRENT,&mut recog.err_handler)?; + + recog.base.set_state(2766); + recog.base.match_token(ROW,&mut recog.err_handler)?; + + } + } + , + 4 =>{ + let tmp = BoundedFrameContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + /*InvokeRule expression*/ + recog.base.set_state(2767); + recog.expression()?; + + recog.base.set_state(2768); + if let FrameBoundContextAll::BoundedFrameContext(ctx) = cast_mut::<_,FrameBoundContextAll >(&mut _localctx){ + ctx.boundType = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(_la==FOLLOWING || _la==PRECEDING) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let FrameBoundContextAll::BoundedFrameContext(ctx) = cast_mut::<_,FrameBoundContextAll >(&mut _localctx){ + ctx.boundType = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- rowPattern ---------------- +#[derive(Debug)] +pub enum RowPatternContextAll<'input>{ + QuantifiedPrimaryContext(QuantifiedPrimaryContext<'input>), + PatternConcatenationContext(PatternConcatenationContext<'input>), + PatternAlternationContext(PatternAlternationContext<'input>), +Error(RowPatternContext<'input>) +} +antlr_rust::tid!{RowPatternContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for RowPatternContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for RowPatternContextAll<'input>{} + +impl<'input> Deref for RowPatternContextAll<'input>{ + type Target = dyn RowPatternContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use RowPatternContextAll::*; + match self{ + QuantifiedPrimaryContext(inner) => inner, + PatternConcatenationContext(inner) => inner, + PatternAlternationContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for RowPatternContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type RowPatternContext<'input> = BaseParserRuleContext<'input,RowPatternContextExt<'input>>; + +#[derive(Clone)] +pub struct RowPatternContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RowPatternContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RowPatternContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for RowPatternContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rowPattern } + //fn type_rule_index() -> usize where Self: Sized { RULE_rowPattern } +} +antlr_rust::tid!{RowPatternContextExt<'a>} + +impl<'input> RowPatternContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + RowPatternContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RowPatternContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait RowPatternContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> RowPatternContextAttrs<'input> for RowPatternContext<'input>{} + +pub type QuantifiedPrimaryContext<'input> = BaseParserRuleContext<'input,QuantifiedPrimaryContextExt<'input>>; + +pub trait QuantifiedPrimaryContextAttrs<'input>: PrestoParserContext<'input>{ + fn patternPrimary(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn patternQuantifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> QuantifiedPrimaryContextAttrs<'input> for QuantifiedPrimaryContext<'input>{} + +pub struct QuantifiedPrimaryContextExt<'input>{ + base:RowPatternContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{QuantifiedPrimaryContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for QuantifiedPrimaryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QuantifiedPrimaryContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_quantifiedPrimary(self); + } +} + +impl<'input> CustomRuleContext<'input> for QuantifiedPrimaryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rowPattern } + //fn type_rule_index() -> usize where Self: Sized { RULE_rowPattern } +} + +impl<'input> Borrow> for QuantifiedPrimaryContext<'input>{ + fn borrow(&self) -> &RowPatternContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for QuantifiedPrimaryContext<'input>{ + fn borrow_mut(&mut self) -> &mut RowPatternContextExt<'input> { &mut self.base } +} + +impl<'input> RowPatternContextAttrs<'input> for QuantifiedPrimaryContext<'input> {} + +impl<'input> QuantifiedPrimaryContextExt<'input>{ + fn new(ctx: &dyn RowPatternContextAttrs<'input>) -> Rc> { + Rc::new( + RowPatternContextAll::QuantifiedPrimaryContext( + BaseParserRuleContext::copy_from(ctx,QuantifiedPrimaryContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PatternConcatenationContext<'input> = BaseParserRuleContext<'input,PatternConcatenationContextExt<'input>>; + +pub trait PatternConcatenationContextAttrs<'input>: PrestoParserContext<'input>{ + fn rowPattern_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn rowPattern(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> PatternConcatenationContextAttrs<'input> for PatternConcatenationContext<'input>{} + +pub struct PatternConcatenationContextExt<'input>{ + base:RowPatternContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PatternConcatenationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PatternConcatenationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PatternConcatenationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_patternConcatenation(self); + } +} + +impl<'input> CustomRuleContext<'input> for PatternConcatenationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rowPattern } + //fn type_rule_index() -> usize where Self: Sized { RULE_rowPattern } +} + +impl<'input> Borrow> for PatternConcatenationContext<'input>{ + fn borrow(&self) -> &RowPatternContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PatternConcatenationContext<'input>{ + fn borrow_mut(&mut self) -> &mut RowPatternContextExt<'input> { &mut self.base } +} + +impl<'input> RowPatternContextAttrs<'input> for PatternConcatenationContext<'input> {} + +impl<'input> PatternConcatenationContextExt<'input>{ + fn new(ctx: &dyn RowPatternContextAttrs<'input>) -> Rc> { + Rc::new( + RowPatternContextAll::PatternConcatenationContext( + BaseParserRuleContext::copy_from(ctx,PatternConcatenationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PatternAlternationContext<'input> = BaseParserRuleContext<'input,PatternAlternationContextExt<'input>>; + +pub trait PatternAlternationContextAttrs<'input>: PrestoParserContext<'input>{ + fn rowPattern_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn rowPattern(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> PatternAlternationContextAttrs<'input> for PatternAlternationContext<'input>{} + +pub struct PatternAlternationContextExt<'input>{ + base:RowPatternContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PatternAlternationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PatternAlternationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PatternAlternationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_patternAlternation(self); + } +} + +impl<'input> CustomRuleContext<'input> for PatternAlternationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rowPattern } + //fn type_rule_index() -> usize where Self: Sized { RULE_rowPattern } +} + +impl<'input> Borrow> for PatternAlternationContext<'input>{ + fn borrow(&self) -> &RowPatternContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PatternAlternationContext<'input>{ + fn borrow_mut(&mut self) -> &mut RowPatternContextExt<'input> { &mut self.base } +} + +impl<'input> RowPatternContextAttrs<'input> for PatternAlternationContext<'input> {} + +impl<'input> PatternAlternationContextExt<'input>{ + fn new(ctx: &dyn RowPatternContextAttrs<'input>) -> Rc> { + Rc::new( + RowPatternContextAll::PatternAlternationContext( + BaseParserRuleContext::copy_from(ctx,PatternAlternationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn rowPattern(&mut self,) + -> Result>,ANTLRError> { + self.rowPattern_rec(0) + } + + fn rowPattern_rec(&mut self, _p: isize) + -> Result>,ANTLRError> { + let recog = self; + let _parentctx = recog.ctx.take(); + let _parentState = recog.base.get_state(); + let mut _localctx = RowPatternContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_recursion_rule(_localctx.clone(), 180, RULE_rowPattern, _p); + let mut _localctx: Rc = _localctx; + let mut _prevctx = _localctx.clone(); + let _startState = 180; + let result: Result<(), ANTLRError> = (|| { + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + { + let mut tmp = QuantifiedPrimaryContextExt::new(&**_localctx); + recog.ctx = Some(tmp.clone()); + _localctx = tmp; + _prevctx = _localctx.clone(); + + + /*InvokeRule patternPrimary*/ + recog.base.set_state(2773); + recog.patternPrimary()?; + + recog.base.set_state(2775); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(366,&mut recog.base)? { + x if x == 1=>{ + { + /*InvokeRule patternQuantifier*/ + recog.base.set_state(2774); + recog.patternQuantifier()?; + + } + } + + _ => {} + } + } + + let tmp = recog.input.lt(-1).cloned(); + recog.ctx.as_ref().unwrap().set_stop(tmp); + recog.base.set_state(2784); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(368,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + recog.trigger_exit_rule_event(); + _prevctx = _localctx.clone(); + { + recog.base.set_state(2782); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(367,&mut recog.base)? { + 1 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = PatternConcatenationContextExt::new(&**RowPatternContextExt::new(_parentctx.clone(), _parentState)); + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_rowPattern); + _localctx = tmp; + recog.base.set_state(2777); + if !({recog.precpred(None, 2)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 2)".to_owned()), None))?; + } + /*InvokeRule rowPattern*/ + recog.base.set_state(2778); + recog.rowPattern_rec(3)?; + + } + } + , + 2 =>{ + { + /*recRuleLabeledAltStartAction*/ + let mut tmp = PatternAlternationContextExt::new(&**RowPatternContextExt::new(_parentctx.clone(), _parentState)); + recog.push_new_recursion_context(tmp.clone(), _startState, RULE_rowPattern); + _localctx = tmp; + recog.base.set_state(2779); + if !({recog.precpred(None, 1)}) { + Err(FailedPredicateError::new(&mut recog.base, Some("recog.precpred(None, 1)".to_owned()), None))?; + } + recog.base.set_state(2780); + recog.base.match_token(T__9,&mut recog.err_handler)?; + + /*InvokeRule rowPattern*/ + recog.base.set_state(2781); + recog.rowPattern_rec(2)?; + + } + } + + _ => {} + } + } + } + recog.base.set_state(2786); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(368,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_) => {}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re)=>{ + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?;} + } + recog.base.unroll_recursion_context(_parentctx); + + Ok(_localctx) + } +} +//------------------- patternPrimary ---------------- +#[derive(Debug)] +pub enum PatternPrimaryContextAll<'input>{ + PatternPermutationContext(PatternPermutationContext<'input>), + PartitionEndAnchorContext(PartitionEndAnchorContext<'input>), + PatternVariableContext(PatternVariableContext<'input>), + ExcludedPatternContext(ExcludedPatternContext<'input>), + PartitionStartAnchorContext(PartitionStartAnchorContext<'input>), + EmptyPatternContext(EmptyPatternContext<'input>), + GroupedPatternContext(GroupedPatternContext<'input>), +Error(PatternPrimaryContext<'input>) +} +antlr_rust::tid!{PatternPrimaryContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for PatternPrimaryContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for PatternPrimaryContextAll<'input>{} + +impl<'input> Deref for PatternPrimaryContextAll<'input>{ + type Target = dyn PatternPrimaryContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use PatternPrimaryContextAll::*; + match self{ + PatternPermutationContext(inner) => inner, + PartitionEndAnchorContext(inner) => inner, + PatternVariableContext(inner) => inner, + ExcludedPatternContext(inner) => inner, + PartitionStartAnchorContext(inner) => inner, + EmptyPatternContext(inner) => inner, + GroupedPatternContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for PatternPrimaryContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type PatternPrimaryContext<'input> = BaseParserRuleContext<'input,PatternPrimaryContextExt<'input>>; + +#[derive(Clone)] +pub struct PatternPrimaryContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PatternPrimaryContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PatternPrimaryContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for PatternPrimaryContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} +antlr_rust::tid!{PatternPrimaryContextExt<'a>} + +impl<'input> PatternPrimaryContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + PatternPrimaryContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PatternPrimaryContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait PatternPrimaryContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> PatternPrimaryContextAttrs<'input> for PatternPrimaryContext<'input>{} + +pub type PatternPermutationContext<'input> = BaseParserRuleContext<'input,PatternPermutationContextExt<'input>>; + +pub trait PatternPermutationContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token PERMUTE + /// Returns `None` if there is no child corresponding to token PERMUTE + fn PERMUTE(&self) -> Option>> where Self:Sized{ + self.get_token(PERMUTE, 0) + } + fn rowPattern_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn rowPattern(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } + /// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule + fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. + /// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. + fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) + } +} + +impl<'input> PatternPermutationContextAttrs<'input> for PatternPermutationContext<'input>{} + +pub struct PatternPermutationContextExt<'input>{ + base:PatternPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PatternPermutationContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PatternPermutationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PatternPermutationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_patternPermutation(self); + } +} + +impl<'input> CustomRuleContext<'input> for PatternPermutationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} + +impl<'input> Borrow> for PatternPermutationContext<'input>{ + fn borrow(&self) -> &PatternPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PatternPermutationContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> PatternPrimaryContextAttrs<'input> for PatternPermutationContext<'input> {} + +impl<'input> PatternPermutationContextExt<'input>{ + fn new(ctx: &dyn PatternPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + PatternPrimaryContextAll::PatternPermutationContext( + BaseParserRuleContext::copy_from(ctx,PatternPermutationContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PartitionEndAnchorContext<'input> = BaseParserRuleContext<'input,PartitionEndAnchorContextExt<'input>>; + +pub trait PartitionEndAnchorContextAttrs<'input>: PrestoParserContext<'input>{ +} + +impl<'input> PartitionEndAnchorContextAttrs<'input> for PartitionEndAnchorContext<'input>{} + +pub struct PartitionEndAnchorContextExt<'input>{ + base:PatternPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PartitionEndAnchorContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PartitionEndAnchorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PartitionEndAnchorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_partitionEndAnchor(self); + } +} + +impl<'input> CustomRuleContext<'input> for PartitionEndAnchorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} + +impl<'input> Borrow> for PartitionEndAnchorContext<'input>{ + fn borrow(&self) -> &PatternPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PartitionEndAnchorContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> PatternPrimaryContextAttrs<'input> for PartitionEndAnchorContext<'input> {} + +impl<'input> PartitionEndAnchorContextExt<'input>{ + fn new(ctx: &dyn PatternPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + PatternPrimaryContextAll::PartitionEndAnchorContext( + BaseParserRuleContext::copy_from(ctx,PartitionEndAnchorContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PatternVariableContext<'input> = BaseParserRuleContext<'input,PatternVariableContextExt<'input>>; + +pub trait PatternVariableContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> PatternVariableContextAttrs<'input> for PatternVariableContext<'input>{} + +pub struct PatternVariableContextExt<'input>{ + base:PatternPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PatternVariableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PatternVariableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PatternVariableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_patternVariable(self); + } +} + +impl<'input> CustomRuleContext<'input> for PatternVariableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} + +impl<'input> Borrow> for PatternVariableContext<'input>{ + fn borrow(&self) -> &PatternPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PatternVariableContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> PatternPrimaryContextAttrs<'input> for PatternVariableContext<'input> {} + +impl<'input> PatternVariableContextExt<'input>{ + fn new(ctx: &dyn PatternPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + PatternPrimaryContextAll::PatternVariableContext( + BaseParserRuleContext::copy_from(ctx,PatternVariableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ExcludedPatternContext<'input> = BaseParserRuleContext<'input,ExcludedPatternContextExt<'input>>; + +pub trait ExcludedPatternContextAttrs<'input>: PrestoParserContext<'input>{ + fn rowPattern(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> ExcludedPatternContextAttrs<'input> for ExcludedPatternContext<'input>{} + +pub struct ExcludedPatternContextExt<'input>{ + base:PatternPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExcludedPatternContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExcludedPatternContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExcludedPatternContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_excludedPattern(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExcludedPatternContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} + +impl<'input> Borrow> for ExcludedPatternContext<'input>{ + fn borrow(&self) -> &PatternPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExcludedPatternContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> PatternPrimaryContextAttrs<'input> for ExcludedPatternContext<'input> {} + +impl<'input> ExcludedPatternContextExt<'input>{ + fn new(ctx: &dyn PatternPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + PatternPrimaryContextAll::ExcludedPatternContext( + BaseParserRuleContext::copy_from(ctx,ExcludedPatternContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type PartitionStartAnchorContext<'input> = BaseParserRuleContext<'input,PartitionStartAnchorContextExt<'input>>; + +pub trait PartitionStartAnchorContextAttrs<'input>: PrestoParserContext<'input>{ +} + +impl<'input> PartitionStartAnchorContextAttrs<'input> for PartitionStartAnchorContext<'input>{} + +pub struct PartitionStartAnchorContextExt<'input>{ + base:PatternPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PartitionStartAnchorContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PartitionStartAnchorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PartitionStartAnchorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_partitionStartAnchor(self); + } +} + +impl<'input> CustomRuleContext<'input> for PartitionStartAnchorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} + +impl<'input> Borrow> for PartitionStartAnchorContext<'input>{ + fn borrow(&self) -> &PatternPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PartitionStartAnchorContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> PatternPrimaryContextAttrs<'input> for PartitionStartAnchorContext<'input> {} + +impl<'input> PartitionStartAnchorContextExt<'input>{ + fn new(ctx: &dyn PatternPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + PatternPrimaryContextAll::PartitionStartAnchorContext( + BaseParserRuleContext::copy_from(ctx,PartitionStartAnchorContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type EmptyPatternContext<'input> = BaseParserRuleContext<'input,EmptyPatternContextExt<'input>>; + +pub trait EmptyPatternContextAttrs<'input>: PrestoParserContext<'input>{ +} + +impl<'input> EmptyPatternContextAttrs<'input> for EmptyPatternContext<'input>{} + +pub struct EmptyPatternContextExt<'input>{ + base:PatternPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{EmptyPatternContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for EmptyPatternContext<'input>{} + +impl<'input,'a> Listenable + 'a> for EmptyPatternContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_emptyPattern(self); + } +} + +impl<'input> CustomRuleContext<'input> for EmptyPatternContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} + +impl<'input> Borrow> for EmptyPatternContext<'input>{ + fn borrow(&self) -> &PatternPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for EmptyPatternContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> PatternPrimaryContextAttrs<'input> for EmptyPatternContext<'input> {} + +impl<'input> EmptyPatternContextExt<'input>{ + fn new(ctx: &dyn PatternPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + PatternPrimaryContextAll::EmptyPatternContext( + BaseParserRuleContext::copy_from(ctx,EmptyPatternContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type GroupedPatternContext<'input> = BaseParserRuleContext<'input,GroupedPatternContextExt<'input>>; + +pub trait GroupedPatternContextAttrs<'input>: PrestoParserContext<'input>{ + fn rowPattern(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> GroupedPatternContextAttrs<'input> for GroupedPatternContext<'input>{} + +pub struct GroupedPatternContextExt<'input>{ + base:PatternPrimaryContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{GroupedPatternContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for GroupedPatternContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GroupedPatternContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_groupedPattern(self); + } +} + +impl<'input> CustomRuleContext<'input> for GroupedPatternContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternPrimary } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternPrimary } +} + +impl<'input> Borrow> for GroupedPatternContext<'input>{ + fn borrow(&self) -> &PatternPrimaryContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for GroupedPatternContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternPrimaryContextExt<'input> { &mut self.base } +} + +impl<'input> PatternPrimaryContextAttrs<'input> for GroupedPatternContext<'input> {} + +impl<'input> GroupedPatternContextExt<'input>{ + fn new(ctx: &dyn PatternPrimaryContextAttrs<'input>) -> Rc> { + Rc::new( + PatternPrimaryContextAll::GroupedPatternContext( + BaseParserRuleContext::copy_from(ctx,GroupedPatternContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn patternPrimary(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PatternPrimaryContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 182, RULE_patternPrimary); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2812); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(370,&mut recog.base)? { + 1 =>{ + let tmp = PatternVariableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule identifier*/ + recog.base.set_state(2787); + recog.identifier()?; + + } + } + , + 2 =>{ + let tmp = EmptyPatternContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2788); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + recog.base.set_state(2789); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + let tmp = PatternPermutationContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2790); + recog.base.match_token(PERMUTE,&mut recog.err_handler)?; + + recog.base.set_state(2791); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule rowPattern*/ + recog.base.set_state(2792); + recog.rowPattern_rec(0)?; + + recog.base.set_state(2797); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2793); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule rowPattern*/ + recog.base.set_state(2794); + recog.rowPattern_rec(0)?; + + } + } + recog.base.set_state(2799); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + recog.base.set_state(2800); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 4 =>{ + let tmp = GroupedPatternContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(2802); + recog.base.match_token(T__1,&mut recog.err_handler)?; + + /*InvokeRule rowPattern*/ + recog.base.set_state(2803); + recog.rowPattern_rec(0)?; + + recog.base.set_state(2804); + recog.base.match_token(T__2,&mut recog.err_handler)?; + + } + } + , + 5 =>{ + let tmp = PartitionStartAnchorContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 5); + _localctx = tmp; + { + recog.base.set_state(2806); + recog.base.match_token(T__10,&mut recog.err_handler)?; + + } + } + , + 6 =>{ + let tmp = PartitionEndAnchorContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 6); + _localctx = tmp; + { + recog.base.set_state(2807); + recog.base.match_token(T__11,&mut recog.err_handler)?; + + } + } + , + 7 =>{ + let tmp = ExcludedPatternContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 7); + _localctx = tmp; + { + recog.base.set_state(2808); + recog.base.match_token(T__12,&mut recog.err_handler)?; + + /*InvokeRule rowPattern*/ + recog.base.set_state(2809); + recog.rowPattern_rec(0)?; + + recog.base.set_state(2810); + recog.base.match_token(T__13,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- patternQuantifier ---------------- +#[derive(Debug)] +pub enum PatternQuantifierContextAll<'input>{ + ZeroOrMoreQuantifierContext(ZeroOrMoreQuantifierContext<'input>), + OneOrMoreQuantifierContext(OneOrMoreQuantifierContext<'input>), + ZeroOrOneQuantifierContext(ZeroOrOneQuantifierContext<'input>), + RangeQuantifierContext(RangeQuantifierContext<'input>), +Error(PatternQuantifierContext<'input>) +} +antlr_rust::tid!{PatternQuantifierContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for PatternQuantifierContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for PatternQuantifierContextAll<'input>{} + +impl<'input> Deref for PatternQuantifierContextAll<'input>{ + type Target = dyn PatternQuantifierContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use PatternQuantifierContextAll::*; + match self{ + ZeroOrMoreQuantifierContext(inner) => inner, + OneOrMoreQuantifierContext(inner) => inner, + ZeroOrOneQuantifierContext(inner) => inner, + RangeQuantifierContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for PatternQuantifierContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type PatternQuantifierContext<'input> = BaseParserRuleContext<'input,PatternQuantifierContextExt<'input>>; + +#[derive(Clone)] +pub struct PatternQuantifierContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PatternQuantifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PatternQuantifierContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for PatternQuantifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternQuantifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternQuantifier } +} +antlr_rust::tid!{PatternQuantifierContextExt<'a>} + +impl<'input> PatternQuantifierContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + PatternQuantifierContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PatternQuantifierContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait PatternQuantifierContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> PatternQuantifierContextAttrs<'input> for PatternQuantifierContext<'input>{} + +pub type ZeroOrMoreQuantifierContext<'input> = BaseParserRuleContext<'input,ZeroOrMoreQuantifierContextExt<'input>>; + +pub trait ZeroOrMoreQuantifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ASTERISK + /// Returns `None` if there is no child corresponding to token ASTERISK + fn ASTERISK(&self) -> Option>> where Self:Sized{ + self.get_token(ASTERISK, 0) + } + /// Retrieves first TerminalNode corresponding to token QUESTION_MARK + /// Returns `None` if there is no child corresponding to token QUESTION_MARK + fn QUESTION_MARK(&self) -> Option>> where Self:Sized{ + self.get_token(QUESTION_MARK, 0) + } +} + +impl<'input> ZeroOrMoreQuantifierContextAttrs<'input> for ZeroOrMoreQuantifierContext<'input>{} + +pub struct ZeroOrMoreQuantifierContextExt<'input>{ + base:PatternQuantifierContextExt<'input>, + pub reluctant: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ZeroOrMoreQuantifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ZeroOrMoreQuantifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ZeroOrMoreQuantifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_zeroOrMoreQuantifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for ZeroOrMoreQuantifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternQuantifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternQuantifier } +} + +impl<'input> Borrow> for ZeroOrMoreQuantifierContext<'input>{ + fn borrow(&self) -> &PatternQuantifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ZeroOrMoreQuantifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternQuantifierContextExt<'input> { &mut self.base } +} + +impl<'input> PatternQuantifierContextAttrs<'input> for ZeroOrMoreQuantifierContext<'input> {} + +impl<'input> ZeroOrMoreQuantifierContextExt<'input>{ + fn new(ctx: &dyn PatternQuantifierContextAttrs<'input>) -> Rc> { + Rc::new( + PatternQuantifierContextAll::ZeroOrMoreQuantifierContext( + BaseParserRuleContext::copy_from(ctx,ZeroOrMoreQuantifierContextExt{ + reluctant:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type OneOrMoreQuantifierContext<'input> = BaseParserRuleContext<'input,OneOrMoreQuantifierContextExt<'input>>; + +pub trait OneOrMoreQuantifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token PLUS + /// Returns `None` if there is no child corresponding to token PLUS + fn PLUS(&self) -> Option>> where Self:Sized{ + self.get_token(PLUS, 0) + } + /// Retrieves first TerminalNode corresponding to token QUESTION_MARK + /// Returns `None` if there is no child corresponding to token QUESTION_MARK + fn QUESTION_MARK(&self) -> Option>> where Self:Sized{ + self.get_token(QUESTION_MARK, 0) + } +} + +impl<'input> OneOrMoreQuantifierContextAttrs<'input> for OneOrMoreQuantifierContext<'input>{} + +pub struct OneOrMoreQuantifierContextExt<'input>{ + base:PatternQuantifierContextExt<'input>, + pub reluctant: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{OneOrMoreQuantifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for OneOrMoreQuantifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for OneOrMoreQuantifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_oneOrMoreQuantifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for OneOrMoreQuantifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternQuantifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternQuantifier } +} + +impl<'input> Borrow> for OneOrMoreQuantifierContext<'input>{ + fn borrow(&self) -> &PatternQuantifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for OneOrMoreQuantifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternQuantifierContextExt<'input> { &mut self.base } +} + +impl<'input> PatternQuantifierContextAttrs<'input> for OneOrMoreQuantifierContext<'input> {} + +impl<'input> OneOrMoreQuantifierContextExt<'input>{ + fn new(ctx: &dyn PatternQuantifierContextAttrs<'input>) -> Rc> { + Rc::new( + PatternQuantifierContextAll::OneOrMoreQuantifierContext( + BaseParserRuleContext::copy_from(ctx,OneOrMoreQuantifierContextExt{ + reluctant:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ZeroOrOneQuantifierContext<'input> = BaseParserRuleContext<'input,ZeroOrOneQuantifierContextExt<'input>>; + +pub trait ZeroOrOneQuantifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves all `TerminalNode`s corresponding to token QUESTION_MARK in current rule + fn QUESTION_MARK_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token QUESTION_MARK, starting from 0. + /// Returns `None` if number of children corresponding to token QUESTION_MARK is less or equal than `i`. + fn QUESTION_MARK(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(QUESTION_MARK, i) + } +} + +impl<'input> ZeroOrOneQuantifierContextAttrs<'input> for ZeroOrOneQuantifierContext<'input>{} + +pub struct ZeroOrOneQuantifierContextExt<'input>{ + base:PatternQuantifierContextExt<'input>, + pub reluctant: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ZeroOrOneQuantifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ZeroOrOneQuantifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ZeroOrOneQuantifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_zeroOrOneQuantifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for ZeroOrOneQuantifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternQuantifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternQuantifier } +} + +impl<'input> Borrow> for ZeroOrOneQuantifierContext<'input>{ + fn borrow(&self) -> &PatternQuantifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ZeroOrOneQuantifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternQuantifierContextExt<'input> { &mut self.base } +} + +impl<'input> PatternQuantifierContextAttrs<'input> for ZeroOrOneQuantifierContext<'input> {} + +impl<'input> ZeroOrOneQuantifierContextExt<'input>{ + fn new(ctx: &dyn PatternQuantifierContextAttrs<'input>) -> Rc> { + Rc::new( + PatternQuantifierContextAll::ZeroOrOneQuantifierContext( + BaseParserRuleContext::copy_from(ctx,ZeroOrOneQuantifierContextExt{ + reluctant:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RangeQuantifierContext<'input> = BaseParserRuleContext<'input,RangeQuantifierContextExt<'input>>; + +pub trait RangeQuantifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves all `TerminalNode`s corresponding to token INTEGER_VALUE in current rule + fn INTEGER_VALUE_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + /// Retrieves 'i's TerminalNode corresponding to token INTEGER_VALUE, starting from 0. + /// Returns `None` if number of children corresponding to token INTEGER_VALUE is less or equal than `i`. + fn INTEGER_VALUE(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(INTEGER_VALUE, i) + } + /// Retrieves first TerminalNode corresponding to token QUESTION_MARK + /// Returns `None` if there is no child corresponding to token QUESTION_MARK + fn QUESTION_MARK(&self) -> Option>> where Self:Sized{ + self.get_token(QUESTION_MARK, 0) + } + /// Retrieves first TerminalNode corresponding to token COMMA + /// Returns `None` if there is no child corresponding to token COMMA + fn COMMA(&self) -> Option>> where Self:Sized{ + self.get_token(COMMA, 0) + } +} + +impl<'input> RangeQuantifierContextAttrs<'input> for RangeQuantifierContext<'input>{} + +pub struct RangeQuantifierContextExt<'input>{ + base:PatternQuantifierContextExt<'input>, + pub exactly: Option>, + pub reluctant: Option>, + pub atLeast: Option>, + pub atMost: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RangeQuantifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RangeQuantifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RangeQuantifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rangeQuantifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for RangeQuantifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_patternQuantifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_patternQuantifier } +} + +impl<'input> Borrow> for RangeQuantifierContext<'input>{ + fn borrow(&self) -> &PatternQuantifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RangeQuantifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut PatternQuantifierContextExt<'input> { &mut self.base } +} + +impl<'input> PatternQuantifierContextAttrs<'input> for RangeQuantifierContext<'input> {} + +impl<'input> RangeQuantifierContextExt<'input>{ + fn new(ctx: &dyn PatternQuantifierContextAttrs<'input>) -> Rc> { + Rc::new( + PatternQuantifierContextAll::RangeQuantifierContext( + BaseParserRuleContext::copy_from(ctx,RangeQuantifierContextExt{ + exactly:None, reluctant:None, atLeast:None, atMost:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn patternQuantifier(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PatternQuantifierContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 184, RULE_patternQuantifier); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2844); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(378,&mut recog.base)? { + 1 =>{ + let tmp = ZeroOrMoreQuantifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2814); + recog.base.match_token(ASTERISK,&mut recog.err_handler)?; + + recog.base.set_state(2816); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(371,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2815); + let tmp = recog.base.match_token(QUESTION_MARK,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::ZeroOrMoreQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.reluctant = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + , + 2 =>{ + let tmp = OneOrMoreQuantifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2818); + recog.base.match_token(PLUS,&mut recog.err_handler)?; + + recog.base.set_state(2820); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(372,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2819); + let tmp = recog.base.match_token(QUESTION_MARK,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::OneOrMoreQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.reluctant = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + , + 3 =>{ + let tmp = ZeroOrOneQuantifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2822); + recog.base.match_token(QUESTION_MARK,&mut recog.err_handler)?; + + recog.base.set_state(2824); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(373,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2823); + let tmp = recog.base.match_token(QUESTION_MARK,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::ZeroOrOneQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.reluctant = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + , + 4 =>{ + let tmp = RangeQuantifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(2826); + recog.base.match_token(T__14,&mut recog.err_handler)?; + + recog.base.set_state(2827); + let tmp = recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::RangeQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.exactly = Some(&tmp); } else {unreachable!("cant cast");} + + recog.base.set_state(2828); + recog.base.match_token(T__15,&mut recog.err_handler)?; + + recog.base.set_state(2830); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(374,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2829); + let tmp = recog.base.match_token(QUESTION_MARK,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::RangeQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.reluctant = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + , + 5 =>{ + let tmp = RangeQuantifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 5); + _localctx = tmp; + { + recog.base.set_state(2832); + recog.base.match_token(T__14,&mut recog.err_handler)?; + + recog.base.set_state(2834); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==INTEGER_VALUE { + { + recog.base.set_state(2833); + let tmp = recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::RangeQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.atLeast = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2836); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + recog.base.set_state(2838); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==INTEGER_VALUE { + { + recog.base.set_state(2837); + let tmp = recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::RangeQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.atMost = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + + recog.base.set_state(2840); + recog.base.match_token(T__15,&mut recog.err_handler)?; + + recog.base.set_state(2842); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(377,&mut recog.base)? { + x if x == 1=>{ + { + recog.base.set_state(2841); + let tmp = recog.base.match_token(QUESTION_MARK,&mut recog.err_handler)?; + if let PatternQuantifierContextAll::RangeQuantifierContext(ctx) = cast_mut::<_,PatternQuantifierContextAll >(&mut _localctx){ + ctx.reluctant = Some(&tmp); } else {unreachable!("cant cast");} + + } + } + + _ => {} + } + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- updateAssignment ---------------- +pub type UpdateAssignmentContextAll<'input> = UpdateAssignmentContext<'input>; + + +pub type UpdateAssignmentContext<'input> = BaseParserRuleContext<'input,UpdateAssignmentContextExt<'input>>; + +#[derive(Clone)] +pub struct UpdateAssignmentContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for UpdateAssignmentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UpdateAssignmentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_updateAssignment(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_updateAssignment(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for UpdateAssignmentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_updateAssignment } + //fn type_rule_index() -> usize where Self: Sized { RULE_updateAssignment } +} +antlr_rust::tid!{UpdateAssignmentContextExt<'a>} + +impl<'input> UpdateAssignmentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,UpdateAssignmentContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait UpdateAssignmentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token EQ +/// Returns `None` if there is no child corresponding to token EQ +fn EQ(&self) -> Option>> where Self:Sized{ + self.get_token(EQ, 0) +} +fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> UpdateAssignmentContextAttrs<'input> for UpdateAssignmentContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn updateAssignment(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = UpdateAssignmentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 186, RULE_updateAssignment); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(2846); + recog.identifier()?; + + recog.base.set_state(2847); + recog.base.match_token(EQ,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2848); + recog.expression()?; + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- explainOption ---------------- +#[derive(Debug)] +pub enum ExplainOptionContextAll<'input>{ + ExplainFormatContext(ExplainFormatContext<'input>), + ExplainTypeContext(ExplainTypeContext<'input>), +Error(ExplainOptionContext<'input>) +} +antlr_rust::tid!{ExplainOptionContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for ExplainOptionContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for ExplainOptionContextAll<'input>{} + +impl<'input> Deref for ExplainOptionContextAll<'input>{ + type Target = dyn ExplainOptionContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use ExplainOptionContextAll::*; + match self{ + ExplainFormatContext(inner) => inner, + ExplainTypeContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for ExplainOptionContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type ExplainOptionContext<'input> = BaseParserRuleContext<'input,ExplainOptionContextExt<'input>>; + +#[derive(Clone)] +pub struct ExplainOptionContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for ExplainOptionContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExplainOptionContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for ExplainOptionContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_explainOption } + //fn type_rule_index() -> usize where Self: Sized { RULE_explainOption } +} +antlr_rust::tid!{ExplainOptionContextExt<'a>} + +impl<'input> ExplainOptionContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + ExplainOptionContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,ExplainOptionContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait ExplainOptionContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> ExplainOptionContextAttrs<'input> for ExplainOptionContext<'input>{} + +pub type ExplainFormatContext<'input> = BaseParserRuleContext<'input,ExplainFormatContextExt<'input>>; + +pub trait ExplainFormatContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token FORMAT + /// Returns `None` if there is no child corresponding to token FORMAT + fn FORMAT(&self) -> Option>> where Self:Sized{ + self.get_token(FORMAT, 0) + } + /// Retrieves first TerminalNode corresponding to token TEXT + /// Returns `None` if there is no child corresponding to token TEXT + fn TEXT(&self) -> Option>> where Self:Sized{ + self.get_token(TEXT, 0) + } + /// Retrieves first TerminalNode corresponding to token GRAPHVIZ + /// Returns `None` if there is no child corresponding to token GRAPHVIZ + fn GRAPHVIZ(&self) -> Option>> where Self:Sized{ + self.get_token(GRAPHVIZ, 0) + } + /// Retrieves first TerminalNode corresponding to token JSON + /// Returns `None` if there is no child corresponding to token JSON + fn JSON(&self) -> Option>> where Self:Sized{ + self.get_token(JSON, 0) + } +} + +impl<'input> ExplainFormatContextAttrs<'input> for ExplainFormatContext<'input>{} + +pub struct ExplainFormatContextExt<'input>{ + base:ExplainOptionContextExt<'input>, + pub value: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExplainFormatContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExplainFormatContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExplainFormatContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_explainFormat(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExplainFormatContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_explainOption } + //fn type_rule_index() -> usize where Self: Sized { RULE_explainOption } +} + +impl<'input> Borrow> for ExplainFormatContext<'input>{ + fn borrow(&self) -> &ExplainOptionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExplainFormatContext<'input>{ + fn borrow_mut(&mut self) -> &mut ExplainOptionContextExt<'input> { &mut self.base } +} + +impl<'input> ExplainOptionContextAttrs<'input> for ExplainFormatContext<'input> {} + +impl<'input> ExplainFormatContextExt<'input>{ + fn new(ctx: &dyn ExplainOptionContextAttrs<'input>) -> Rc> { + Rc::new( + ExplainOptionContextAll::ExplainFormatContext( + BaseParserRuleContext::copy_from(ctx,ExplainFormatContextExt{ + value:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ExplainTypeContext<'input> = BaseParserRuleContext<'input,ExplainTypeContextExt<'input>>; + +pub trait ExplainTypeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token TYPE + /// Returns `None` if there is no child corresponding to token TYPE + fn TYPE(&self) -> Option>> where Self:Sized{ + self.get_token(TYPE, 0) + } + /// Retrieves first TerminalNode corresponding to token LOGICAL + /// Returns `None` if there is no child corresponding to token LOGICAL + fn LOGICAL(&self) -> Option>> where Self:Sized{ + self.get_token(LOGICAL, 0) + } + /// Retrieves first TerminalNode corresponding to token DISTRIBUTED + /// Returns `None` if there is no child corresponding to token DISTRIBUTED + fn DISTRIBUTED(&self) -> Option>> where Self:Sized{ + self.get_token(DISTRIBUTED, 0) + } + /// Retrieves first TerminalNode corresponding to token VALIDATE + /// Returns `None` if there is no child corresponding to token VALIDATE + fn VALIDATE(&self) -> Option>> where Self:Sized{ + self.get_token(VALIDATE, 0) + } + /// Retrieves first TerminalNode corresponding to token IO + /// Returns `None` if there is no child corresponding to token IO + fn IO(&self) -> Option>> where Self:Sized{ + self.get_token(IO, 0) + } +} + +impl<'input> ExplainTypeContextAttrs<'input> for ExplainTypeContext<'input>{} + +pub struct ExplainTypeContextExt<'input>{ + base:ExplainOptionContextExt<'input>, + pub value: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ExplainTypeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ExplainTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ExplainTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_explainType(self); + } +} + +impl<'input> CustomRuleContext<'input> for ExplainTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_explainOption } + //fn type_rule_index() -> usize where Self: Sized { RULE_explainOption } +} + +impl<'input> Borrow> for ExplainTypeContext<'input>{ + fn borrow(&self) -> &ExplainOptionContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ExplainTypeContext<'input>{ + fn borrow_mut(&mut self) -> &mut ExplainOptionContextExt<'input> { &mut self.base } +} + +impl<'input> ExplainOptionContextAttrs<'input> for ExplainTypeContext<'input> {} + +impl<'input> ExplainTypeContextExt<'input>{ + fn new(ctx: &dyn ExplainOptionContextAttrs<'input>) -> Rc> { + Rc::new( + ExplainOptionContextAll::ExplainTypeContext( + BaseParserRuleContext::copy_from(ctx,ExplainTypeContextExt{ + value:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn explainOption(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = ExplainOptionContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 188, RULE_explainOption); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2854); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + FORMAT + => { + let tmp = ExplainFormatContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2850); + recog.base.match_token(FORMAT,&mut recog.err_handler)?; + + recog.base.set_state(2851); + if let ExplainOptionContextAll::ExplainFormatContext(ctx) = cast_mut::<_,ExplainOptionContextAll >(&mut _localctx){ + ctx.value = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(_la==GRAPHVIZ || _la==JSON || _la==TEXT) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let ExplainOptionContextAll::ExplainFormatContext(ctx) = cast_mut::<_,ExplainOptionContextAll >(&mut _localctx){ + ctx.value = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + TYPE + => { + let tmp = ExplainTypeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2852); + recog.base.match_token(TYPE,&mut recog.err_handler)?; + + recog.base.set_state(2853); + if let ExplainOptionContextAll::ExplainTypeContext(ctx) = cast_mut::<_,ExplainOptionContextAll >(&mut _localctx){ + ctx.value = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(_la==DISTRIBUTED || _la==IO || _la==LOGICAL || _la==VALIDATE) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let ExplainOptionContextAll::ExplainTypeContext(ctx) = cast_mut::<_,ExplainOptionContextAll >(&mut _localctx){ + ctx.value = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- transactionMode ---------------- +#[derive(Debug)] +pub enum TransactionModeContextAll<'input>{ + TransactionAccessModeContext(TransactionAccessModeContext<'input>), + IsolationLevelContext(IsolationLevelContext<'input>), +Error(TransactionModeContext<'input>) +} +antlr_rust::tid!{TransactionModeContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for TransactionModeContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for TransactionModeContextAll<'input>{} + +impl<'input> Deref for TransactionModeContextAll<'input>{ + type Target = dyn TransactionModeContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use TransactionModeContextAll::*; + match self{ + TransactionAccessModeContext(inner) => inner, + IsolationLevelContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for TransactionModeContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type TransactionModeContext<'input> = BaseParserRuleContext<'input,TransactionModeContextExt<'input>>; + +#[derive(Clone)] +pub struct TransactionModeContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for TransactionModeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TransactionModeContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for TransactionModeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_transactionMode } + //fn type_rule_index() -> usize where Self: Sized { RULE_transactionMode } +} +antlr_rust::tid!{TransactionModeContextExt<'a>} + +impl<'input> TransactionModeContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + TransactionModeContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,TransactionModeContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait TransactionModeContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> TransactionModeContextAttrs<'input> for TransactionModeContext<'input>{} + +pub type TransactionAccessModeContext<'input> = BaseParserRuleContext<'input,TransactionAccessModeContextExt<'input>>; + +pub trait TransactionAccessModeContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token READ + /// Returns `None` if there is no child corresponding to token READ + fn READ(&self) -> Option>> where Self:Sized{ + self.get_token(READ, 0) + } + /// Retrieves first TerminalNode corresponding to token ONLY + /// Returns `None` if there is no child corresponding to token ONLY + fn ONLY(&self) -> Option>> where Self:Sized{ + self.get_token(ONLY, 0) + } + /// Retrieves first TerminalNode corresponding to token WRITE + /// Returns `None` if there is no child corresponding to token WRITE + fn WRITE(&self) -> Option>> where Self:Sized{ + self.get_token(WRITE, 0) + } +} + +impl<'input> TransactionAccessModeContextAttrs<'input> for TransactionAccessModeContext<'input>{} + +pub struct TransactionAccessModeContextExt<'input>{ + base:TransactionModeContextExt<'input>, + pub accessMode: Option>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{TransactionAccessModeContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for TransactionAccessModeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for TransactionAccessModeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_transactionAccessMode(self); + } +} + +impl<'input> CustomRuleContext<'input> for TransactionAccessModeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_transactionMode } + //fn type_rule_index() -> usize where Self: Sized { RULE_transactionMode } +} + +impl<'input> Borrow> for TransactionAccessModeContext<'input>{ + fn borrow(&self) -> &TransactionModeContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for TransactionAccessModeContext<'input>{ + fn borrow_mut(&mut self) -> &mut TransactionModeContextExt<'input> { &mut self.base } +} + +impl<'input> TransactionModeContextAttrs<'input> for TransactionAccessModeContext<'input> {} + +impl<'input> TransactionAccessModeContextExt<'input>{ + fn new(ctx: &dyn TransactionModeContextAttrs<'input>) -> Rc> { + Rc::new( + TransactionModeContextAll::TransactionAccessModeContext( + BaseParserRuleContext::copy_from(ctx,TransactionAccessModeContextExt{ + accessMode:None, + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type IsolationLevelContext<'input> = BaseParserRuleContext<'input,IsolationLevelContextExt<'input>>; + +pub trait IsolationLevelContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ISOLATION + /// Returns `None` if there is no child corresponding to token ISOLATION + fn ISOLATION(&self) -> Option>> where Self:Sized{ + self.get_token(ISOLATION, 0) + } + /// Retrieves first TerminalNode corresponding to token LEVEL + /// Returns `None` if there is no child corresponding to token LEVEL + fn LEVEL(&self) -> Option>> where Self:Sized{ + self.get_token(LEVEL, 0) + } + fn levelOfIsolation(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> IsolationLevelContextAttrs<'input> for IsolationLevelContext<'input>{} + +pub struct IsolationLevelContextExt<'input>{ + base:TransactionModeContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{IsolationLevelContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for IsolationLevelContext<'input>{} + +impl<'input,'a> Listenable + 'a> for IsolationLevelContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_isolationLevel(self); + } +} + +impl<'input> CustomRuleContext<'input> for IsolationLevelContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_transactionMode } + //fn type_rule_index() -> usize where Self: Sized { RULE_transactionMode } +} + +impl<'input> Borrow> for IsolationLevelContext<'input>{ + fn borrow(&self) -> &TransactionModeContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for IsolationLevelContext<'input>{ + fn borrow_mut(&mut self) -> &mut TransactionModeContextExt<'input> { &mut self.base } +} + +impl<'input> TransactionModeContextAttrs<'input> for IsolationLevelContext<'input> {} + +impl<'input> IsolationLevelContextExt<'input>{ + fn new(ctx: &dyn TransactionModeContextAttrs<'input>) -> Rc> { + Rc::new( + TransactionModeContextAll::IsolationLevelContext( + BaseParserRuleContext::copy_from(ctx,IsolationLevelContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn transactionMode(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = TransactionModeContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 190, RULE_transactionMode); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2861); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ISOLATION + => { + let tmp = IsolationLevelContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2856); + recog.base.match_token(ISOLATION,&mut recog.err_handler)?; + + recog.base.set_state(2857); + recog.base.match_token(LEVEL,&mut recog.err_handler)?; + + /*InvokeRule levelOfIsolation*/ + recog.base.set_state(2858); + recog.levelOfIsolation()?; + + } + } + + READ + => { + let tmp = TransactionAccessModeContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2859); + recog.base.match_token(READ,&mut recog.err_handler)?; + + recog.base.set_state(2860); + if let TransactionModeContextAll::TransactionAccessModeContext(ctx) = cast_mut::<_,TransactionModeContextAll >(&mut _localctx){ + ctx.accessMode = recog.base.input.lt(1).cloned(); } else {unreachable!("cant cast");} + _la = recog.base.input.la(1); + if { !(_la==ONLY || _la==WRITE) } { + let tmp = recog.err_handler.recover_inline(&mut recog.base)?; + if let TransactionModeContextAll::TransactionAccessModeContext(ctx) = cast_mut::<_,TransactionModeContextAll >(&mut _localctx){ + ctx.accessMode = Some(&tmp); } else {unreachable!("cant cast");} + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- levelOfIsolation ---------------- +#[derive(Debug)] +pub enum LevelOfIsolationContextAll<'input>{ + ReadUncommittedContext(ReadUncommittedContext<'input>), + SerializableContext(SerializableContext<'input>), + ReadCommittedContext(ReadCommittedContext<'input>), + RepeatableReadContext(RepeatableReadContext<'input>), +Error(LevelOfIsolationContext<'input>) +} +antlr_rust::tid!{LevelOfIsolationContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for LevelOfIsolationContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for LevelOfIsolationContextAll<'input>{} + +impl<'input> Deref for LevelOfIsolationContextAll<'input>{ + type Target = dyn LevelOfIsolationContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use LevelOfIsolationContextAll::*; + match self{ + ReadUncommittedContext(inner) => inner, + SerializableContext(inner) => inner, + ReadCommittedContext(inner) => inner, + RepeatableReadContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for LevelOfIsolationContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type LevelOfIsolationContext<'input> = BaseParserRuleContext<'input,LevelOfIsolationContextExt<'input>>; + +#[derive(Clone)] +pub struct LevelOfIsolationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for LevelOfIsolationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for LevelOfIsolationContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for LevelOfIsolationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_levelOfIsolation } + //fn type_rule_index() -> usize where Self: Sized { RULE_levelOfIsolation } +} +antlr_rust::tid!{LevelOfIsolationContextExt<'a>} + +impl<'input> LevelOfIsolationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + LevelOfIsolationContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,LevelOfIsolationContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait LevelOfIsolationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> LevelOfIsolationContextAttrs<'input> for LevelOfIsolationContext<'input>{} + +pub type ReadUncommittedContext<'input> = BaseParserRuleContext<'input,ReadUncommittedContextExt<'input>>; + +pub trait ReadUncommittedContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token READ + /// Returns `None` if there is no child corresponding to token READ + fn READ(&self) -> Option>> where Self:Sized{ + self.get_token(READ, 0) + } + /// Retrieves first TerminalNode corresponding to token UNCOMMITTED + /// Returns `None` if there is no child corresponding to token UNCOMMITTED + fn UNCOMMITTED(&self) -> Option>> where Self:Sized{ + self.get_token(UNCOMMITTED, 0) + } +} + +impl<'input> ReadUncommittedContextAttrs<'input> for ReadUncommittedContext<'input>{} + +pub struct ReadUncommittedContextExt<'input>{ + base:LevelOfIsolationContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ReadUncommittedContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ReadUncommittedContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ReadUncommittedContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_readUncommitted(self); + } +} + +impl<'input> CustomRuleContext<'input> for ReadUncommittedContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_levelOfIsolation } + //fn type_rule_index() -> usize where Self: Sized { RULE_levelOfIsolation } +} + +impl<'input> Borrow> for ReadUncommittedContext<'input>{ + fn borrow(&self) -> &LevelOfIsolationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ReadUncommittedContext<'input>{ + fn borrow_mut(&mut self) -> &mut LevelOfIsolationContextExt<'input> { &mut self.base } +} + +impl<'input> LevelOfIsolationContextAttrs<'input> for ReadUncommittedContext<'input> {} + +impl<'input> ReadUncommittedContextExt<'input>{ + fn new(ctx: &dyn LevelOfIsolationContextAttrs<'input>) -> Rc> { + Rc::new( + LevelOfIsolationContextAll::ReadUncommittedContext( + BaseParserRuleContext::copy_from(ctx,ReadUncommittedContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SerializableContext<'input> = BaseParserRuleContext<'input,SerializableContextExt<'input>>; + +pub trait SerializableContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token SERIALIZABLE + /// Returns `None` if there is no child corresponding to token SERIALIZABLE + fn SERIALIZABLE(&self) -> Option>> where Self:Sized{ + self.get_token(SERIALIZABLE, 0) + } +} + +impl<'input> SerializableContextAttrs<'input> for SerializableContext<'input>{} + +pub struct SerializableContextExt<'input>{ + base:LevelOfIsolationContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SerializableContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SerializableContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SerializableContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_serializable(self); + } +} + +impl<'input> CustomRuleContext<'input> for SerializableContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_levelOfIsolation } + //fn type_rule_index() -> usize where Self: Sized { RULE_levelOfIsolation } +} + +impl<'input> Borrow> for SerializableContext<'input>{ + fn borrow(&self) -> &LevelOfIsolationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SerializableContext<'input>{ + fn borrow_mut(&mut self) -> &mut LevelOfIsolationContextExt<'input> { &mut self.base } +} + +impl<'input> LevelOfIsolationContextAttrs<'input> for SerializableContext<'input> {} + +impl<'input> SerializableContextExt<'input>{ + fn new(ctx: &dyn LevelOfIsolationContextAttrs<'input>) -> Rc> { + Rc::new( + LevelOfIsolationContextAll::SerializableContext( + BaseParserRuleContext::copy_from(ctx,SerializableContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type ReadCommittedContext<'input> = BaseParserRuleContext<'input,ReadCommittedContextExt<'input>>; + +pub trait ReadCommittedContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token READ + /// Returns `None` if there is no child corresponding to token READ + fn READ(&self) -> Option>> where Self:Sized{ + self.get_token(READ, 0) + } + /// Retrieves first TerminalNode corresponding to token COMMITTED + /// Returns `None` if there is no child corresponding to token COMMITTED + fn COMMITTED(&self) -> Option>> where Self:Sized{ + self.get_token(COMMITTED, 0) + } +} + +impl<'input> ReadCommittedContextAttrs<'input> for ReadCommittedContext<'input>{} + +pub struct ReadCommittedContextExt<'input>{ + base:LevelOfIsolationContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{ReadCommittedContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for ReadCommittedContext<'input>{} + +impl<'input,'a> Listenable + 'a> for ReadCommittedContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_readCommitted(self); + } +} + +impl<'input> CustomRuleContext<'input> for ReadCommittedContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_levelOfIsolation } + //fn type_rule_index() -> usize where Self: Sized { RULE_levelOfIsolation } +} + +impl<'input> Borrow> for ReadCommittedContext<'input>{ + fn borrow(&self) -> &LevelOfIsolationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for ReadCommittedContext<'input>{ + fn borrow_mut(&mut self) -> &mut LevelOfIsolationContextExt<'input> { &mut self.base } +} + +impl<'input> LevelOfIsolationContextAttrs<'input> for ReadCommittedContext<'input> {} + +impl<'input> ReadCommittedContextExt<'input>{ + fn new(ctx: &dyn LevelOfIsolationContextAttrs<'input>) -> Rc> { + Rc::new( + LevelOfIsolationContextAll::ReadCommittedContext( + BaseParserRuleContext::copy_from(ctx,ReadCommittedContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RepeatableReadContext<'input> = BaseParserRuleContext<'input,RepeatableReadContextExt<'input>>; + +pub trait RepeatableReadContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token REPEATABLE + /// Returns `None` if there is no child corresponding to token REPEATABLE + fn REPEATABLE(&self) -> Option>> where Self:Sized{ + self.get_token(REPEATABLE, 0) + } + /// Retrieves first TerminalNode corresponding to token READ + /// Returns `None` if there is no child corresponding to token READ + fn READ(&self) -> Option>> where Self:Sized{ + self.get_token(READ, 0) + } +} + +impl<'input> RepeatableReadContextAttrs<'input> for RepeatableReadContext<'input>{} + +pub struct RepeatableReadContextExt<'input>{ + base:LevelOfIsolationContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RepeatableReadContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RepeatableReadContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RepeatableReadContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_repeatableRead(self); + } +} + +impl<'input> CustomRuleContext<'input> for RepeatableReadContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_levelOfIsolation } + //fn type_rule_index() -> usize where Self: Sized { RULE_levelOfIsolation } +} + +impl<'input> Borrow> for RepeatableReadContext<'input>{ + fn borrow(&self) -> &LevelOfIsolationContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RepeatableReadContext<'input>{ + fn borrow_mut(&mut self) -> &mut LevelOfIsolationContextExt<'input> { &mut self.base } +} + +impl<'input> LevelOfIsolationContextAttrs<'input> for RepeatableReadContext<'input> {} + +impl<'input> RepeatableReadContextExt<'input>{ + fn new(ctx: &dyn LevelOfIsolationContextAttrs<'input>) -> Rc> { + Rc::new( + LevelOfIsolationContextAll::RepeatableReadContext( + BaseParserRuleContext::copy_from(ctx,RepeatableReadContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn levelOfIsolation(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = LevelOfIsolationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 192, RULE_levelOfIsolation); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2870); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(381,&mut recog.base)? { + 1 =>{ + let tmp = ReadUncommittedContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2863); + recog.base.match_token(READ,&mut recog.err_handler)?; + + recog.base.set_state(2864); + recog.base.match_token(UNCOMMITTED,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + let tmp = ReadCommittedContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2865); + recog.base.match_token(READ,&mut recog.err_handler)?; + + recog.base.set_state(2866); + recog.base.match_token(COMMITTED,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + let tmp = RepeatableReadContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2867); + recog.base.match_token(REPEATABLE,&mut recog.err_handler)?; + + recog.base.set_state(2868); + recog.base.match_token(READ,&mut recog.err_handler)?; + + } + } + , + 4 =>{ + let tmp = SerializableContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(2869); + recog.base.match_token(SERIALIZABLE,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- callArgument ---------------- +#[derive(Debug)] +pub enum CallArgumentContextAll<'input>{ + PositionalArgumentContext(PositionalArgumentContext<'input>), + NamedArgumentContext(NamedArgumentContext<'input>), +Error(CallArgumentContext<'input>) +} +antlr_rust::tid!{CallArgumentContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for CallArgumentContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for CallArgumentContextAll<'input>{} + +impl<'input> Deref for CallArgumentContextAll<'input>{ + type Target = dyn CallArgumentContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use CallArgumentContextAll::*; + match self{ + PositionalArgumentContext(inner) => inner, + NamedArgumentContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for CallArgumentContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type CallArgumentContext<'input> = BaseParserRuleContext<'input,CallArgumentContextExt<'input>>; + +#[derive(Clone)] +pub struct CallArgumentContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for CallArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CallArgumentContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for CallArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_callArgument } + //fn type_rule_index() -> usize where Self: Sized { RULE_callArgument } +} +antlr_rust::tid!{CallArgumentContextExt<'a>} + +impl<'input> CallArgumentContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + CallArgumentContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,CallArgumentContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait CallArgumentContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> CallArgumentContextAttrs<'input> for CallArgumentContext<'input>{} + +pub type PositionalArgumentContext<'input> = BaseParserRuleContext<'input,PositionalArgumentContextExt<'input>>; + +pub trait PositionalArgumentContextAttrs<'input>: PrestoParserContext<'input>{ + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> PositionalArgumentContextAttrs<'input> for PositionalArgumentContext<'input>{} + +pub struct PositionalArgumentContextExt<'input>{ + base:CallArgumentContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{PositionalArgumentContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for PositionalArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PositionalArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_positionalArgument(self); + } +} + +impl<'input> CustomRuleContext<'input> for PositionalArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_callArgument } + //fn type_rule_index() -> usize where Self: Sized { RULE_callArgument } +} + +impl<'input> Borrow> for PositionalArgumentContext<'input>{ + fn borrow(&self) -> &CallArgumentContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for PositionalArgumentContext<'input>{ + fn borrow_mut(&mut self) -> &mut CallArgumentContextExt<'input> { &mut self.base } +} + +impl<'input> CallArgumentContextAttrs<'input> for PositionalArgumentContext<'input> {} + +impl<'input> PositionalArgumentContextExt<'input>{ + fn new(ctx: &dyn CallArgumentContextAttrs<'input>) -> Rc> { + Rc::new( + CallArgumentContextAll::PositionalArgumentContext( + BaseParserRuleContext::copy_from(ctx,PositionalArgumentContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type NamedArgumentContext<'input> = BaseParserRuleContext<'input,NamedArgumentContextExt<'input>>; + +pub trait NamedArgumentContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } + fn expression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> NamedArgumentContextAttrs<'input> for NamedArgumentContext<'input>{} + +pub struct NamedArgumentContextExt<'input>{ + base:CallArgumentContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{NamedArgumentContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for NamedArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NamedArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_namedArgument(self); + } +} + +impl<'input> CustomRuleContext<'input> for NamedArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_callArgument } + //fn type_rule_index() -> usize where Self: Sized { RULE_callArgument } +} + +impl<'input> Borrow> for NamedArgumentContext<'input>{ + fn borrow(&self) -> &CallArgumentContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for NamedArgumentContext<'input>{ + fn borrow_mut(&mut self) -> &mut CallArgumentContextExt<'input> { &mut self.base } +} + +impl<'input> CallArgumentContextAttrs<'input> for NamedArgumentContext<'input> {} + +impl<'input> NamedArgumentContextExt<'input>{ + fn new(ctx: &dyn CallArgumentContextAttrs<'input>) -> Rc> { + Rc::new( + CallArgumentContextAll::NamedArgumentContext( + BaseParserRuleContext::copy_from(ctx,NamedArgumentContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn callArgument(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = CallArgumentContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 194, RULE_callArgument); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2877); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(382,&mut recog.base)? { + 1 =>{ + let tmp = PositionalArgumentContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule expression*/ + recog.base.set_state(2872); + recog.expression()?; + + } + } + , + 2 =>{ + let tmp = NamedArgumentContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + /*InvokeRule identifier*/ + recog.base.set_state(2873); + recog.identifier()?; + + recog.base.set_state(2874); + recog.base.match_token(T__4,&mut recog.err_handler)?; + + /*InvokeRule expression*/ + recog.base.set_state(2875); + recog.expression()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- pathElement ---------------- +#[derive(Debug)] +pub enum PathElementContextAll<'input>{ + QualifiedArgumentContext(QualifiedArgumentContext<'input>), + UnqualifiedArgumentContext(UnqualifiedArgumentContext<'input>), +Error(PathElementContext<'input>) +} +antlr_rust::tid!{PathElementContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for PathElementContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for PathElementContextAll<'input>{} + +impl<'input> Deref for PathElementContextAll<'input>{ + type Target = dyn PathElementContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use PathElementContextAll::*; + match self{ + QualifiedArgumentContext(inner) => inner, + UnqualifiedArgumentContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for PathElementContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type PathElementContext<'input> = BaseParserRuleContext<'input,PathElementContextExt<'input>>; + +#[derive(Clone)] +pub struct PathElementContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PathElementContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PathElementContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for PathElementContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_pathElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_pathElement } +} +antlr_rust::tid!{PathElementContextExt<'a>} + +impl<'input> PathElementContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + PathElementContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PathElementContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait PathElementContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> PathElementContextAttrs<'input> for PathElementContext<'input>{} + +pub type QualifiedArgumentContext<'input> = BaseParserRuleContext<'input,QualifiedArgumentContextExt<'input>>; + +pub trait QualifiedArgumentContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() + } + fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) + } +} + +impl<'input> QualifiedArgumentContextAttrs<'input> for QualifiedArgumentContext<'input>{} + +pub struct QualifiedArgumentContextExt<'input>{ + base:PathElementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{QualifiedArgumentContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for QualifiedArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QualifiedArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_qualifiedArgument(self); + } +} + +impl<'input> CustomRuleContext<'input> for QualifiedArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_pathElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_pathElement } +} + +impl<'input> Borrow> for QualifiedArgumentContext<'input>{ + fn borrow(&self) -> &PathElementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for QualifiedArgumentContext<'input>{ + fn borrow_mut(&mut self) -> &mut PathElementContextExt<'input> { &mut self.base } +} + +impl<'input> PathElementContextAttrs<'input> for QualifiedArgumentContext<'input> {} + +impl<'input> QualifiedArgumentContextExt<'input>{ + fn new(ctx: &dyn PathElementContextAttrs<'input>) -> Rc> { + Rc::new( + PathElementContextAll::QualifiedArgumentContext( + BaseParserRuleContext::copy_from(ctx,QualifiedArgumentContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type UnqualifiedArgumentContext<'input> = BaseParserRuleContext<'input,UnqualifiedArgumentContextExt<'input>>; + +pub trait UnqualifiedArgumentContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> UnqualifiedArgumentContextAttrs<'input> for UnqualifiedArgumentContext<'input>{} + +pub struct UnqualifiedArgumentContextExt<'input>{ + base:PathElementContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UnqualifiedArgumentContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UnqualifiedArgumentContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UnqualifiedArgumentContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_unqualifiedArgument(self); + } +} + +impl<'input> CustomRuleContext<'input> for UnqualifiedArgumentContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_pathElement } + //fn type_rule_index() -> usize where Self: Sized { RULE_pathElement } +} + +impl<'input> Borrow> for UnqualifiedArgumentContext<'input>{ + fn borrow(&self) -> &PathElementContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UnqualifiedArgumentContext<'input>{ + fn borrow_mut(&mut self) -> &mut PathElementContextExt<'input> { &mut self.base } +} + +impl<'input> PathElementContextAttrs<'input> for UnqualifiedArgumentContext<'input> {} + +impl<'input> UnqualifiedArgumentContextExt<'input>{ + fn new(ctx: &dyn PathElementContextAttrs<'input>) -> Rc> { + Rc::new( + PathElementContextAll::UnqualifiedArgumentContext( + BaseParserRuleContext::copy_from(ctx,UnqualifiedArgumentContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn pathElement(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PathElementContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 196, RULE_pathElement); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2884); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(383,&mut recog.base)? { + 1 =>{ + let tmp = QualifiedArgumentContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule identifier*/ + recog.base.set_state(2879); + recog.identifier()?; + + recog.base.set_state(2880); + recog.base.match_token(T__0,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2881); + recog.identifier()?; + + } + } + , + 2 =>{ + let tmp = UnqualifiedArgumentContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + /*InvokeRule identifier*/ + recog.base.set_state(2883); + recog.identifier()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- pathSpecification ---------------- +pub type PathSpecificationContextAll<'input> = PathSpecificationContext<'input>; + + +pub type PathSpecificationContext<'input> = BaseParserRuleContext<'input,PathSpecificationContextExt<'input>>; + +#[derive(Clone)] +pub struct PathSpecificationContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PathSpecificationContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PathSpecificationContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_pathSpecification(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_pathSpecification(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for PathSpecificationContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_pathSpecification } + //fn type_rule_index() -> usize where Self: Sized { RULE_pathSpecification } +} +antlr_rust::tid!{PathSpecificationContextExt<'a>} + +impl<'input> PathSpecificationContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PathSpecificationContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait PathSpecificationContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn pathElement_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn pathElement(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> PathSpecificationContextAttrs<'input> for PathSpecificationContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn pathSpecification(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PathSpecificationContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 198, RULE_pathSpecification); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule pathElement*/ + recog.base.set_state(2886); + recog.pathElement()?; + + recog.base.set_state(2891); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2887); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule pathElement*/ + recog.base.set_state(2888); + recog.pathElement()?; + + } + } + recog.base.set_state(2893); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- privilege ---------------- +pub type PrivilegeContextAll<'input> = PrivilegeContext<'input>; + + +pub type PrivilegeContext<'input> = BaseParserRuleContext<'input,PrivilegeContextExt<'input>>; + +#[derive(Clone)] +pub struct PrivilegeContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PrivilegeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PrivilegeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_privilege(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_privilege(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for PrivilegeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_privilege } + //fn type_rule_index() -> usize where Self: Sized { RULE_privilege } +} +antlr_rust::tid!{PrivilegeContextExt<'a>} + +impl<'input> PrivilegeContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PrivilegeContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait PrivilegeContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token CREATE +/// Returns `None` if there is no child corresponding to token CREATE +fn CREATE(&self) -> Option>> where Self:Sized{ + self.get_token(CREATE, 0) +} +/// Retrieves first TerminalNode corresponding to token SELECT +/// Returns `None` if there is no child corresponding to token SELECT +fn SELECT(&self) -> Option>> where Self:Sized{ + self.get_token(SELECT, 0) +} +/// Retrieves first TerminalNode corresponding to token DELETE +/// Returns `None` if there is no child corresponding to token DELETE +fn DELETE(&self) -> Option>> where Self:Sized{ + self.get_token(DELETE, 0) +} +/// Retrieves first TerminalNode corresponding to token INSERT +/// Returns `None` if there is no child corresponding to token INSERT +fn INSERT(&self) -> Option>> where Self:Sized{ + self.get_token(INSERT, 0) +} +/// Retrieves first TerminalNode corresponding to token UPDATE +/// Returns `None` if there is no child corresponding to token UPDATE +fn UPDATE(&self) -> Option>> where Self:Sized{ + self.get_token(UPDATE, 0) +} + +} + +impl<'input> PrivilegeContextAttrs<'input> for PrivilegeContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn privilege(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PrivilegeContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 200, RULE_privilege); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2894); + _la = recog.base.input.la(1); + if { !(_la==CREATE || _la==DELETE || _la==INSERT || _la==SELECT || _la==UPDATE) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- qualifiedName ---------------- +pub type QualifiedNameContextAll<'input> = QualifiedNameContext<'input>; + + +pub type QualifiedNameContext<'input> = BaseParserRuleContext<'input,QualifiedNameContextExt<'input>>; + +#[derive(Clone)] +pub struct QualifiedNameContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QualifiedNameContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QualifiedNameContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_qualifiedName(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_qualifiedName(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for QualifiedNameContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_qualifiedName } + //fn type_rule_index() -> usize where Self: Sized { RULE_qualifiedName } +} +antlr_rust::tid!{QualifiedNameContextExt<'a>} + +impl<'input> QualifiedNameContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QualifiedNameContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait QualifiedNameContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} + +} + +impl<'input> QualifiedNameContextAttrs<'input> for QualifiedNameContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn qualifiedName(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = QualifiedNameContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 202, RULE_qualifiedName); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + let mut _alt: isize; + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(2896); + recog.identifier()?; + + recog.base.set_state(2901); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(385,&mut recog.base)?; + while { _alt!=2 && _alt!=INVALID_ALT } { + if _alt==1 { + { + { + recog.base.set_state(2897); + recog.base.match_token(T__0,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2898); + recog.identifier()?; + + } + } + } + recog.base.set_state(2903); + recog.err_handler.sync(&mut recog.base)?; + _alt = recog.interpreter.adaptive_predict(385,&mut recog.base)?; + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- queryPeriod ---------------- +pub type QueryPeriodContextAll<'input> = QueryPeriodContext<'input>; + + +pub type QueryPeriodContext<'input> = BaseParserRuleContext<'input,QueryPeriodContextExt<'input>>; + +#[derive(Clone)] +pub struct QueryPeriodContextExt<'input>{ + pub end: Option>>, +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for QueryPeriodContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QueryPeriodContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_queryPeriod(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_queryPeriod(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for QueryPeriodContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_queryPeriod } + //fn type_rule_index() -> usize where Self: Sized { RULE_queryPeriod } +} +antlr_rust::tid!{QueryPeriodContextExt<'a>} + +impl<'input> QueryPeriodContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,QueryPeriodContextExt{ + end: None, + ph:PhantomData + }), + ) + } +} + +pub trait QueryPeriodContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token FOR +/// Returns `None` if there is no child corresponding to token FOR +fn FOR(&self) -> Option>> where Self:Sized{ + self.get_token(FOR, 0) +} +fn rangeType(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} +/// Retrieves first TerminalNode corresponding to token AS +/// Returns `None` if there is no child corresponding to token AS +fn AS(&self) -> Option>> where Self:Sized{ + self.get_token(AS, 0) +} +/// Retrieves first TerminalNode corresponding to token OF +/// Returns `None` if there is no child corresponding to token OF +fn OF(&self) -> Option>> where Self:Sized{ + self.get_token(OF, 0) +} +fn valueExpression(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) +} + +} + +impl<'input> QueryPeriodContextAttrs<'input> for QueryPeriodContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn queryPeriod(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = QueryPeriodContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 204, RULE_queryPeriod); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2904); + recog.base.match_token(FOR,&mut recog.err_handler)?; + + /*InvokeRule rangeType*/ + recog.base.set_state(2905); + recog.rangeType()?; + + recog.base.set_state(2906); + recog.base.match_token(AS,&mut recog.err_handler)?; + + recog.base.set_state(2907); + recog.base.match_token(OF,&mut recog.err_handler)?; + + /*InvokeRule valueExpression*/ + recog.base.set_state(2908); + let tmp = recog.valueExpression_rec(0)?; + cast_mut::<_,QueryPeriodContext >(&mut _localctx).end = Some(tmp.clone()); + + + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- rangeType ---------------- +pub type RangeTypeContextAll<'input> = RangeTypeContext<'input>; + + +pub type RangeTypeContext<'input> = BaseParserRuleContext<'input,RangeTypeContextExt<'input>>; + +#[derive(Clone)] +pub struct RangeTypeContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RangeTypeContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RangeTypeContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rangeType(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_rangeType(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for RangeTypeContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_rangeType } + //fn type_rule_index() -> usize where Self: Sized { RULE_rangeType } +} +antlr_rust::tid!{RangeTypeContextExt<'a>} + +impl<'input> RangeTypeContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RangeTypeContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait RangeTypeContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token TIMESTAMP +/// Returns `None` if there is no child corresponding to token TIMESTAMP +fn TIMESTAMP(&self) -> Option>> where Self:Sized{ + self.get_token(TIMESTAMP, 0) +} +/// Retrieves first TerminalNode corresponding to token VERSION +/// Returns `None` if there is no child corresponding to token VERSION +fn VERSION(&self) -> Option>> where Self:Sized{ + self.get_token(VERSION, 0) +} + +} + +impl<'input> RangeTypeContextAttrs<'input> for RangeTypeContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn rangeType(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = RangeTypeContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 206, RULE_rangeType); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2910); + _la = recog.base.input.la(1); + if { !(_la==TIMESTAMP || _la==VERSION) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- grantor ---------------- +#[derive(Debug)] +pub enum GrantorContextAll<'input>{ + CurrentUserGrantorContext(CurrentUserGrantorContext<'input>), + SpecifiedPrincipalContext(SpecifiedPrincipalContext<'input>), + CurrentRoleGrantorContext(CurrentRoleGrantorContext<'input>), +Error(GrantorContext<'input>) +} +antlr_rust::tid!{GrantorContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for GrantorContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for GrantorContextAll<'input>{} + +impl<'input> Deref for GrantorContextAll<'input>{ + type Target = dyn GrantorContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use GrantorContextAll::*; + match self{ + CurrentUserGrantorContext(inner) => inner, + SpecifiedPrincipalContext(inner) => inner, + CurrentRoleGrantorContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for GrantorContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type GrantorContext<'input> = BaseParserRuleContext<'input,GrantorContextExt<'input>>; + +#[derive(Clone)] +pub struct GrantorContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for GrantorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for GrantorContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for GrantorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_grantor } + //fn type_rule_index() -> usize where Self: Sized { RULE_grantor } +} +antlr_rust::tid!{GrantorContextExt<'a>} + +impl<'input> GrantorContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + GrantorContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,GrantorContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait GrantorContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> GrantorContextAttrs<'input> for GrantorContext<'input>{} + +pub type CurrentUserGrantorContext<'input> = BaseParserRuleContext<'input,CurrentUserGrantorContextExt<'input>>; + +pub trait CurrentUserGrantorContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT_USER + /// Returns `None` if there is no child corresponding to token CURRENT_USER + fn CURRENT_USER(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_USER, 0) + } +} + +impl<'input> CurrentUserGrantorContextAttrs<'input> for CurrentUserGrantorContext<'input>{} + +pub struct CurrentUserGrantorContextExt<'input>{ + base:GrantorContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CurrentUserGrantorContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CurrentUserGrantorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CurrentUserGrantorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_currentUserGrantor(self); + } +} + +impl<'input> CustomRuleContext<'input> for CurrentUserGrantorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_grantor } + //fn type_rule_index() -> usize where Self: Sized { RULE_grantor } +} + +impl<'input> Borrow> for CurrentUserGrantorContext<'input>{ + fn borrow(&self) -> &GrantorContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CurrentUserGrantorContext<'input>{ + fn borrow_mut(&mut self) -> &mut GrantorContextExt<'input> { &mut self.base } +} + +impl<'input> GrantorContextAttrs<'input> for CurrentUserGrantorContext<'input> {} + +impl<'input> CurrentUserGrantorContextExt<'input>{ + fn new(ctx: &dyn GrantorContextAttrs<'input>) -> Rc> { + Rc::new( + GrantorContextAll::CurrentUserGrantorContext( + BaseParserRuleContext::copy_from(ctx,CurrentUserGrantorContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type SpecifiedPrincipalContext<'input> = BaseParserRuleContext<'input,SpecifiedPrincipalContextExt<'input>>; + +pub trait SpecifiedPrincipalContextAttrs<'input>: PrestoParserContext<'input>{ + fn principal(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> SpecifiedPrincipalContextAttrs<'input> for SpecifiedPrincipalContext<'input>{} + +pub struct SpecifiedPrincipalContextExt<'input>{ + base:GrantorContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{SpecifiedPrincipalContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for SpecifiedPrincipalContext<'input>{} + +impl<'input,'a> Listenable + 'a> for SpecifiedPrincipalContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_specifiedPrincipal(self); + } +} + +impl<'input> CustomRuleContext<'input> for SpecifiedPrincipalContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_grantor } + //fn type_rule_index() -> usize where Self: Sized { RULE_grantor } +} + +impl<'input> Borrow> for SpecifiedPrincipalContext<'input>{ + fn borrow(&self) -> &GrantorContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for SpecifiedPrincipalContext<'input>{ + fn borrow_mut(&mut self) -> &mut GrantorContextExt<'input> { &mut self.base } +} + +impl<'input> GrantorContextAttrs<'input> for SpecifiedPrincipalContext<'input> {} + +impl<'input> SpecifiedPrincipalContextExt<'input>{ + fn new(ctx: &dyn GrantorContextAttrs<'input>) -> Rc> { + Rc::new( + GrantorContextAll::SpecifiedPrincipalContext( + BaseParserRuleContext::copy_from(ctx,SpecifiedPrincipalContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type CurrentRoleGrantorContext<'input> = BaseParserRuleContext<'input,CurrentRoleGrantorContextExt<'input>>; + +pub trait CurrentRoleGrantorContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token CURRENT_ROLE + /// Returns `None` if there is no child corresponding to token CURRENT_ROLE + fn CURRENT_ROLE(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT_ROLE, 0) + } +} + +impl<'input> CurrentRoleGrantorContextAttrs<'input> for CurrentRoleGrantorContext<'input>{} + +pub struct CurrentRoleGrantorContextExt<'input>{ + base:GrantorContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{CurrentRoleGrantorContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for CurrentRoleGrantorContext<'input>{} + +impl<'input,'a> Listenable + 'a> for CurrentRoleGrantorContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_currentRoleGrantor(self); + } +} + +impl<'input> CustomRuleContext<'input> for CurrentRoleGrantorContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_grantor } + //fn type_rule_index() -> usize where Self: Sized { RULE_grantor } +} + +impl<'input> Borrow> for CurrentRoleGrantorContext<'input>{ + fn borrow(&self) -> &GrantorContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for CurrentRoleGrantorContext<'input>{ + fn borrow_mut(&mut self) -> &mut GrantorContextExt<'input> { &mut self.base } +} + +impl<'input> GrantorContextAttrs<'input> for CurrentRoleGrantorContext<'input> {} + +impl<'input> CurrentRoleGrantorContextExt<'input>{ + fn new(ctx: &dyn GrantorContextAttrs<'input>) -> Rc> { + Rc::new( + GrantorContextAll::CurrentRoleGrantorContext( + BaseParserRuleContext::copy_from(ctx,CurrentRoleGrantorContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn grantor(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = GrantorContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 208, RULE_grantor); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2915); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | + AUTHORIZATION | BERNOULLI | BOTH | CALL | CASCADE | CATALOGS | COLUMN | + COLUMNS | COMMENT | COMMIT | COMMITTED | CONDITIONAL | COUNT | COPARTITION | + CURRENT | DATA | DATE | DAY | DEFAULT | DEFINE | DEFINER | DENY | DESC | + DESCRIPTOR | DISTRIBUTED | DOUBLE | EMPTY | ENCODING | ERROR | EXCLUDING | + EXPLAIN | FETCH | FILTER | FINAL | FIRST | FOLLOWING | FORMAT | FUNCTIONS | + GRACE | GRANT | GRANTED | GRANTS | GRAPHVIZ | GROUPS | HOUR | IF | IGNORE | + INCLUDING | INITIAL | INPUT | INTERVAL | INVOKER | IO | ISOLATION | JSON | + KEEP | KEY | KEYS | LAST | LATERAL | LEADING | LEVEL | LIMIT | LOCAL | + LOGICAL | MAP | MATCH | MATCHED | MATCHES | MATCH_RECOGNIZE | MATERIALIZED | + MEASURES | MERGE | MINUTE | MONTH | NEXT | NFC | NFD | NFKC | NFKD | + NO | NONE | NULLIF | NULLS | OBJECT | OF | OFFSET | OMIT | ONE | ONLY | + OPTION | ORDINALITY | OUTPUT | OVER | OVERFLOW | PARTITION | PARTITIONS | + PASSING | PAST | PATH | PATTERN | PER | PERIOD | PERMUTE | POSITION | + PRECEDING | PRECISION | PRIVILEGES | PROPERTIES | PRUNE | QUOTES | RANGE | + READ | REFRESH | RENAME | REPEATABLE | REPLACE | RESET | RESPECT | RESTRICT | + RETURNING | REVOKE | ROLE | ROLES | ROLLBACK | ROW | ROWS | RUNNING | + SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | SERIALIZABLE | + SESSION | SET | SETS | SHOW | SOME | START | STATS | SUBSET | SUBSTRING | + SYSTEM | TABLES | TABLESAMPLE | TEXT | TEXT_STRING | TIES | TIME | TIMESTAMP | + TO | TRAILING | TRANSACTION | TRUNCATE | TRY_CAST | TYPE | UNBOUNDED | + UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | UPDATE | + USE | USER | UTF16 | UTF32 | UTF8 | VALIDATE | VALUE | VERBOSE | VERSION | + VIEW | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE | YEAR | ZONE | + IDENTIFIER | DIGIT_IDENTIFIER | QUOTED_IDENTIFIER | BACKQUOTED_IDENTIFIER + => { + let tmp = SpecifiedPrincipalContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule principal*/ + recog.base.set_state(2912); + recog.principal()?; + + } + } + + CURRENT_USER + => { + let tmp = CurrentUserGrantorContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2913); + recog.base.match_token(CURRENT_USER,&mut recog.err_handler)?; + + } + } + + CURRENT_ROLE + => { + let tmp = CurrentRoleGrantorContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2914); + recog.base.match_token(CURRENT_ROLE,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- principal ---------------- +#[derive(Debug)] +pub enum PrincipalContextAll<'input>{ + UnspecifiedPrincipalContext(UnspecifiedPrincipalContext<'input>), + UserPrincipalContext(UserPrincipalContext<'input>), + RolePrincipalContext(RolePrincipalContext<'input>), +Error(PrincipalContext<'input>) +} +antlr_rust::tid!{PrincipalContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for PrincipalContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for PrincipalContextAll<'input>{} + +impl<'input> Deref for PrincipalContextAll<'input>{ + type Target = dyn PrincipalContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use PrincipalContextAll::*; + match self{ + UnspecifiedPrincipalContext(inner) => inner, + UserPrincipalContext(inner) => inner, + RolePrincipalContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for PrincipalContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type PrincipalContext<'input> = BaseParserRuleContext<'input,PrincipalContextExt<'input>>; + +#[derive(Clone)] +pub struct PrincipalContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for PrincipalContext<'input>{} + +impl<'input,'a> Listenable + 'a> for PrincipalContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for PrincipalContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_principal } + //fn type_rule_index() -> usize where Self: Sized { RULE_principal } +} +antlr_rust::tid!{PrincipalContextExt<'a>} + +impl<'input> PrincipalContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + PrincipalContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,PrincipalContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait PrincipalContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> PrincipalContextAttrs<'input> for PrincipalContext<'input>{} + +pub type UnspecifiedPrincipalContext<'input> = BaseParserRuleContext<'input,UnspecifiedPrincipalContextExt<'input>>; + +pub trait UnspecifiedPrincipalContextAttrs<'input>: PrestoParserContext<'input>{ + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> UnspecifiedPrincipalContextAttrs<'input> for UnspecifiedPrincipalContext<'input>{} + +pub struct UnspecifiedPrincipalContextExt<'input>{ + base:PrincipalContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UnspecifiedPrincipalContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UnspecifiedPrincipalContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UnspecifiedPrincipalContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_unspecifiedPrincipal(self); + } +} + +impl<'input> CustomRuleContext<'input> for UnspecifiedPrincipalContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_principal } + //fn type_rule_index() -> usize where Self: Sized { RULE_principal } +} + +impl<'input> Borrow> for UnspecifiedPrincipalContext<'input>{ + fn borrow(&self) -> &PrincipalContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UnspecifiedPrincipalContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrincipalContextExt<'input> { &mut self.base } +} + +impl<'input> PrincipalContextAttrs<'input> for UnspecifiedPrincipalContext<'input> {} + +impl<'input> UnspecifiedPrincipalContextExt<'input>{ + fn new(ctx: &dyn PrincipalContextAttrs<'input>) -> Rc> { + Rc::new( + PrincipalContextAll::UnspecifiedPrincipalContext( + BaseParserRuleContext::copy_from(ctx,UnspecifiedPrincipalContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type UserPrincipalContext<'input> = BaseParserRuleContext<'input,UserPrincipalContextExt<'input>>; + +pub trait UserPrincipalContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token USER + /// Returns `None` if there is no child corresponding to token USER + fn USER(&self) -> Option>> where Self:Sized{ + self.get_token(USER, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> UserPrincipalContextAttrs<'input> for UserPrincipalContext<'input>{} + +pub struct UserPrincipalContextExt<'input>{ + base:PrincipalContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UserPrincipalContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UserPrincipalContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UserPrincipalContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_userPrincipal(self); + } +} + +impl<'input> CustomRuleContext<'input> for UserPrincipalContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_principal } + //fn type_rule_index() -> usize where Self: Sized { RULE_principal } +} + +impl<'input> Borrow> for UserPrincipalContext<'input>{ + fn borrow(&self) -> &PrincipalContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UserPrincipalContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrincipalContextExt<'input> { &mut self.base } +} + +impl<'input> PrincipalContextAttrs<'input> for UserPrincipalContext<'input> {} + +impl<'input> UserPrincipalContextExt<'input>{ + fn new(ctx: &dyn PrincipalContextAttrs<'input>) -> Rc> { + Rc::new( + PrincipalContextAll::UserPrincipalContext( + BaseParserRuleContext::copy_from(ctx,UserPrincipalContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type RolePrincipalContext<'input> = BaseParserRuleContext<'input,RolePrincipalContextExt<'input>>; + +pub trait RolePrincipalContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token ROLE + /// Returns `None` if there is no child corresponding to token ROLE + fn ROLE(&self) -> Option>> where Self:Sized{ + self.get_token(ROLE, 0) + } + fn identifier(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> RolePrincipalContextAttrs<'input> for RolePrincipalContext<'input>{} + +pub struct RolePrincipalContextExt<'input>{ + base:PrincipalContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{RolePrincipalContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for RolePrincipalContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RolePrincipalContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_rolePrincipal(self); + } +} + +impl<'input> CustomRuleContext<'input> for RolePrincipalContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_principal } + //fn type_rule_index() -> usize where Self: Sized { RULE_principal } +} + +impl<'input> Borrow> for RolePrincipalContext<'input>{ + fn borrow(&self) -> &PrincipalContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for RolePrincipalContext<'input>{ + fn borrow_mut(&mut self) -> &mut PrincipalContextExt<'input> { &mut self.base } +} + +impl<'input> PrincipalContextAttrs<'input> for RolePrincipalContext<'input> {} + +impl<'input> RolePrincipalContextExt<'input>{ + fn new(ctx: &dyn PrincipalContextAttrs<'input>) -> Rc> { + Rc::new( + PrincipalContextAll::RolePrincipalContext( + BaseParserRuleContext::copy_from(ctx,RolePrincipalContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn principal(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = PrincipalContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 210, RULE_principal); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2922); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(387,&mut recog.base)? { + 1 =>{ + let tmp = UnspecifiedPrincipalContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + /*InvokeRule identifier*/ + recog.base.set_state(2917); + recog.identifier()?; + + } + } + , + 2 =>{ + let tmp = UserPrincipalContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2918); + recog.base.match_token(USER,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2919); + recog.identifier()?; + + } + } + , + 3 =>{ + let tmp = RolePrincipalContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2920); + recog.base.match_token(ROLE,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2921); + recog.identifier()?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- roles ---------------- +pub type RolesContextAll<'input> = RolesContext<'input>; + + +pub type RolesContext<'input> = BaseParserRuleContext<'input,RolesContextExt<'input>>; + +#[derive(Clone)] +pub struct RolesContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for RolesContext<'input>{} + +impl<'input,'a> Listenable + 'a> for RolesContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_roles(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_roles(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for RolesContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_roles } + //fn type_rule_index() -> usize where Self: Sized { RULE_roles } +} +antlr_rust::tid!{RolesContextExt<'a>} + +impl<'input> RolesContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,RolesContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait RolesContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +fn identifier_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +fn identifier(&self, i: usize) -> Option>> where Self:Sized{ + self.child_of_type(i) +} +/// Retrieves all `TerminalNode`s corresponding to token COMMA in current rule +fn COMMA_all(&self) -> Vec>> where Self:Sized{ + self.children_of_type() +} +/// Retrieves 'i's TerminalNode corresponding to token COMMA, starting from 0. +/// Returns `None` if number of children corresponding to token COMMA is less or equal than `i`. +fn COMMA(&self, i: usize) -> Option>> where Self:Sized{ + self.get_token(COMMA, i) +} + +} + +impl<'input> RolesContextAttrs<'input> for RolesContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn roles(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = RolesContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 212, RULE_roles); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + /*InvokeRule identifier*/ + recog.base.set_state(2924); + recog.identifier()?; + + recog.base.set_state(2929); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + while _la==COMMA { + { + { + recog.base.set_state(2925); + recog.base.match_token(COMMA,&mut recog.err_handler)?; + + /*InvokeRule identifier*/ + recog.base.set_state(2926); + recog.identifier()?; + + } + } + recog.base.set_state(2931); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- identifier ---------------- +#[derive(Debug)] +pub enum IdentifierContextAll<'input>{ + BackQuotedIdentifierContext(BackQuotedIdentifierContext<'input>), + QuotedIdentifierContext(QuotedIdentifierContext<'input>), + DigitIdentifierContext(DigitIdentifierContext<'input>), + UnquotedIdentifierContext(UnquotedIdentifierContext<'input>), +Error(IdentifierContext<'input>) +} +antlr_rust::tid!{IdentifierContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for IdentifierContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for IdentifierContextAll<'input>{} + +impl<'input> Deref for IdentifierContextAll<'input>{ + type Target = dyn IdentifierContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use IdentifierContextAll::*; + match self{ + BackQuotedIdentifierContext(inner) => inner, + QuotedIdentifierContext(inner) => inner, + DigitIdentifierContext(inner) => inner, + UnquotedIdentifierContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for IdentifierContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type IdentifierContext<'input> = BaseParserRuleContext<'input,IdentifierContextExt<'input>>; + +#[derive(Clone)] +pub struct IdentifierContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for IdentifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for IdentifierContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for IdentifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_identifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_identifier } +} +antlr_rust::tid!{IdentifierContextExt<'a>} + +impl<'input> IdentifierContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + IdentifierContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,IdentifierContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait IdentifierContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> IdentifierContextAttrs<'input> for IdentifierContext<'input>{} + +pub type BackQuotedIdentifierContext<'input> = BaseParserRuleContext<'input,BackQuotedIdentifierContextExt<'input>>; + +pub trait BackQuotedIdentifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token BACKQUOTED_IDENTIFIER + /// Returns `None` if there is no child corresponding to token BACKQUOTED_IDENTIFIER + fn BACKQUOTED_IDENTIFIER(&self) -> Option>> where Self:Sized{ + self.get_token(BACKQUOTED_IDENTIFIER, 0) + } +} + +impl<'input> BackQuotedIdentifierContextAttrs<'input> for BackQuotedIdentifierContext<'input>{} + +pub struct BackQuotedIdentifierContextExt<'input>{ + base:IdentifierContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{BackQuotedIdentifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for BackQuotedIdentifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for BackQuotedIdentifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_backQuotedIdentifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for BackQuotedIdentifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_identifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_identifier } +} + +impl<'input> Borrow> for BackQuotedIdentifierContext<'input>{ + fn borrow(&self) -> &IdentifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for BackQuotedIdentifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut IdentifierContextExt<'input> { &mut self.base } +} + +impl<'input> IdentifierContextAttrs<'input> for BackQuotedIdentifierContext<'input> {} + +impl<'input> BackQuotedIdentifierContextExt<'input>{ + fn new(ctx: &dyn IdentifierContextAttrs<'input>) -> Rc> { + Rc::new( + IdentifierContextAll::BackQuotedIdentifierContext( + BaseParserRuleContext::copy_from(ctx,BackQuotedIdentifierContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type QuotedIdentifierContext<'input> = BaseParserRuleContext<'input,QuotedIdentifierContextExt<'input>>; + +pub trait QuotedIdentifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token QUOTED_IDENTIFIER + /// Returns `None` if there is no child corresponding to token QUOTED_IDENTIFIER + fn QUOTED_IDENTIFIER(&self) -> Option>> where Self:Sized{ + self.get_token(QUOTED_IDENTIFIER, 0) + } +} + +impl<'input> QuotedIdentifierContextAttrs<'input> for QuotedIdentifierContext<'input>{} + +pub struct QuotedIdentifierContextExt<'input>{ + base:IdentifierContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{QuotedIdentifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for QuotedIdentifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for QuotedIdentifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_quotedIdentifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for QuotedIdentifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_identifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_identifier } +} + +impl<'input> Borrow> for QuotedIdentifierContext<'input>{ + fn borrow(&self) -> &IdentifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for QuotedIdentifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut IdentifierContextExt<'input> { &mut self.base } +} + +impl<'input> IdentifierContextAttrs<'input> for QuotedIdentifierContext<'input> {} + +impl<'input> QuotedIdentifierContextExt<'input>{ + fn new(ctx: &dyn IdentifierContextAttrs<'input>) -> Rc> { + Rc::new( + IdentifierContextAll::QuotedIdentifierContext( + BaseParserRuleContext::copy_from(ctx,QuotedIdentifierContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DigitIdentifierContext<'input> = BaseParserRuleContext<'input,DigitIdentifierContextExt<'input>>; + +pub trait DigitIdentifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DIGIT_IDENTIFIER + /// Returns `None` if there is no child corresponding to token DIGIT_IDENTIFIER + fn DIGIT_IDENTIFIER(&self) -> Option>> where Self:Sized{ + self.get_token(DIGIT_IDENTIFIER, 0) + } +} + +impl<'input> DigitIdentifierContextAttrs<'input> for DigitIdentifierContext<'input>{} + +pub struct DigitIdentifierContextExt<'input>{ + base:IdentifierContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DigitIdentifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DigitIdentifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DigitIdentifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_digitIdentifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for DigitIdentifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_identifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_identifier } +} + +impl<'input> Borrow> for DigitIdentifierContext<'input>{ + fn borrow(&self) -> &IdentifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DigitIdentifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut IdentifierContextExt<'input> { &mut self.base } +} + +impl<'input> IdentifierContextAttrs<'input> for DigitIdentifierContext<'input> {} + +impl<'input> DigitIdentifierContextExt<'input>{ + fn new(ctx: &dyn IdentifierContextAttrs<'input>) -> Rc> { + Rc::new( + IdentifierContextAll::DigitIdentifierContext( + BaseParserRuleContext::copy_from(ctx,DigitIdentifierContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type UnquotedIdentifierContext<'input> = BaseParserRuleContext<'input,UnquotedIdentifierContextExt<'input>>; + +pub trait UnquotedIdentifierContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token IDENTIFIER + /// Returns `None` if there is no child corresponding to token IDENTIFIER + fn IDENTIFIER(&self) -> Option>> where Self:Sized{ + self.get_token(IDENTIFIER, 0) + } + fn nonReserved(&self) -> Option>> where Self:Sized{ + self.child_of_type(0) + } +} + +impl<'input> UnquotedIdentifierContextAttrs<'input> for UnquotedIdentifierContext<'input>{} + +pub struct UnquotedIdentifierContextExt<'input>{ + base:IdentifierContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{UnquotedIdentifierContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for UnquotedIdentifierContext<'input>{} + +impl<'input,'a> Listenable + 'a> for UnquotedIdentifierContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_unquotedIdentifier(self); + } +} + +impl<'input> CustomRuleContext<'input> for UnquotedIdentifierContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_identifier } + //fn type_rule_index() -> usize where Self: Sized { RULE_identifier } +} + +impl<'input> Borrow> for UnquotedIdentifierContext<'input>{ + fn borrow(&self) -> &IdentifierContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for UnquotedIdentifierContext<'input>{ + fn borrow_mut(&mut self) -> &mut IdentifierContextExt<'input> { &mut self.base } +} + +impl<'input> IdentifierContextAttrs<'input> for UnquotedIdentifierContext<'input> {} + +impl<'input> UnquotedIdentifierContextExt<'input>{ + fn new(ctx: &dyn IdentifierContextAttrs<'input>) -> Rc> { + Rc::new( + IdentifierContextAll::UnquotedIdentifierContext( + BaseParserRuleContext::copy_from(ctx,UnquotedIdentifierContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn identifier(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = IdentifierContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 214, RULE_identifier); + let mut _localctx: Rc = _localctx; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2937); + recog.err_handler.sync(&mut recog.base)?; + match recog.base.input.la(1) { + IDENTIFIER + => { + let tmp = UnquotedIdentifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2932); + recog.base.match_token(IDENTIFIER,&mut recog.err_handler)?; + + } + } + + QUOTED_IDENTIFIER + => { + let tmp = QuotedIdentifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2933); + recog.base.match_token(QUOTED_IDENTIFIER,&mut recog.err_handler)?; + + } + } + + ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | + AUTHORIZATION | BERNOULLI | BOTH | CALL | CASCADE | CATALOGS | COLUMN | + COLUMNS | COMMENT | COMMIT | COMMITTED | CONDITIONAL | COUNT | COPARTITION | + CURRENT | DATA | DATE | DAY | DEFAULT | DEFINE | DEFINER | DENY | DESC | + DESCRIPTOR | DISTRIBUTED | DOUBLE | EMPTY | ENCODING | ERROR | EXCLUDING | + EXPLAIN | FETCH | FILTER | FINAL | FIRST | FOLLOWING | FORMAT | FUNCTIONS | + GRACE | GRANT | GRANTED | GRANTS | GRAPHVIZ | GROUPS | HOUR | IF | IGNORE | + INCLUDING | INITIAL | INPUT | INTERVAL | INVOKER | IO | ISOLATION | JSON | + KEEP | KEY | KEYS | LAST | LATERAL | LEADING | LEVEL | LIMIT | LOCAL | + LOGICAL | MAP | MATCH | MATCHED | MATCHES | MATCH_RECOGNIZE | MATERIALIZED | + MEASURES | MERGE | MINUTE | MONTH | NEXT | NFC | NFD | NFKC | NFKD | + NO | NONE | NULLIF | NULLS | OBJECT | OF | OFFSET | OMIT | ONE | ONLY | + OPTION | ORDINALITY | OUTPUT | OVER | OVERFLOW | PARTITION | PARTITIONS | + PASSING | PAST | PATH | PATTERN | PER | PERIOD | PERMUTE | POSITION | + PRECEDING | PRECISION | PRIVILEGES | PROPERTIES | PRUNE | QUOTES | RANGE | + READ | REFRESH | RENAME | REPEATABLE | REPLACE | RESET | RESPECT | RESTRICT | + RETURNING | REVOKE | ROLE | ROLES | ROLLBACK | ROW | ROWS | RUNNING | + SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | SERIALIZABLE | + SESSION | SET | SETS | SHOW | SOME | START | STATS | SUBSET | SUBSTRING | + SYSTEM | TABLES | TABLESAMPLE | TEXT | TEXT_STRING | TIES | TIME | TIMESTAMP | + TO | TRAILING | TRANSACTION | TRUNCATE | TRY_CAST | TYPE | UNBOUNDED | + UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | UPDATE | + USE | USER | UTF16 | UTF32 | UTF8 | VALIDATE | VALUE | VERBOSE | VERSION | + VIEW | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE | YEAR | ZONE + => { + let tmp = UnquotedIdentifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + /*InvokeRule nonReserved*/ + recog.base.set_state(2934); + recog.nonReserved()?; + + } + } + + BACKQUOTED_IDENTIFIER + => { + let tmp = BackQuotedIdentifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 4); + _localctx = tmp; + { + recog.base.set_state(2935); + recog.base.match_token(BACKQUOTED_IDENTIFIER,&mut recog.err_handler)?; + + } + } + + DIGIT_IDENTIFIER + => { + let tmp = DigitIdentifierContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 5); + _localctx = tmp; + { + recog.base.set_state(2936); + recog.base.match_token(DIGIT_IDENTIFIER,&mut recog.err_handler)?; + + } + } + + _ => Err(ANTLRError::NoAltError(NoViableAltError::new(&mut recog.base)))? + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- number ---------------- +#[derive(Debug)] +pub enum NumberContextAll<'input>{ + DecimalLiteralContext(DecimalLiteralContext<'input>), + DoubleLiteralContext(DoubleLiteralContext<'input>), + IntegerLiteralContext(IntegerLiteralContext<'input>), +Error(NumberContext<'input>) +} +antlr_rust::tid!{NumberContextAll<'a>} + +impl<'input> antlr_rust::parser_rule_context::DerefSeal for NumberContextAll<'input>{} + +impl<'input> PrestoParserContext<'input> for NumberContextAll<'input>{} + +impl<'input> Deref for NumberContextAll<'input>{ + type Target = dyn NumberContextAttrs<'input> + 'input; + fn deref(&self) -> &Self::Target{ + use NumberContextAll::*; + match self{ + DecimalLiteralContext(inner) => inner, + DoubleLiteralContext(inner) => inner, + IntegerLiteralContext(inner) => inner, +Error(inner) => inner + } + } +} +impl<'input,'a> Listenable + 'a> for NumberContextAll<'input>{ + fn enter(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().enter(listener) } + fn exit(&self, listener: &mut (dyn PrestoListener<'input> + 'a)) { self.deref().exit(listener) } +} + + + +pub type NumberContext<'input> = BaseParserRuleContext<'input,NumberContextExt<'input>>; + +#[derive(Clone)] +pub struct NumberContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for NumberContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NumberContext<'input>{ +} + +impl<'input> CustomRuleContext<'input> for NumberContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_number } + //fn type_rule_index() -> usize where Self: Sized { RULE_number } +} +antlr_rust::tid!{NumberContextExt<'a>} + +impl<'input> NumberContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + NumberContextAll::Error( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,NumberContextExt{ + ph:PhantomData + }), + ) + ) + } +} + +pub trait NumberContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + + +} + +impl<'input> NumberContextAttrs<'input> for NumberContext<'input>{} + +pub type DecimalLiteralContext<'input> = BaseParserRuleContext<'input,DecimalLiteralContextExt<'input>>; + +pub trait DecimalLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DECIMAL_VALUE + /// Returns `None` if there is no child corresponding to token DECIMAL_VALUE + fn DECIMAL_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(DECIMAL_VALUE, 0) + } + /// Retrieves first TerminalNode corresponding to token MINUS + /// Returns `None` if there is no child corresponding to token MINUS + fn MINUS(&self) -> Option>> where Self:Sized{ + self.get_token(MINUS, 0) + } +} + +impl<'input> DecimalLiteralContextAttrs<'input> for DecimalLiteralContext<'input>{} + +pub struct DecimalLiteralContextExt<'input>{ + base:NumberContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DecimalLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DecimalLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DecimalLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_decimalLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for DecimalLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_number } + //fn type_rule_index() -> usize where Self: Sized { RULE_number } +} + +impl<'input> Borrow> for DecimalLiteralContext<'input>{ + fn borrow(&self) -> &NumberContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DecimalLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut NumberContextExt<'input> { &mut self.base } +} + +impl<'input> NumberContextAttrs<'input> for DecimalLiteralContext<'input> {} + +impl<'input> DecimalLiteralContextExt<'input>{ + fn new(ctx: &dyn NumberContextAttrs<'input>) -> Rc> { + Rc::new( + NumberContextAll::DecimalLiteralContext( + BaseParserRuleContext::copy_from(ctx,DecimalLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type DoubleLiteralContext<'input> = BaseParserRuleContext<'input,DoubleLiteralContextExt<'input>>; + +pub trait DoubleLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token DOUBLE_VALUE + /// Returns `None` if there is no child corresponding to token DOUBLE_VALUE + fn DOUBLE_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(DOUBLE_VALUE, 0) + } + /// Retrieves first TerminalNode corresponding to token MINUS + /// Returns `None` if there is no child corresponding to token MINUS + fn MINUS(&self) -> Option>> where Self:Sized{ + self.get_token(MINUS, 0) + } +} + +impl<'input> DoubleLiteralContextAttrs<'input> for DoubleLiteralContext<'input>{} + +pub struct DoubleLiteralContextExt<'input>{ + base:NumberContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{DoubleLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for DoubleLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for DoubleLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_doubleLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for DoubleLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_number } + //fn type_rule_index() -> usize where Self: Sized { RULE_number } +} + +impl<'input> Borrow> for DoubleLiteralContext<'input>{ + fn borrow(&self) -> &NumberContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for DoubleLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut NumberContextExt<'input> { &mut self.base } +} + +impl<'input> NumberContextAttrs<'input> for DoubleLiteralContext<'input> {} + +impl<'input> DoubleLiteralContextExt<'input>{ + fn new(ctx: &dyn NumberContextAttrs<'input>) -> Rc> { + Rc::new( + NumberContextAll::DoubleLiteralContext( + BaseParserRuleContext::copy_from(ctx,DoubleLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +pub type IntegerLiteralContext<'input> = BaseParserRuleContext<'input,IntegerLiteralContextExt<'input>>; + +pub trait IntegerLiteralContextAttrs<'input>: PrestoParserContext<'input>{ + /// Retrieves first TerminalNode corresponding to token INTEGER_VALUE + /// Returns `None` if there is no child corresponding to token INTEGER_VALUE + fn INTEGER_VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(INTEGER_VALUE, 0) + } + /// Retrieves first TerminalNode corresponding to token MINUS + /// Returns `None` if there is no child corresponding to token MINUS + fn MINUS(&self) -> Option>> where Self:Sized{ + self.get_token(MINUS, 0) + } +} + +impl<'input> IntegerLiteralContextAttrs<'input> for IntegerLiteralContext<'input>{} + +pub struct IntegerLiteralContextExt<'input>{ + base:NumberContextExt<'input>, + ph:PhantomData<&'input str> +} + +antlr_rust::tid!{IntegerLiteralContextExt<'a>} + +impl<'input> PrestoParserContext<'input> for IntegerLiteralContext<'input>{} + +impl<'input,'a> Listenable + 'a> for IntegerLiteralContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_integerLiteral(self); + } +} + +impl<'input> CustomRuleContext<'input> for IntegerLiteralContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_number } + //fn type_rule_index() -> usize where Self: Sized { RULE_number } +} + +impl<'input> Borrow> for IntegerLiteralContext<'input>{ + fn borrow(&self) -> &NumberContextExt<'input> { &self.base } +} +impl<'input> BorrowMut> for IntegerLiteralContext<'input>{ + fn borrow_mut(&mut self) -> &mut NumberContextExt<'input> { &mut self.base } +} + +impl<'input> NumberContextAttrs<'input> for IntegerLiteralContext<'input> {} + +impl<'input> IntegerLiteralContextExt<'input>{ + fn new(ctx: &dyn NumberContextAttrs<'input>) -> Rc> { + Rc::new( + NumberContextAll::IntegerLiteralContext( + BaseParserRuleContext::copy_from(ctx,IntegerLiteralContextExt{ + base: ctx.borrow().clone(), + ph:PhantomData + }) + ) + ) + } +} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn number(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = NumberContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 216, RULE_number); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + recog.base.set_state(2951); + recog.err_handler.sync(&mut recog.base)?; + match recog.interpreter.adaptive_predict(393,&mut recog.base)? { + 1 =>{ + let tmp = DecimalLiteralContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 1); + _localctx = tmp; + { + recog.base.set_state(2940); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==MINUS { + { + recog.base.set_state(2939); + recog.base.match_token(MINUS,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2942); + recog.base.match_token(DECIMAL_VALUE,&mut recog.err_handler)?; + + } + } + , + 2 =>{ + let tmp = DoubleLiteralContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 2); + _localctx = tmp; + { + recog.base.set_state(2944); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==MINUS { + { + recog.base.set_state(2943); + recog.base.match_token(MINUS,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2946); + recog.base.match_token(DOUBLE_VALUE,&mut recog.err_handler)?; + + } + } + , + 3 =>{ + let tmp = IntegerLiteralContextExt::new(&**_localctx); + recog.base.enter_outer_alt(Some(tmp.clone()), 3); + _localctx = tmp; + { + recog.base.set_state(2948); + recog.err_handler.sync(&mut recog.base)?; + _la = recog.base.input.la(1); + if _la==MINUS { + { + recog.base.set_state(2947); + recog.base.match_token(MINUS,&mut recog.err_handler)?; + + } + } + + recog.base.set_state(2950); + recog.base.match_token(INTEGER_VALUE,&mut recog.err_handler)?; + + } + } + + _ => {} + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} +//------------------- nonReserved ---------------- +pub type NonReservedContextAll<'input> = NonReservedContext<'input>; + + +pub type NonReservedContext<'input> = BaseParserRuleContext<'input,NonReservedContextExt<'input>>; + +#[derive(Clone)] +pub struct NonReservedContextExt<'input>{ +ph:PhantomData<&'input str> +} + +impl<'input> PrestoParserContext<'input> for NonReservedContext<'input>{} + +impl<'input,'a> Listenable + 'a> for NonReservedContext<'input>{ + fn enter(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.enter_every_rule(self); + listener.enter_nonReserved(self); + }fn exit(&self,listener: &mut (dyn PrestoListener<'input> + 'a)) { + listener.exit_nonReserved(self); + listener.exit_every_rule(self); + } +} + +impl<'input> CustomRuleContext<'input> for NonReservedContextExt<'input>{ + type TF = LocalTokenFactory<'input>; + type Ctx = PrestoParserContextType; + fn get_rule_index(&self) -> usize { RULE_nonReserved } + //fn type_rule_index() -> usize where Self: Sized { RULE_nonReserved } +} +antlr_rust::tid!{NonReservedContextExt<'a>} + +impl<'input> NonReservedContextExt<'input>{ + fn new(parent: Option + 'input > >, invoking_state: isize) -> Rc> { + Rc::new( + BaseParserRuleContext::new_parser_ctx(parent, invoking_state,NonReservedContextExt{ + ph:PhantomData + }), + ) + } +} + +pub trait NonReservedContextAttrs<'input>: PrestoParserContext<'input> + BorrowMut>{ + +/// Retrieves first TerminalNode corresponding to token ABSENT +/// Returns `None` if there is no child corresponding to token ABSENT +fn ABSENT(&self) -> Option>> where Self:Sized{ + self.get_token(ABSENT, 0) +} +/// Retrieves first TerminalNode corresponding to token ADD +/// Returns `None` if there is no child corresponding to token ADD +fn ADD(&self) -> Option>> where Self:Sized{ + self.get_token(ADD, 0) +} +/// Retrieves first TerminalNode corresponding to token ADMIN +/// Returns `None` if there is no child corresponding to token ADMIN +fn ADMIN(&self) -> Option>> where Self:Sized{ + self.get_token(ADMIN, 0) +} +/// Retrieves first TerminalNode corresponding to token AFTER +/// Returns `None` if there is no child corresponding to token AFTER +fn AFTER(&self) -> Option>> where Self:Sized{ + self.get_token(AFTER, 0) +} +/// Retrieves first TerminalNode corresponding to token ALL +/// Returns `None` if there is no child corresponding to token ALL +fn ALL(&self) -> Option>> where Self:Sized{ + self.get_token(ALL, 0) +} +/// Retrieves first TerminalNode corresponding to token ANALYZE +/// Returns `None` if there is no child corresponding to token ANALYZE +fn ANALYZE(&self) -> Option>> where Self:Sized{ + self.get_token(ANALYZE, 0) +} +/// Retrieves first TerminalNode corresponding to token ANY +/// Returns `None` if there is no child corresponding to token ANY +fn ANY(&self) -> Option>> where Self:Sized{ + self.get_token(ANY, 0) +} +/// Retrieves first TerminalNode corresponding to token ARRAY +/// Returns `None` if there is no child corresponding to token ARRAY +fn ARRAY(&self) -> Option>> where Self:Sized{ + self.get_token(ARRAY, 0) +} +/// Retrieves first TerminalNode corresponding to token ASC +/// Returns `None` if there is no child corresponding to token ASC +fn ASC(&self) -> Option>> where Self:Sized{ + self.get_token(ASC, 0) +} +/// Retrieves first TerminalNode corresponding to token AT +/// Returns `None` if there is no child corresponding to token AT +fn AT(&self) -> Option>> where Self:Sized{ + self.get_token(AT, 0) +} +/// Retrieves first TerminalNode corresponding to token AUTHORIZATION +/// Returns `None` if there is no child corresponding to token AUTHORIZATION +fn AUTHORIZATION(&self) -> Option>> where Self:Sized{ + self.get_token(AUTHORIZATION, 0) +} +/// Retrieves first TerminalNode corresponding to token BERNOULLI +/// Returns `None` if there is no child corresponding to token BERNOULLI +fn BERNOULLI(&self) -> Option>> where Self:Sized{ + self.get_token(BERNOULLI, 0) +} +/// Retrieves first TerminalNode corresponding to token BOTH +/// Returns `None` if there is no child corresponding to token BOTH +fn BOTH(&self) -> Option>> where Self:Sized{ + self.get_token(BOTH, 0) +} +/// Retrieves first TerminalNode corresponding to token CALL +/// Returns `None` if there is no child corresponding to token CALL +fn CALL(&self) -> Option>> where Self:Sized{ + self.get_token(CALL, 0) +} +/// Retrieves first TerminalNode corresponding to token CASCADE +/// Returns `None` if there is no child corresponding to token CASCADE +fn CASCADE(&self) -> Option>> where Self:Sized{ + self.get_token(CASCADE, 0) +} +/// Retrieves first TerminalNode corresponding to token CATALOGS +/// Returns `None` if there is no child corresponding to token CATALOGS +fn CATALOGS(&self) -> Option>> where Self:Sized{ + self.get_token(CATALOGS, 0) +} +/// Retrieves first TerminalNode corresponding to token COLUMN +/// Returns `None` if there is no child corresponding to token COLUMN +fn COLUMN(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMN, 0) +} +/// Retrieves first TerminalNode corresponding to token COLUMNS +/// Returns `None` if there is no child corresponding to token COLUMNS +fn COLUMNS(&self) -> Option>> where Self:Sized{ + self.get_token(COLUMNS, 0) +} +/// Retrieves first TerminalNode corresponding to token COMMENT +/// Returns `None` if there is no child corresponding to token COMMENT +fn COMMENT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMENT, 0) +} +/// Retrieves first TerminalNode corresponding to token COMMIT +/// Returns `None` if there is no child corresponding to token COMMIT +fn COMMIT(&self) -> Option>> where Self:Sized{ + self.get_token(COMMIT, 0) +} +/// Retrieves first TerminalNode corresponding to token COMMITTED +/// Returns `None` if there is no child corresponding to token COMMITTED +fn COMMITTED(&self) -> Option>> where Self:Sized{ + self.get_token(COMMITTED, 0) +} +/// Retrieves first TerminalNode corresponding to token CONDITIONAL +/// Returns `None` if there is no child corresponding to token CONDITIONAL +fn CONDITIONAL(&self) -> Option>> where Self:Sized{ + self.get_token(CONDITIONAL, 0) +} +/// Retrieves first TerminalNode corresponding to token COPARTITION +/// Returns `None` if there is no child corresponding to token COPARTITION +fn COPARTITION(&self) -> Option>> where Self:Sized{ + self.get_token(COPARTITION, 0) +} +/// Retrieves first TerminalNode corresponding to token COUNT +/// Returns `None` if there is no child corresponding to token COUNT +fn COUNT(&self) -> Option>> where Self:Sized{ + self.get_token(COUNT, 0) +} +/// Retrieves first TerminalNode corresponding to token CURRENT +/// Returns `None` if there is no child corresponding to token CURRENT +fn CURRENT(&self) -> Option>> where Self:Sized{ + self.get_token(CURRENT, 0) +} +/// Retrieves first TerminalNode corresponding to token DATA +/// Returns `None` if there is no child corresponding to token DATA +fn DATA(&self) -> Option>> where Self:Sized{ + self.get_token(DATA, 0) +} +/// Retrieves first TerminalNode corresponding to token DATE +/// Returns `None` if there is no child corresponding to token DATE +fn DATE(&self) -> Option>> where Self:Sized{ + self.get_token(DATE, 0) +} +/// Retrieves first TerminalNode corresponding to token DAY +/// Returns `None` if there is no child corresponding to token DAY +fn DAY(&self) -> Option>> where Self:Sized{ + self.get_token(DAY, 0) +} +/// Retrieves first TerminalNode corresponding to token DEFAULT +/// Returns `None` if there is no child corresponding to token DEFAULT +fn DEFAULT(&self) -> Option>> where Self:Sized{ + self.get_token(DEFAULT, 0) +} +/// Retrieves first TerminalNode corresponding to token DEFINE +/// Returns `None` if there is no child corresponding to token DEFINE +fn DEFINE(&self) -> Option>> where Self:Sized{ + self.get_token(DEFINE, 0) +} +/// Retrieves first TerminalNode corresponding to token DEFINER +/// Returns `None` if there is no child corresponding to token DEFINER +fn DEFINER(&self) -> Option>> where Self:Sized{ + self.get_token(DEFINER, 0) +} +/// Retrieves first TerminalNode corresponding to token DENY +/// Returns `None` if there is no child corresponding to token DENY +fn DENY(&self) -> Option>> where Self:Sized{ + self.get_token(DENY, 0) +} +/// Retrieves first TerminalNode corresponding to token DESC +/// Returns `None` if there is no child corresponding to token DESC +fn DESC(&self) -> Option>> where Self:Sized{ + self.get_token(DESC, 0) +} +/// Retrieves first TerminalNode corresponding to token DESCRIPTOR +/// Returns `None` if there is no child corresponding to token DESCRIPTOR +fn DESCRIPTOR(&self) -> Option>> where Self:Sized{ + self.get_token(DESCRIPTOR, 0) +} +/// Retrieves first TerminalNode corresponding to token DISTRIBUTED +/// Returns `None` if there is no child corresponding to token DISTRIBUTED +fn DISTRIBUTED(&self) -> Option>> where Self:Sized{ + self.get_token(DISTRIBUTED, 0) +} +/// Retrieves first TerminalNode corresponding to token DOUBLE +/// Returns `None` if there is no child corresponding to token DOUBLE +fn DOUBLE(&self) -> Option>> where Self:Sized{ + self.get_token(DOUBLE, 0) +} +/// Retrieves first TerminalNode corresponding to token EMPTY +/// Returns `None` if there is no child corresponding to token EMPTY +fn EMPTY(&self) -> Option>> where Self:Sized{ + self.get_token(EMPTY, 0) +} +/// Retrieves first TerminalNode corresponding to token ENCODING +/// Returns `None` if there is no child corresponding to token ENCODING +fn ENCODING(&self) -> Option>> where Self:Sized{ + self.get_token(ENCODING, 0) +} +/// Retrieves first TerminalNode corresponding to token ERROR +/// Returns `None` if there is no child corresponding to token ERROR +fn ERROR(&self) -> Option>> where Self:Sized{ + self.get_token(ERROR, 0) +} +/// Retrieves first TerminalNode corresponding to token EXCLUDING +/// Returns `None` if there is no child corresponding to token EXCLUDING +fn EXCLUDING(&self) -> Option>> where Self:Sized{ + self.get_token(EXCLUDING, 0) +} +/// Retrieves first TerminalNode corresponding to token EXPLAIN +/// Returns `None` if there is no child corresponding to token EXPLAIN +fn EXPLAIN(&self) -> Option>> where Self:Sized{ + self.get_token(EXPLAIN, 0) +} +/// Retrieves first TerminalNode corresponding to token FETCH +/// Returns `None` if there is no child corresponding to token FETCH +fn FETCH(&self) -> Option>> where Self:Sized{ + self.get_token(FETCH, 0) +} +/// Retrieves first TerminalNode corresponding to token FILTER +/// Returns `None` if there is no child corresponding to token FILTER +fn FILTER(&self) -> Option>> where Self:Sized{ + self.get_token(FILTER, 0) +} +/// Retrieves first TerminalNode corresponding to token FINAL +/// Returns `None` if there is no child corresponding to token FINAL +fn FINAL(&self) -> Option>> where Self:Sized{ + self.get_token(FINAL, 0) +} +/// Retrieves first TerminalNode corresponding to token FIRST +/// Returns `None` if there is no child corresponding to token FIRST +fn FIRST(&self) -> Option>> where Self:Sized{ + self.get_token(FIRST, 0) +} +/// Retrieves first TerminalNode corresponding to token FOLLOWING +/// Returns `None` if there is no child corresponding to token FOLLOWING +fn FOLLOWING(&self) -> Option>> where Self:Sized{ + self.get_token(FOLLOWING, 0) +} +/// Retrieves first TerminalNode corresponding to token FORMAT +/// Returns `None` if there is no child corresponding to token FORMAT +fn FORMAT(&self) -> Option>> where Self:Sized{ + self.get_token(FORMAT, 0) +} +/// Retrieves first TerminalNode corresponding to token FUNCTIONS +/// Returns `None` if there is no child corresponding to token FUNCTIONS +fn FUNCTIONS(&self) -> Option>> where Self:Sized{ + self.get_token(FUNCTIONS, 0) +} +/// Retrieves first TerminalNode corresponding to token GRACE +/// Returns `None` if there is no child corresponding to token GRACE +fn GRACE(&self) -> Option>> where Self:Sized{ + self.get_token(GRACE, 0) +} +/// Retrieves first TerminalNode corresponding to token GRANT +/// Returns `None` if there is no child corresponding to token GRANT +fn GRANT(&self) -> Option>> where Self:Sized{ + self.get_token(GRANT, 0) +} +/// Retrieves first TerminalNode corresponding to token GRANTED +/// Returns `None` if there is no child corresponding to token GRANTED +fn GRANTED(&self) -> Option>> where Self:Sized{ + self.get_token(GRANTED, 0) +} +/// Retrieves first TerminalNode corresponding to token GRANTS +/// Returns `None` if there is no child corresponding to token GRANTS +fn GRANTS(&self) -> Option>> where Self:Sized{ + self.get_token(GRANTS, 0) +} +/// Retrieves first TerminalNode corresponding to token GRAPHVIZ +/// Returns `None` if there is no child corresponding to token GRAPHVIZ +fn GRAPHVIZ(&self) -> Option>> where Self:Sized{ + self.get_token(GRAPHVIZ, 0) +} +/// Retrieves first TerminalNode corresponding to token GROUPS +/// Returns `None` if there is no child corresponding to token GROUPS +fn GROUPS(&self) -> Option>> where Self:Sized{ + self.get_token(GROUPS, 0) +} +/// Retrieves first TerminalNode corresponding to token HOUR +/// Returns `None` if there is no child corresponding to token HOUR +fn HOUR(&self) -> Option>> where Self:Sized{ + self.get_token(HOUR, 0) +} +/// Retrieves first TerminalNode corresponding to token IF +/// Returns `None` if there is no child corresponding to token IF +fn IF(&self) -> Option>> where Self:Sized{ + self.get_token(IF, 0) +} +/// Retrieves first TerminalNode corresponding to token IGNORE +/// Returns `None` if there is no child corresponding to token IGNORE +fn IGNORE(&self) -> Option>> where Self:Sized{ + self.get_token(IGNORE, 0) +} +/// Retrieves first TerminalNode corresponding to token INCLUDING +/// Returns `None` if there is no child corresponding to token INCLUDING +fn INCLUDING(&self) -> Option>> where Self:Sized{ + self.get_token(INCLUDING, 0) +} +/// Retrieves first TerminalNode corresponding to token INITIAL +/// Returns `None` if there is no child corresponding to token INITIAL +fn INITIAL(&self) -> Option>> where Self:Sized{ + self.get_token(INITIAL, 0) +} +/// Retrieves first TerminalNode corresponding to token INPUT +/// Returns `None` if there is no child corresponding to token INPUT +fn INPUT(&self) -> Option>> where Self:Sized{ + self.get_token(INPUT, 0) +} +/// Retrieves first TerminalNode corresponding to token INTERVAL +/// Returns `None` if there is no child corresponding to token INTERVAL +fn INTERVAL(&self) -> Option>> where Self:Sized{ + self.get_token(INTERVAL, 0) +} +/// Retrieves first TerminalNode corresponding to token INVOKER +/// Returns `None` if there is no child corresponding to token INVOKER +fn INVOKER(&self) -> Option>> where Self:Sized{ + self.get_token(INVOKER, 0) +} +/// Retrieves first TerminalNode corresponding to token IO +/// Returns `None` if there is no child corresponding to token IO +fn IO(&self) -> Option>> where Self:Sized{ + self.get_token(IO, 0) +} +/// Retrieves first TerminalNode corresponding to token ISOLATION +/// Returns `None` if there is no child corresponding to token ISOLATION +fn ISOLATION(&self) -> Option>> where Self:Sized{ + self.get_token(ISOLATION, 0) +} +/// Retrieves first TerminalNode corresponding to token JSON +/// Returns `None` if there is no child corresponding to token JSON +fn JSON(&self) -> Option>> where Self:Sized{ + self.get_token(JSON, 0) +} +/// Retrieves first TerminalNode corresponding to token KEEP +/// Returns `None` if there is no child corresponding to token KEEP +fn KEEP(&self) -> Option>> where Self:Sized{ + self.get_token(KEEP, 0) +} +/// Retrieves first TerminalNode corresponding to token KEY +/// Returns `None` if there is no child corresponding to token KEY +fn KEY(&self) -> Option>> where Self:Sized{ + self.get_token(KEY, 0) +} +/// Retrieves first TerminalNode corresponding to token KEYS +/// Returns `None` if there is no child corresponding to token KEYS +fn KEYS(&self) -> Option>> where Self:Sized{ + self.get_token(KEYS, 0) +} +/// Retrieves first TerminalNode corresponding to token LAST +/// Returns `None` if there is no child corresponding to token LAST +fn LAST(&self) -> Option>> where Self:Sized{ + self.get_token(LAST, 0) +} +/// Retrieves first TerminalNode corresponding to token LATERAL +/// Returns `None` if there is no child corresponding to token LATERAL +fn LATERAL(&self) -> Option>> where Self:Sized{ + self.get_token(LATERAL, 0) +} +/// Retrieves first TerminalNode corresponding to token LEADING +/// Returns `None` if there is no child corresponding to token LEADING +fn LEADING(&self) -> Option>> where Self:Sized{ + self.get_token(LEADING, 0) +} +/// Retrieves first TerminalNode corresponding to token LEVEL +/// Returns `None` if there is no child corresponding to token LEVEL +fn LEVEL(&self) -> Option>> where Self:Sized{ + self.get_token(LEVEL, 0) +} +/// Retrieves first TerminalNode corresponding to token LIMIT +/// Returns `None` if there is no child corresponding to token LIMIT +fn LIMIT(&self) -> Option>> where Self:Sized{ + self.get_token(LIMIT, 0) +} +/// Retrieves first TerminalNode corresponding to token LOCAL +/// Returns `None` if there is no child corresponding to token LOCAL +fn LOCAL(&self) -> Option>> where Self:Sized{ + self.get_token(LOCAL, 0) +} +/// Retrieves first TerminalNode corresponding to token LOGICAL +/// Returns `None` if there is no child corresponding to token LOGICAL +fn LOGICAL(&self) -> Option>> where Self:Sized{ + self.get_token(LOGICAL, 0) +} +/// Retrieves first TerminalNode corresponding to token MAP +/// Returns `None` if there is no child corresponding to token MAP +fn MAP(&self) -> Option>> where Self:Sized{ + self.get_token(MAP, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCH +/// Returns `None` if there is no child corresponding to token MATCH +fn MATCH(&self) -> Option>> where Self:Sized{ + self.get_token(MATCH, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCHED +/// Returns `None` if there is no child corresponding to token MATCHED +fn MATCHED(&self) -> Option>> where Self:Sized{ + self.get_token(MATCHED, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCHES +/// Returns `None` if there is no child corresponding to token MATCHES +fn MATCHES(&self) -> Option>> where Self:Sized{ + self.get_token(MATCHES, 0) +} +/// Retrieves first TerminalNode corresponding to token MATCH_RECOGNIZE +/// Returns `None` if there is no child corresponding to token MATCH_RECOGNIZE +fn MATCH_RECOGNIZE(&self) -> Option>> where Self:Sized{ + self.get_token(MATCH_RECOGNIZE, 0) +} +/// Retrieves first TerminalNode corresponding to token MATERIALIZED +/// Returns `None` if there is no child corresponding to token MATERIALIZED +fn MATERIALIZED(&self) -> Option>> where Self:Sized{ + self.get_token(MATERIALIZED, 0) +} +/// Retrieves first TerminalNode corresponding to token MEASURES +/// Returns `None` if there is no child corresponding to token MEASURES +fn MEASURES(&self) -> Option>> where Self:Sized{ + self.get_token(MEASURES, 0) +} +/// Retrieves first TerminalNode corresponding to token MERGE +/// Returns `None` if there is no child corresponding to token MERGE +fn MERGE(&self) -> Option>> where Self:Sized{ + self.get_token(MERGE, 0) +} +/// Retrieves first TerminalNode corresponding to token MINUTE +/// Returns `None` if there is no child corresponding to token MINUTE +fn MINUTE(&self) -> Option>> where Self:Sized{ + self.get_token(MINUTE, 0) +} +/// Retrieves first TerminalNode corresponding to token MONTH +/// Returns `None` if there is no child corresponding to token MONTH +fn MONTH(&self) -> Option>> where Self:Sized{ + self.get_token(MONTH, 0) +} +/// Retrieves first TerminalNode corresponding to token NEXT +/// Returns `None` if there is no child corresponding to token NEXT +fn NEXT(&self) -> Option>> where Self:Sized{ + self.get_token(NEXT, 0) +} +/// Retrieves first TerminalNode corresponding to token NFC +/// Returns `None` if there is no child corresponding to token NFC +fn NFC(&self) -> Option>> where Self:Sized{ + self.get_token(NFC, 0) +} +/// Retrieves first TerminalNode corresponding to token NFD +/// Returns `None` if there is no child corresponding to token NFD +fn NFD(&self) -> Option>> where Self:Sized{ + self.get_token(NFD, 0) +} +/// Retrieves first TerminalNode corresponding to token NFKC +/// Returns `None` if there is no child corresponding to token NFKC +fn NFKC(&self) -> Option>> where Self:Sized{ + self.get_token(NFKC, 0) +} +/// Retrieves first TerminalNode corresponding to token NFKD +/// Returns `None` if there is no child corresponding to token NFKD +fn NFKD(&self) -> Option>> where Self:Sized{ + self.get_token(NFKD, 0) +} +/// Retrieves first TerminalNode corresponding to token NO +/// Returns `None` if there is no child corresponding to token NO +fn NO(&self) -> Option>> where Self:Sized{ + self.get_token(NO, 0) +} +/// Retrieves first TerminalNode corresponding to token NONE +/// Returns `None` if there is no child corresponding to token NONE +fn NONE(&self) -> Option>> where Self:Sized{ + self.get_token(NONE, 0) +} +/// Retrieves first TerminalNode corresponding to token NULLIF +/// Returns `None` if there is no child corresponding to token NULLIF +fn NULLIF(&self) -> Option>> where Self:Sized{ + self.get_token(NULLIF, 0) +} +/// Retrieves first TerminalNode corresponding to token NULLS +/// Returns `None` if there is no child corresponding to token NULLS +fn NULLS(&self) -> Option>> where Self:Sized{ + self.get_token(NULLS, 0) +} +/// Retrieves first TerminalNode corresponding to token OBJECT +/// Returns `None` if there is no child corresponding to token OBJECT +fn OBJECT(&self) -> Option>> where Self:Sized{ + self.get_token(OBJECT, 0) +} +/// Retrieves first TerminalNode corresponding to token OF +/// Returns `None` if there is no child corresponding to token OF +fn OF(&self) -> Option>> where Self:Sized{ + self.get_token(OF, 0) +} +/// Retrieves first TerminalNode corresponding to token OFFSET +/// Returns `None` if there is no child corresponding to token OFFSET +fn OFFSET(&self) -> Option>> where Self:Sized{ + self.get_token(OFFSET, 0) +} +/// Retrieves first TerminalNode corresponding to token OMIT +/// Returns `None` if there is no child corresponding to token OMIT +fn OMIT(&self) -> Option>> where Self:Sized{ + self.get_token(OMIT, 0) +} +/// Retrieves first TerminalNode corresponding to token ONE +/// Returns `None` if there is no child corresponding to token ONE +fn ONE(&self) -> Option>> where Self:Sized{ + self.get_token(ONE, 0) +} +/// Retrieves first TerminalNode corresponding to token ONLY +/// Returns `None` if there is no child corresponding to token ONLY +fn ONLY(&self) -> Option>> where Self:Sized{ + self.get_token(ONLY, 0) +} +/// Retrieves first TerminalNode corresponding to token OPTION +/// Returns `None` if there is no child corresponding to token OPTION +fn OPTION(&self) -> Option>> where Self:Sized{ + self.get_token(OPTION, 0) +} +/// Retrieves first TerminalNode corresponding to token ORDINALITY +/// Returns `None` if there is no child corresponding to token ORDINALITY +fn ORDINALITY(&self) -> Option>> where Self:Sized{ + self.get_token(ORDINALITY, 0) +} +/// Retrieves first TerminalNode corresponding to token OUTPUT +/// Returns `None` if there is no child corresponding to token OUTPUT +fn OUTPUT(&self) -> Option>> where Self:Sized{ + self.get_token(OUTPUT, 0) +} +/// Retrieves first TerminalNode corresponding to token OVER +/// Returns `None` if there is no child corresponding to token OVER +fn OVER(&self) -> Option>> where Self:Sized{ + self.get_token(OVER, 0) +} +/// Retrieves first TerminalNode corresponding to token OVERFLOW +/// Returns `None` if there is no child corresponding to token OVERFLOW +fn OVERFLOW(&self) -> Option>> where Self:Sized{ + self.get_token(OVERFLOW, 0) +} +/// Retrieves first TerminalNode corresponding to token PARTITION +/// Returns `None` if there is no child corresponding to token PARTITION +fn PARTITION(&self) -> Option>> where Self:Sized{ + self.get_token(PARTITION, 0) +} +/// Retrieves first TerminalNode corresponding to token PARTITIONS +/// Returns `None` if there is no child corresponding to token PARTITIONS +fn PARTITIONS(&self) -> Option>> where Self:Sized{ + self.get_token(PARTITIONS, 0) +} +/// Retrieves first TerminalNode corresponding to token PASSING +/// Returns `None` if there is no child corresponding to token PASSING +fn PASSING(&self) -> Option>> where Self:Sized{ + self.get_token(PASSING, 0) +} +/// Retrieves first TerminalNode corresponding to token PAST +/// Returns `None` if there is no child corresponding to token PAST +fn PAST(&self) -> Option>> where Self:Sized{ + self.get_token(PAST, 0) +} +/// Retrieves first TerminalNode corresponding to token PATH +/// Returns `None` if there is no child corresponding to token PATH +fn PATH(&self) -> Option>> where Self:Sized{ + self.get_token(PATH, 0) +} +/// Retrieves first TerminalNode corresponding to token PATTERN +/// Returns `None` if there is no child corresponding to token PATTERN +fn PATTERN(&self) -> Option>> where Self:Sized{ + self.get_token(PATTERN, 0) +} +/// Retrieves first TerminalNode corresponding to token PER +/// Returns `None` if there is no child corresponding to token PER +fn PER(&self) -> Option>> where Self:Sized{ + self.get_token(PER, 0) +} +/// Retrieves first TerminalNode corresponding to token PERIOD +/// Returns `None` if there is no child corresponding to token PERIOD +fn PERIOD(&self) -> Option>> where Self:Sized{ + self.get_token(PERIOD, 0) +} +/// Retrieves first TerminalNode corresponding to token PERMUTE +/// Returns `None` if there is no child corresponding to token PERMUTE +fn PERMUTE(&self) -> Option>> where Self:Sized{ + self.get_token(PERMUTE, 0) +} +/// Retrieves first TerminalNode corresponding to token POSITION +/// Returns `None` if there is no child corresponding to token POSITION +fn POSITION(&self) -> Option>> where Self:Sized{ + self.get_token(POSITION, 0) +} +/// Retrieves first TerminalNode corresponding to token PRECEDING +/// Returns `None` if there is no child corresponding to token PRECEDING +fn PRECEDING(&self) -> Option>> where Self:Sized{ + self.get_token(PRECEDING, 0) +} +/// Retrieves first TerminalNode corresponding to token PRECISION +/// Returns `None` if there is no child corresponding to token PRECISION +fn PRECISION(&self) -> Option>> where Self:Sized{ + self.get_token(PRECISION, 0) +} +/// Retrieves first TerminalNode corresponding to token PRIVILEGES +/// Returns `None` if there is no child corresponding to token PRIVILEGES +fn PRIVILEGES(&self) -> Option>> where Self:Sized{ + self.get_token(PRIVILEGES, 0) +} +/// Retrieves first TerminalNode corresponding to token PROPERTIES +/// Returns `None` if there is no child corresponding to token PROPERTIES +fn PROPERTIES(&self) -> Option>> where Self:Sized{ + self.get_token(PROPERTIES, 0) +} +/// Retrieves first TerminalNode corresponding to token PRUNE +/// Returns `None` if there is no child corresponding to token PRUNE +fn PRUNE(&self) -> Option>> where Self:Sized{ + self.get_token(PRUNE, 0) +} +/// Retrieves first TerminalNode corresponding to token QUOTES +/// Returns `None` if there is no child corresponding to token QUOTES +fn QUOTES(&self) -> Option>> where Self:Sized{ + self.get_token(QUOTES, 0) +} +/// Retrieves first TerminalNode corresponding to token RANGE +/// Returns `None` if there is no child corresponding to token RANGE +fn RANGE(&self) -> Option>> where Self:Sized{ + self.get_token(RANGE, 0) +} +/// Retrieves first TerminalNode corresponding to token READ +/// Returns `None` if there is no child corresponding to token READ +fn READ(&self) -> Option>> where Self:Sized{ + self.get_token(READ, 0) +} +/// Retrieves first TerminalNode corresponding to token REFRESH +/// Returns `None` if there is no child corresponding to token REFRESH +fn REFRESH(&self) -> Option>> where Self:Sized{ + self.get_token(REFRESH, 0) +} +/// Retrieves first TerminalNode corresponding to token RENAME +/// Returns `None` if there is no child corresponding to token RENAME +fn RENAME(&self) -> Option>> where Self:Sized{ + self.get_token(RENAME, 0) +} +/// Retrieves first TerminalNode corresponding to token REPEATABLE +/// Returns `None` if there is no child corresponding to token REPEATABLE +fn REPEATABLE(&self) -> Option>> where Self:Sized{ + self.get_token(REPEATABLE, 0) +} +/// Retrieves first TerminalNode corresponding to token REPLACE +/// Returns `None` if there is no child corresponding to token REPLACE +fn REPLACE(&self) -> Option>> where Self:Sized{ + self.get_token(REPLACE, 0) +} +/// Retrieves first TerminalNode corresponding to token RESET +/// Returns `None` if there is no child corresponding to token RESET +fn RESET(&self) -> Option>> where Self:Sized{ + self.get_token(RESET, 0) +} +/// Retrieves first TerminalNode corresponding to token RESPECT +/// Returns `None` if there is no child corresponding to token RESPECT +fn RESPECT(&self) -> Option>> where Self:Sized{ + self.get_token(RESPECT, 0) +} +/// Retrieves first TerminalNode corresponding to token RESTRICT +/// Returns `None` if there is no child corresponding to token RESTRICT +fn RESTRICT(&self) -> Option>> where Self:Sized{ + self.get_token(RESTRICT, 0) +} +/// Retrieves first TerminalNode corresponding to token RETURNING +/// Returns `None` if there is no child corresponding to token RETURNING +fn RETURNING(&self) -> Option>> where Self:Sized{ + self.get_token(RETURNING, 0) +} +/// Retrieves first TerminalNode corresponding to token REVOKE +/// Returns `None` if there is no child corresponding to token REVOKE +fn REVOKE(&self) -> Option>> where Self:Sized{ + self.get_token(REVOKE, 0) +} +/// Retrieves first TerminalNode corresponding to token ROLE +/// Returns `None` if there is no child corresponding to token ROLE +fn ROLE(&self) -> Option>> where Self:Sized{ + self.get_token(ROLE, 0) +} +/// Retrieves first TerminalNode corresponding to token ROLES +/// Returns `None` if there is no child corresponding to token ROLES +fn ROLES(&self) -> Option>> where Self:Sized{ + self.get_token(ROLES, 0) +} +/// Retrieves first TerminalNode corresponding to token ROLLBACK +/// Returns `None` if there is no child corresponding to token ROLLBACK +fn ROLLBACK(&self) -> Option>> where Self:Sized{ + self.get_token(ROLLBACK, 0) +} +/// Retrieves first TerminalNode corresponding to token ROW +/// Returns `None` if there is no child corresponding to token ROW +fn ROW(&self) -> Option>> where Self:Sized{ + self.get_token(ROW, 0) +} +/// Retrieves first TerminalNode corresponding to token ROWS +/// Returns `None` if there is no child corresponding to token ROWS +fn ROWS(&self) -> Option>> where Self:Sized{ + self.get_token(ROWS, 0) +} +/// Retrieves first TerminalNode corresponding to token RUNNING +/// Returns `None` if there is no child corresponding to token RUNNING +fn RUNNING(&self) -> Option>> where Self:Sized{ + self.get_token(RUNNING, 0) +} +/// Retrieves first TerminalNode corresponding to token SCALAR +/// Returns `None` if there is no child corresponding to token SCALAR +fn SCALAR(&self) -> Option>> where Self:Sized{ + self.get_token(SCALAR, 0) +} +/// Retrieves first TerminalNode corresponding to token SCHEMA +/// Returns `None` if there is no child corresponding to token SCHEMA +fn SCHEMA(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMA, 0) +} +/// Retrieves first TerminalNode corresponding to token SCHEMAS +/// Returns `None` if there is no child corresponding to token SCHEMAS +fn SCHEMAS(&self) -> Option>> where Self:Sized{ + self.get_token(SCHEMAS, 0) +} +/// Retrieves first TerminalNode corresponding to token SECOND +/// Returns `None` if there is no child corresponding to token SECOND +fn SECOND(&self) -> Option>> where Self:Sized{ + self.get_token(SECOND, 0) +} +/// Retrieves first TerminalNode corresponding to token SECURITY +/// Returns `None` if there is no child corresponding to token SECURITY +fn SECURITY(&self) -> Option>> where Self:Sized{ + self.get_token(SECURITY, 0) +} +/// Retrieves first TerminalNode corresponding to token SEEK +/// Returns `None` if there is no child corresponding to token SEEK +fn SEEK(&self) -> Option>> where Self:Sized{ + self.get_token(SEEK, 0) +} +/// Retrieves first TerminalNode corresponding to token SERIALIZABLE +/// Returns `None` if there is no child corresponding to token SERIALIZABLE +fn SERIALIZABLE(&self) -> Option>> where Self:Sized{ + self.get_token(SERIALIZABLE, 0) +} +/// Retrieves first TerminalNode corresponding to token SESSION +/// Returns `None` if there is no child corresponding to token SESSION +fn SESSION(&self) -> Option>> where Self:Sized{ + self.get_token(SESSION, 0) +} +/// Retrieves first TerminalNode corresponding to token SET +/// Returns `None` if there is no child corresponding to token SET +fn SET(&self) -> Option>> where Self:Sized{ + self.get_token(SET, 0) +} +/// Retrieves first TerminalNode corresponding to token SETS +/// Returns `None` if there is no child corresponding to token SETS +fn SETS(&self) -> Option>> where Self:Sized{ + self.get_token(SETS, 0) +} +/// Retrieves first TerminalNode corresponding to token SHOW +/// Returns `None` if there is no child corresponding to token SHOW +fn SHOW(&self) -> Option>> where Self:Sized{ + self.get_token(SHOW, 0) +} +/// Retrieves first TerminalNode corresponding to token SOME +/// Returns `None` if there is no child corresponding to token SOME +fn SOME(&self) -> Option>> where Self:Sized{ + self.get_token(SOME, 0) +} +/// Retrieves first TerminalNode corresponding to token START +/// Returns `None` if there is no child corresponding to token START +fn START(&self) -> Option>> where Self:Sized{ + self.get_token(START, 0) +} +/// Retrieves first TerminalNode corresponding to token STATS +/// Returns `None` if there is no child corresponding to token STATS +fn STATS(&self) -> Option>> where Self:Sized{ + self.get_token(STATS, 0) +} +/// Retrieves first TerminalNode corresponding to token SUBSET +/// Returns `None` if there is no child corresponding to token SUBSET +fn SUBSET(&self) -> Option>> where Self:Sized{ + self.get_token(SUBSET, 0) +} +/// Retrieves first TerminalNode corresponding to token SUBSTRING +/// Returns `None` if there is no child corresponding to token SUBSTRING +fn SUBSTRING(&self) -> Option>> where Self:Sized{ + self.get_token(SUBSTRING, 0) +} +/// Retrieves first TerminalNode corresponding to token SYSTEM +/// Returns `None` if there is no child corresponding to token SYSTEM +fn SYSTEM(&self) -> Option>> where Self:Sized{ + self.get_token(SYSTEM, 0) +} +/// Retrieves first TerminalNode corresponding to token TABLES +/// Returns `None` if there is no child corresponding to token TABLES +fn TABLES(&self) -> Option>> where Self:Sized{ + self.get_token(TABLES, 0) +} +/// Retrieves first TerminalNode corresponding to token TABLESAMPLE +/// Returns `None` if there is no child corresponding to token TABLESAMPLE +fn TABLESAMPLE(&self) -> Option>> where Self:Sized{ + self.get_token(TABLESAMPLE, 0) +} +/// Retrieves first TerminalNode corresponding to token TEXT +/// Returns `None` if there is no child corresponding to token TEXT +fn TEXT(&self) -> Option>> where Self:Sized{ + self.get_token(TEXT, 0) +} +/// Retrieves first TerminalNode corresponding to token TEXT_STRING +/// Returns `None` if there is no child corresponding to token TEXT_STRING +fn TEXT_STRING(&self) -> Option>> where Self:Sized{ + self.get_token(TEXT_STRING, 0) +} +/// Retrieves first TerminalNode corresponding to token TIES +/// Returns `None` if there is no child corresponding to token TIES +fn TIES(&self) -> Option>> where Self:Sized{ + self.get_token(TIES, 0) +} +/// Retrieves first TerminalNode corresponding to token TIME +/// Returns `None` if there is no child corresponding to token TIME +fn TIME(&self) -> Option>> where Self:Sized{ + self.get_token(TIME, 0) +} +/// Retrieves first TerminalNode corresponding to token TIMESTAMP +/// Returns `None` if there is no child corresponding to token TIMESTAMP +fn TIMESTAMP(&self) -> Option>> where Self:Sized{ + self.get_token(TIMESTAMP, 0) +} +/// Retrieves first TerminalNode corresponding to token TO +/// Returns `None` if there is no child corresponding to token TO +fn TO(&self) -> Option>> where Self:Sized{ + self.get_token(TO, 0) +} +/// Retrieves first TerminalNode corresponding to token TRAILING +/// Returns `None` if there is no child corresponding to token TRAILING +fn TRAILING(&self) -> Option>> where Self:Sized{ + self.get_token(TRAILING, 0) +} +/// Retrieves first TerminalNode corresponding to token TRANSACTION +/// Returns `None` if there is no child corresponding to token TRANSACTION +fn TRANSACTION(&self) -> Option>> where Self:Sized{ + self.get_token(TRANSACTION, 0) +} +/// Retrieves first TerminalNode corresponding to token TRUNCATE +/// Returns `None` if there is no child corresponding to token TRUNCATE +fn TRUNCATE(&self) -> Option>> where Self:Sized{ + self.get_token(TRUNCATE, 0) +} +/// Retrieves first TerminalNode corresponding to token TRY_CAST +/// Returns `None` if there is no child corresponding to token TRY_CAST +fn TRY_CAST(&self) -> Option>> where Self:Sized{ + self.get_token(TRY_CAST, 0) +} +/// Retrieves first TerminalNode corresponding to token TYPE +/// Returns `None` if there is no child corresponding to token TYPE +fn TYPE(&self) -> Option>> where Self:Sized{ + self.get_token(TYPE, 0) +} +/// Retrieves first TerminalNode corresponding to token UNBOUNDED +/// Returns `None` if there is no child corresponding to token UNBOUNDED +fn UNBOUNDED(&self) -> Option>> where Self:Sized{ + self.get_token(UNBOUNDED, 0) +} +/// Retrieves first TerminalNode corresponding to token UNCOMMITTED +/// Returns `None` if there is no child corresponding to token UNCOMMITTED +fn UNCOMMITTED(&self) -> Option>> where Self:Sized{ + self.get_token(UNCOMMITTED, 0) +} +/// Retrieves first TerminalNode corresponding to token UNCONDITIONAL +/// Returns `None` if there is no child corresponding to token UNCONDITIONAL +fn UNCONDITIONAL(&self) -> Option>> where Self:Sized{ + self.get_token(UNCONDITIONAL, 0) +} +/// Retrieves first TerminalNode corresponding to token UNIQUE +/// Returns `None` if there is no child corresponding to token UNIQUE +fn UNIQUE(&self) -> Option>> where Self:Sized{ + self.get_token(UNIQUE, 0) +} +/// Retrieves first TerminalNode corresponding to token UNKNOWN +/// Returns `None` if there is no child corresponding to token UNKNOWN +fn UNKNOWN(&self) -> Option>> where Self:Sized{ + self.get_token(UNKNOWN, 0) +} +/// Retrieves first TerminalNode corresponding to token UNMATCHED +/// Returns `None` if there is no child corresponding to token UNMATCHED +fn UNMATCHED(&self) -> Option>> where Self:Sized{ + self.get_token(UNMATCHED, 0) +} +/// Retrieves first TerminalNode corresponding to token UPDATE +/// Returns `None` if there is no child corresponding to token UPDATE +fn UPDATE(&self) -> Option>> where Self:Sized{ + self.get_token(UPDATE, 0) +} +/// Retrieves first TerminalNode corresponding to token USE +/// Returns `None` if there is no child corresponding to token USE +fn USE(&self) -> Option>> where Self:Sized{ + self.get_token(USE, 0) +} +/// Retrieves first TerminalNode corresponding to token USER +/// Returns `None` if there is no child corresponding to token USER +fn USER(&self) -> Option>> where Self:Sized{ + self.get_token(USER, 0) +} +/// Retrieves first TerminalNode corresponding to token UTF16 +/// Returns `None` if there is no child corresponding to token UTF16 +fn UTF16(&self) -> Option>> where Self:Sized{ + self.get_token(UTF16, 0) +} +/// Retrieves first TerminalNode corresponding to token UTF32 +/// Returns `None` if there is no child corresponding to token UTF32 +fn UTF32(&self) -> Option>> where Self:Sized{ + self.get_token(UTF32, 0) +} +/// Retrieves first TerminalNode corresponding to token UTF8 +/// Returns `None` if there is no child corresponding to token UTF8 +fn UTF8(&self) -> Option>> where Self:Sized{ + self.get_token(UTF8, 0) +} +/// Retrieves first TerminalNode corresponding to token VALIDATE +/// Returns `None` if there is no child corresponding to token VALIDATE +fn VALIDATE(&self) -> Option>> where Self:Sized{ + self.get_token(VALIDATE, 0) +} +/// Retrieves first TerminalNode corresponding to token VALUE +/// Returns `None` if there is no child corresponding to token VALUE +fn VALUE(&self) -> Option>> where Self:Sized{ + self.get_token(VALUE, 0) +} +/// Retrieves first TerminalNode corresponding to token VERBOSE +/// Returns `None` if there is no child corresponding to token VERBOSE +fn VERBOSE(&self) -> Option>> where Self:Sized{ + self.get_token(VERBOSE, 0) +} +/// Retrieves first TerminalNode corresponding to token VERSION +/// Returns `None` if there is no child corresponding to token VERSION +fn VERSION(&self) -> Option>> where Self:Sized{ + self.get_token(VERSION, 0) +} +/// Retrieves first TerminalNode corresponding to token VIEW +/// Returns `None` if there is no child corresponding to token VIEW +fn VIEW(&self) -> Option>> where Self:Sized{ + self.get_token(VIEW, 0) +} +/// Retrieves first TerminalNode corresponding to token WINDOW +/// Returns `None` if there is no child corresponding to token WINDOW +fn WINDOW(&self) -> Option>> where Self:Sized{ + self.get_token(WINDOW, 0) +} +/// Retrieves first TerminalNode corresponding to token WITHIN +/// Returns `None` if there is no child corresponding to token WITHIN +fn WITHIN(&self) -> Option>> where Self:Sized{ + self.get_token(WITHIN, 0) +} +/// Retrieves first TerminalNode corresponding to token WITHOUT +/// Returns `None` if there is no child corresponding to token WITHOUT +fn WITHOUT(&self) -> Option>> where Self:Sized{ + self.get_token(WITHOUT, 0) +} +/// Retrieves first TerminalNode corresponding to token WORK +/// Returns `None` if there is no child corresponding to token WORK +fn WORK(&self) -> Option>> where Self:Sized{ + self.get_token(WORK, 0) +} +/// Retrieves first TerminalNode corresponding to token WRAPPER +/// Returns `None` if there is no child corresponding to token WRAPPER +fn WRAPPER(&self) -> Option>> where Self:Sized{ + self.get_token(WRAPPER, 0) +} +/// Retrieves first TerminalNode corresponding to token WRITE +/// Returns `None` if there is no child corresponding to token WRITE +fn WRITE(&self) -> Option>> where Self:Sized{ + self.get_token(WRITE, 0) +} +/// Retrieves first TerminalNode corresponding to token YEAR +/// Returns `None` if there is no child corresponding to token YEAR +fn YEAR(&self) -> Option>> where Self:Sized{ + self.get_token(YEAR, 0) +} +/// Retrieves first TerminalNode corresponding to token ZONE +/// Returns `None` if there is no child corresponding to token ZONE +fn ZONE(&self) -> Option>> where Self:Sized{ + self.get_token(ZONE, 0) +} + +} + +impl<'input> NonReservedContextAttrs<'input> for NonReservedContext<'input>{} + +impl<'input, I, H> PrestoParser<'input, I, H> +where + I: TokenStream<'input, TF = LocalTokenFactory<'input> > + TidAble<'input>, + H: ErrorStrategy<'input,BaseParserType<'input,I>> +{ + pub fn nonReserved(&mut self,) + -> Result>,ANTLRError> { + let mut recog = self; + let _parentctx = recog.ctx.take(); + let mut _localctx = NonReservedContextExt::new(_parentctx.clone(), recog.base.get_state()); + recog.base.enter_rule(_localctx.clone(), 218, RULE_nonReserved); + let mut _localctx: Rc = _localctx; + let mut _la: isize = -1; + let result: Result<(), ANTLRError> = (|| { + + //recog.base.enter_outer_alt(_localctx.clone(), 1); + recog.base.enter_outer_alt(None, 1); + { + recog.base.set_state(2953); + _la = recog.base.input.la(1); + if { !((((_la) & !0x3f) == 0 && ((1usize << _la) & ((1usize << ABSENT) | (1usize << ADD) | (1usize << ADMIN) | (1usize << AFTER) | (1usize << ALL) | (1usize << ANALYZE) | (1usize << ANY) | (1usize << ARRAY) | (1usize << ASC) | (1usize << AT) | (1usize << AUTHORIZATION) | (1usize << BERNOULLI))) != 0) || ((((_la - 33)) & !0x3f) == 0 && ((1usize << (_la - 33)) & ((1usize << (BOTH - 33)) | (1usize << (CALL - 33)) | (1usize << (CASCADE - 33)) | (1usize << (CATALOGS - 33)) | (1usize << (COLUMN - 33)) | (1usize << (COLUMNS - 33)) | (1usize << (COMMENT - 33)) | (1usize << (COMMIT - 33)) | (1usize << (COMMITTED - 33)) | (1usize << (CONDITIONAL - 33)) | (1usize << (COUNT - 33)) | (1usize << (COPARTITION - 33)) | (1usize << (CURRENT - 33)) | (1usize << (DATA - 33)) | (1usize << (DATE - 33)) | (1usize << (DAY - 33)))) != 0) || ((((_la - 66)) & !0x3f) == 0 && ((1usize << (_la - 66)) & ((1usize << (DEFAULT - 66)) | (1usize << (DEFINE - 66)) | (1usize << (DEFINER - 66)) | (1usize << (DENY - 66)) | (1usize << (DESC - 66)) | (1usize << (DESCRIPTOR - 66)) | (1usize << (DISTRIBUTED - 66)) | (1usize << (DOUBLE - 66)) | (1usize << (EMPTY - 66)) | (1usize << (ENCODING - 66)) | (1usize << (ERROR - 66)) | (1usize << (EXCLUDING - 66)) | (1usize << (EXPLAIN - 66)) | (1usize << (FETCH - 66)) | (1usize << (FILTER - 66)) | (1usize << (FINAL - 66)) | (1usize << (FIRST - 66)) | (1usize << (FOLLOWING - 66)) | (1usize << (FORMAT - 66)))) != 0) || ((((_la - 100)) & !0x3f) == 0 && ((1usize << (_la - 100)) & ((1usize << (FUNCTIONS - 100)) | (1usize << (GRACE - 100)) | (1usize << (GRANT - 100)) | (1usize << (GRANTED - 100)) | (1usize << (GRANTS - 100)) | (1usize << (GRAPHVIZ - 100)) | (1usize << (GROUPS - 100)) | (1usize << (HOUR - 100)) | (1usize << (IF - 100)) | (1usize << (IGNORE - 100)) | (1usize << (INCLUDING - 100)) | (1usize << (INITIAL - 100)) | (1usize << (INPUT - 100)) | (1usize << (INTERVAL - 100)) | (1usize << (INVOKER - 100)) | (1usize << (IO - 100)) | (1usize << (ISOLATION - 100)) | (1usize << (JSON - 100)))) != 0) || ((((_la - 133)) & !0x3f) == 0 && ((1usize << (_la - 133)) & ((1usize << (KEEP - 133)) | (1usize << (KEY - 133)) | (1usize << (KEYS - 133)) | (1usize << (LAST - 133)) | (1usize << (LATERAL - 133)) | (1usize << (LEADING - 133)) | (1usize << (LEVEL - 133)) | (1usize << (LIMIT - 133)) | (1usize << (LOCAL - 133)) | (1usize << (LOGICAL - 133)) | (1usize << (MAP - 133)) | (1usize << (MATCH - 133)) | (1usize << (MATCHED - 133)) | (1usize << (MATCHES - 133)) | (1usize << (MATCH_RECOGNIZE - 133)) | (1usize << (MATERIALIZED - 133)) | (1usize << (MEASURES - 133)) | (1usize << (MERGE - 133)) | (1usize << (MINUTE - 133)) | (1usize << (MONTH - 133)) | (1usize << (NEXT - 133)) | (1usize << (NFC - 133)) | (1usize << (NFD - 133)) | (1usize << (NFKC - 133)) | (1usize << (NFKD - 133)) | (1usize << (NO - 133)))) != 0) || ((((_la - 165)) & !0x3f) == 0 && ((1usize << (_la - 165)) & ((1usize << (NONE - 165)) | (1usize << (NULLIF - 165)) | (1usize << (NULLS - 165)) | (1usize << (OBJECT - 165)) | (1usize << (OF - 165)) | (1usize << (OFFSET - 165)) | (1usize << (OMIT - 165)) | (1usize << (ONE - 165)) | (1usize << (ONLY - 165)) | (1usize << (OPTION - 165)) | (1usize << (ORDINALITY - 165)) | (1usize << (OUTPUT - 165)) | (1usize << (OVER - 165)) | (1usize << (OVERFLOW - 165)) | (1usize << (PARTITION - 165)) | (1usize << (PARTITIONS - 165)) | (1usize << (PASSING - 165)) | (1usize << (PAST - 165)) | (1usize << (PATH - 165)) | (1usize << (PATTERN - 165)) | (1usize << (PER - 165)) | (1usize << (PERIOD - 165)) | (1usize << (PERMUTE - 165)) | (1usize << (POSITION - 165)) | (1usize << (PRECEDING - 165)))) != 0) || ((((_la - 197)) & !0x3f) == 0 && ((1usize << (_la - 197)) & ((1usize << (PRECISION - 197)) | (1usize << (PRIVILEGES - 197)) | (1usize << (PROPERTIES - 197)) | (1usize << (PRUNE - 197)) | (1usize << (QUOTES - 197)) | (1usize << (RANGE - 197)) | (1usize << (READ - 197)) | (1usize << (REFRESH - 197)) | (1usize << (RENAME - 197)) | (1usize << (REPEATABLE - 197)) | (1usize << (REPLACE - 197)) | (1usize << (RESET - 197)) | (1usize << (RESPECT - 197)) | (1usize << (RESTRICT - 197)) | (1usize << (RETURNING - 197)) | (1usize << (REVOKE - 197)) | (1usize << (ROLE - 197)) | (1usize << (ROLES - 197)) | (1usize << (ROLLBACK - 197)) | (1usize << (ROW - 197)) | (1usize << (ROWS - 197)) | (1usize << (RUNNING - 197)) | (1usize << (SCALAR - 197)) | (1usize << (SCHEMA - 197)) | (1usize << (SCHEMAS - 197)) | (1usize << (SECOND - 197)) | (1usize << (SECURITY - 197)) | (1usize << (SEEK - 197)))) != 0) || ((((_la - 230)) & !0x3f) == 0 && ((1usize << (_la - 230)) & ((1usize << (SERIALIZABLE - 230)) | (1usize << (SESSION - 230)) | (1usize << (SET - 230)) | (1usize << (SETS - 230)) | (1usize << (SHOW - 230)) | (1usize << (SOME - 230)) | (1usize << (START - 230)) | (1usize << (STATS - 230)) | (1usize << (SUBSET - 230)) | (1usize << (SUBSTRING - 230)) | (1usize << (SYSTEM - 230)) | (1usize << (TABLES - 230)) | (1usize << (TABLESAMPLE - 230)) | (1usize << (TEXT - 230)) | (1usize << (TEXT_STRING - 230)) | (1usize << (TIES - 230)) | (1usize << (TIME - 230)) | (1usize << (TIMESTAMP - 230)) | (1usize << (TO - 230)) | (1usize << (TRAILING - 230)) | (1usize << (TRANSACTION - 230)) | (1usize << (TRUNCATE - 230)) | (1usize << (TRY_CAST - 230)) | (1usize << (TYPE - 230)) | (1usize << (UNBOUNDED - 230)) | (1usize << (UNCOMMITTED - 230)) | (1usize << (UNCONDITIONAL - 230)))) != 0) || ((((_la - 263)) & !0x3f) == 0 && ((1usize << (_la - 263)) & ((1usize << (UNIQUE - 263)) | (1usize << (UNKNOWN - 263)) | (1usize << (UNMATCHED - 263)) | (1usize << (UPDATE - 263)) | (1usize << (USE - 263)) | (1usize << (USER - 263)) | (1usize << (UTF16 - 263)) | (1usize << (UTF32 - 263)) | (1usize << (UTF8 - 263)) | (1usize << (VALIDATE - 263)) | (1usize << (VALUE - 263)) | (1usize << (VERBOSE - 263)) | (1usize << (VERSION - 263)) | (1usize << (VIEW - 263)) | (1usize << (WINDOW - 263)) | (1usize << (WITHIN - 263)) | (1usize << (WITHOUT - 263)) | (1usize << (WORK - 263)) | (1usize << (WRAPPER - 263)) | (1usize << (WRITE - 263)) | (1usize << (YEAR - 263)) | (1usize << (ZONE - 263)))) != 0)) } { + recog.err_handler.recover_inline(&mut recog.base)?; + + } + else { + if recog.base.input.la(1)==TOKEN_EOF { recog.base.matched_eof = true }; + recog.err_handler.report_match(&mut recog.base); + recog.base.consume(&mut recog.err_handler); + } + } + Ok(()) + })(); + match result { + Ok(_)=>{}, + Err(e @ ANTLRError::FallThrough(_)) => return Err(e), + Err(ref re) => { + //_localctx.exception = re; + recog.err_handler.report_error(&mut recog.base, re); + recog.err_handler.recover(&mut recog.base, re)?; + } + } + recog.base.exit_rule(); + + Ok(_localctx) + } +} + +lazy_static! { + static ref _ATN: Arc = + Arc::new(ATNDeserializer::new(None).deserialize(_serializedATN.chars())); + static ref _decision_to_DFA: Arc>> = { + let mut dfa = Vec::new(); + let size = _ATN.decision_to_state.len(); + for i in 0..size { + dfa.push(DFA::new( + _ATN.clone(), + _ATN.get_decision_state(i), + i as isize, + ).into()) + } + Arc::new(dfa) + }; +} + + + +const _serializedATN:&'static str = + "\x03\u{608b}\u{a72a}\u{8133}\u{b9ed}\u{417c}\u{3be7}\u{7786}\u{5964}\x03\ + \u{140}\u{b8e}\x04\x02\x09\x02\x04\x03\x09\x03\x04\x04\x09\x04\x04\x05\x09\ + \x05\x04\x06\x09\x06\x04\x07\x09\x07\x04\x08\x09\x08\x04\x09\x09\x09\x04\ + \x0a\x09\x0a\x04\x0b\x09\x0b\x04\x0c\x09\x0c\x04\x0d\x09\x0d\x04\x0e\x09\ + \x0e\x04\x0f\x09\x0f\x04\x10\x09\x10\x04\x11\x09\x11\x04\x12\x09\x12\x04\ + \x13\x09\x13\x04\x14\x09\x14\x04\x15\x09\x15\x04\x16\x09\x16\x04\x17\x09\ + \x17\x04\x18\x09\x18\x04\x19\x09\x19\x04\x1a\x09\x1a\x04\x1b\x09\x1b\x04\ + \x1c\x09\x1c\x04\x1d\x09\x1d\x04\x1e\x09\x1e\x04\x1f\x09\x1f\x04\x20\x09\ + \x20\x04\x21\x09\x21\x04\x22\x09\x22\x04\x23\x09\x23\x04\x24\x09\x24\x04\ + \x25\x09\x25\x04\x26\x09\x26\x04\x27\x09\x27\x04\x28\x09\x28\x04\x29\x09\ + \x29\x04\x2a\x09\x2a\x04\x2b\x09\x2b\x04\x2c\x09\x2c\x04\x2d\x09\x2d\x04\ + \x2e\x09\x2e\x04\x2f\x09\x2f\x04\x30\x09\x30\x04\x31\x09\x31\x04\x32\x09\ + \x32\x04\x33\x09\x33\x04\x34\x09\x34\x04\x35\x09\x35\x04\x36\x09\x36\x04\ + \x37\x09\x37\x04\x38\x09\x38\x04\x39\x09\x39\x04\x3a\x09\x3a\x04\x3b\x09\ + \x3b\x04\x3c\x09\x3c\x04\x3d\x09\x3d\x04\x3e\x09\x3e\x04\x3f\x09\x3f\x04\ + \x40\x09\x40\x04\x41\x09\x41\x04\x42\x09\x42\x04\x43\x09\x43\x04\x44\x09\ + \x44\x04\x45\x09\x45\x04\x46\x09\x46\x04\x47\x09\x47\x04\x48\x09\x48\x04\ + \x49\x09\x49\x04\x4a\x09\x4a\x04\x4b\x09\x4b\x04\x4c\x09\x4c\x04\x4d\x09\ + \x4d\x04\x4e\x09\x4e\x04\x4f\x09\x4f\x04\x50\x09\x50\x04\x51\x09\x51\x04\ + \x52\x09\x52\x04\x53\x09\x53\x04\x54\x09\x54\x04\x55\x09\x55\x04\x56\x09\ + \x56\x04\x57\x09\x57\x04\x58\x09\x58\x04\x59\x09\x59\x04\x5a\x09\x5a\x04\ + \x5b\x09\x5b\x04\x5c\x09\x5c\x04\x5d\x09\x5d\x04\x5e\x09\x5e\x04\x5f\x09\ + \x5f\x04\x60\x09\x60\x04\x61\x09\x61\x04\x62\x09\x62\x04\x63\x09\x63\x04\ + \x64\x09\x64\x04\x65\x09\x65\x04\x66\x09\x66\x04\x67\x09\x67\x04\x68\x09\ + \x68\x04\x69\x09\x69\x04\x6a\x09\x6a\x04\x6b\x09\x6b\x04\x6c\x09\x6c\x04\ + \x6d\x09\x6d\x04\x6e\x09\x6e\x04\x6f\x09\x6f\x03\x02\x03\x02\x03\x02\x03\ + \x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03\ + \x06\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{fb}\x0a\x07\ + \x03\x07\x03\x07\x03\x07\x05\x07\u{100}\x0a\x07\x03\x07\x03\x07\x05\x07\ + \u{104}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{10a}\x0a\x07\x03\ + \x07\x03\x07\x05\x07\u{10e}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{123}\x0a\x07\x03\ + \x07\x03\x07\x05\x07\u{127}\x0a\x07\x03\x07\x03\x07\x05\x07\u{12b}\x0a\x07\ + \x03\x07\x03\x07\x05\x07\u{12f}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x05\x07\u{137}\x0a\x07\x03\x07\x03\x07\x05\x07\u{13b}\x0a\ + \x07\x03\x07\x05\x07\u{13e}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x05\x07\u{145}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\ + \x07\u{14c}\x0a\x07\x0c\x07\x0e\x07\u{14f}\x0b\x07\x03\x07\x03\x07\x03\x07\ + \x05\x07\u{154}\x0a\x07\x03\x07\x03\x07\x05\x07\u{158}\x0a\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x05\x07\u{15e}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x05\x07\u{165}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x05\x07\u{16e}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{17a}\x0a\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{183}\ + \x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\ + \u{18c}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{192}\x0a\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\ + \x07\u{19d}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\ + \x07\u{1a5}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\ + \x07\u{1ad}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{1b4}\ + \x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x05\x07\u{1be}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\ + \u{1c5}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\ + \u{1cd}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u{1ef}\ + \x0a\x07\x0c\x07\x0e\x07\u{1f2}\x0b\x07\x05\x07\u{1f4}\x0a\x07\x03\x07\x05\ + \x07\u{1f7}\x0a\x07\x03\x07\x03\x07\x05\x07\u{1fb}\x0a\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x05\x07\u{201}\x0a\x07\x03\x07\x03\x07\x03\x07\x05\x07\ + \u{206}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{20d}\x0a\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{213}\x0a\x07\x03\x07\x03\ + \x07\x05\x07\u{217}\x0a\x07\x03\x07\x03\x07\x05\x07\u{21b}\x0a\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{223}\x0a\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x05\x07\u{229}\x0a\x07\x03\x07\x03\x07\x05\x07\ + \u{22d}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{23b}\x0a\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{243}\x0a\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{256}\ + \x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u{26d}\x0a\x07\x0c\x07\x0e\x07\ + \u{270}\x0b\x07\x05\x07\u{272}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x05\x07\u{27c}\x0a\x07\x03\x07\x03\x07\x05\ + \x07\u{280}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{287}\ + \x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u{28f}\ + \x0a\x07\x0c\x07\x0e\x07\u{292}\x0b\x07\x03\x07\x03\x07\x03\x07\x05\x07\ + \u{297}\x0a\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{29c}\x0a\x07\x03\x07\x03\ + \x07\x05\x07\u{2a0}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{2a6}\ + \x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u{2ad}\x0a\x07\ + \x0c\x07\x0e\x07\u{2b0}\x0b\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{2b5}\x0a\ + \x07\x03\x07\x03\x07\x05\x07\u{2b9}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x05\x07\u{2c0}\x0a\x07\x03\x07\x03\x07\x05\x07\u{2c4}\x0a\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u{2ca}\x0a\x07\x0c\x07\x0e\x07\ + \u{2cd}\x0b\x07\x03\x07\x03\x07\x05\x07\u{2d1}\x0a\x07\x03\x07\x03\x07\x05\ + \x07\u{2d5}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\ + \x07\u{2dd}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u{2e3}\x0a\x07\ + \x0c\x07\x0e\x07\u{2e6}\x0b\x07\x03\x07\x03\x07\x05\x07\u{2ea}\x0a\x07\x03\ + \x07\x03\x07\x05\x07\u{2ee}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x05\x07\u{2f8}\x0a\x07\x03\x07\x03\x07\x03\ + \x07\x07\x07\u{2fd}\x0a\x07\x0c\x07\x0e\x07\u{300}\x0b\x07\x03\x07\x03\x07\ + \x05\x07\u{304}\x0a\x07\x03\x07\x03\x07\x05\x07\u{308}\x0a\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{312}\x0a\ + \x07\x03\x07\x05\x07\u{315}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x07\x07\u{31c}\x0a\x07\x0c\x07\x0e\x07\u{31f}\x0b\x07\x03\x07\x03\x07\ + \x05\x07\u{323}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{329}\x0a\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{341}\x0a\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x05\x07\u{347}\x0a\x07\x05\x07\u{349}\x0a\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x05\x07\u{34f}\x0a\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x05\x07\u{355}\x0a\x07\x05\x07\u{357}\x0a\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x05\x07\u{35f}\x0a\x07\x05\x07\u{361}\x0a\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{367}\x0a\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x05\x07\u{36d}\x0a\x07\x05\x07\u{36f}\x0a\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x05\x07\u{37e}\x0a\x07\x03\x07\x03\x07\x03\x07\x05\ + \x07\u{383}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{38a}\ + \x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x05\x07\u{396}\x0a\x07\x05\x07\u{398}\x0a\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{3a0}\x0a\x07\x05\x07\u{3a2}\ + \x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u{3b2}\x0a\x07\ + \x0c\x07\x0e\x07\u{3b5}\x0b\x07\x05\x07\u{3b7}\x0a\x07\x03\x07\x03\x07\x05\ + \x07\u{3bb}\x0a\x07\x03\x07\x03\x07\x05\x07\u{3bf}\x0a\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\ + \x03\x07\x03\x07\x03\x07\x07\x07\u{3cf}\x0a\x07\x0c\x07\x0e\x07\u{3d2}\x0b\ + \x07\x05\x07\u{3d4}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\ + \x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\ + \x07\u{3e4}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\ + \x07\u{3ec}\x0a\x07\x0c\x07\x0e\x07\u{3ef}\x0b\x07\x03\x07\x03\x07\x05\x07\ + \u{3f3}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u{3f9}\x0a\x07\x03\ + \x07\x05\x07\u{3fc}\x0a\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x06\ + \x07\u{403}\x0a\x07\x0d\x07\x0e\x07\u{404}\x05\x07\u{407}\x0a\x07\x03\x08\ + \x05\x08\u{40a}\x0a\x08\x03\x08\x03\x08\x03\x09\x03\x09\x05\x09\u{410}\x0a\ + \x09\x03\x09\x03\x09\x03\x09\x07\x09\u{415}\x0a\x09\x0c\x09\x0e\x09\u{418}\ + \x0b\x09\x03\x0a\x03\x0a\x05\x0a\u{41c}\x0a\x0a\x03\x0b\x03\x0b\x03\x0b\ + \x03\x0b\x05\x0b\u{422}\x0a\x0b\x03\x0b\x03\x0b\x05\x0b\u{426}\x0a\x0b\x03\ + \x0b\x03\x0b\x05\x0b\u{42a}\x0a\x0b\x03\x0c\x03\x0c\x03\x0c\x03\x0c\x05\ + \x0c\u{430}\x0a\x0c\x03\x0d\x03\x0d\x03\x0d\x03\x0d\x03\x0e\x03\x0e\x03\ + \x0e\x07\x0e\u{439}\x0a\x0e\x0c\x0e\x0e\x0e\u{43c}\x0b\x0e\x03\x0f\x03\x0f\ + \x03\x0f\x03\x0f\x03\x10\x03\x10\x05\x10\u{444}\x0a\x10\x03\x11\x03\x11\ + \x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\u{44c}\x0a\x11\x0c\x11\x0e\x11\ + \u{44f}\x0b\x11\x05\x11\u{451}\x0a\x11\x03\x11\x03\x11\x03\x11\x05\x11\u{456}\ + \x0a\x11\x05\x11\u{458}\x0a\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\ + \x05\x11\u{45f}\x0a\x11\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\u{465}\x0a\ + \x11\x05\x11\u{467}\x0a\x11\x03\x12\x03\x12\x05\x12\u{46b}\x0a\x12\x03\x13\ + \x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x05\x14\u{475}\ + \x0a\x14\x03\x14\x03\x14\x03\x14\x03\x14\x05\x14\u{47b}\x0a\x14\x03\x14\ + \x07\x14\u{47e}\x0a\x14\x0c\x14\x0e\x14\u{481}\x0b\x14\x03\x15\x03\x15\x03\ + \x15\x03\x15\x03\x15\x03\x15\x03\x15\x07\x15\u{48a}\x0a\x15\x0c\x15\x0e\ + \x15\u{48d}\x0b\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15\u{493}\x0a\x15\ + \x03\x16\x03\x16\x05\x16\u{497}\x0a\x16\x03\x16\x03\x16\x05\x16\u{49b}\x0a\ + \x16\x03\x17\x03\x17\x05\x17\u{49f}\x0a\x17\x03\x17\x03\x17\x03\x17\x03\ + \x17\x03\x17\x07\x17\u{4a6}\x0a\x17\x0c\x17\x0e\x17\u{4a9}\x0b\x17\x05\x17\ + \u{4ab}\x0a\x17\x03\x17\x03\x17\x05\x17\u{4af}\x0a\x17\x03\x17\x03\x17\x03\ + \x17\x05\x17\u{4b4}\x0a\x17\x03\x17\x03\x17\x05\x17\u{4b8}\x0a\x17\x03\x17\ + \x03\x17\x03\x17\x03\x17\x07\x17\u{4be}\x0a\x17\x0c\x17\x0e\x17\u{4c1}\x0b\ + \x17\x05\x17\u{4c3}\x0a\x17\x03\x18\x03\x18\x03\x18\x07\x18\u{4c8}\x0a\x18\ + \x0c\x18\x0e\x18\u{4cb}\x0b\x18\x03\x19\x05\x19\u{4ce}\x0a\x19\x03\x19\x03\ + \x19\x03\x19\x07\x19\u{4d3}\x0a\x19\x0c\x19\x0e\x19\u{4d6}\x0b\x19\x03\x1a\ + \x03\x1a\x03\x1a\x03\x1a\x03\x1a\x03\x1a\x07\x1a\u{4de}\x0a\x1a\x0c\x1a\ + \x0e\x1a\u{4e1}\x0b\x1a\x05\x1a\u{4e3}\x0a\x1a\x03\x1a\x03\x1a\x03\x1a\x03\ + \x1a\x03\x1a\x03\x1a\x07\x1a\u{4eb}\x0a\x1a\x0c\x1a\x0e\x1a\u{4ee}\x0b\x1a\ + \x05\x1a\u{4f0}\x0a\x1a\x03\x1a\x03\x1a\x03\x1a\x03\x1a\x03\x1a\x03\x1a\ + \x03\x1a\x07\x1a\u{4f9}\x0a\x1a\x0c\x1a\x0e\x1a\u{4fc}\x0b\x1a\x03\x1a\x03\ + \x1a\x05\x1a\u{500}\x0a\x1a\x03\x1b\x03\x1b\x03\x1b\x03\x1b\x07\x1b\u{506}\ + \x0a\x1b\x0c\x1b\x0e\x1b\u{509}\x0b\x1b\x05\x1b\u{50b}\x0a\x1b\x03\x1b\x03\ + \x1b\x05\x1b\u{50f}\x0a\x1b\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\x1c\x03\ + \x1c\x03\x1d\x05\x1d\u{518}\x0a\x1d\x03\x1d\x03\x1d\x03\x1d\x03\x1d\x03\ + \x1d\x07\x1d\u{51f}\x0a\x1d\x0c\x1d\x0e\x1d\u{522}\x0b\x1d\x05\x1d\u{524}\ + \x0a\x1d\x03\x1d\x03\x1d\x03\x1d\x03\x1d\x03\x1d\x07\x1d\u{52b}\x0a\x1d\ + \x0c\x1d\x0e\x1d\u{52e}\x0b\x1d\x05\x1d\u{530}\x0a\x1d\x03\x1d\x05\x1d\u{533}\ + \x0a\x1d\x03\x1e\x03\x1e\x05\x1e\u{537}\x0a\x1e\x03\x1e\x03\x1e\x03\x1e\ + \x03\x1e\x03\x1e\x03\x1f\x03\x1f\x03\x20\x03\x20\x05\x20\u{542}\x0a\x20\ + \x03\x20\x05\x20\u{545}\x0a\x20\x03\x20\x03\x20\x03\x20\x03\x20\x03\x20\ + \x05\x20\u{54c}\x0a\x20\x03\x20\x05\x20\u{54f}\x0a\x20\x03\x21\x03\x21\x03\ + \x21\x03\x21\x03\x21\x03\x21\x03\x21\x03\x21\x03\x21\x03\x21\x03\x21\x03\ + \x21\x03\x21\x03\x21\x03\x21\x03\x21\x03\x21\x05\x21\u{562}\x0a\x21\x07\ + \x21\u{564}\x0a\x21\x0c\x21\x0e\x21\u{567}\x0b\x21\x03\x22\x05\x22\u{56a}\ + \x0a\x22\x03\x22\x03\x22\x05\x22\u{56e}\x0a\x22\x03\x22\x03\x22\x05\x22\ + \u{572}\x0a\x22\x03\x22\x03\x22\x05\x22\u{576}\x0a\x22\x05\x22\u{578}\x0a\ + \x22\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x03\x23\x07\x23\u{581}\ + \x0a\x23\x0c\x23\x0e\x23\u{584}\x0b\x23\x03\x23\x03\x23\x05\x23\u{588}\x0a\ + \x23\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x03\x24\x05\x24\u{591}\ + \x0a\x24\x03\x25\x03\x25\x03\x26\x03\x26\x03\x27\x03\x27\x03\x27\x05\x27\ + \u{59a}\x0a\x27\x03\x27\x05\x27\u{59d}\x0a\x27\x03\x28\x03\x28\x03\x28\x03\ + \x28\x05\x28\u{5a3}\x0a\x28\x03\x29\x03\x29\x03\x29\x03\x29\x03\x29\x03\ + \x29\x03\x29\x03\x29\x07\x29\u{5ad}\x0a\x29\x0c\x29\x0e\x29\u{5b0}\x0b\x29\ + \x05\x29\u{5b2}\x0a\x29\x03\x29\x03\x29\x03\x29\x03\x29\x03\x29\x07\x29\ + \u{5b9}\x0a\x29\x0c\x29\x0e\x29\u{5bc}\x0b\x29\x05\x29\u{5be}\x0a\x29\x03\ + \x29\x03\x29\x03\x29\x03\x29\x07\x29\u{5c4}\x0a\x29\x0c\x29\x0e\x29\u{5c7}\ + \x0b\x29\x05\x29\u{5c9}\x0a\x29\x03\x29\x05\x29\u{5cc}\x0a\x29\x03\x29\x03\ + \x29\x03\x29\x05\x29\u{5d1}\x0a\x29\x03\x29\x05\x29\u{5d4}\x0a\x29\x03\x29\ + \x03\x29\x03\x29\x03\x29\x03\x29\x03\x29\x03\x29\x03\x29\x07\x29\u{5de}\ + \x0a\x29\x0c\x29\x0e\x29\u{5e1}\x0b\x29\x05\x29\u{5e3}\x0a\x29\x03\x29\x03\ + \x29\x03\x29\x03\x29\x07\x29\u{5e9}\x0a\x29\x0c\x29\x0e\x29\u{5ec}\x0b\x29\ + \x03\x29\x03\x29\x05\x29\u{5f0}\x0a\x29\x03\x29\x03\x29\x05\x29\u{5f4}\x0a\ + \x29\x05\x29\u{5f6}\x0a\x29\x05\x29\u{5f8}\x0a\x29\x03\x2a\x03\x2a\x03\x2a\ + \x03\x2a\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x2b\ + \x03\x2b\x05\x2b\u{607}\x0a\x2b\x05\x2b\u{609}\x0a\x2b\x03\x2c\x03\x2c\x03\ + \x2c\x03\x2c\x03\x2c\x03\x2c\x03\x2c\x03\x2c\x03\x2c\x05\x2c\u{614}\x0a\ + \x2c\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\ + \x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\x2d\x03\ + \x2d\x03\x2d\x05\x2d\u{629}\x0a\x2d\x03\x2e\x03\x2e\x03\x2e\x03\x2e\x03\ + \x2e\x03\x2e\x07\x2e\u{631}\x0a\x2e\x0c\x2e\x0e\x2e\u{634}\x0b\x2e\x03\x2e\ + \x03\x2e\x03\x2f\x03\x2f\x03\x2f\x03\x2f\x03\x30\x03\x30\x05\x30\u{63e}\ + \x0a\x30\x03\x30\x03\x30\x05\x30\u{642}\x0a\x30\x05\x30\u{644}\x0a\x30\x03\ + \x31\x03\x31\x03\x31\x03\x31\x07\x31\u{64a}\x0a\x31\x0c\x31\x0e\x31\u{64d}\ + \x0b\x31\x03\x31\x03\x31\x03\x32\x03\x32\x05\x32\u{653}\x0a\x32\x03\x32\ + \x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x07\x32\ + \u{65e}\x0a\x32\x0c\x32\x0e\x32\u{661}\x0b\x32\x03\x32\x03\x32\x03\x32\x05\ + \x32\u{666}\x0a\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\ + \x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x03\x32\x05\x32\u{676}\ + \x0a\x32\x03\x33\x03\x33\x03\x33\x03\x33\x03\x33\x07\x33\u{67d}\x0a\x33\ + \x0c\x33\x0e\x33\u{680}\x0b\x33\x05\x33\u{682}\x0a\x33\x03\x33\x03\x33\x03\ + \x33\x03\x33\x07\x33\u{688}\x0a\x33\x0c\x33\x0e\x33\u{68b}\x0b\x33\x05\x33\ + \u{68d}\x0a\x33\x03\x33\x03\x33\x03\x34\x03\x34\x03\x34\x05\x34\u{694}\x0a\ + \x34\x03\x34\x03\x34\x03\x34\x05\x34\u{699}\x0a\x34\x03\x35\x03\x35\x03\ + \x35\x03\x35\x03\x35\x03\x35\x03\x35\x07\x35\u{6a2}\x0a\x35\x0c\x35\x0e\ + \x35\u{6a5}\x0b\x35\x05\x35\u{6a7}\x0a\x35\x03\x35\x03\x35\x05\x35\u{6ab}\ + \x0a\x35\x05\x35\u{6ad}\x0a\x35\x03\x35\x03\x35\x03\x35\x03\x35\x03\x35\ + \x03\x35\x05\x35\u{6b5}\x0a\x35\x03\x35\x03\x35\x03\x35\x03\x35\x03\x35\ + \x03\x35\x07\x35\u{6bd}\x0a\x35\x0c\x35\x0e\x35\u{6c0}\x0b\x35\x03\x35\x03\ + \x35\x03\x35\x05\x35\u{6c5}\x0a\x35\x05\x35\u{6c7}\x0a\x35\x03\x36\x03\x36\ + \x03\x36\x03\x36\x03\x36\x05\x36\u{6ce}\x0a\x36\x03\x36\x03\x36\x05\x36\ + \u{6d2}\x0a\x36\x05\x36\u{6d4}\x0a\x36\x03\x36\x03\x36\x03\x36\x03\x36\x03\ + \x36\x05\x36\u{6db}\x0a\x36\x03\x36\x03\x36\x05\x36\u{6df}\x0a\x36\x05\x36\ + \u{6e1}\x0a\x36\x05\x36\u{6e3}\x0a\x36\x03\x37\x03\x37\x03\x37\x03\x37\x03\ + \x37\x07\x37\u{6ea}\x0a\x37\x0c\x37\x0e\x37\u{6ed}\x0b\x37\x03\x37\x03\x37\ + \x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x03\x37\x05\x37\u{6f7}\x0a\x37\ + \x03\x38\x03\x38\x05\x38\u{6fb}\x0a\x38\x03\x39\x03\x39\x03\x39\x03\x39\ + \x03\x39\x03\x39\x07\x39\u{703}\x0a\x39\x0c\x39\x0e\x39\u{706}\x0b\x39\x03\ + \x39\x03\x39\x03\x3a\x03\x3a\x03\x3b\x03\x3b\x03\x3b\x05\x3b\u{70f}\x0a\ + \x3b\x03\x3b\x03\x3b\x05\x3b\u{713}\x0a\x3b\x03\x3b\x03\x3b\x03\x3b\x03\ + \x3b\x03\x3b\x03\x3b\x07\x3b\u{71b}\x0a\x3b\x0c\x3b\x0e\x3b\u{71e}\x0b\x3b\ + \x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\ + \x03\x3c\x05\x3c\u{72a}\x0a\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\ + \x03\x3c\x05\x3c\u{732}\x0a\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\ + \x07\x3c\u{739}\x0a\x3c\x0c\x3c\x0e\x3c\u{73c}\x0b\x3c\x03\x3c\x03\x3c\x03\ + \x3c\x05\x3c\u{741}\x0a\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\ + \x3c\x05\x3c\u{749}\x0a\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x05\x3c\u{74f}\ + \x0a\x3c\x03\x3c\x03\x3c\x05\x3c\u{753}\x0a\x3c\x03\x3c\x03\x3c\x03\x3c\ + \x05\x3c\u{758}\x0a\x3c\x03\x3c\x03\x3c\x03\x3c\x05\x3c\u{75d}\x0a\x3c\x03\ + \x3d\x03\x3d\x03\x3d\x03\x3d\x05\x3d\u{763}\x0a\x3d\x03\x3d\x03\x3d\x03\ + \x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\x3d\x03\ + \x3d\x07\x3d\u{771}\x0a\x3d\x0c\x3d\x0e\x3d\u{774}\x0b\x3d\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x06\x3e\u{78f}\x0a\x3e\x0d\x3e\ + \x0e\x3e\u{790}\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x07\x3e\u{79a}\x0a\x3e\x0c\x3e\x0e\x3e\u{79d}\x0b\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x05\x3e\u{7a4}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x05\ + \x3e\u{7a9}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{7ae}\x0a\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x07\x3e\ + \u{7b9}\x0a\x3e\x0c\x3e\x0e\x3e\u{7bc}\x0b\x3e\x03\x3e\x03\x3e\x03\x3e\x05\ + \x3e\u{7c1}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{7c8}\ + \x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{7cd}\x0a\x3e\x03\x3e\x05\x3e\ + \u{7d0}\x0a\x3e\x03\x3e\x05\x3e\u{7d3}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x05\ + \x3e\u{7d8}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x07\x3e\u{7dd}\x0a\x3e\x0c\x3e\ + \x0e\x3e\u{7e0}\x0b\x3e\x05\x3e\u{7e2}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x07\x3e\u{7e9}\x0a\x3e\x0c\x3e\x0e\x3e\u{7ec}\x0b\x3e\x05\x3e\ + \u{7ee}\x0a\x3e\x03\x3e\x03\x3e\x05\x3e\u{7f2}\x0a\x3e\x03\x3e\x05\x3e\u{7f5}\ + \x0a\x3e\x03\x3e\x05\x3e\u{7f8}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x07\x3e\u{805}\ + \x0a\x3e\x0c\x3e\x0e\x3e\u{808}\x0b\x3e\x05\x3e\u{80a}\x0a\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x06\x3e\u{81b}\x0a\x3e\x0d\x3e\x0e\ + \x3e\u{81c}\x03\x3e\x03\x3e\x05\x3e\u{821}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x06\x3e\u{827}\x0a\x3e\x0d\x3e\x0e\x3e\u{828}\x03\x3e\x03\x3e\x05\ + \x3e\u{82d}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x07\x3e\u{844}\x0a\x3e\x0c\ + \x3e\x0e\x3e\u{847}\x0b\x3e\x05\x3e\u{849}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{852}\x0a\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x05\x3e\u{858}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x05\x3e\u{85e}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{864}\x0a\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{86d}\ + \x0a\x3e\x03\x3e\x05\x3e\u{870}\x0a\x3e\x03\x3e\x05\x3e\u{873}\x0a\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{886}\ + \x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\ + \u{88f}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x07\x3e\u{8a3}\x0a\x3e\x0c\x3e\x0e\x3e\u{8a6}\x0b\x3e\x05\ + \x3e\u{8a8}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x05\x3e\u{8b2}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x03\x3e\x05\x3e\u{8bb}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x05\x3e\u{8c1}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{8c7}\ + \x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x05\x3e\u{8d2}\x0a\x3e\x05\x3e\u{8d4}\x0a\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x05\x3e\u{8d9}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\ + \x3e\u{8e0}\x0a\x3e\x05\x3e\u{8e2}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x05\x3e\u{8e8}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{8ee}\x0a\ + \x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x07\x3e\u{8f7}\ + \x0a\x3e\x0c\x3e\x0e\x3e\u{8fa}\x0b\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x05\x3e\u{902}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\ + \u{907}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{90c}\x0a\x3e\x05\x3e\u{90e}\ + \x0a\x3e\x05\x3e\u{910}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\ + \u{916}\x0a\x3e\x05\x3e\u{918}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\ + \x3e\x03\x3e\x07\x3e\u{920}\x0a\x3e\x0c\x3e\x0e\x3e\u{923}\x0b\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{92b}\x0a\x3e\x05\x3e\ + \u{92d}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x05\x3e\u{933}\x0a\x3e\x05\ + \x3e\u{935}\x0a\x3e\x03\x3e\x05\x3e\u{938}\x0a\x3e\x03\x3e\x03\x3e\x03\x3e\ + \x03\x3e\x03\x3e\x03\x3e\x03\x3e\x03\x3e\x07\x3e\u{942}\x0a\x3e\x0c\x3e\ + \x0e\x3e\u{945}\x0b\x3e\x03\x3f\x03\x3f\x03\x3f\x03\x3f\x03\x3f\x03\x3f\ + \x03\x3f\x07\x3f\u{94e}\x0a\x3f\x0c\x3f\x0e\x3f\u{951}\x0b\x3f\x05\x3f\u{953}\ + \x0a\x3f\x03\x40\x03\x40\x03\x40\x05\x40\u{958}\x0a\x40\x03\x41\x03\x41\ + \x03\x41\x05\x41\u{95d}\x0a\x41\x03\x42\x03\x42\x03\x42\x03\x42\x03\x43\ + \x03\x43\x03\x44\x03\x44\x03\x44\x03\x44\x05\x44\u{969}\x0a\x44\x03\x45\ + \x03\x45\x05\x45\u{96d}\x0a\x45\x03\x45\x03\x45\x05\x45\u{971}\x0a\x45\x03\ + \x45\x05\x45\u{974}\x0a\x45\x05\x45\u{976}\x0a\x45\x03\x46\x03\x46\x03\x46\ + \x03\x46\x03\x46\x03\x46\x05\x46\u{97e}\x0a\x46\x03\x47\x05\x47\u{981}\x0a\ + \x47\x03\x47\x03\x47\x03\x47\x03\x47\x03\x47\x03\x47\x03\x47\x03\x47\x05\ + \x47\u{98b}\x0a\x47\x03\x48\x03\x48\x03\x49\x03\x49\x03\x49\x03\x49\x05\ + \x49\u{993}\x0a\x49\x03\x4a\x03\x4a\x03\x4a\x03\x4a\x05\x4a\u{999}\x0a\x4a\ + \x05\x4a\u{99b}\x0a\x4a\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\x03\x4b\ + \x05\x4b\u{9a3}\x0a\x4b\x03\x4c\x03\x4c\x03\x4d\x03\x4d\x03\x4e\x03\x4e\ + \x03\x4f\x03\x4f\x05\x4f\u{9ad}\x0a\x4f\x03\x4f\x03\x4f\x03\x4f\x03\x4f\ + \x05\x4f\u{9b3}\x0a\x4f\x03\x50\x03\x50\x03\x51\x03\x51\x03\x52\x03\x52\ + \x03\x52\x03\x52\x03\x52\x03\x52\x07\x52\u{9bf}\x0a\x52\x0c\x52\x0e\x52\ + \u{9c2}\x0b\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x05\x52\ + \u{9ca}\x0a\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x05\x52\u{9d1}\x0a\ + \x52\x03\x52\x03\x52\x03\x52\x05\x52\u{9d6}\x0a\x52\x03\x52\x03\x52\x03\ + \x52\x03\x52\x03\x52\x05\x52\u{9dd}\x0a\x52\x03\x52\x03\x52\x03\x52\x03\ + \x52\x03\x52\x03\x52\x03\x52\x03\x52\x05\x52\u{9e7}\x0a\x52\x03\x52\x03\ + \x52\x03\x52\x05\x52\u{9ec}\x0a\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\ + \x52\x05\x52\u{9f3}\x0a\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\ + \x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\ + \x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x07\x52\u{a0b}\ + \x0a\x52\x0c\x52\x0e\x52\u{a0e}\x0b\x52\x03\x52\x03\x52\x05\x52\u{a12}\x0a\ + \x52\x05\x52\u{a14}\x0a\x52\x03\x52\x03\x52\x03\x52\x03\x52\x03\x52\x05\ + \x52\u{a1b}\x0a\x52\x07\x52\u{a1d}\x0a\x52\x0c\x52\x0e\x52\u{a20}\x0b\x52\ + \x03\x53\x03\x53\x03\x53\x03\x53\x05\x53\u{a26}\x0a\x53\x03\x54\x03\x54\ + \x05\x54\u{a2a}\x0a\x54\x03\x55\x03\x55\x03\x55\x03\x55\x03\x55\x03\x56\ + \x03\x56\x03\x56\x03\x56\x03\x56\x03\x56\x03\x57\x03\x57\x03\x57\x03\x57\ + \x05\x57\u{a3b}\x0a\x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\ + \x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x07\x57\u{a48}\x0a\x57\x0c\x57\ + \x0e\x57\u{a4b}\x0b\x57\x03\x57\x03\x57\x03\x57\x03\x57\x05\x57\u{a51}\x0a\ + \x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x05\x57\u{a5a}\ + \x0a\x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x07\x57\u{a62}\ + \x0a\x57\x0c\x57\x0e\x57\u{a65}\x0b\x57\x03\x57\x03\x57\x05\x57\u{a69}\x0a\ + \x57\x03\x57\x03\x57\x03\x57\x03\x57\x03\x57\x07\x57\u{a70}\x0a\x57\x0c\ + \x57\x0e\x57\u{a73}\x0b\x57\x03\x57\x03\x57\x05\x57\u{a77}\x0a\x57\x03\x58\ + \x03\x58\x03\x58\x03\x58\x03\x58\x03\x58\x05\x58\u{a7f}\x0a\x58\x03\x59\ + \x03\x59\x03\x59\x03\x59\x07\x59\u{a85}\x0a\x59\x0c\x59\x0e\x59\u{a88}\x0b\ + \x59\x05\x59\u{a8a}\x0a\x59\x03\x59\x03\x59\x03\x59\x03\x59\x05\x59\u{a90}\ + \x0a\x59\x03\x59\x05\x59\u{a93}\x0a\x59\x03\x59\x03\x59\x03\x59\x03\x59\ + \x03\x59\x05\x59\u{a9a}\x0a\x59\x03\x59\x03\x59\x03\x59\x03\x59\x07\x59\ + \u{aa0}\x0a\x59\x0c\x59\x0e\x59\u{aa3}\x0b\x59\x05\x59\u{aa5}\x0a\x59\x03\ + \x59\x03\x59\x03\x59\x03\x59\x07\x59\u{aab}\x0a\x59\x0c\x59\x0e\x59\u{aae}\ + \x0b\x59\x05\x59\u{ab0}\x0a\x59\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\ + \x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\ + \x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\x03\x5a\ + \x03\x5a\x05\x5a\u{aca}\x0a\x5a\x03\x5b\x03\x5b\x03\x5b\x03\x5b\x03\x5b\ + \x03\x5b\x03\x5b\x03\x5b\x03\x5b\x05\x5b\u{ad5}\x0a\x5b\x03\x5c\x03\x5c\ + \x03\x5c\x05\x5c\u{ada}\x0a\x5c\x03\x5c\x03\x5c\x03\x5c\x03\x5c\x03\x5c\ + \x07\x5c\u{ae1}\x0a\x5c\x0c\x5c\x0e\x5c\u{ae4}\x0b\x5c\x03\x5d\x03\x5d\x03\ + \x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x07\x5d\u{aee}\x0a\x5d\x0c\ + \x5d\x0e\x5d\u{af1}\x0b\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\ + \x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x03\x5d\x05\x5d\u{aff}\x0a\ + \x5d\x03\x5e\x03\x5e\x05\x5e\u{b03}\x0a\x5e\x03\x5e\x03\x5e\x05\x5e\u{b07}\ + \x0a\x5e\x03\x5e\x03\x5e\x05\x5e\u{b0b}\x0a\x5e\x03\x5e\x03\x5e\x03\x5e\ + \x03\x5e\x05\x5e\u{b11}\x0a\x5e\x03\x5e\x03\x5e\x05\x5e\u{b15}\x0a\x5e\x03\ + \x5e\x03\x5e\x05\x5e\u{b19}\x0a\x5e\x03\x5e\x03\x5e\x05\x5e\u{b1d}\x0a\x5e\ + \x05\x5e\u{b1f}\x0a\x5e\x03\x5f\x03\x5f\x03\x5f\x03\x5f\x03\x60\x03\x60\ + \x03\x60\x03\x60\x05\x60\u{b29}\x0a\x60\x03\x61\x03\x61\x03\x61\x03\x61\ + \x03\x61\x05\x61\u{b30}\x0a\x61\x03\x62\x03\x62\x03\x62\x03\x62\x03\x62\ + \x03\x62\x03\x62\x05\x62\u{b39}\x0a\x62\x03\x63\x03\x63\x03\x63\x03\x63\ + \x03\x63\x05\x63\u{b40}\x0a\x63\x03\x64\x03\x64\x03\x64\x03\x64\x03\x64\ + \x05\x64\u{b47}\x0a\x64\x03\x65\x03\x65\x03\x65\x07\x65\u{b4c}\x0a\x65\x0c\ + \x65\x0e\x65\u{b4f}\x0b\x65\x03\x66\x03\x66\x03\x67\x03\x67\x03\x67\x07\ + \x67\u{b56}\x0a\x67\x0c\x67\x0e\x67\u{b59}\x0b\x67\x03\x68\x03\x68\x03\x68\ + \x03\x68\x03\x68\x03\x68\x03\x69\x03\x69\x03\x6a\x03\x6a\x03\x6a\x05\x6a\ + \u{b66}\x0a\x6a\x03\x6b\x03\x6b\x03\x6b\x03\x6b\x03\x6b\x05\x6b\u{b6d}\x0a\ + \x6b\x03\x6c\x03\x6c\x03\x6c\x07\x6c\u{b72}\x0a\x6c\x0c\x6c\x0e\x6c\u{b75}\ + \x0b\x6c\x03\x6d\x03\x6d\x03\x6d\x03\x6d\x03\x6d\x05\x6d\u{b7c}\x0a\x6d\ + \x03\x6e\x05\x6e\u{b7f}\x0a\x6e\x03\x6e\x03\x6e\x05\x6e\u{b83}\x0a\x6e\x03\ + \x6e\x03\x6e\x05\x6e\u{b87}\x0a\x6e\x03\x6e\x05\x6e\u{b8a}\x0a\x6e\x03\x6f\ + \x03\x6f\x03\x6f\x02\x09\x26\x40\x74\x78\x7a\u{a2}\u{b6}\x70\x02\x04\x06\ + \x08\x0a\x0c\x0e\x10\x12\x14\x16\x18\x1a\x1c\x1e\x20\x22\x24\x26\x28\x2a\ + \x2c\x2e\x30\x32\x34\x36\x38\x3a\x3c\x3e\x40\x42\x44\x46\x48\x4a\x4c\x4e\ + \x50\x52\x54\x56\x58\x5a\x5c\x5e\x60\x62\x64\x66\x68\x6a\x6c\x6e\x70\x72\ + \x74\x76\x78\x7a\x7c\x7e\u{80}\u{82}\u{84}\u{86}\u{88}\u{8a}\u{8c}\u{8e}\ + \u{90}\u{92}\u{94}\u{96}\u{98}\u{9a}\u{9c}\u{9e}\u{a0}\u{a2}\u{a4}\u{a6}\ + \u{a8}\u{aa}\u{ac}\u{ae}\u{b0}\u{b2}\u{b4}\u{b6}\u{b8}\u{ba}\u{bc}\u{be}\ + \u{c0}\u{c2}\u{c4}\u{c6}\u{c8}\u{ca}\u{cc}\u{ce}\u{d0}\u{d2}\u{d4}\u{d6}\ + \u{d8}\u{da}\u{dc}\x02\x24\x04\x02\x26\x26\u{d6}\u{d6}\x04\x02\x46\x46\x7c\ + \x7c\x04\x02\u{e2}\u{e2}\u{f3}\u{f3}\x04\x02\x64\x64\x73\x73\x04\x02\x57\ + \x57\x74\x74\x03\x02\u{de}\u{df}\x04\x02\x60\x60\u{a1}\u{a1}\x04\x02\u{131}\ + \u{131}\u{135}\u{135}\x04\x02\x56\x56\u{108}\u{108}\x04\x02\x1e\x1e\x49\ + \x49\x04\x02\x60\x60\u{8a}\u{8a}\x04\x02\x17\x17\x4c\x4c\x04\x02\x21\x21\ + \u{f2}\u{f2}\x05\x02\x23\x23\u{8c}\u{8c}\u{fd}\u{fd}\x04\x02\x75\x75\u{e6}\ + \u{e6}\x03\x02\u{12b}\u{12c}\x03\x02\u{12d}\u{12f}\x04\x02\u{87}\u{87}\u{b0}\ + \u{b0}\x03\x02\u{111}\u{113}\x06\x02\x54\x54\x5c\x5c\u{100}\u{100}\u{10a}\ + \u{10a}\x04\x02\x30\x30\u{107}\u{107}\x04\x02\x5f\x5f\u{e0}\u{e0}\x03\x02\ + \u{125}\u{12a}\x05\x02\x17\x17\x1b\x1b\u{ed}\u{ed}\x04\x02\x5c\x5c\u{100}\ + \u{100}\x07\x02\x42\x42\x70\x70\u{9e}\u{9f}\u{e4}\u{e4}\u{123}\u{123}\x03\ + \x02\u{a2}\u{a5}\x04\x02\x61\x61\u{c6}\u{c6}\x05\x02\x6b\x6b\u{81}\u{81}\ + \u{f6}\u{f6}\x06\x02\x4d\x4d\x7d\x7d\u{95}\u{95}\u{114}\u{114}\x04\x02\u{b3}\ + \u{b3}\u{122}\u{122}\x07\x02\x34\x34\x47\x47\x78\x78\u{e7}\u{e7}\u{10d}\ + \u{10d}\x04\x02\u{fb}\u{fb}\u{118}\u{118}\x39\x02\x13\x17\x19\x19\x1b\x1c\ + \x1e\x21\x23\x23\x25\x26\x29\x2b\x2d\x30\x32\x33\x37\x37\x40\x42\x44\x46\ + \x48\x49\x4b\x4b\x4d\x4e\x51\x52\x54\x54\x57\x57\x5a\x5a\x5d\x61\x63\x63\ + \x66\x6b\x6e\x6e\x70\x72\x74\x75\x77\x77\x7a\x7a\x7c\x7d\x7f\x7f\u{81}\u{81}\ + \u{87}\u{8c}\u{8e}\u{8e}\u{90}\u{90}\u{92}\u{92}\u{95}\u{9f}\u{a1}\u{a7}\ + \u{ab}\u{b0}\u{b2}\u{b4}\u{b7}\u{b7}\u{b9}\u{c7}\u{c9}\u{ce}\u{d0}\u{d8}\ + \u{da}\u{dc}\u{de}\u{e6}\u{e8}\u{f2}\u{f4}\u{f7}\u{f9}\u{fe}\u{101}\u{103}\ + \u{105}\u{107}\u{109}\u{10b}\u{10d}\u{10f}\u{111}\u{115}\u{117}\u{119}\u{11c}\ + \u{11c}\u{11e}\u{124}\x02\u{d61}\x02\u{de}\x03\x02\x02\x02\x04\u{e1}\x03\ + \x02\x02\x02\x06\u{e4}\x03\x02\x02\x02\x08\u{e7}\x03\x02\x02\x02\x0a\u{ea}\ + \x03\x02\x02\x02\x0c\u{406}\x03\x02\x02\x02\x0e\u{409}\x03\x02\x02\x02\x10\ + \u{40d}\x03\x02\x02\x02\x12\u{41b}\x03\x02\x02\x02\x14\u{41d}\x03\x02\x02\ + \x02\x16\u{42b}\x03\x02\x02\x02\x18\u{431}\x03\x02\x02\x02\x1a\u{435}\x03\ + \x02\x02\x02\x1c\u{43d}\x03\x02\x02\x02\x1e\u{443}\x03\x02\x02\x02\x20\u{445}\ + \x03\x02\x02\x02\x22\u{46a}\x03\x02\x02\x02\x24\u{46c}\x03\x02\x02\x02\x26\ + \u{46e}\x03\x02\x02\x02\x28\u{492}\x03\x02\x02\x02\x2a\u{494}\x03\x02\x02\ + \x02\x2c\u{49c}\x03\x02\x02\x02\x2e\u{4c4}\x03\x02\x02\x02\x30\u{4cd}\x03\ + \x02\x02\x02\x32\u{4ff}\x03\x02\x02\x02\x34\u{50e}\x03\x02\x02\x02\x36\u{510}\ + \x03\x02\x02\x02\x38\u{517}\x03\x02\x02\x02\x3a\u{534}\x03\x02\x02\x02\x3c\ + \u{53d}\x03\x02\x02\x02\x3e\u{54e}\x03\x02\x02\x02\x40\u{550}\x03\x02\x02\ + \x02\x42\u{577}\x03\x02\x02\x02\x44\u{587}\x03\x02\x02\x02\x46\u{589}\x03\ + \x02\x02\x02\x48\u{592}\x03\x02\x02\x02\x4a\u{594}\x03\x02\x02\x02\x4c\u{59c}\ + \x03\x02\x02\x02\x4e\u{5a2}\x03\x02\x02\x02\x50\u{5a4}\x03\x02\x02\x02\x52\ + \u{5f9}\x03\x02\x02\x02\x54\u{608}\x03\x02\x02\x02\x56\u{613}\x03\x02\x02\ + \x02\x58\u{628}\x03\x02\x02\x02\x5a\u{62a}\x03\x02\x02\x02\x5c\u{637}\x03\ + \x02\x02\x02\x5e\u{63b}\x03\x02\x02\x02\x60\u{645}\x03\x02\x02\x02\x62\u{675}\ + \x03\x02\x02\x02\x64\u{677}\x03\x02\x02\x02\x66\u{693}\x03\x02\x02\x02\x68\ + \u{69a}\x03\x02\x02\x02\x6a\u{6e2}\x03\x02\x02\x02\x6c\u{6f6}\x03\x02\x02\ + \x02\x6e\u{6f8}\x03\x02\x02\x02\x70\u{6fc}\x03\x02\x02\x02\x72\u{709}\x03\ + \x02\x02\x02\x74\u{712}\x03\x02\x02\x02\x76\u{75c}\x03\x02\x02\x02\x78\u{762}\ + \x03\x02\x02\x02\x7a\u{937}\x03\x02\x02\x02\x7c\u{946}\x03\x02\x02\x02\x7e\ + \u{954}\x03\x02\x02\x02\u{80}\u{959}\x03\x02\x02\x02\u{82}\u{95e}\x03\x02\ + \x02\x02\u{84}\u{962}\x03\x02\x02\x02\u{86}\u{968}\x03\x02\x02\x02\u{88}\ + \u{975}\x03\x02\x02\x02\u{8a}\u{97d}\x03\x02\x02\x02\u{8c}\u{98a}\x03\x02\ + \x02\x02\u{8e}\u{98c}\x03\x02\x02\x02\u{90}\u{992}\x03\x02\x02\x02\u{92}\ + \u{99a}\x03\x02\x02\x02\u{94}\u{9a2}\x03\x02\x02\x02\u{96}\u{9a4}\x03\x02\ + \x02\x02\u{98}\u{9a6}\x03\x02\x02\x02\u{9a}\u{9a8}\x03\x02\x02\x02\u{9c}\ + \u{9aa}\x03\x02\x02\x02\u{9e}\u{9b4}\x03\x02\x02\x02\u{a0}\u{9b6}\x03\x02\ + \x02\x02\u{a2}\u{a13}\x03\x02\x02\x02\u{a4}\u{a25}\x03\x02\x02\x02\u{a6}\ + \u{a29}\x03\x02\x02\x02\u{a8}\u{a2b}\x03\x02\x02\x02\u{aa}\u{a30}\x03\x02\ + \x02\x02\u{ac}\u{a76}\x03\x02\x02\x02\u{ae}\u{a78}\x03\x02\x02\x02\u{b0}\ + \u{a89}\x03\x02\x02\x02\u{b2}\u{ac9}\x03\x02\x02\x02\u{b4}\u{ad4}\x03\x02\ + \x02\x02\u{b6}\u{ad6}\x03\x02\x02\x02\u{b8}\u{afe}\x03\x02\x02\x02\u{ba}\ + \u{b1e}\x03\x02\x02\x02\u{bc}\u{b20}\x03\x02\x02\x02\u{be}\u{b28}\x03\x02\ + \x02\x02\u{c0}\u{b2f}\x03\x02\x02\x02\u{c2}\u{b38}\x03\x02\x02\x02\u{c4}\ + \u{b3f}\x03\x02\x02\x02\u{c6}\u{b46}\x03\x02\x02\x02\u{c8}\u{b48}\x03\x02\ + \x02\x02\u{ca}\u{b50}\x03\x02\x02\x02\u{cc}\u{b52}\x03\x02\x02\x02\u{ce}\ + \u{b5a}\x03\x02\x02\x02\u{d0}\u{b60}\x03\x02\x02\x02\u{d2}\u{b65}\x03\x02\ + \x02\x02\u{d4}\u{b6c}\x03\x02\x02\x02\u{d6}\u{b6e}\x03\x02\x02\x02\u{d8}\ + \u{b7b}\x03\x02\x02\x02\u{da}\u{b89}\x03\x02\x02\x02\u{dc}\u{b8b}\x03\x02\ + \x02\x02\u{de}\u{df}\x05\x0c\x07\x02\u{df}\u{e0}\x07\x02\x02\x03\u{e0}\x03\ + \x03\x02\x02\x02\u{e1}\u{e2}\x05\x72\x3a\x02\u{e2}\u{e3}\x07\x02\x02\x03\ + \u{e3}\x05\x03\x02\x02\x02\u{e4}\u{e5}\x05\u{c8}\x65\x02\u{e5}\u{e6}\x07\ + \x02\x02\x03\u{e6}\x07\x03\x02\x02\x02\u{e7}\u{e8}\x05\u{a2}\x52\x02\u{e8}\ + \u{e9}\x07\x02\x02\x03\u{e9}\x09\x03\x02\x02\x02\u{ea}\u{eb}\x05\u{b6}\x5c\ + \x02\u{eb}\u{ec}\x07\x02\x02\x03\u{ec}\x0b\x03\x02\x02\x02\u{ed}\u{407}\ + \x05\x0e\x08\x02\u{ee}\u{ef}\x07\u{10e}\x02\x02\u{ef}\u{407}\x05\u{d8}\x6d\ + \x02\u{f0}\u{f1}\x07\u{10e}\x02\x02\u{f1}\u{f2}\x05\u{d8}\x6d\x02\u{f2}\ + \u{f3}\x07\x03\x02\x02\u{f3}\u{f4}\x05\u{d8}\x6d\x02\u{f4}\u{407}\x03\x02\ + \x02\x02\u{f5}\u{f6}\x07\x34\x02\x02\u{f6}\u{fa}\x07\u{e2}\x02\x02\u{f7}\ + \u{f8}\x07\x71\x02\x02\u{f8}\u{f9}\x07\u{a9}\x02\x02\u{f9}\u{fb}\x07\x59\ + \x02\x02\u{fa}\u{f7}\x03\x02\x02\x02\u{fa}\u{fb}\x03\x02\x02\x02\u{fb}\u{fc}\ + \x03\x02\x02\x02\u{fc}\u{ff}\x05\u{cc}\x67\x02\u{fd}\u{fe}\x07\x20\x02\x02\ + \u{fe}\u{100}\x05\u{d4}\x6b\x02\u{ff}\u{fd}\x03\x02\x02\x02\u{ff}\u{100}\ + \x03\x02\x02\x02\u{100}\u{103}\x03\x02\x02\x02\u{101}\u{102}\x07\u{11d}\ + \x02\x02\u{102}\u{104}\x05\x18\x0d\x02\u{103}\u{101}\x03\x02\x02\x02\u{103}\ + \u{104}\x03\x02\x02\x02\u{104}\u{407}\x03\x02\x02\x02\u{105}\u{106}\x07\ + \x4f\x02\x02\u{106}\u{109}\x07\u{e2}\x02\x02\u{107}\u{108}\x07\x71\x02\x02\ + \u{108}\u{10a}\x07\x59\x02\x02\u{109}\u{107}\x03\x02\x02\x02\u{109}\u{10a}\ + \x03\x02\x02\x02\u{10a}\u{10b}\x03\x02\x02\x02\u{10b}\u{10d}\x05\u{cc}\x67\ + \x02\u{10c}\u{10e}\x09\x02\x02\x02\u{10d}\u{10c}\x03\x02\x02\x02\u{10d}\ + \u{10e}\x03\x02\x02\x02\u{10e}\u{407}\x03\x02\x02\x02\u{10f}\u{110}\x07\ + \x18\x02\x02\u{110}\u{111}\x07\u{e2}\x02\x02\u{111}\u{112}\x05\u{cc}\x67\ + \x02\u{112}\u{113}\x07\u{d1}\x02\x02\u{113}\u{114}\x07\u{fc}\x02\x02\u{114}\ + \u{115}\x05\u{d8}\x6d\x02\u{115}\u{407}\x03\x02\x02\x02\u{116}\u{117}\x07\ + \x18\x02\x02\u{117}\u{118}\x07\u{e2}\x02\x02\u{118}\u{119}\x05\u{cc}\x67\ + \x02\u{119}\u{11a}\x07\u{ea}\x02\x02\u{11a}\u{11b}\x07\x20\x02\x02\u{11b}\ + \u{11c}\x05\u{d4}\x6b\x02\u{11c}\u{407}\x03\x02\x02\x02\u{11d}\u{11e}\x07\ + \x34\x02\x02\u{11e}\u{122}\x07\u{f3}\x02\x02\u{11f}\u{120}\x07\x71\x02\x02\ + \u{120}\u{121}\x07\u{a9}\x02\x02\u{121}\u{123}\x07\x59\x02\x02\u{122}\u{11f}\ + \x03\x02\x02\x02\u{122}\u{123}\x03\x02\x02\x02\u{123}\u{124}\x03\x02\x02\ + \x02\u{124}\u{126}\x05\u{cc}\x67\x02\u{125}\u{127}\x05\x60\x31\x02\u{126}\ + \u{125}\x03\x02\x02\x02\u{126}\u{127}\x03\x02\x02\x02\u{127}\u{12a}\x03\ + \x02\x02\x02\u{128}\u{129}\x07\x2d\x02\x02\u{129}\u{12b}\x05\u{92}\x4a\x02\ + \u{12a}\u{128}\x03\x02\x02\x02\u{12a}\u{12b}\x03\x02\x02\x02\u{12b}\u{12e}\ + \x03\x02\x02\x02\u{12c}\u{12d}\x07\u{11d}\x02\x02\u{12d}\u{12f}\x05\x18\ + \x0d\x02\u{12e}\u{12c}\x03\x02\x02\x02\u{12e}\u{12f}\x03\x02\x02\x02\u{12f}\ + \u{130}\x03\x02\x02\x02\u{130}\u{136}\x07\x1d\x02\x02\u{131}\u{137}\x05\ + \x0e\x08\x02\u{132}\u{133}\x07\x04\x02\x02\u{133}\u{134}\x05\x0e\x08\x02\ + \u{134}\u{135}\x07\x05\x02\x02\u{135}\u{137}\x03\x02\x02\x02\u{136}\u{131}\ + \x03\x02\x02\x02\u{136}\u{132}\x03\x02\x02\x02\u{137}\u{13d}\x03\x02\x02\ + \x02\u{138}\u{13a}\x07\u{11d}\x02\x02\u{139}\u{13b}\x07\u{a6}\x02\x02\u{13a}\ + \u{139}\x03\x02\x02\x02\u{13a}\u{13b}\x03\x02\x02\x02\u{13b}\u{13c}\x03\ + \x02\x02\x02\u{13c}\u{13e}\x07\x40\x02\x02\u{13d}\u{138}\x03\x02\x02\x02\ + \u{13d}\u{13e}\x03\x02\x02\x02\u{13e}\u{407}\x03\x02\x02\x02\u{13f}\u{140}\ + \x07\x34\x02\x02\u{140}\u{144}\x07\u{f3}\x02\x02\u{141}\u{142}\x07\x71\x02\ + \x02\u{142}\u{143}\x07\u{a9}\x02\x02\u{143}\u{145}\x07\x59\x02\x02\u{144}\ + \u{141}\x03\x02\x02\x02\u{144}\u{145}\x03\x02\x02\x02\u{145}\u{146}\x03\ + \x02\x02\x02\u{146}\u{147}\x05\u{cc}\x67\x02\u{147}\u{148}\x07\x04\x02\x02\ + \u{148}\u{14d}\x05\x12\x0a\x02\u{149}\u{14a}\x07\x2c\x02\x02\u{14a}\u{14c}\ + \x05\x12\x0a\x02\u{14b}\u{149}\x03\x02\x02\x02\u{14c}\u{14f}\x03\x02\x02\ + \x02\u{14d}\u{14b}\x03\x02\x02\x02\u{14d}\u{14e}\x03\x02\x02\x02\u{14e}\ + \u{150}\x03\x02\x02\x02\u{14f}\u{14d}\x03\x02\x02\x02\u{150}\u{153}\x07\ + \x05\x02\x02\u{151}\u{152}\x07\x2d\x02\x02\u{152}\u{154}\x05\u{92}\x4a\x02\ + \u{153}\u{151}\x03\x02\x02\x02\u{153}\u{154}\x03\x02\x02\x02\u{154}\u{157}\ + \x03\x02\x02\x02\u{155}\u{156}\x07\u{11d}\x02\x02\u{156}\u{158}\x05\x18\ + \x0d\x02\u{157}\u{155}\x03\x02\x02\x02\u{157}\u{158}\x03\x02\x02\x02\u{158}\ + \u{407}\x03\x02\x02\x02\u{159}\u{15a}\x07\x4f\x02\x02\u{15a}\u{15d}\x07\ + \u{f3}\x02\x02\u{15b}\u{15c}\x07\x71\x02\x02\u{15c}\u{15e}\x07\x59\x02\x02\ + \u{15d}\u{15b}\x03\x02\x02\x02\u{15d}\u{15e}\x03\x02\x02\x02\u{15e}\u{15f}\ + \x03\x02\x02\x02\u{15f}\u{407}\x05\u{cc}\x67\x02\u{160}\u{161}\x07\x78\x02\ + \x02\u{161}\u{162}\x07\x7b\x02\x02\u{162}\u{164}\x05\u{cc}\x67\x02\u{163}\ + \u{165}\x05\x60\x31\x02\u{164}\u{163}\x03\x02\x02\x02\u{164}\u{165}\x03\ + \x02\x02\x02\u{165}\u{166}\x03\x02\x02\x02\u{166}\u{167}\x05\x0e\x08\x02\ + \u{167}\u{407}\x03\x02\x02\x02\u{168}\u{169}\x07\x47\x02\x02\u{169}\u{16a}\ + \x07\x64\x02\x02\u{16a}\u{16d}\x05\u{cc}\x67\x02\u{16b}\u{16c}\x07\u{11b}\ + \x02\x02\u{16c}\u{16e}\x05\x74\x3b\x02\u{16d}\u{16b}\x03\x02\x02\x02\u{16d}\ + \u{16e}\x03\x02\x02\x02\u{16e}\u{407}\x03\x02\x02\x02\u{16f}\u{170}\x07\ + \u{101}\x02\x02\u{170}\u{171}\x07\u{f3}\x02\x02\u{171}\u{407}\x05\u{cc}\ + \x67\x02\u{172}\u{173}\x07\x2d\x02\x02\u{173}\u{174}\x07\u{b1}\x02\x02\u{174}\ + \u{175}\x07\u{f3}\x02\x02\u{175}\u{176}\x05\u{cc}\x67\x02\u{176}\u{179}\ + \x07\x7e\x02\x02\u{177}\u{17a}\x05\u{92}\x4a\x02\u{178}\u{17a}\x07\u{aa}\ + \x02\x02\u{179}\u{177}\x03\x02\x02\x02\u{179}\u{178}\x03\x02\x02\x02\u{17a}\ + \u{407}\x03\x02\x02\x02\u{17b}\u{17c}\x07\x2d\x02\x02\u{17c}\u{17d}\x07\ + \u{b1}\x02\x02\u{17d}\u{17e}\x07\u{119}\x02\x02\u{17e}\u{17f}\x05\u{cc}\ + \x67\x02\u{17f}\u{182}\x07\x7e\x02\x02\u{180}\u{183}\x05\u{92}\x4a\x02\u{181}\ + \u{183}\x07\u{aa}\x02\x02\u{182}\u{180}\x03\x02\x02\x02\u{182}\u{181}\x03\ + \x02\x02\x02\u{183}\u{407}\x03\x02\x02\x02\u{184}\u{185}\x07\x2d\x02\x02\ + \u{185}\u{186}\x07\u{b1}\x02\x02\u{186}\u{187}\x07\x2a\x02\x02\u{187}\u{188}\ + \x05\u{cc}\x67\x02\u{188}\u{18b}\x07\x7e\x02\x02\u{189}\u{18c}\x05\u{92}\ + \x4a\x02\u{18a}\u{18c}\x07\u{aa}\x02\x02\u{18b}\u{189}\x03\x02\x02\x02\u{18b}\ + \u{18a}\x03\x02\x02\x02\u{18c}\u{407}\x03\x02\x02\x02\u{18d}\u{18e}\x07\ + \x18\x02\x02\u{18e}\u{191}\x07\u{f3}\x02\x02\u{18f}\u{190}\x07\x71\x02\x02\ + \u{190}\u{192}\x07\x59\x02\x02\u{191}\u{18f}\x03\x02\x02\x02\u{191}\u{192}\ + \x03\x02\x02\x02\u{192}\u{193}\x03\x02\x02\x02\u{193}\u{194}\x05\u{cc}\x67\ + \x02\u{194}\u{195}\x07\u{d1}\x02\x02\u{195}\u{196}\x07\u{fc}\x02\x02\u{196}\ + \u{197}\x05\u{cc}\x67\x02\u{197}\u{407}\x03\x02\x02\x02\u{198}\u{199}\x07\ + \x18\x02\x02\u{199}\u{19c}\x07\u{f3}\x02\x02\u{19a}\u{19b}\x07\x71\x02\x02\ + \u{19b}\u{19d}\x07\x59\x02\x02\u{19c}\u{19a}\x03\x02\x02\x02\u{19c}\u{19d}\ + \x03\x02\x02\x02\u{19d}\u{19e}\x03\x02\x02\x02\u{19e}\u{19f}\x05\u{cc}\x67\ + \x02\u{19f}\u{1a0}\x07\x14\x02\x02\u{1a0}\u{1a4}\x07\x2a\x02\x02\u{1a1}\ + \u{1a2}\x07\x71\x02\x02\u{1a2}\u{1a3}\x07\u{a9}\x02\x02\u{1a3}\u{1a5}\x07\ + \x59\x02\x02\u{1a4}\u{1a1}\x03\x02\x02\x02\u{1a4}\u{1a5}\x03\x02\x02\x02\ + \u{1a5}\u{1a6}\x03\x02\x02\x02\u{1a6}\u{1a7}\x05\x14\x0b\x02\u{1a7}\u{407}\ + \x03\x02\x02\x02\u{1a8}\u{1a9}\x07\x18\x02\x02\u{1a9}\u{1ac}\x07\u{f3}\x02\ + \x02\u{1aa}\u{1ab}\x07\x71\x02\x02\u{1ab}\u{1ad}\x07\x59\x02\x02\u{1ac}\ + \u{1aa}\x03\x02\x02\x02\u{1ac}\u{1ad}\x03\x02\x02\x02\u{1ad}\u{1ae}\x03\ + \x02\x02\x02\u{1ae}\u{1af}\x05\u{cc}\x67\x02\u{1af}\u{1b0}\x07\u{d1}\x02\ + \x02\u{1b0}\u{1b3}\x07\x2a\x02\x02\u{1b1}\u{1b2}\x07\x71\x02\x02\u{1b2}\ + \u{1b4}\x07\x59\x02\x02\u{1b3}\u{1b1}\x03\x02\x02\x02\u{1b3}\u{1b4}\x03\ + \x02\x02\x02\u{1b4}\u{1b5}\x03\x02\x02\x02\u{1b5}\u{1b6}\x05\u{d8}\x6d\x02\ + \u{1b6}\u{1b7}\x07\u{fc}\x02\x02\u{1b7}\u{1b8}\x05\u{d8}\x6d\x02\u{1b8}\ + \u{407}\x03\x02\x02\x02\u{1b9}\u{1ba}\x07\x18\x02\x02\u{1ba}\u{1bd}\x07\ + \u{f3}\x02\x02\u{1bb}\u{1bc}\x07\x71\x02\x02\u{1bc}\u{1be}\x07\x59\x02\x02\ + \u{1bd}\u{1bb}\x03\x02\x02\x02\u{1bd}\u{1be}\x03\x02\x02\x02\u{1be}\u{1bf}\ + \x03\x02\x02\x02\u{1bf}\u{1c0}\x05\u{cc}\x67\x02\u{1c0}\u{1c1}\x07\x4f\x02\ + \x02\u{1c1}\u{1c4}\x07\x2a\x02\x02\u{1c2}\u{1c3}\x07\x71\x02\x02\u{1c3}\ + \u{1c5}\x07\x59\x02\x02\u{1c4}\u{1c2}\x03\x02\x02\x02\u{1c4}\u{1c5}\x03\ + \x02\x02\x02\u{1c5}\u{1c6}\x03\x02\x02\x02\u{1c6}\u{1c7}\x05\u{cc}\x67\x02\ + \u{1c7}\u{407}\x03\x02\x02\x02\u{1c8}\u{1c9}\x07\x18\x02\x02\u{1c9}\u{1cc}\ + \x07\u{f3}\x02\x02\u{1ca}\u{1cb}\x07\x71\x02\x02\u{1cb}\u{1cd}\x07\x59\x02\ + \x02\u{1cc}\u{1ca}\x03\x02\x02\x02\u{1cc}\u{1cd}\x03\x02\x02\x02\u{1cd}\ + \u{1ce}\x03\x02\x02\x02\u{1ce}\u{1cf}\x05\u{cc}\x67\x02\u{1cf}\u{1d0}\x07\ + \x18\x02\x02\u{1d0}\u{1d1}\x07\x2a\x02\x02\u{1d1}\u{1d2}\x05\u{d8}\x6d\x02\ + \u{1d2}\u{1d3}\x07\u{ea}\x02\x02\u{1d3}\u{1d4}\x07\x40\x02\x02\u{1d4}\u{1d5}\ + \x07\u{103}\x02\x02\u{1d5}\u{1d6}\x05\u{a2}\x52\x02\u{1d6}\u{407}\x03\x02\ + \x02\x02\u{1d7}\u{1d8}\x07\x18\x02\x02\u{1d8}\u{1d9}\x07\u{f3}\x02\x02\u{1d9}\ + \u{1da}\x05\u{cc}\x67\x02\u{1da}\u{1db}\x07\u{ea}\x02\x02\u{1db}\u{1dc}\ + \x07\x20\x02\x02\u{1dc}\u{1dd}\x05\u{d4}\x6b\x02\u{1dd}\u{407}\x03\x02\x02\ + \x02\u{1de}\u{1df}\x07\x18\x02\x02\u{1df}\u{1e0}\x07\u{f3}\x02\x02\u{1e0}\ + \u{1e1}\x05\u{cc}\x67\x02\u{1e1}\u{1e2}\x07\u{ea}\x02\x02\u{1e2}\u{1e3}\ + \x07\u{ca}\x02\x02\u{1e3}\u{1e4}\x05\x1a\x0e\x02\u{1e4}\u{407}\x03\x02\x02\ + \x02\u{1e5}\u{1e6}\x07\x18\x02\x02\u{1e6}\u{1e7}\x07\u{f3}\x02\x02\u{1e7}\ + \u{1e8}\x05\u{cc}\x67\x02\u{1e8}\u{1e9}\x07\x58\x02\x02\u{1e9}\u{1f6}\x05\ + \u{d8}\x6d\x02\u{1ea}\u{1f3}\x07\x04\x02\x02\u{1eb}\u{1f0}\x05\u{c4}\x63\ + \x02\u{1ec}\u{1ed}\x07\x2c\x02\x02\u{1ed}\u{1ef}\x05\u{c4}\x63\x02\u{1ee}\ + \u{1ec}\x03\x02\x02\x02\u{1ef}\u{1f2}\x03\x02\x02\x02\u{1f0}\u{1ee}\x03\ + \x02\x02\x02\u{1f0}\u{1f1}\x03\x02\x02\x02\u{1f1}\u{1f4}\x03\x02\x02\x02\ + \u{1f2}\u{1f0}\x03\x02\x02\x02\u{1f3}\u{1eb}\x03\x02\x02\x02\u{1f3}\u{1f4}\ + \x03\x02\x02\x02\u{1f4}\u{1f5}\x03\x02\x02\x02\u{1f5}\u{1f7}\x07\x05\x02\ + \x02\u{1f6}\u{1ea}\x03\x02\x02\x02\u{1f6}\u{1f7}\x03\x02\x02\x02\u{1f7}\ + \u{1fa}\x03\x02\x02\x02\u{1f8}\u{1f9}\x07\u{11b}\x02\x02\u{1f9}\u{1fb}\x05\ + \x74\x3b\x02\u{1fa}\u{1f8}\x03\x02\x02\x02\u{1fa}\u{1fb}\x03\x02\x02\x02\ + \u{1fb}\u{407}\x03\x02\x02\x02\u{1fc}\u{1fd}\x07\x19\x02\x02\u{1fd}\u{200}\ + \x05\u{cc}\x67\x02\u{1fe}\u{1ff}\x07\u{11d}\x02\x02\u{1ff}\u{201}\x05\x18\ + \x0d\x02\u{200}\u{1fe}\x03\x02\x02\x02\u{200}\u{201}\x03\x02\x02\x02\u{201}\ + \u{407}\x03\x02\x02\x02\u{202}\u{205}\x07\x34\x02\x02\u{203}\u{204}\x07\ + \u{b5}\x02\x02\u{204}\u{206}\x07\u{d3}\x02\x02\u{205}\u{203}\x03\x02\x02\ + \x02\u{205}\u{206}\x03\x02\x02\x02\u{206}\u{207}\x03\x02\x02\x02\u{207}\ + \u{208}\x07\u{9b}\x02\x02\u{208}\u{20c}\x07\u{119}\x02\x02\u{209}\u{20a}\ + \x07\x71\x02\x02\u{20a}\u{20b}\x07\u{a9}\x02\x02\u{20b}\u{20d}\x07\x59\x02\ + \x02\u{20c}\u{209}\x03\x02\x02\x02\u{20c}\u{20d}\x03\x02\x02\x02\u{20d}\ + \u{20e}\x03\x02\x02\x02\u{20e}\u{212}\x05\u{cc}\x67\x02\u{20f}\u{210}\x07\ + \x67\x02\x02\u{210}\u{211}\x07\u{c3}\x02\x02\u{211}\u{213}\x05\u{9c}\x4f\ + \x02\u{212}\u{20f}\x03\x02\x02\x02\u{212}\u{213}\x03\x02\x02\x02\u{213}\ + \u{216}\x03\x02\x02\x02\u{214}\u{215}\x07\x2d\x02\x02\u{215}\u{217}\x05\ + \u{92}\x4a\x02\u{216}\u{214}\x03\x02\x02\x02\u{216}\u{217}\x03\x02\x02\x02\ + \u{217}\u{21a}\x03\x02\x02\x02\u{218}\u{219}\x07\u{11d}\x02\x02\u{219}\u{21b}\ + \x05\x18\x0d\x02\u{21a}\u{218}\x03\x02\x02\x02\u{21a}\u{21b}\x03\x02\x02\ + \x02\u{21b}\u{21c}\x03\x02\x02\x02\u{21c}\u{21d}\x07\x1d\x02\x02\u{21d}\ + \u{21e}\x05\x0e\x08\x02\u{21e}\u{407}\x03\x02\x02\x02\u{21f}\u{222}\x07\ + \x34\x02\x02\u{220}\u{221}\x07\u{b5}\x02\x02\u{221}\u{223}\x07\u{d3}\x02\ + \x02\u{222}\u{220}\x03\x02\x02\x02\u{222}\u{223}\x03\x02\x02\x02\u{223}\ + \u{224}\x03\x02\x02\x02\u{224}\u{225}\x07\u{119}\x02\x02\u{225}\u{228}\x05\ + \u{cc}\x67\x02\u{226}\u{227}\x07\x2d\x02\x02\u{227}\u{229}\x05\u{92}\x4a\ + \x02\u{228}\u{226}\x03\x02\x02\x02\u{228}\u{229}\x03\x02\x02\x02\u{229}\ + \u{22c}\x03\x02\x02\x02\u{22a}\u{22b}\x07\u{e5}\x02\x02\u{22b}\u{22d}\x09\ + \x03\x02\x02\u{22c}\u{22a}\x03\x02\x02\x02\u{22c}\u{22d}\x03\x02\x02\x02\ + \u{22d}\u{22e}\x03\x02\x02\x02\u{22e}\u{22f}\x07\x1d\x02\x02\u{22f}\u{230}\ + \x05\x0e\x08\x02\u{230}\u{407}\x03\x02\x02\x02\u{231}\u{232}\x07\u{d0}\x02\ + \x02\u{232}\u{233}\x07\u{9b}\x02\x02\u{233}\u{234}\x07\u{119}\x02\x02\u{234}\ + \u{407}\x05\u{cc}\x67\x02\u{235}\u{236}\x07\x4f\x02\x02\u{236}\u{237}\x07\ + \u{9b}\x02\x02\u{237}\u{23a}\x07\u{119}\x02\x02\u{238}\u{239}\x07\x71\x02\ + \x02\u{239}\u{23b}\x07\x59\x02\x02\u{23a}\u{238}\x03\x02\x02\x02\u{23a}\ + \u{23b}\x03\x02\x02\x02\u{23b}\u{23c}\x03\x02\x02\x02\u{23c}\u{407}\x05\ + \u{cc}\x67\x02\u{23d}\u{23e}\x07\x18\x02\x02\u{23e}\u{23f}\x07\u{9b}\x02\ + \x02\u{23f}\u{242}\x07\u{119}\x02\x02\u{240}\u{241}\x07\x71\x02\x02\u{241}\ + \u{243}\x07\x59\x02\x02\u{242}\u{240}\x03\x02\x02\x02\u{242}\u{243}\x03\ + \x02\x02\x02\u{243}\u{244}\x03\x02\x02\x02\u{244}\u{245}\x05\u{cc}\x67\x02\ + \u{245}\u{246}\x07\u{d1}\x02\x02\u{246}\u{247}\x07\u{fc}\x02\x02\u{247}\ + \u{248}\x05\u{cc}\x67\x02\u{248}\u{407}\x03\x02\x02\x02\u{249}\u{24a}\x07\ + \x18\x02\x02\u{24a}\u{24b}\x07\u{9b}\x02\x02\u{24b}\u{24c}\x07\u{119}\x02\ + \x02\u{24c}\u{24d}\x05\u{cc}\x67\x02\u{24d}\u{24e}\x07\u{ea}\x02\x02\u{24e}\ + \u{24f}\x07\u{ca}\x02\x02\u{24f}\u{250}\x05\x1a\x0e\x02\u{250}\u{407}\x03\ + \x02\x02\x02\u{251}\u{252}\x07\x4f\x02\x02\u{252}\u{255}\x07\u{119}\x02\ + \x02\u{253}\u{254}\x07\x71\x02\x02\u{254}\u{256}\x07\x59\x02\x02\u{255}\ + \u{253}\x03\x02\x02\x02\u{255}\u{256}\x03\x02\x02\x02\u{256}\u{257}\x03\ + \x02\x02\x02\u{257}\u{407}\x05\u{cc}\x67\x02\u{258}\u{259}\x07\x18\x02\x02\ + \u{259}\u{25a}\x07\u{119}\x02\x02\u{25a}\u{25b}\x05\u{cc}\x67\x02\u{25b}\ + \u{25c}\x07\u{d1}\x02\x02\u{25c}\u{25d}\x07\u{fc}\x02\x02\u{25d}\u{25e}\ + \x05\u{cc}\x67\x02\u{25e}\u{407}\x03\x02\x02\x02\u{25f}\u{260}\x07\x18\x02\ + \x02\u{260}\u{261}\x07\u{119}\x02\x02\u{261}\u{262}\x05\u{cc}\x67\x02\u{262}\ + \u{263}\x07\u{ea}\x02\x02\u{263}\u{264}\x07\x20\x02\x02\u{264}\u{265}\x05\ + \u{d4}\x6b\x02\u{265}\u{407}\x03\x02\x02\x02\u{266}\u{267}\x07\x25\x02\x02\ + \u{267}\u{268}\x05\u{cc}\x67\x02\u{268}\u{271}\x07\x04\x02\x02\u{269}\u{26e}\ + \x05\u{c4}\x63\x02\u{26a}\u{26b}\x07\x2c\x02\x02\u{26b}\u{26d}\x05\u{c4}\ + \x63\x02\u{26c}\u{26a}\x03\x02\x02\x02\u{26d}\u{270}\x03\x02\x02\x02\u{26e}\ + \u{26c}\x03\x02\x02\x02\u{26e}\u{26f}\x03\x02\x02\x02\u{26f}\u{272}\x03\ + \x02\x02\x02\u{270}\u{26e}\x03\x02\x02\x02\u{271}\u{269}\x03\x02\x02\x02\ + \u{271}\u{272}\x03\x02\x02\x02\u{272}\u{273}\x03\x02\x02\x02\u{273}\u{274}\ + \x07\x05\x02\x02\u{274}\u{407}\x03\x02\x02\x02\u{275}\u{276}\x07\x34\x02\ + \x02\u{276}\u{277}\x07\u{da}\x02\x02\u{277}\u{27b}\x05\u{d8}\x6d\x02\u{278}\ + \u{279}\x07\u{11d}\x02\x02\u{279}\u{27a}\x07\x15\x02\x02\u{27a}\u{27c}\x05\ + \u{d2}\x6a\x02\u{27b}\u{278}\x03\x02\x02\x02\u{27b}\u{27c}\x03\x02\x02\x02\ + \u{27c}\u{27f}\x03\x02\x02\x02\u{27d}\u{27e}\x07\x73\x02\x02\u{27e}\u{280}\ + \x05\u{d8}\x6d\x02\u{27f}\u{27d}\x03\x02\x02\x02\u{27f}\u{280}\x03\x02\x02\ + \x02\u{280}\u{407}\x03\x02\x02\x02\u{281}\u{282}\x07\x4f\x02\x02\u{282}\ + \u{283}\x07\u{da}\x02\x02\u{283}\u{286}\x05\u{d8}\x6d\x02\u{284}\u{285}\ + \x07\x73\x02\x02\u{285}\u{287}\x05\u{d8}\x6d\x02\u{286}\u{284}\x03\x02\x02\ + \x02\u{286}\u{287}\x03\x02\x02\x02\u{287}\u{407}\x03\x02\x02\x02\u{288}\ + \u{289}\x07\x68\x02\x02\u{289}\u{28a}\x05\u{d6}\x6c\x02\u{28a}\u{28b}\x07\ + \u{fc}\x02\x02\u{28b}\u{290}\x05\u{d4}\x6b\x02\u{28c}\u{28d}\x07\x2c\x02\ + \x02\u{28d}\u{28f}\x05\u{d4}\x6b\x02\u{28e}\u{28c}\x03\x02\x02\x02\u{28f}\ + \u{292}\x03\x02\x02\x02\u{290}\u{28e}\x03\x02\x02\x02\u{290}\u{291}\x03\ + \x02\x02\x02\u{291}\u{296}\x03\x02\x02\x02\u{292}\u{290}\x03\x02\x02\x02\ + \u{293}\u{294}\x07\u{11d}\x02\x02\u{294}\u{295}\x07\x15\x02\x02\u{295}\u{297}\ + \x07\u{b4}\x02\x02\u{296}\u{293}\x03\x02\x02\x02\u{296}\u{297}\x03\x02\x02\ + \x02\u{297}\u{29b}\x03\x02\x02\x02\u{298}\u{299}\x07\x69\x02\x02\u{299}\ + \u{29a}\x07\x24\x02\x02\u{29a}\u{29c}\x05\u{d2}\x6a\x02\u{29b}\u{298}\x03\ + \x02\x02\x02\u{29b}\u{29c}\x03\x02\x02\x02\u{29c}\u{29f}\x03\x02\x02\x02\ + \u{29d}\u{29e}\x07\x73\x02\x02\u{29e}\u{2a0}\x05\u{d8}\x6d\x02\u{29f}\u{29d}\ + \x03\x02\x02\x02\u{29f}\u{2a0}\x03\x02\x02\x02\u{2a0}\u{407}\x03\x02\x02\ + \x02\u{2a1}\u{2a5}\x07\u{d8}\x02\x02\u{2a2}\u{2a3}\x07\x15\x02\x02\u{2a3}\ + \u{2a4}\x07\u{b4}\x02\x02\u{2a4}\u{2a6}\x07\x62\x02\x02\u{2a5}\u{2a2}\x03\ + \x02\x02\x02\u{2a5}\u{2a6}\x03\x02\x02\x02\u{2a6}\u{2a7}\x03\x02\x02\x02\ + \u{2a7}\u{2a8}\x05\u{d6}\x6c\x02\u{2a8}\u{2a9}\x07\x64\x02\x02\u{2a9}\u{2ae}\ + \x05\u{d4}\x6b\x02\u{2aa}\u{2ab}\x07\x2c\x02\x02\u{2ab}\u{2ad}\x05\u{d4}\ + \x6b\x02\u{2ac}\u{2aa}\x03\x02\x02\x02\u{2ad}\u{2b0}\x03\x02\x02\x02\u{2ae}\ + \u{2ac}\x03\x02\x02\x02\u{2ae}\u{2af}\x03\x02\x02\x02\u{2af}\u{2b4}\x03\ + \x02\x02\x02\u{2b0}\u{2ae}\x03\x02\x02\x02\u{2b1}\u{2b2}\x07\x69\x02\x02\ + \u{2b2}\u{2b3}\x07\x24\x02\x02\u{2b3}\u{2b5}\x05\u{d2}\x6a\x02\u{2b4}\u{2b1}\ + \x03\x02\x02\x02\u{2b4}\u{2b5}\x03\x02\x02\x02\u{2b5}\u{2b8}\x03\x02\x02\ + \x02\u{2b6}\u{2b7}\x07\x73\x02\x02\u{2b7}\u{2b9}\x05\u{d8}\x6d\x02\u{2b8}\ + \u{2b6}\x03\x02\x02\x02\u{2b8}\u{2b9}\x03\x02\x02\x02\u{2b9}\u{407}\x03\ + \x02\x02\x02\u{2ba}\u{2bb}\x07\u{ea}\x02\x02\u{2bb}\u{2bf}\x07\u{da}\x02\ + \x02\u{2bc}\u{2c0}\x07\x17\x02\x02\u{2bd}\u{2c0}\x07\u{a7}\x02\x02\u{2be}\ + \u{2c0}\x05\u{d8}\x6d\x02\u{2bf}\u{2bc}\x03\x02\x02\x02\u{2bf}\u{2bd}\x03\ + \x02\x02\x02\u{2bf}\u{2be}\x03\x02\x02\x02\u{2c0}\u{2c3}\x03\x02\x02\x02\ + \u{2c1}\u{2c2}\x07\x73\x02\x02\u{2c2}\u{2c4}\x05\u{d8}\x6d\x02\u{2c3}\u{2c1}\ + \x03\x02\x02\x02\u{2c3}\u{2c4}\x03\x02\x02\x02\u{2c4}\u{407}\x03\x02\x02\ + \x02\u{2c5}\u{2d0}\x07\x68\x02\x02\u{2c6}\u{2cb}\x05\u{ca}\x66\x02\u{2c7}\ + \u{2c8}\x07\x2c\x02\x02\u{2c8}\u{2ca}\x05\u{ca}\x66\x02\u{2c9}\u{2c7}\x03\ + \x02\x02\x02\u{2ca}\u{2cd}\x03\x02\x02\x02\u{2cb}\u{2c9}\x03\x02\x02\x02\ + \u{2cb}\u{2cc}\x03\x02\x02\x02\u{2cc}\u{2d1}\x03\x02\x02\x02\u{2cd}\u{2cb}\ + \x03\x02\x02\x02\u{2ce}\u{2cf}\x07\x17\x02\x02\u{2cf}\u{2d1}\x07\u{c9}\x02\ + \x02\u{2d0}\u{2c6}\x03\x02\x02\x02\u{2d0}\u{2ce}\x03\x02\x02\x02\u{2d1}\ + \u{2d2}\x03\x02\x02\x02\u{2d2}\u{2d4}\x07\u{b1}\x02\x02\u{2d3}\u{2d5}\x09\ + \x04\x02\x02\u{2d4}\u{2d3}\x03\x02\x02\x02\u{2d4}\u{2d5}\x03\x02\x02\x02\ + \u{2d5}\u{2d6}\x03\x02\x02\x02\u{2d6}\u{2d7}\x05\u{cc}\x67\x02\u{2d7}\u{2d8}\ + \x07\u{fc}\x02\x02\u{2d8}\u{2dc}\x05\u{d4}\x6b\x02\u{2d9}\u{2da}\x07\u{11d}\ + \x02\x02\u{2da}\u{2db}\x07\x68\x02\x02\u{2db}\u{2dd}\x07\u{b4}\x02\x02\u{2dc}\ + \u{2d9}\x03\x02\x02\x02\u{2dc}\u{2dd}\x03\x02\x02\x02\u{2dd}\u{407}\x03\ + \x02\x02\x02\u{2de}\u{2e9}\x07\x48\x02\x02\u{2df}\u{2e4}\x05\u{ca}\x66\x02\ + \u{2e0}\u{2e1}\x07\x2c\x02\x02\u{2e1}\u{2e3}\x05\u{ca}\x66\x02\u{2e2}\u{2e0}\ + \x03\x02\x02\x02\u{2e3}\u{2e6}\x03\x02\x02\x02\u{2e4}\u{2e2}\x03\x02\x02\ + \x02\u{2e4}\u{2e5}\x03\x02\x02\x02\u{2e5}\u{2ea}\x03\x02\x02\x02\u{2e6}\ + \u{2e4}\x03\x02\x02\x02\u{2e7}\u{2e8}\x07\x17\x02\x02\u{2e8}\u{2ea}\x07\ + \u{c9}\x02\x02\u{2e9}\u{2df}\x03\x02\x02\x02\u{2e9}\u{2e7}\x03\x02\x02\x02\ + \u{2ea}\u{2eb}\x03\x02\x02\x02\u{2eb}\u{2ed}\x07\u{b1}\x02\x02\u{2ec}\u{2ee}\ + \x09\x04\x02\x02\u{2ed}\u{2ec}\x03\x02\x02\x02\u{2ed}\u{2ee}\x03\x02\x02\ + \x02\u{2ee}\u{2ef}\x03\x02\x02\x02\u{2ef}\u{2f0}\x05\u{cc}\x67\x02\u{2f0}\ + \u{2f1}\x07\u{fc}\x02\x02\u{2f1}\u{2f2}\x05\u{d4}\x6b\x02\u{2f2}\u{407}\ + \x03\x02\x02\x02\u{2f3}\u{2f7}\x07\u{d8}\x02\x02\u{2f4}\u{2f5}\x07\x68\x02\ + \x02\u{2f5}\u{2f6}\x07\u{b4}\x02\x02\u{2f6}\u{2f8}\x07\x62\x02\x02\u{2f7}\ + \u{2f4}\x03\x02\x02\x02\u{2f7}\u{2f8}\x03\x02\x02\x02\u{2f8}\u{303}\x03\ + \x02\x02\x02\u{2f9}\u{2fe}\x05\u{ca}\x66\x02\u{2fa}\u{2fb}\x07\x2c\x02\x02\ + \u{2fb}\u{2fd}\x05\u{ca}\x66\x02\u{2fc}\u{2fa}\x03\x02\x02\x02\u{2fd}\u{300}\ + \x03\x02\x02\x02\u{2fe}\u{2fc}\x03\x02\x02\x02\u{2fe}\u{2ff}\x03\x02\x02\ + \x02\u{2ff}\u{304}\x03\x02\x02\x02\u{300}\u{2fe}\x03\x02\x02\x02\u{301}\ + \u{302}\x07\x17\x02\x02\u{302}\u{304}\x07\u{c9}\x02\x02\u{303}\u{2f9}\x03\ + \x02\x02\x02\u{303}\u{301}\x03\x02\x02\x02\u{304}\u{305}\x03\x02\x02\x02\ + \u{305}\u{307}\x07\u{b1}\x02\x02\u{306}\u{308}\x09\x04\x02\x02\u{307}\u{306}\ + \x03\x02\x02\x02\u{307}\u{308}\x03\x02\x02\x02\u{308}\u{309}\x03\x02\x02\ + \x02\u{309}\u{30a}\x05\u{cc}\x67\x02\u{30a}\u{30b}\x07\x64\x02\x02\u{30b}\ + \u{30c}\x05\u{d4}\x6b\x02\u{30c}\u{407}\x03\x02\x02\x02\u{30d}\u{30e}\x07\ + \u{ec}\x02\x02\u{30e}\u{314}\x07\x6a\x02\x02\u{30f}\u{311}\x07\u{b1}\x02\ + \x02\u{310}\u{312}\x07\u{f3}\x02\x02\u{311}\u{310}\x03\x02\x02\x02\u{311}\ + \u{312}\x03\x02\x02\x02\u{312}\u{313}\x03\x02\x02\x02\u{313}\u{315}\x05\ + \u{cc}\x67\x02\u{314}\u{30f}\x03\x02\x02\x02\u{314}\u{315}\x03\x02\x02\x02\ + \u{315}\u{407}\x03\x02\x02\x02\u{316}\u{322}\x07\x5a\x02\x02\u{317}\u{318}\ + \x07\x04\x02\x02\u{318}\u{31d}\x05\u{be}\x60\x02\u{319}\u{31a}\x07\x2c\x02\ + \x02\u{31a}\u{31c}\x05\u{be}\x60\x02\u{31b}\u{319}\x03\x02\x02\x02\u{31c}\ + \u{31f}\x03\x02\x02\x02\u{31d}\u{31b}\x03\x02\x02\x02\u{31d}\u{31e}\x03\ + \x02\x02\x02\u{31e}\u{320}\x03\x02\x02\x02\u{31f}\u{31d}\x03\x02\x02\x02\ + \u{320}\u{321}\x07\x05\x02\x02\u{321}\u{323}\x03\x02\x02\x02\u{322}\u{317}\ + \x03\x02\x02\x02\u{322}\u{323}\x03\x02\x02\x02\u{323}\u{324}\x03\x02\x02\ + \x02\u{324}\u{407}\x05\x0c\x07\x02\u{325}\u{326}\x07\x5a\x02\x02\u{326}\ + \u{328}\x07\x19\x02\x02\u{327}\u{329}\x07\u{117}\x02\x02\u{328}\u{327}\x03\ + \x02\x02\x02\u{328}\u{329}\x03\x02\x02\x02\u{329}\u{32a}\x03\x02\x02\x02\ + \u{32a}\u{407}\x05\x0c\x07\x02\u{32b}\u{32c}\x07\u{ec}\x02\x02\u{32c}\u{32d}\ + \x07\x34\x02\x02\u{32d}\u{32e}\x07\u{f3}\x02\x02\u{32e}\u{407}\x05\u{cc}\ + \x67\x02\u{32f}\u{330}\x07\u{ec}\x02\x02\u{330}\u{331}\x07\x34\x02\x02\u{331}\ + \u{332}\x07\u{e2}\x02\x02\u{332}\u{407}\x05\u{cc}\x67\x02\u{333}\u{334}\ + \x07\u{ec}\x02\x02\u{334}\u{335}\x07\x34\x02\x02\u{335}\u{336}\x07\u{119}\ + \x02\x02\u{336}\u{407}\x05\u{cc}\x67\x02\u{337}\u{338}\x07\u{ec}\x02\x02\ + \u{338}\u{339}\x07\x34\x02\x02\u{339}\u{33a}\x07\u{9b}\x02\x02\u{33a}\u{33b}\ + \x07\u{119}\x02\x02\u{33b}\u{407}\x05\u{cc}\x67\x02\u{33c}\u{33d}\x07\u{ec}\ + \x02\x02\u{33d}\u{340}\x07\u{f4}\x02\x02\u{33e}\u{33f}\x09\x05\x02\x02\u{33f}\ + \u{341}\x05\u{cc}\x67\x02\u{340}\u{33e}\x03\x02\x02\x02\u{340}\u{341}\x03\ + \x02\x02\x02\u{341}\u{348}\x03\x02\x02\x02\u{342}\u{343}\x07\u{8f}\x02\x02\ + \u{343}\u{346}\x05\u{92}\x4a\x02\u{344}\u{345}\x07\x55\x02\x02\u{345}\u{347}\ + \x05\u{92}\x4a\x02\u{346}\u{344}\x03\x02\x02\x02\u{346}\u{347}\x03\x02\x02\ + \x02\u{347}\u{349}\x03\x02\x02\x02\u{348}\u{342}\x03\x02\x02\x02\u{348}\ + \u{349}\x03\x02\x02\x02\u{349}\u{407}\x03\x02\x02\x02\u{34a}\u{34b}\x07\ + \u{ec}\x02\x02\u{34b}\u{34e}\x07\u{e3}\x02\x02\u{34c}\u{34d}\x09\x05\x02\ + \x02\u{34d}\u{34f}\x05\u{d8}\x6d\x02\u{34e}\u{34c}\x03\x02\x02\x02\u{34e}\ + \u{34f}\x03\x02\x02\x02\u{34f}\u{356}\x03\x02\x02\x02\u{350}\u{351}\x07\ + \u{8f}\x02\x02\u{351}\u{354}\x05\u{92}\x4a\x02\u{352}\u{353}\x07\x55\x02\ + \x02\u{353}\u{355}\x05\u{92}\x4a\x02\u{354}\u{352}\x03\x02\x02\x02\u{354}\ + \u{355}\x03\x02\x02\x02\u{355}\u{357}\x03\x02\x02\x02\u{356}\u{350}\x03\ + \x02\x02\x02\u{356}\u{357}\x03\x02\x02\x02\u{357}\u{407}\x03\x02\x02\x02\ + \u{358}\u{359}\x07\u{ec}\x02\x02\u{359}\u{360}\x07\x29\x02\x02\u{35a}\u{35b}\ + \x07\u{8f}\x02\x02\u{35b}\u{35e}\x05\u{92}\x4a\x02\u{35c}\u{35d}\x07\x55\ + \x02\x02\u{35d}\u{35f}\x05\u{92}\x4a\x02\u{35e}\u{35c}\x03\x02\x02\x02\u{35e}\ + \u{35f}\x03\x02\x02\x02\u{35f}\u{361}\x03\x02\x02\x02\u{360}\u{35a}\x03\ + \x02\x02\x02\u{360}\u{361}\x03\x02\x02\x02\u{361}\u{407}\x03\x02\x02\x02\ + \u{362}\u{363}\x07\u{ec}\x02\x02\u{363}\u{364}\x07\x2b\x02\x02\u{364}\u{366}\ + \x09\x05\x02\x02\u{365}\u{367}\x05\u{cc}\x67\x02\u{366}\u{365}\x03\x02\x02\ + \x02\u{366}\u{367}\x03\x02\x02\x02\u{367}\u{36e}\x03\x02\x02\x02\u{368}\ + \u{369}\x07\u{8f}\x02\x02\u{369}\u{36c}\x05\u{92}\x4a\x02\u{36a}\u{36b}\ + \x07\x55\x02\x02\u{36b}\u{36d}\x05\u{92}\x4a\x02\u{36c}\u{36a}\x03\x02\x02\ + \x02\u{36c}\u{36d}\x03\x02\x02\x02\u{36d}\u{36f}\x03\x02\x02\x02\u{36e}\ + \u{368}\x03\x02\x02\x02\u{36e}\u{36f}\x03\x02\x02\x02\u{36f}\u{407}\x03\ + \x02\x02\x02\u{370}\u{371}\x07\u{ec}\x02\x02\u{371}\u{372}\x07\u{ef}\x02\ + \x02\u{372}\u{373}\x07\x62\x02\x02\u{373}\u{407}\x05\u{cc}\x67\x02\u{374}\ + \u{375}\x07\u{ec}\x02\x02\u{375}\u{376}\x07\u{ef}\x02\x02\u{376}\u{377}\ + \x07\x62\x02\x02\u{377}\u{378}\x07\x04\x02\x02\u{378}\u{379}\x05\x0e\x08\ + \x02\u{379}\u{37a}\x07\x05\x02\x02\u{37a}\u{407}\x03\x02\x02\x02\u{37b}\ + \u{37d}\x07\u{ec}\x02\x02\u{37c}\u{37e}\x07\x37\x02\x02\u{37d}\u{37c}\x03\ + \x02\x02\x02\u{37d}\u{37e}\x03\x02\x02\x02\u{37e}\u{37f}\x03\x02\x02\x02\ + \u{37f}\u{382}\x07\u{db}\x02\x02\u{380}\u{381}\x09\x05\x02\x02\u{381}\u{383}\ + \x05\u{d8}\x6d\x02\u{382}\u{380}\x03\x02\x02\x02\u{382}\u{383}\x03\x02\x02\ + \x02\u{383}\u{407}\x03\x02\x02\x02\u{384}\u{385}\x07\u{ec}\x02\x02\u{385}\ + \u{386}\x07\u{da}\x02\x02\u{386}\u{389}\x07\x6a\x02\x02\u{387}\u{388}\x09\ + \x05\x02\x02\u{388}\u{38a}\x05\u{d8}\x6d\x02\u{389}\u{387}\x03\x02\x02\x02\ + \u{389}\u{38a}\x03\x02\x02\x02\u{38a}\u{407}\x03\x02\x02\x02\u{38b}\u{38c}\ + \x07\x4a\x02\x02\u{38c}\u{407}\x05\u{cc}\x67\x02\u{38d}\u{38e}\x07\x49\x02\ + \x02\u{38e}\u{407}\x05\u{cc}\x67\x02\u{38f}\u{390}\x07\u{ec}\x02\x02\u{390}\ + \u{397}\x07\x66\x02\x02\u{391}\u{392}\x07\u{8f}\x02\x02\u{392}\u{395}\x05\ + \u{92}\x4a\x02\u{393}\u{394}\x07\x55\x02\x02\u{394}\u{396}\x05\u{92}\x4a\ + \x02\u{395}\u{393}\x03\x02\x02\x02\u{395}\u{396}\x03\x02\x02\x02\u{396}\ + \u{398}\x03\x02\x02\x02\u{397}\u{391}\x03\x02\x02\x02\u{397}\u{398}\x03\ + \x02\x02\x02\u{398}\u{407}\x03\x02\x02\x02\u{399}\u{39a}\x07\u{ec}\x02\x02\ + \u{39a}\u{3a1}\x07\u{e9}\x02\x02\u{39b}\u{39c}\x07\u{8f}\x02\x02\u{39c}\ + \u{39f}\x05\u{92}\x4a\x02\u{39d}\u{39e}\x07\x55\x02\x02\u{39e}\u{3a0}\x05\ + \u{92}\x4a\x02\u{39f}\u{39d}\x03\x02\x02\x02\u{39f}\u{3a0}\x03\x02\x02\x02\ + \u{3a0}\u{3a2}\x03\x02\x02\x02\u{3a1}\u{39b}\x03\x02\x02\x02\u{3a1}\u{3a2}\ + \x03\x02\x02\x02\u{3a2}\u{407}\x03\x02\x02\x02\u{3a3}\u{3a4}\x07\u{ea}\x02\ + \x02\u{3a4}\u{3a5}\x07\u{e9}\x02\x02\u{3a5}\u{3a6}\x05\u{cc}\x67\x02\u{3a6}\ + \u{3a7}\x07\u{125}\x02\x02\u{3a7}\u{3a8}\x05\x72\x3a\x02\u{3a8}\u{407}\x03\ + \x02\x02\x02\u{3a9}\u{3aa}\x07\u{d4}\x02\x02\u{3aa}\u{3ab}\x07\u{e9}\x02\ + \x02\u{3ab}\u{407}\x05\u{cc}\x67\x02\u{3ac}\u{3ad}\x07\u{ee}\x02\x02\u{3ad}\ + \u{3b6}\x07\u{fe}\x02\x02\u{3ae}\u{3b3}\x05\u{c0}\x61\x02\u{3af}\u{3b0}\ + \x07\x2c\x02\x02\u{3b0}\u{3b2}\x05\u{c0}\x61\x02\u{3b1}\u{3af}\x03\x02\x02\ + \x02\u{3b2}\u{3b5}\x03\x02\x02\x02\u{3b3}\u{3b1}\x03\x02\x02\x02\u{3b3}\ + \u{3b4}\x03\x02\x02\x02\u{3b4}\u{3b7}\x03\x02\x02\x02\u{3b5}\u{3b3}\x03\ + \x02\x02\x02\u{3b6}\u{3ae}\x03\x02\x02\x02\u{3b6}\u{3b7}\x03\x02\x02\x02\ + \u{3b7}\u{407}\x03\x02\x02\x02\u{3b8}\u{3ba}\x07\x2e\x02\x02\u{3b9}\u{3bb}\ + \x07\u{120}\x02\x02\u{3ba}\u{3b9}\x03\x02\x02\x02\u{3ba}\u{3bb}\x03\x02\ + \x02\x02\u{3bb}\u{407}\x03\x02\x02\x02\u{3bc}\u{3be}\x07\u{dc}\x02\x02\u{3bd}\ + \u{3bf}\x07\u{120}\x02\x02\u{3be}\u{3bd}\x03\x02\x02\x02\u{3be}\u{3bf}\x03\ + \x02\x02\x02\u{3bf}\u{407}\x03\x02\x02\x02\u{3c0}\u{3c1}\x07\u{c8}\x02\x02\ + \u{3c1}\u{3c2}\x05\u{d8}\x6d\x02\u{3c2}\u{3c3}\x07\x64\x02\x02\u{3c3}\u{3c4}\ + \x05\x0c\x07\x02\u{3c4}\u{407}\x03\x02\x02\x02\u{3c5}\u{3c6}\x07\x43\x02\ + \x02\u{3c6}\u{3c7}\x07\u{c8}\x02\x02\u{3c7}\u{407}\x05\u{d8}\x6d\x02\u{3c8}\ + \u{3c9}\x07\x58\x02\x02\u{3c9}\u{3d3}\x05\u{d8}\x6d\x02\u{3ca}\u{3cb}\x07\ + \u{110}\x02\x02\u{3cb}\u{3d0}\x05\x72\x3a\x02\u{3cc}\u{3cd}\x07\x2c\x02\ + \x02\u{3cd}\u{3cf}\x05\x72\x3a\x02\u{3ce}\u{3cc}\x03\x02\x02\x02\u{3cf}\ + \u{3d2}\x03\x02\x02\x02\u{3d0}\u{3ce}\x03\x02\x02\x02\u{3d0}\u{3d1}\x03\ + \x02\x02\x02\u{3d1}\u{3d4}\x03\x02\x02\x02\u{3d2}\u{3d0}\x03\x02\x02\x02\ + \u{3d3}\u{3ca}\x03\x02\x02\x02\u{3d3}\u{3d4}\x03\x02\x02\x02\u{3d4}\u{407}\ + \x03\x02\x02\x02\u{3d5}\u{3d6}\x07\x4a\x02\x02\u{3d6}\u{3d7}\x07\x77\x02\ + \x02\u{3d7}\u{407}\x05\u{d8}\x6d\x02\u{3d8}\u{3d9}\x07\x4a\x02\x02\u{3d9}\ + \u{3da}\x07\u{b9}\x02\x02\u{3da}\u{407}\x05\u{d8}\x6d\x02\u{3db}\u{3dc}\ + \x07\u{ea}\x02\x02\u{3dc}\u{3dd}\x07\u{c0}\x02\x02\u{3dd}\u{407}\x05\u{c8}\ + \x65\x02\u{3de}\u{3df}\x07\u{ea}\x02\x02\u{3df}\u{3e0}\x07\u{fa}\x02\x02\ + \u{3e0}\u{3e3}\x07\u{124}\x02\x02\u{3e1}\u{3e4}\x07\u{92}\x02\x02\u{3e2}\ + \u{3e4}\x05\x72\x3a\x02\u{3e3}\u{3e1}\x03\x02\x02\x02\u{3e3}\u{3e2}\x03\ + \x02\x02\x02\u{3e4}\u{407}\x03\x02\x02\x02\u{3e5}\u{3e6}\x07\u{10d}\x02\ + \x02\u{3e6}\u{3e7}\x05\u{cc}\x67\x02\u{3e7}\u{3e8}\x07\u{ea}\x02\x02\u{3e8}\ + \u{3ed}\x05\u{bc}\x5f\x02\u{3e9}\u{3ea}\x07\x2c\x02\x02\u{3ea}\u{3ec}\x05\ + \u{bc}\x5f\x02\u{3eb}\u{3e9}\x03\x02\x02\x02\u{3ec}\u{3ef}\x03\x02\x02\x02\ + \u{3ed}\u{3eb}\x03\x02\x02\x02\u{3ed}\u{3ee}\x03\x02\x02\x02\u{3ee}\u{3f2}\ + \x03\x02\x02\x02\u{3ef}\u{3ed}\x03\x02\x02\x02\u{3f0}\u{3f1}\x07\u{11b}\ + \x02\x02\u{3f1}\u{3f3}\x05\x74\x3b\x02\u{3f2}\u{3f0}\x03\x02\x02\x02\u{3f2}\ + \u{3f3}\x03\x02\x02\x02\u{3f3}\u{407}\x03\x02\x02\x02\u{3f4}\u{3f5}\x07\ + \u{9d}\x02\x02\u{3f5}\u{3f6}\x07\x7b\x02\x02\u{3f6}\u{3fb}\x05\u{cc}\x67\ + \x02\u{3f7}\u{3f9}\x07\x1d\x02\x02\u{3f8}\u{3f7}\x03\x02\x02\x02\u{3f8}\ + \u{3f9}\x03\x02\x02\x02\u{3f9}\u{3fa}\x03\x02\x02\x02\u{3fa}\u{3fc}\x05\ + \u{d8}\x6d\x02\u{3fb}\u{3f8}\x03\x02\x02\x02\u{3fb}\u{3fc}\x03\x02\x02\x02\ + \u{3fc}\u{3fd}\x03\x02\x02\x02\u{3fd}\u{3fe}\x07\u{110}\x02\x02\u{3fe}\u{3ff}\ + \x05\x40\x21\x02\u{3ff}\u{400}\x07\u{b1}\x02\x02\u{400}\u{402}\x05\x72\x3a\ + \x02\u{401}\u{403}\x05\u{ac}\x57\x02\u{402}\u{401}\x03\x02\x02\x02\u{403}\ + \u{404}\x03\x02\x02\x02\u{404}\u{402}\x03\x02\x02\x02\u{404}\u{405}\x03\ + \x02\x02\x02\u{405}\u{407}\x03\x02\x02\x02\u{406}\u{ed}\x03\x02\x02\x02\ + \u{406}\u{ee}\x03\x02\x02\x02\u{406}\u{f0}\x03\x02\x02\x02\u{406}\u{f5}\ + \x03\x02\x02\x02\u{406}\u{105}\x03\x02\x02\x02\u{406}\u{10f}\x03\x02\x02\ + \x02\u{406}\u{116}\x03\x02\x02\x02\u{406}\u{11d}\x03\x02\x02\x02\u{406}\ + \u{13f}\x03\x02\x02\x02\u{406}\u{159}\x03\x02\x02\x02\u{406}\u{160}\x03\ + \x02\x02\x02\u{406}\u{168}\x03\x02\x02\x02\u{406}\u{16f}\x03\x02\x02\x02\ + \u{406}\u{172}\x03\x02\x02\x02\u{406}\u{17b}\x03\x02\x02\x02\u{406}\u{184}\ + \x03\x02\x02\x02\u{406}\u{18d}\x03\x02\x02\x02\u{406}\u{198}\x03\x02\x02\ + \x02\u{406}\u{1a8}\x03\x02\x02\x02\u{406}\u{1b9}\x03\x02\x02\x02\u{406}\ + \u{1c8}\x03\x02\x02\x02\u{406}\u{1d7}\x03\x02\x02\x02\u{406}\u{1de}\x03\ + \x02\x02\x02\u{406}\u{1e5}\x03\x02\x02\x02\u{406}\u{1fc}\x03\x02\x02\x02\ + \u{406}\u{202}\x03\x02\x02\x02\u{406}\u{21f}\x03\x02\x02\x02\u{406}\u{231}\ + \x03\x02\x02\x02\u{406}\u{235}\x03\x02\x02\x02\u{406}\u{23d}\x03\x02\x02\ + \x02\u{406}\u{249}\x03\x02\x02\x02\u{406}\u{251}\x03\x02\x02\x02\u{406}\ + \u{258}\x03\x02\x02\x02\u{406}\u{25f}\x03\x02\x02\x02\u{406}\u{266}\x03\ + \x02\x02\x02\u{406}\u{275}\x03\x02\x02\x02\u{406}\u{281}\x03\x02\x02\x02\ + \u{406}\u{288}\x03\x02\x02\x02\u{406}\u{2a1}\x03\x02\x02\x02\u{406}\u{2ba}\ + \x03\x02\x02\x02\u{406}\u{2c5}\x03\x02\x02\x02\u{406}\u{2de}\x03\x02\x02\ + \x02\u{406}\u{2f3}\x03\x02\x02\x02\u{406}\u{30d}\x03\x02\x02\x02\u{406}\ + \u{316}\x03\x02\x02\x02\u{406}\u{325}\x03\x02\x02\x02\u{406}\u{32b}\x03\ + \x02\x02\x02\u{406}\u{32f}\x03\x02\x02\x02\u{406}\u{333}\x03\x02\x02\x02\ + \u{406}\u{337}\x03\x02\x02\x02\u{406}\u{33c}\x03\x02\x02\x02\u{406}\u{34a}\ + \x03\x02\x02\x02\u{406}\u{358}\x03\x02\x02\x02\u{406}\u{362}\x03\x02\x02\ + \x02\u{406}\u{370}\x03\x02\x02\x02\u{406}\u{374}\x03\x02\x02\x02\u{406}\ + \u{37b}\x03\x02\x02\x02\u{406}\u{384}\x03\x02\x02\x02\u{406}\u{38b}\x03\ + \x02\x02\x02\u{406}\u{38d}\x03\x02\x02\x02\u{406}\u{38f}\x03\x02\x02\x02\ + \u{406}\u{399}\x03\x02\x02\x02\u{406}\u{3a3}\x03\x02\x02\x02\u{406}\u{3a9}\ + \x03\x02\x02\x02\u{406}\u{3ac}\x03\x02\x02\x02\u{406}\u{3b8}\x03\x02\x02\ + \x02\u{406}\u{3bc}\x03\x02\x02\x02\u{406}\u{3c0}\x03\x02\x02\x02\u{406}\ + \u{3c5}\x03\x02\x02\x02\u{406}\u{3c8}\x03\x02\x02\x02\u{406}\u{3d5}\x03\ + \x02\x02\x02\u{406}\u{3d8}\x03\x02\x02\x02\u{406}\u{3db}\x03\x02\x02\x02\ + \u{406}\u{3de}\x03\x02\x02\x02\u{406}\u{3e5}\x03\x02\x02\x02\u{406}\u{3f4}\ + \x03\x02\x02\x02\u{407}\x0d\x03\x02\x02\x02\u{408}\u{40a}\x05\x10\x09\x02\ + \u{409}\u{408}\x03\x02\x02\x02\u{409}\u{40a}\x03\x02\x02\x02\u{40a}\u{40b}\ + \x03\x02\x02\x02\u{40b}\u{40c}\x05\x20\x11\x02\u{40c}\x0f\x03\x02\x02\x02\ + \u{40d}\u{40f}\x07\u{11d}\x02\x02\u{40e}\u{410}\x07\u{cf}\x02\x02\u{40f}\ + \u{40e}\x03\x02\x02\x02\u{40f}\u{410}\x03\x02\x02\x02\u{410}\u{411}\x03\ + \x02\x02\x02\u{411}\u{416}\x05\x3a\x1e\x02\u{412}\u{413}\x07\x2c\x02\x02\ + \u{413}\u{415}\x05\x3a\x1e\x02\u{414}\u{412}\x03\x02\x02\x02\u{415}\u{418}\ + \x03\x02\x02\x02\u{416}\u{414}\x03\x02\x02\x02\u{416}\u{417}\x03\x02\x02\ + \x02\u{417}\x11\x03\x02\x02\x02\u{418}\u{416}\x03\x02\x02\x02\u{419}\u{41c}\ + \x05\x14\x0b\x02\u{41a}\u{41c}\x05\x16\x0c\x02\u{41b}\u{419}\x03\x02\x02\ + \x02\u{41b}\u{41a}\x03\x02\x02\x02\u{41c}\x13\x03\x02\x02\x02\u{41d}\u{41e}\ + \x05\u{d8}\x6d\x02\u{41e}\u{421}\x05\u{a2}\x52\x02\u{41f}\u{420}\x07\u{a9}\ + \x02\x02\u{420}\u{422}\x07\u{aa}\x02\x02\u{421}\u{41f}\x03\x02\x02\x02\u{421}\ + \u{422}\x03\x02\x02\x02\u{422}\u{425}\x03\x02\x02\x02\u{423}\u{424}\x07\ + \x2d\x02\x02\u{424}\u{426}\x05\u{92}\x4a\x02\u{425}\u{423}\x03\x02\x02\x02\ + \u{425}\u{426}\x03\x02\x02\x02\u{426}\u{429}\x03\x02\x02\x02\u{427}\u{428}\ + \x07\u{11d}\x02\x02\u{428}\u{42a}\x05\x18\x0d\x02\u{429}\u{427}\x03\x02\ + \x02\x02\u{429}\u{42a}\x03\x02\x02\x02\u{42a}\x15\x03\x02\x02\x02\u{42b}\ + \u{42c}\x07\u{8f}\x02\x02\u{42c}\u{42f}\x05\u{cc}\x67\x02\u{42d}\u{42e}\ + \x09\x06\x02\x02\u{42e}\u{430}\x07\u{ca}\x02\x02\u{42f}\u{42d}\x03\x02\x02\ + \x02\u{42f}\u{430}\x03\x02\x02\x02\u{430}\x17\x03\x02\x02\x02\u{431}\u{432}\ + \x07\x04\x02\x02\u{432}\u{433}\x05\x1a\x0e\x02\u{433}\u{434}\x07\x05\x02\ + \x02\u{434}\x19\x03\x02\x02\x02\u{435}\u{43a}\x05\x1c\x0f\x02\u{436}\u{437}\ + \x07\x2c\x02\x02\u{437}\u{439}\x05\x1c\x0f\x02\u{438}\u{436}\x03\x02\x02\ + \x02\u{439}\u{43c}\x03\x02\x02\x02\u{43a}\u{438}\x03\x02\x02\x02\u{43a}\ + \u{43b}\x03\x02\x02\x02\u{43b}\x1b\x03\x02\x02\x02\u{43c}\u{43a}\x03\x02\ + \x02\x02\u{43d}\u{43e}\x05\u{d8}\x6d\x02\u{43e}\u{43f}\x07\u{125}\x02\x02\ + \u{43f}\u{440}\x05\x1e\x10\x02\u{440}\x1d\x03\x02\x02\x02\u{441}\u{444}\ + \x07\x44\x02\x02\u{442}\u{444}\x05\x72\x3a\x02\u{443}\u{441}\x03\x02\x02\ + \x02\u{443}\u{442}\x03\x02\x02\x02\u{444}\x1f\x03\x02\x02\x02\u{445}\u{450}\ + \x05\x26\x14\x02\u{446}\u{447}\x07\u{b6}\x02\x02\u{447}\u{448}\x07\x24\x02\ + \x02\u{448}\u{44d}\x05\x2a\x16\x02\u{449}\u{44a}\x07\x2c\x02\x02\u{44a}\ + \u{44c}\x05\x2a\x16\x02\u{44b}\u{449}\x03\x02\x02\x02\u{44c}\u{44f}\x03\ + \x02\x02\x02\u{44d}\u{44b}\x03\x02\x02\x02\u{44d}\u{44e}\x03\x02\x02\x02\ + \u{44e}\u{451}\x03\x02\x02\x02\u{44f}\u{44d}\x03\x02\x02\x02\u{450}\u{446}\ + \x03\x02\x02\x02\u{450}\u{451}\x03\x02\x02\x02\u{451}\u{457}\x03\x02\x02\ + \x02\u{452}\u{453}\x07\u{af}\x02\x02\u{453}\u{455}\x05\x24\x13\x02\u{454}\ + \u{456}\x09\x07\x02\x02\u{455}\u{454}\x03\x02\x02\x02\u{455}\u{456}\x03\ + \x02\x02\x02\u{456}\u{458}\x03\x02\x02\x02\u{457}\u{452}\x03\x02\x02\x02\ + \u{457}\u{458}\x03\x02\x02\x02\u{458}\u{466}\x03\x02\x02\x02\u{459}\u{45a}\ + \x07\u{90}\x02\x02\u{45a}\u{467}\x05\x22\x12\x02\u{45b}\u{45c}\x07\x5d\x02\ + \x02\u{45c}\u{45e}\x09\x08\x02\x02\u{45d}\u{45f}\x05\x24\x13\x02\u{45e}\ + \u{45d}\x03\x02\x02\x02\u{45e}\u{45f}\x03\x02\x02\x02\u{45f}\u{460}\x03\ + \x02\x02\x02\u{460}\u{464}\x09\x07\x02\x02\u{461}\u{465}\x07\u{b3}\x02\x02\ + \u{462}\u{463}\x07\u{11d}\x02\x02\u{463}\u{465}\x07\u{f9}\x02\x02\u{464}\ + \u{461}\x03\x02\x02\x02\u{464}\u{462}\x03\x02\x02\x02\u{465}\u{467}\x03\ + \x02\x02\x02\u{466}\u{459}\x03\x02\x02\x02\u{466}\u{45b}\x03\x02\x02\x02\ + \u{466}\u{467}\x03\x02\x02\x02\u{467}\x21\x03\x02\x02\x02\u{468}\u{46b}\ + \x07\x17\x02\x02\u{469}\u{46b}\x05\x24\x13\x02\u{46a}\u{468}\x03\x02\x02\ + \x02\u{46a}\u{469}\x03\x02\x02\x02\u{46b}\x23\x03\x02\x02\x02\u{46c}\u{46d}\ + \x09\x09\x02\x02\u{46d}\x25\x03\x02\x02\x02\u{46e}\u{46f}\x08\x14\x01\x02\ + \u{46f}\u{470}\x05\x28\x15\x02\u{470}\u{47f}\x03\x02\x02\x02\u{471}\u{472}\ + \x0c\x04\x02\x02\u{472}\u{474}\x07\x79\x02\x02\u{473}\u{475}\x05\x3c\x1f\ + \x02\u{474}\u{473}\x03\x02\x02\x02\u{474}\u{475}\x03\x02\x02\x02\u{475}\ + \u{476}\x03\x02\x02\x02\u{476}\u{47e}\x05\x26\x14\x05\u{477}\u{478}\x0c\ + \x03\x02\x02\u{478}\u{47a}\x09\x0a\x02\x02\u{479}\u{47b}\x05\x3c\x1f\x02\ + \u{47a}\u{479}\x03\x02\x02\x02\u{47a}\u{47b}\x03\x02\x02\x02\u{47b}\u{47c}\ + \x03\x02\x02\x02\u{47c}\u{47e}\x05\x26\x14\x04\u{47d}\u{471}\x03\x02\x02\ + \x02\u{47d}\u{477}\x03\x02\x02\x02\u{47e}\u{481}\x03\x02\x02\x02\u{47f}\ + \u{47d}\x03\x02\x02\x02\u{47f}\u{480}\x03\x02\x02\x02\u{480}\x27\x03\x02\ + \x02\x02\u{481}\u{47f}\x03\x02\x02\x02\u{482}\u{493}\x05\x2c\x17\x02\u{483}\ + \u{484}\x07\u{f3}\x02\x02\u{484}\u{493}\x05\u{cc}\x67\x02\u{485}\u{486}\ + \x07\u{116}\x02\x02\u{486}\u{48b}\x05\x72\x3a\x02\u{487}\u{488}\x07\x2c\ + \x02\x02\u{488}\u{48a}\x05\x72\x3a\x02\u{489}\u{487}\x03\x02\x02\x02\u{48a}\ + \u{48d}\x03\x02\x02\x02\u{48b}\u{489}\x03\x02\x02\x02\u{48b}\u{48c}\x03\ + \x02\x02\x02\u{48c}\u{493}\x03\x02\x02\x02\u{48d}\u{48b}\x03\x02\x02\x02\ + \u{48e}\u{48f}\x07\x04\x02\x02\u{48f}\u{490}\x05\x20\x11\x02\u{490}\u{491}\ + \x07\x05\x02\x02\u{491}\u{493}\x03\x02\x02\x02\u{492}\u{482}\x03\x02\x02\ + \x02\u{492}\u{483}\x03\x02\x02\x02\u{492}\u{485}\x03\x02\x02\x02\u{492}\ + \u{48e}\x03\x02\x02\x02\u{493}\x29\x03\x02\x02\x02\u{494}\u{496}\x05\x72\ + \x3a\x02\u{495}\u{497}\x09\x0b\x02\x02\u{496}\u{495}\x03\x02\x02\x02\u{496}\ + \u{497}\x03\x02\x02\x02\u{497}\u{49a}\x03\x02\x02\x02\u{498}\u{499}\x07\ + \u{ac}\x02\x02\u{499}\u{49b}\x09\x0c\x02\x02\u{49a}\u{498}\x03\x02\x02\x02\ + \u{49a}\u{49b}\x03\x02\x02\x02\u{49b}\x2b\x03\x02\x02\x02\u{49c}\u{49e}\ + \x07\u{e7}\x02\x02\u{49d}\u{49f}\x05\x3c\x1f\x02\u{49e}\u{49d}\x03\x02\x02\ + \x02\u{49e}\u{49f}\x03\x02\x02\x02\u{49f}\u{4a0}\x03\x02\x02\x02\u{4a0}\ + \u{4aa}\x05\x2e\x18\x02\u{4a1}\u{4a2}\x07\x64\x02\x02\u{4a2}\u{4a7}\x05\ + \x40\x21\x02\u{4a3}\u{4a4}\x07\x2c\x02\x02\u{4a4}\u{4a6}\x05\x40\x21\x02\ + \u{4a5}\u{4a3}\x03\x02\x02\x02\u{4a6}\u{4a9}\x03\x02\x02\x02\u{4a7}\u{4a5}\ + \x03\x02\x02\x02\u{4a7}\u{4a8}\x03\x02\x02\x02\u{4a8}\u{4ab}\x03\x02\x02\ + \x02\u{4a9}\u{4a7}\x03\x02\x02\x02\u{4aa}\u{4a1}\x03\x02\x02\x02\u{4aa}\ + \u{4ab}\x03\x02\x02\x02\u{4ab}\u{4ae}\x03\x02\x02\x02\u{4ac}\u{4ad}\x07\ + \u{11b}\x02\x02\u{4ad}\u{4af}\x05\x74\x3b\x02\u{4ae}\u{4ac}\x03\x02\x02\ + \x02\u{4ae}\u{4af}\x03\x02\x02\x02\u{4af}\u{4b3}\x03\x02\x02\x02\u{4b0}\ + \u{4b1}\x07\x6c\x02\x02\u{4b1}\u{4b2}\x07\x24\x02\x02\u{4b2}\u{4b4}\x05\ + \x30\x19\x02\u{4b3}\u{4b0}\x03\x02\x02\x02\u{4b3}\u{4b4}\x03\x02\x02\x02\ + \u{4b4}\u{4b7}\x03\x02\x02\x02\u{4b5}\u{4b6}\x07\x6f\x02\x02\u{4b6}\u{4b8}\ + \x05\x74\x3b\x02\u{4b7}\u{4b5}\x03\x02\x02\x02\u{4b7}\u{4b8}\x03\x02\x02\ + \x02\u{4b8}\u{4c2}\x03\x02\x02\x02\u{4b9}\u{4ba}\x07\u{11c}\x02\x02\u{4ba}\ + \u{4bf}\x05\x36\x1c\x02\u{4bb}\u{4bc}\x07\x2c\x02\x02\u{4bc}\u{4be}\x05\ + \x36\x1c\x02\u{4bd}\u{4bb}\x03\x02\x02\x02\u{4be}\u{4c1}\x03\x02\x02\x02\ + \u{4bf}\u{4bd}\x03\x02\x02\x02\u{4bf}\u{4c0}\x03\x02\x02\x02\u{4c0}\u{4c3}\ + \x03\x02\x02\x02\u{4c1}\u{4bf}\x03\x02\x02\x02\u{4c2}\u{4b9}\x03\x02\x02\ + \x02\u{4c2}\u{4c3}\x03\x02\x02\x02\u{4c3}\x2d\x03\x02\x02\x02\u{4c4}\u{4c9}\ + \x05\x3e\x20\x02\u{4c5}\u{4c6}\x07\x2c\x02\x02\u{4c6}\u{4c8}\x05\x3e\x20\ + \x02\u{4c7}\u{4c5}\x03\x02\x02\x02\u{4c8}\u{4cb}\x03\x02\x02\x02\u{4c9}\ + \u{4c7}\x03\x02\x02\x02\u{4c9}\u{4ca}\x03\x02\x02\x02\u{4ca}\x2f\x03\x02\ + \x02\x02\u{4cb}\u{4c9}\x03\x02\x02\x02\u{4cc}\u{4ce}\x05\x3c\x1f\x02\u{4cd}\ + \u{4cc}\x03\x02\x02\x02\u{4cd}\u{4ce}\x03\x02\x02\x02\u{4ce}\u{4cf}\x03\ + \x02\x02\x02\u{4cf}\u{4d4}\x05\x32\x1a\x02\u{4d0}\u{4d1}\x07\x2c\x02\x02\ + \u{4d1}\u{4d3}\x05\x32\x1a\x02\u{4d2}\u{4d0}\x03\x02\x02\x02\u{4d3}\u{4d6}\ + \x03\x02\x02\x02\u{4d4}\u{4d2}\x03\x02\x02\x02\u{4d4}\u{4d5}\x03\x02\x02\ + \x02\u{4d5}\x31\x03\x02\x02\x02\u{4d6}\u{4d4}\x03\x02\x02\x02\u{4d7}\u{500}\ + \x05\x34\x1b\x02\u{4d8}\u{4d9}\x07\u{dd}\x02\x02\u{4d9}\u{4e2}\x07\x04\x02\ + \x02\u{4da}\u{4df}\x05\x72\x3a\x02\u{4db}\u{4dc}\x07\x2c\x02\x02\u{4dc}\ + \u{4de}\x05\x72\x3a\x02\u{4dd}\u{4db}\x03\x02\x02\x02\u{4de}\u{4e1}\x03\ + \x02\x02\x02\u{4df}\u{4dd}\x03\x02\x02\x02\u{4df}\u{4e0}\x03\x02\x02\x02\ + \u{4e0}\u{4e3}\x03\x02\x02\x02\u{4e1}\u{4df}\x03\x02\x02\x02\u{4e2}\u{4da}\ + \x03\x02\x02\x02\u{4e2}\u{4e3}\x03\x02\x02\x02\u{4e3}\u{4e4}\x03\x02\x02\ + \x02\u{4e4}\u{500}\x07\x05\x02\x02\u{4e5}\u{4e6}\x07\x36\x02\x02\u{4e6}\ + \u{4ef}\x07\x04\x02\x02\u{4e7}\u{4ec}\x05\x72\x3a\x02\u{4e8}\u{4e9}\x07\ + \x2c\x02\x02\u{4e9}\u{4eb}\x05\x72\x3a\x02\u{4ea}\u{4e8}\x03\x02\x02\x02\ + \u{4eb}\u{4ee}\x03\x02\x02\x02\u{4ec}\u{4ea}\x03\x02\x02\x02\u{4ec}\u{4ed}\ + \x03\x02\x02\x02\u{4ed}\u{4f0}\x03\x02\x02\x02\u{4ee}\u{4ec}\x03\x02\x02\ + \x02\u{4ef}\u{4e7}\x03\x02\x02\x02\u{4ef}\u{4f0}\x03\x02\x02\x02\u{4f0}\ + \u{4f1}\x03\x02\x02\x02\u{4f1}\u{500}\x07\x05\x02\x02\u{4f2}\u{4f3}\x07\ + \x6d\x02\x02\u{4f3}\u{4f4}\x07\u{eb}\x02\x02\u{4f4}\u{4f5}\x07\x04\x02\x02\ + \u{4f5}\u{4fa}\x05\x34\x1b\x02\u{4f6}\u{4f7}\x07\x2c\x02\x02\u{4f7}\u{4f9}\ + \x05\x34\x1b\x02\u{4f8}\u{4f6}\x03\x02\x02\x02\u{4f9}\u{4fc}\x03\x02\x02\ + \x02\u{4fa}\u{4f8}\x03\x02\x02\x02\u{4fa}\u{4fb}\x03\x02\x02\x02\u{4fb}\ + \u{4fd}\x03\x02\x02\x02\u{4fc}\u{4fa}\x03\x02\x02\x02\u{4fd}\u{4fe}\x07\ + \x05\x02\x02\u{4fe}\u{500}\x03\x02\x02\x02\u{4ff}\u{4d7}\x03\x02\x02\x02\ + \u{4ff}\u{4d8}\x03\x02\x02\x02\u{4ff}\u{4e5}\x03\x02\x02\x02\u{4ff}\u{4f2}\ + \x03\x02\x02\x02\u{500}\x33\x03\x02\x02\x02\u{501}\u{50a}\x07\x04\x02\x02\ + \u{502}\u{507}\x05\x72\x3a\x02\u{503}\u{504}\x07\x2c\x02\x02\u{504}\u{506}\ + \x05\x72\x3a\x02\u{505}\u{503}\x03\x02\x02\x02\u{506}\u{509}\x03\x02\x02\ + \x02\u{507}\u{505}\x03\x02\x02\x02\u{507}\u{508}\x03\x02\x02\x02\u{508}\ + \u{50b}\x03\x02\x02\x02\u{509}\u{507}\x03\x02\x02\x02\u{50a}\u{502}\x03\ + \x02\x02\x02\u{50a}\u{50b}\x03\x02\x02\x02\u{50b}\u{50c}\x03\x02\x02\x02\ + \u{50c}\u{50f}\x07\x05\x02\x02\u{50d}\u{50f}\x05\x72\x3a\x02\u{50e}\u{501}\ + \x03\x02\x02\x02\u{50e}\u{50d}\x03\x02\x02\x02\u{50f}\x35\x03\x02\x02\x02\ + \u{510}\u{511}\x05\u{d8}\x6d\x02\u{511}\u{512}\x07\x1d\x02\x02\u{512}\u{513}\ + \x07\x04\x02\x02\u{513}\u{514}\x05\x38\x1d\x02\u{514}\u{515}\x07\x05\x02\ + \x02\u{515}\x37\x03\x02\x02\x02\u{516}\u{518}\x05\u{d8}\x6d\x02\u{517}\u{516}\ + \x03\x02\x02\x02\u{517}\u{518}\x03\x02\x02\x02\u{518}\u{523}\x03\x02\x02\ + \x02\u{519}\u{51a}\x07\u{bc}\x02\x02\u{51a}\u{51b}\x07\x24\x02\x02\u{51b}\ + \u{520}\x05\x72\x3a\x02\u{51c}\u{51d}\x07\x2c\x02\x02\u{51d}\u{51f}\x05\ + \x72\x3a\x02\u{51e}\u{51c}\x03\x02\x02\x02\u{51f}\u{522}\x03\x02\x02\x02\ + \u{520}\u{51e}\x03\x02\x02\x02\u{520}\u{521}\x03\x02\x02\x02\u{521}\u{524}\ + \x03\x02\x02\x02\u{522}\u{520}\x03\x02\x02\x02\u{523}\u{519}\x03\x02\x02\ + \x02\u{523}\u{524}\x03\x02\x02\x02\u{524}\u{52f}\x03\x02\x02\x02\u{525}\ + \u{526}\x07\u{b6}\x02\x02\u{526}\u{527}\x07\x24\x02\x02\u{527}\u{52c}\x05\ + \x2a\x16\x02\u{528}\u{529}\x07\x2c\x02\x02\u{529}\u{52b}\x05\x2a\x16\x02\ + \u{52a}\u{528}\x03\x02\x02\x02\u{52b}\u{52e}\x03\x02\x02\x02\u{52c}\u{52a}\ + \x03\x02\x02\x02\u{52c}\u{52d}\x03\x02\x02\x02\u{52d}\u{530}\x03\x02\x02\ + \x02\u{52e}\u{52c}\x03\x02\x02\x02\u{52f}\u{525}\x03\x02\x02\x02\u{52f}\ + \u{530}\x03\x02\x02\x02\u{530}\u{532}\x03\x02\x02\x02\u{531}\u{533}\x05\ + \u{b0}\x59\x02\u{532}\u{531}\x03\x02\x02\x02\u{532}\u{533}\x03\x02\x02\x02\ + \u{533}\x39\x03\x02\x02\x02\u{534}\u{536}\x05\u{d8}\x6d\x02\u{535}\u{537}\ + \x05\x60\x31\x02\u{536}\u{535}\x03\x02\x02\x02\u{536}\u{537}\x03\x02\x02\ + \x02\u{537}\u{538}\x03\x02\x02\x02\u{538}\u{539}\x07\x1d\x02\x02\u{539}\ + \u{53a}\x07\x04\x02\x02\u{53a}\u{53b}\x05\x0e\x08\x02\u{53b}\u{53c}\x07\ + \x05\x02\x02\u{53c}\x3b\x03\x02\x02\x02\u{53d}\u{53e}\x09\x0d\x02\x02\u{53e}\ + \x3d\x03\x02\x02\x02\u{53f}\u{544}\x05\x72\x3a\x02\u{540}\u{542}\x07\x1d\ + \x02\x02\u{541}\u{540}\x03\x02\x02\x02\u{541}\u{542}\x03\x02\x02\x02\u{542}\ + \u{543}\x03\x02\x02\x02\u{543}\u{545}\x05\u{d8}\x6d\x02\u{544}\u{541}\x03\ + \x02\x02\x02\u{544}\u{545}\x03\x02\x02\x02\u{545}\u{54f}\x03\x02\x02\x02\ + \u{546}\u{547}\x05\x7a\x3e\x02\u{547}\u{548}\x07\x03\x02\x02\u{548}\u{54b}\ + \x07\u{12d}\x02\x02\u{549}\u{54a}\x07\x1d\x02\x02\u{54a}\u{54c}\x05\x60\ + \x31\x02\u{54b}\u{549}\x03\x02\x02\x02\u{54b}\u{54c}\x03\x02\x02\x02\u{54c}\ + \u{54f}\x03\x02\x02\x02\u{54d}\u{54f}\x07\u{12d}\x02\x02\u{54e}\u{53f}\x03\ + \x02\x02\x02\u{54e}\u{546}\x03\x02\x02\x02\u{54e}\u{54d}\x03\x02\x02\x02\ + \u{54f}\x3f\x03\x02\x02\x02\u{550}\u{551}\x08\x21\x01\x02\u{551}\u{552}\ + \x05\x46\x24\x02\u{552}\u{565}\x03\x02\x02\x02\u{553}\u{561}\x0c\x04\x02\ + \x02\u{554}\u{555}\x07\x35\x02\x02\u{555}\u{556}\x07\u{80}\x02\x02\u{556}\ + \u{562}\x05\x46\x24\x02\u{557}\u{558}\x05\x42\x22\x02\u{558}\u{559}\x07\ + \u{80}\x02\x02\u{559}\u{55a}\x05\x40\x21\x02\u{55a}\u{55b}\x05\x44\x23\x02\ + \u{55b}\u{562}\x03\x02\x02\x02\u{55c}\u{55d}\x07\u{a0}\x02\x02\u{55d}\u{55e}\ + \x05\x42\x22\x02\u{55e}\u{55f}\x07\u{80}\x02\x02\u{55f}\u{560}\x05\x46\x24\ + \x02\u{560}\u{562}\x03\x02\x02\x02\u{561}\u{554}\x03\x02\x02\x02\u{561}\ + \u{557}\x03\x02\x02\x02\u{561}\u{55c}\x03\x02\x02\x02\u{562}\u{564}\x03\ + \x02\x02\x02\u{563}\u{553}\x03\x02\x02\x02\u{564}\u{567}\x03\x02\x02\x02\ + \u{565}\u{563}\x03\x02\x02\x02\u{565}\u{566}\x03\x02\x02\x02\u{566}\x41\ + \x03\x02\x02\x02\u{567}\u{565}\x03\x02\x02\x02\u{568}\u{56a}\x07\x76\x02\ + \x02\u{569}\u{568}\x03\x02\x02\x02\u{569}\u{56a}\x03\x02\x02\x02\u{56a}\ + \u{578}\x03\x02\x02\x02\u{56b}\u{56d}\x07\u{8d}\x02\x02\u{56c}\u{56e}\x07\ + \u{b8}\x02\x02\u{56d}\u{56c}\x03\x02\x02\x02\u{56d}\u{56e}\x03\x02\x02\x02\ + \u{56e}\u{578}\x03\x02\x02\x02\u{56f}\u{571}\x07\u{d9}\x02\x02\u{570}\u{572}\ + \x07\u{b8}\x02\x02\u{571}\u{570}\x03\x02\x02\x02\u{571}\u{572}\x03\x02\x02\ + \x02\u{572}\u{578}\x03\x02\x02\x02\u{573}\u{575}\x07\x65\x02\x02\u{574}\ + \u{576}\x07\u{b8}\x02\x02\u{575}\u{574}\x03\x02\x02\x02\u{575}\u{576}\x03\ + \x02\x02\x02\u{576}\u{578}\x03\x02\x02\x02\u{577}\u{569}\x03\x02\x02\x02\ + \u{577}\u{56b}\x03\x02\x02\x02\u{577}\u{56f}\x03\x02\x02\x02\u{577}\u{573}\ + \x03\x02\x02\x02\u{578}\x43\x03\x02\x02\x02\u{579}\u{57a}\x07\u{b1}\x02\ + \x02\u{57a}\u{588}\x05\x74\x3b\x02\u{57b}\u{57c}\x07\u{110}\x02\x02\u{57c}\ + \u{57d}\x07\x04\x02\x02\u{57d}\u{582}\x05\u{d8}\x6d\x02\u{57e}\u{57f}\x07\ + \x2c\x02\x02\u{57f}\u{581}\x05\u{d8}\x6d\x02\u{580}\u{57e}\x03\x02\x02\x02\ + \u{581}\u{584}\x03\x02\x02\x02\u{582}\u{580}\x03\x02\x02\x02\u{582}\u{583}\ + \x03\x02\x02\x02\u{583}\u{585}\x03\x02\x02\x02\u{584}\u{582}\x03\x02\x02\ + \x02\u{585}\u{586}\x07\x05\x02\x02\u{586}\u{588}\x03\x02\x02\x02\u{587}\ + \u{579}\x03\x02\x02\x02\u{587}\u{57b}\x03\x02\x02\x02\u{588}\x45\x03\x02\ + \x02\x02\u{589}\u{590}\x05\x50\x29\x02\u{58a}\u{58b}\x07\u{f5}\x02\x02\u{58b}\ + \u{58c}\x05\x48\x25\x02\u{58c}\u{58d}\x07\x04\x02\x02\u{58d}\u{58e}\x05\ + \x72\x3a\x02\u{58e}\u{58f}\x07\x05\x02\x02\u{58f}\u{591}\x03\x02\x02\x02\ + \u{590}\u{58a}\x03\x02\x02\x02\u{590}\u{591}\x03\x02\x02\x02\u{591}\x47\ + \x03\x02\x02\x02\u{592}\u{593}\x09\x0e\x02\x02\u{593}\x49\x03\x02\x02\x02\ + \u{594}\u{595}\x09\x0f\x02\x02\u{595}\x4b\x03\x02\x02\x02\u{596}\u{59d}\ + \x07\x54\x02\x02\u{597}\u{599}\x07\u{101}\x02\x02\u{598}\u{59a}\x05\u{92}\ + \x4a\x02\u{599}\u{598}\x03\x02\x02\x02\u{599}\u{59a}\x03\x02\x02\x02\u{59a}\ + \u{59b}\x03\x02\x02\x02\u{59b}\u{59d}\x05\x4e\x28\x02\u{59c}\u{596}\x03\ + \x02\x02\x02\u{59c}\u{597}\x03\x02\x02\x02\u{59d}\x4d\x03\x02\x02\x02\u{59e}\ + \u{59f}\x07\u{11d}\x02\x02\u{59f}\u{5a3}\x07\x32\x02\x02\u{5a0}\u{5a1}\x07\ + \u{11f}\x02\x02\u{5a1}\u{5a3}\x07\x32\x02\x02\u{5a2}\u{59e}\x03\x02\x02\ + \x02\u{5a2}\u{5a0}\x03\x02\x02\x02\u{5a3}\x4f\x03\x02\x02\x02\u{5a4}\u{5f7}\ + \x05\x5e\x30\x02\u{5a5}\u{5a6}\x07\u{9a}\x02\x02\u{5a6}\u{5b1}\x07\x04\x02\ + \x02\u{5a7}\u{5a8}\x07\u{bc}\x02\x02\u{5a8}\u{5a9}\x07\x24\x02\x02\u{5a9}\ + \u{5ae}\x05\x72\x3a\x02\u{5aa}\u{5ab}\x07\x2c\x02\x02\u{5ab}\u{5ad}\x05\ + \x72\x3a\x02\u{5ac}\u{5aa}\x03\x02\x02\x02\u{5ad}\u{5b0}\x03\x02\x02\x02\ + \u{5ae}\u{5ac}\x03\x02\x02\x02\u{5ae}\u{5af}\x03\x02\x02\x02\u{5af}\u{5b2}\ + \x03\x02\x02\x02\u{5b0}\u{5ae}\x03\x02\x02\x02\u{5b1}\u{5a7}\x03\x02\x02\ + \x02\u{5b1}\u{5b2}\x03\x02\x02\x02\u{5b2}\u{5bd}\x03\x02\x02\x02\u{5b3}\ + \u{5b4}\x07\u{b6}\x02\x02\u{5b4}\u{5b5}\x07\x24\x02\x02\u{5b5}\u{5ba}\x05\ + \x2a\x16\x02\u{5b6}\u{5b7}\x07\x2c\x02\x02\u{5b7}\u{5b9}\x05\x2a\x16\x02\ + \u{5b8}\u{5b6}\x03\x02\x02\x02\u{5b9}\u{5bc}\x03\x02\x02\x02\u{5ba}\u{5b8}\ + \x03\x02\x02\x02\u{5ba}\u{5bb}\x03\x02\x02\x02\u{5bb}\u{5be}\x03\x02\x02\ + \x02\u{5bc}\u{5ba}\x03\x02\x02\x02\u{5bd}\u{5b3}\x03\x02\x02\x02\u{5bd}\ + \u{5be}\x03\x02\x02\x02\u{5be}\u{5c8}\x03\x02\x02\x02\u{5bf}\u{5c0}\x07\ + \u{9c}\x02\x02\u{5c0}\u{5c5}\x05\x52\x2a\x02\u{5c1}\u{5c2}\x07\x2c\x02\x02\ + \u{5c2}\u{5c4}\x05\x52\x2a\x02\u{5c3}\u{5c1}\x03\x02\x02\x02\u{5c4}\u{5c7}\ + \x03\x02\x02\x02\u{5c5}\u{5c3}\x03\x02\x02\x02\u{5c5}\u{5c6}\x03\x02\x02\ + \x02\u{5c6}\u{5c9}\x03\x02\x02\x02\u{5c7}\u{5c5}\x03\x02\x02\x02\u{5c8}\ + \u{5bf}\x03\x02\x02\x02\u{5c8}\u{5c9}\x03\x02\x02\x02\u{5c9}\u{5cb}\x03\ + \x02\x02\x02\u{5ca}\u{5cc}\x05\x54\x2b\x02\u{5cb}\u{5ca}\x03\x02\x02\x02\ + \u{5cb}\u{5cc}\x03\x02\x02\x02\u{5cc}\u{5d0}\x03\x02\x02\x02\u{5cd}\u{5ce}\ + \x07\x16\x02\x02\u{5ce}\u{5cf}\x07\u{97}\x02\x02\u{5cf}\u{5d1}\x05\x58\x2d\ + \x02\u{5d0}\u{5cd}\x03\x02\x02\x02\u{5d0}\u{5d1}\x03\x02\x02\x02\u{5d1}\ + \u{5d3}\x03\x02\x02\x02\u{5d2}\u{5d4}\x09\x10\x02\x02\u{5d3}\u{5d2}\x03\ + \x02\x02\x02\u{5d3}\u{5d4}\x03\x02\x02\x02\u{5d4}\u{5d5}\x03\x02\x02\x02\ + \u{5d5}\u{5d6}\x07\u{c1}\x02\x02\u{5d6}\u{5d7}\x07\x04\x02\x02\u{5d7}\u{5d8}\ + \x05\u{b6}\x5c\x02\u{5d8}\u{5e2}\x07\x05\x02\x02\u{5d9}\u{5da}\x07\u{f0}\ + \x02\x02\u{5da}\u{5df}\x05\x5a\x2e\x02\u{5db}\u{5dc}\x07\x2c\x02\x02\u{5dc}\ + \u{5de}\x05\x5a\x2e\x02\u{5dd}\u{5db}\x03\x02\x02\x02\u{5de}\u{5e1}\x03\ + \x02\x02\x02\u{5df}\u{5dd}\x03\x02\x02\x02\u{5df}\u{5e0}\x03\x02\x02\x02\ + \u{5e0}\u{5e3}\x03\x02\x02\x02\u{5e1}\u{5df}\x03\x02\x02\x02\u{5e2}\u{5d9}\ + \x03\x02\x02\x02\u{5e2}\u{5e3}\x03\x02\x02\x02\u{5e3}\u{5e4}\x03\x02\x02\ + \x02\u{5e4}\u{5e5}\x07\x45\x02\x02\u{5e5}\u{5ea}\x05\x5c\x2f\x02\u{5e6}\ + \u{5e7}\x07\x2c\x02\x02\u{5e7}\u{5e9}\x05\x5c\x2f\x02\u{5e8}\u{5e6}\x03\ + \x02\x02\x02\u{5e9}\u{5ec}\x03\x02\x02\x02\u{5ea}\u{5e8}\x03\x02\x02\x02\ + \u{5ea}\u{5eb}\x03\x02\x02\x02\u{5eb}\u{5ed}\x03\x02\x02\x02\u{5ec}\u{5ea}\ + \x03\x02\x02\x02\u{5ed}\u{5f5}\x07\x05\x02\x02\u{5ee}\u{5f0}\x07\x1d\x02\ + \x02\u{5ef}\u{5ee}\x03\x02\x02\x02\u{5ef}\u{5f0}\x03\x02\x02\x02\u{5f0}\ + \u{5f1}\x03\x02\x02\x02\u{5f1}\u{5f3}\x05\u{d8}\x6d\x02\u{5f2}\u{5f4}\x05\ + \x60\x31\x02\u{5f3}\u{5f2}\x03\x02\x02\x02\u{5f3}\u{5f4}\x03\x02\x02\x02\ + \u{5f4}\u{5f6}\x03\x02\x02\x02\u{5f5}\u{5ef}\x03\x02\x02\x02\u{5f5}\u{5f6}\ + \x03\x02\x02\x02\u{5f6}\u{5f8}\x03\x02\x02\x02\u{5f7}\u{5a5}\x03\x02\x02\ + \x02\u{5f7}\u{5f8}\x03\x02\x02\x02\u{5f8}\x51\x03\x02\x02\x02\u{5f9}\u{5fa}\ + \x05\x72\x3a\x02\u{5fa}\u{5fb}\x07\x1d\x02\x02\u{5fb}\u{5fc}\x05\u{d8}\x6d\ + \x02\u{5fc}\x53\x03\x02\x02\x02\u{5fd}\u{5fe}\x07\u{b2}\x02\x02\u{5fe}\u{5ff}\ + \x07\u{de}\x02\x02\u{5ff}\u{600}\x07\u{c2}\x02\x02\u{600}\u{609}\x07\u{97}\ + \x02\x02\u{601}\u{602}\x07\x17\x02\x02\u{602}\u{603}\x07\u{df}\x02\x02\u{603}\ + \u{604}\x07\u{c2}\x02\x02\u{604}\u{606}\x07\u{97}\x02\x02\u{605}\u{607}\ + \x05\x56\x2c\x02\u{606}\u{605}\x03\x02\x02\x02\u{606}\u{607}\x03\x02\x02\ + \x02\u{607}\u{609}\x03\x02\x02\x02\u{608}\u{5fd}\x03\x02\x02\x02\u{608}\ + \u{601}\x03\x02\x02\x02\u{609}\x55\x03\x02\x02\x02\u{60a}\u{60b}\x07\u{ec}\ + \x02\x02\u{60b}\u{60c}\x07\x51\x02\x02\u{60c}\u{614}\x07\u{99}\x02\x02\u{60d}\ + \u{60e}\x07\u{b0}\x02\x02\u{60e}\u{60f}\x07\x51\x02\x02\u{60f}\u{614}\x07\ + \u{99}\x02\x02\u{610}\u{611}\x07\u{11d}\x02\x02\u{611}\u{612}\x07\u{10b}\ + \x02\x02\u{612}\u{614}\x07\u{df}\x02\x02\u{613}\u{60a}\x03\x02\x02\x02\u{613}\ + \u{60d}\x03\x02\x02\x02\u{613}\u{610}\x03\x02\x02\x02\u{614}\x57\x03\x02\ + \x02\x02\u{615}\u{616}\x07\x06\x02\x02\u{616}\u{617}\x07\u{fc}\x02\x02\u{617}\ + \u{618}\x07\u{a1}\x02\x02\u{618}\u{629}\x07\u{de}\x02\x02\u{619}\u{61a}\ + \x07\x06\x02\x02\u{61a}\u{61b}\x07\u{bf}\x02\x02\u{61b}\u{61c}\x07\u{8a}\ + \x02\x02\u{61c}\u{629}\x07\u{de}\x02\x02\u{61d}\u{61e}\x07\x06\x02\x02\u{61e}\ + \u{61f}\x07\u{fc}\x02\x02\u{61f}\u{620}\x07\x60\x02\x02\u{620}\u{629}\x05\ + \u{d8}\x6d\x02\u{621}\u{622}\x07\x06\x02\x02\u{622}\u{623}\x07\u{fc}\x02\ + \x02\u{623}\u{624}\x07\u{8a}\x02\x02\u{624}\u{629}\x05\u{d8}\x6d\x02\u{625}\ + \u{626}\x07\x06\x02\x02\u{626}\u{627}\x07\u{fc}\x02\x02\u{627}\u{629}\x05\ + \u{d8}\x6d\x02\u{628}\u{615}\x03\x02\x02\x02\u{628}\u{619}\x03\x02\x02\x02\ + \u{628}\u{61d}\x03\x02\x02\x02\u{628}\u{621}\x03\x02\x02\x02\u{628}\u{625}\ + \x03\x02\x02\x02\u{629}\x59\x03\x02\x02\x02\u{62a}\u{62b}\x05\u{d8}\x6d\ + \x02\u{62b}\u{62c}\x07\u{125}\x02\x02\u{62c}\u{62d}\x07\x04\x02\x02\u{62d}\ + \u{632}\x05\u{d8}\x6d\x02\u{62e}\u{62f}\x07\x2c\x02\x02\u{62f}\u{631}\x05\ + \u{d8}\x6d\x02\u{630}\u{62e}\x03\x02\x02\x02\u{631}\u{634}\x03\x02\x02\x02\ + \u{632}\u{630}\x03\x02\x02\x02\u{632}\u{633}\x03\x02\x02\x02\u{633}\u{635}\ + \x03\x02\x02\x02\u{634}\u{632}\x03\x02\x02\x02\u{635}\u{636}\x07\x05\x02\ + \x02\u{636}\x5b\x03\x02\x02\x02\u{637}\u{638}\x05\u{d8}\x6d\x02\u{638}\u{639}\ + \x07\x1d\x02\x02\u{639}\u{63a}\x05\x72\x3a\x02\u{63a}\x5d\x03\x02\x02\x02\ + \u{63b}\u{643}\x05\x62\x32\x02\u{63c}\u{63e}\x07\x1d\x02\x02\u{63d}\u{63c}\ + \x03\x02\x02\x02\u{63d}\u{63e}\x03\x02\x02\x02\u{63e}\u{63f}\x03\x02\x02\ + \x02\u{63f}\u{641}\x05\u{d8}\x6d\x02\u{640}\u{642}\x05\x60\x31\x02\u{641}\ + \u{640}\x03\x02\x02\x02\u{641}\u{642}\x03\x02\x02\x02\u{642}\u{644}\x03\ + \x02\x02\x02\u{643}\u{63d}\x03\x02\x02\x02\u{643}\u{644}\x03\x02\x02\x02\ + \u{644}\x5f\x03\x02\x02\x02\u{645}\u{646}\x07\x04\x02\x02\u{646}\u{64b}\ + \x05\u{d8}\x6d\x02\u{647}\u{648}\x07\x2c\x02\x02\u{648}\u{64a}\x05\u{d8}\ + \x6d\x02\u{649}\u{647}\x03\x02\x02\x02\u{64a}\u{64d}\x03\x02\x02\x02\u{64b}\ + \u{649}\x03\x02\x02\x02\u{64b}\u{64c}\x03\x02\x02\x02\u{64c}\u{64e}\x03\ + \x02\x02\x02\u{64d}\u{64b}\x03\x02\x02\x02\u{64e}\u{64f}\x07\x05\x02\x02\ + \u{64f}\x61\x03\x02\x02\x02\u{650}\u{652}\x05\u{cc}\x67\x02\u{651}\u{653}\ + \x05\u{ce}\x68\x02\u{652}\u{651}\x03\x02\x02\x02\u{652}\u{653}\x03\x02\x02\ + \x02\u{653}\u{676}\x03\x02\x02\x02\u{654}\u{655}\x07\x04\x02\x02\u{655}\ + \u{656}\x05\x0e\x08\x02\u{656}\u{657}\x07\x05\x02\x02\u{657}\u{676}\x03\ + \x02\x02\x02\u{658}\u{659}\x07\u{10c}\x02\x02\u{659}\u{65a}\x07\x04\x02\ + \x02\u{65a}\u{65f}\x05\x72\x3a\x02\u{65b}\u{65c}\x07\x2c\x02\x02\u{65c}\ + \u{65e}\x05\x72\x3a\x02\u{65d}\u{65b}\x03\x02\x02\x02\u{65e}\u{661}\x03\ + \x02\x02\x02\u{65f}\u{65d}\x03\x02\x02\x02\u{65f}\u{660}\x03\x02\x02\x02\ + \u{660}\u{662}\x03\x02\x02\x02\u{661}\u{65f}\x03\x02\x02\x02\u{662}\u{665}\ + \x07\x05\x02\x02\u{663}\u{664}\x07\u{11d}\x02\x02\u{664}\u{666}\x07\u{b7}\ + \x02\x02\u{665}\u{663}\x03\x02\x02\x02\u{665}\u{666}\x03\x02\x02\x02\u{666}\ + \u{676}\x03\x02\x02\x02\u{667}\u{668}\x07\u{8b}\x02\x02\u{668}\u{669}\x07\ + \x04\x02\x02\u{669}\u{66a}\x05\x0e\x08\x02\u{66a}\u{66b}\x07\x05\x02\x02\ + \u{66b}\u{676}\x03\x02\x02\x02\u{66c}\u{66d}\x07\u{f3}\x02\x02\u{66d}\u{66e}\ + \x07\x04\x02\x02\u{66e}\u{66f}\x05\x64\x33\x02\u{66f}\u{670}\x07\x05\x02\ + \x02\u{670}\u{676}\x03\x02\x02\x02\u{671}\u{672}\x07\x04\x02\x02\u{672}\ + \u{673}\x05\x40\x21\x02\u{673}\u{674}\x07\x05\x02\x02\u{674}\u{676}\x03\ + \x02\x02\x02\u{675}\u{650}\x03\x02\x02\x02\u{675}\u{654}\x03\x02\x02\x02\ + \u{675}\u{658}\x03\x02\x02\x02\u{675}\u{667}\x03\x02\x02\x02\u{675}\u{66c}\ + \x03\x02\x02\x02\u{675}\u{671}\x03\x02\x02\x02\u{676}\x63\x03\x02\x02\x02\ + \u{677}\u{678}\x05\u{cc}\x67\x02\u{678}\u{681}\x07\x04\x02\x02\u{679}\u{67e}\ + \x05\x66\x34\x02\u{67a}\u{67b}\x07\x2c\x02\x02\u{67b}\u{67d}\x05\x66\x34\ + \x02\u{67c}\u{67a}\x03\x02\x02\x02\u{67d}\u{680}\x03\x02\x02\x02\u{67e}\ + \u{67c}\x03\x02\x02\x02\u{67e}\u{67f}\x03\x02\x02\x02\u{67f}\u{682}\x03\ + \x02\x02\x02\u{680}\u{67e}\x03\x02\x02\x02\u{681}\u{679}\x03\x02\x02\x02\ + \u{681}\u{682}\x03\x02\x02\x02\u{682}\u{68c}\x03\x02\x02\x02\u{683}\u{684}\ + \x07\x33\x02\x02\u{684}\u{689}\x05\x70\x39\x02\u{685}\u{686}\x07\x2c\x02\ + \x02\u{686}\u{688}\x05\x70\x39\x02\u{687}\u{685}\x03\x02\x02\x02\u{688}\ + \u{68b}\x03\x02\x02\x02\u{689}\u{687}\x03\x02\x02\x02\u{689}\u{68a}\x03\ + \x02\x02\x02\u{68a}\u{68d}\x03\x02\x02\x02\u{68b}\u{689}\x03\x02\x02\x02\ + \u{68c}\u{683}\x03\x02\x02\x02\u{68c}\u{68d}\x03\x02\x02\x02\u{68d}\u{68e}\ + \x03\x02\x02\x02\u{68e}\u{68f}\x07\x05\x02\x02\u{68f}\x65\x03\x02\x02\x02\ + \u{690}\u{691}\x05\u{d8}\x6d\x02\u{691}\u{692}\x07\x07\x02\x02\u{692}\u{694}\ + \x03\x02\x02\x02\u{693}\u{690}\x03\x02\x02\x02\u{693}\u{694}\x03\x02\x02\ + \x02\u{694}\u{698}\x03\x02\x02\x02\u{695}\u{699}\x05\x68\x35\x02\u{696}\ + \u{699}\x05\x6c\x37\x02\u{697}\u{699}\x05\x72\x3a\x02\u{698}\u{695}\x03\ + \x02\x02\x02\u{698}\u{696}\x03\x02\x02\x02\u{698}\u{697}\x03\x02\x02\x02\ + \u{699}\x67\x03\x02\x02\x02\u{69a}\u{6ac}\x05\x6a\x36\x02\u{69b}\u{69c}\ + \x07\u{bc}\x02\x02\u{69c}\u{6aa}\x07\x24\x02\x02\u{69d}\u{6a6}\x07\x04\x02\ + \x02\u{69e}\u{6a3}\x05\x72\x3a\x02\u{69f}\u{6a0}\x07\x2c\x02\x02\u{6a0}\ + \u{6a2}\x05\x72\x3a\x02\u{6a1}\u{69f}\x03\x02\x02\x02\u{6a2}\u{6a5}\x03\ + \x02\x02\x02\u{6a3}\u{6a1}\x03\x02\x02\x02\u{6a3}\u{6a4}\x03\x02\x02\x02\ + \u{6a4}\u{6a7}\x03\x02\x02\x02\u{6a5}\u{6a3}\x03\x02\x02\x02\u{6a6}\u{69e}\ + \x03\x02\x02\x02\u{6a6}\u{6a7}\x03\x02\x02\x02\u{6a7}\u{6a8}\x03\x02\x02\ + \x02\u{6a8}\u{6ab}\x07\x05\x02\x02\u{6a9}\u{6ab}\x05\x72\x3a\x02\u{6aa}\ + \u{69d}\x03\x02\x02\x02\u{6aa}\u{6a9}\x03\x02\x02\x02\u{6ab}\u{6ad}\x03\ + \x02\x02\x02\u{6ac}\u{69b}\x03\x02\x02\x02\u{6ac}\u{6ad}\x03\x02\x02\x02\ + \u{6ad}\u{6b4}\x03\x02\x02\x02\u{6ae}\u{6af}\x07\u{cb}\x02\x02\u{6af}\u{6b0}\ + \x07\u{11a}\x02\x02\u{6b0}\u{6b5}\x07\x51\x02\x02\u{6b1}\u{6b2}\x07\u{87}\ + \x02\x02\u{6b2}\u{6b3}\x07\u{11a}\x02\x02\u{6b3}\u{6b5}\x07\x51\x02\x02\ + \u{6b4}\u{6ae}\x03\x02\x02\x02\u{6b4}\u{6b1}\x03\x02\x02\x02\u{6b4}\u{6b5}\ + \x03\x02\x02\x02\u{6b5}\u{6c6}\x03\x02\x02\x02\u{6b6}\u{6b7}\x07\u{b6}\x02\ + \x02\u{6b7}\u{6c4}\x07\x24\x02\x02\u{6b8}\u{6b9}\x07\x04\x02\x02\u{6b9}\ + \u{6be}\x05\x2a\x16\x02\u{6ba}\u{6bb}\x07\x2c\x02\x02\u{6bb}\u{6bd}\x05\ + \x2a\x16\x02\u{6bc}\u{6ba}\x03\x02\x02\x02\u{6bd}\u{6c0}\x03\x02\x02\x02\ + \u{6be}\u{6bc}\x03\x02\x02\x02\u{6be}\u{6bf}\x03\x02\x02\x02\u{6bf}\u{6c1}\ + \x03\x02\x02\x02\u{6c0}\u{6be}\x03\x02\x02\x02\u{6c1}\u{6c2}\x07\x05\x02\ + \x02\u{6c2}\u{6c5}\x03\x02\x02\x02\u{6c3}\u{6c5}\x05\x2a\x16\x02\u{6c4}\ + \u{6b8}\x03\x02\x02\x02\u{6c4}\u{6c3}\x03\x02\x02\x02\u{6c5}\u{6c7}\x03\ + \x02\x02\x02\u{6c6}\u{6b6}\x03\x02\x02\x02\u{6c6}\u{6c7}\x03\x02\x02\x02\ + \u{6c7}\x69\x03\x02\x02\x02\u{6c8}\u{6c9}\x07\u{f3}\x02\x02\u{6c9}\u{6ca}\ + \x07\x04\x02\x02\u{6ca}\u{6cb}\x05\u{cc}\x67\x02\u{6cb}\u{6d3}\x07\x05\x02\ + \x02\u{6cc}\u{6ce}\x07\x1d\x02\x02\u{6cd}\u{6cc}\x03\x02\x02\x02\u{6cd}\ + \u{6ce}\x03\x02\x02\x02\u{6ce}\u{6cf}\x03\x02\x02\x02\u{6cf}\u{6d1}\x05\ + \u{d8}\x6d\x02\u{6d0}\u{6d2}\x05\x60\x31\x02\u{6d1}\u{6d0}\x03\x02\x02\x02\ + \u{6d1}\u{6d2}\x03\x02\x02\x02\u{6d2}\u{6d4}\x03\x02\x02\x02\u{6d3}\u{6cd}\ + \x03\x02\x02\x02\u{6d3}\u{6d4}\x03\x02\x02\x02\u{6d4}\u{6e3}\x03\x02\x02\ + \x02\u{6d5}\u{6d6}\x07\u{f3}\x02\x02\u{6d6}\u{6d7}\x07\x04\x02\x02\u{6d7}\ + \u{6d8}\x05\x0e\x08\x02\u{6d8}\u{6e0}\x07\x05\x02\x02\u{6d9}\u{6db}\x07\ + \x1d\x02\x02\u{6da}\u{6d9}\x03\x02\x02\x02\u{6da}\u{6db}\x03\x02\x02\x02\ + \u{6db}\u{6dc}\x03\x02\x02\x02\u{6dc}\u{6de}\x05\u{d8}\x6d\x02\u{6dd}\u{6df}\ + \x05\x60\x31\x02\u{6de}\u{6dd}\x03\x02\x02\x02\u{6de}\u{6df}\x03\x02\x02\ + \x02\u{6df}\u{6e1}\x03\x02\x02\x02\u{6e0}\u{6da}\x03\x02\x02\x02\u{6e0}\ + \u{6e1}\x03\x02\x02\x02\u{6e1}\u{6e3}\x03\x02\x02\x02\u{6e2}\u{6c8}\x03\ + \x02\x02\x02\u{6e2}\u{6d5}\x03\x02\x02\x02\u{6e3}\x6b\x03\x02\x02\x02\u{6e4}\ + \u{6e5}\x07\x4b\x02\x02\u{6e5}\u{6e6}\x07\x04\x02\x02\u{6e6}\u{6eb}\x05\ + \x6e\x38\x02\u{6e7}\u{6e8}\x07\x2c\x02\x02\u{6e8}\u{6ea}\x05\x6e\x38\x02\ + \u{6e9}\u{6e7}\x03\x02\x02\x02\u{6ea}\u{6ed}\x03\x02\x02\x02\u{6eb}\u{6e9}\ + \x03\x02\x02\x02\u{6eb}\u{6ec}\x03\x02\x02\x02\u{6ec}\u{6ee}\x03\x02\x02\ + \x02\u{6ed}\u{6eb}\x03\x02\x02\x02\u{6ee}\u{6ef}\x07\x05\x02\x02\u{6ef}\ + \u{6f7}\x03\x02\x02\x02\u{6f0}\u{6f1}\x07\x28\x02\x02\u{6f1}\u{6f2}\x07\ + \x04\x02\x02\u{6f2}\u{6f3}\x07\u{aa}\x02\x02\u{6f3}\u{6f4}\x07\x1d\x02\x02\ + \u{6f4}\u{6f5}\x07\x4b\x02\x02\u{6f5}\u{6f7}\x07\x05\x02\x02\u{6f6}\u{6e4}\ + \x03\x02\x02\x02\u{6f6}\u{6f0}\x03\x02\x02\x02\u{6f7}\x6d\x03\x02\x02\x02\ + \u{6f8}\u{6fa}\x05\u{d8}\x6d\x02\u{6f9}\u{6fb}\x05\u{a2}\x52\x02\u{6fa}\ + \u{6f9}\x03\x02\x02\x02\u{6fa}\u{6fb}\x03\x02\x02\x02\u{6fb}\x6f\x03\x02\ + \x02\x02\u{6fc}\u{6fd}\x07\x04\x02\x02\u{6fd}\u{6fe}\x05\u{cc}\x67\x02\u{6fe}\ + \u{6ff}\x07\x2c\x02\x02\u{6ff}\u{704}\x05\u{cc}\x67\x02\u{700}\u{701}\x07\ + \x2c\x02\x02\u{701}\u{703}\x05\u{cc}\x67\x02\u{702}\u{700}\x03\x02\x02\x02\ + \u{703}\u{706}\x03\x02\x02\x02\u{704}\u{702}\x03\x02\x02\x02\u{704}\u{705}\ + \x03\x02\x02\x02\u{705}\u{707}\x03\x02\x02\x02\u{706}\u{704}\x03\x02\x02\ + \x02\u{707}\u{708}\x07\x05\x02\x02\u{708}\x71\x03\x02\x02\x02\u{709}\u{70a}\ + \x05\x74\x3b\x02\u{70a}\x73\x03\x02\x02\x02\u{70b}\u{70c}\x08\x3b\x01\x02\ + \u{70c}\u{70e}\x05\x78\x3d\x02\u{70d}\u{70f}\x05\x76\x3c\x02\u{70e}\u{70d}\ + \x03\x02\x02\x02\u{70e}\u{70f}\x03\x02\x02\x02\u{70f}\u{713}\x03\x02\x02\ + \x02\u{710}\u{711}\x07\u{a9}\x02\x02\u{711}\u{713}\x05\x74\x3b\x05\u{712}\ + \u{70b}\x03\x02\x02\x02\u{712}\u{710}\x03\x02\x02\x02\u{713}\u{71c}\x03\ + \x02\x02\x02\u{714}\u{715}\x0c\x04\x02\x02\u{715}\u{716}\x07\x1a\x02\x02\ + \u{716}\u{71b}\x05\x74\x3b\x05\u{717}\u{718}\x0c\x03\x02\x02\u{718}\u{719}\ + \x07\u{b5}\x02\x02\u{719}\u{71b}\x05\x74\x3b\x04\u{71a}\u{714}\x03\x02\x02\ + \x02\u{71a}\u{717}\x03\x02\x02\x02\u{71b}\u{71e}\x03\x02\x02\x02\u{71c}\ + \u{71a}\x03\x02\x02\x02\u{71c}\u{71d}\x03\x02\x02\x02\u{71d}\x75\x03\x02\ + \x02\x02\u{71e}\u{71c}\x03\x02\x02\x02\u{71f}\u{720}\x05\u{96}\x4c\x02\u{720}\ + \u{721}\x05\x78\x3d\x02\u{721}\u{75d}\x03\x02\x02\x02\u{722}\u{723}\x05\ + \u{96}\x4c\x02\u{723}\u{724}\x05\u{98}\x4d\x02\u{724}\u{725}\x07\x04\x02\ + \x02\u{725}\u{726}\x05\x0e\x08\x02\u{726}\u{727}\x07\x05\x02\x02\u{727}\ + \u{75d}\x03\x02\x02\x02\u{728}\u{72a}\x07\u{a9}\x02\x02\u{729}\u{728}\x03\ + \x02\x02\x02\u{729}\u{72a}\x03\x02\x02\x02\u{72a}\u{72b}\x03\x02\x02\x02\ + \u{72b}\u{72c}\x07\x22\x02\x02\u{72c}\u{72d}\x05\x78\x3d\x02\u{72d}\u{72e}\ + \x07\x1a\x02\x02\u{72e}\u{72f}\x05\x78\x3d\x02\u{72f}\u{75d}\x03\x02\x02\ + \x02\u{730}\u{732}\x07\u{a9}\x02\x02\u{731}\u{730}\x03\x02\x02\x02\u{731}\ + \u{732}\x03\x02\x02\x02\u{732}\u{733}\x03\x02\x02\x02\u{733}\u{734}\x07\ + \x73\x02\x02\u{734}\u{735}\x07\x04\x02\x02\u{735}\u{73a}\x05\x72\x3a\x02\ + \u{736}\u{737}\x07\x2c\x02\x02\u{737}\u{739}\x05\x72\x3a\x02\u{738}\u{736}\ + \x03\x02\x02\x02\u{739}\u{73c}\x03\x02\x02\x02\u{73a}\u{738}\x03\x02\x02\ + \x02\u{73a}\u{73b}\x03\x02\x02\x02\u{73b}\u{73d}\x03\x02\x02\x02\u{73c}\ + \u{73a}\x03\x02\x02\x02\u{73d}\u{73e}\x07\x05\x02\x02\u{73e}\u{75d}\x03\ + \x02\x02\x02\u{73f}\u{741}\x07\u{a9}\x02\x02\u{740}\u{73f}\x03\x02\x02\x02\ + \u{740}\u{741}\x03\x02\x02\x02\u{741}\u{742}\x03\x02\x02\x02\u{742}\u{743}\ + \x07\x73\x02\x02\u{743}\u{744}\x07\x04\x02\x02\u{744}\u{745}\x05\x0e\x08\ + \x02\u{745}\u{746}\x07\x05\x02\x02\u{746}\u{75d}\x03\x02\x02\x02\u{747}\ + \u{749}\x07\u{a9}\x02\x02\u{748}\u{747}\x03\x02\x02\x02\u{748}\u{749}\x03\ + \x02\x02\x02\u{749}\u{74a}\x03\x02\x02\x02\u{74a}\u{74b}\x07\u{8f}\x02\x02\ + \u{74b}\u{74e}\x05\x78\x3d\x02\u{74c}\u{74d}\x07\x55\x02\x02\u{74d}\u{74f}\ + \x05\x78\x3d\x02\u{74e}\u{74c}\x03\x02\x02\x02\u{74e}\u{74f}\x03\x02\x02\ + \x02\u{74f}\u{75d}\x03\x02\x02\x02\u{750}\u{752}\x07\x7e\x02\x02\u{751}\ + \u{753}\x07\u{a9}\x02\x02\u{752}\u{751}\x03\x02\x02\x02\u{752}\u{753}\x03\ + \x02\x02\x02\u{753}\u{754}\x03\x02\x02\x02\u{754}\u{75d}\x07\u{aa}\x02\x02\ + \u{755}\u{757}\x07\x7e\x02\x02\u{756}\u{758}\x07\u{a9}\x02\x02\u{757}\u{756}\ + \x03\x02\x02\x02\u{757}\u{758}\x03\x02\x02\x02\u{758}\u{759}\x03\x02\x02\ + \x02\u{759}\u{75a}\x07\x4c\x02\x02\u{75a}\u{75b}\x07\x64\x02\x02\u{75b}\ + \u{75d}\x05\x78\x3d\x02\u{75c}\u{71f}\x03\x02\x02\x02\u{75c}\u{722}\x03\ + \x02\x02\x02\u{75c}\u{729}\x03\x02\x02\x02\u{75c}\u{731}\x03\x02\x02\x02\ + \u{75c}\u{740}\x03\x02\x02\x02\u{75c}\u{748}\x03\x02\x02\x02\u{75c}\u{750}\ + \x03\x02\x02\x02\u{75c}\u{755}\x03\x02\x02\x02\u{75d}\x77\x03\x02\x02\x02\ + \u{75e}\u{75f}\x08\x3d\x01\x02\u{75f}\u{763}\x05\x7a\x3e\x02\u{760}\u{761}\ + \x09\x11\x02\x02\u{761}\u{763}\x05\x78\x3d\x06\u{762}\u{75e}\x03\x02\x02\ + \x02\u{762}\u{760}\x03\x02\x02\x02\u{763}\u{772}\x03\x02\x02\x02\u{764}\ + \u{765}\x0c\x05\x02\x02\u{765}\u{766}\x09\x12\x02\x02\u{766}\u{771}\x05\ + \x78\x3d\x06\u{767}\u{768}\x0c\x04\x02\x02\u{768}\u{769}\x09\x11\x02\x02\ + \u{769}\u{771}\x05\x78\x3d\x05\u{76a}\u{76b}\x0c\x03\x02\x02\u{76b}\u{76c}\ + \x07\u{130}\x02\x02\u{76c}\u{771}\x05\x78\x3d\x04\u{76d}\u{76e}\x0c\x07\ + \x02\x02\u{76e}\u{76f}\x07\x1f\x02\x02\u{76f}\u{771}\x05\u{94}\x4b\x02\u{770}\ + \u{764}\x03\x02\x02\x02\u{770}\u{767}\x03\x02\x02\x02\u{770}\u{76a}\x03\ + \x02\x02\x02\u{770}\u{76d}\x03\x02\x02\x02\u{771}\u{774}\x03\x02\x02\x02\ + \u{772}\u{770}\x03\x02\x02\x02\u{772}\u{773}\x03\x02\x02\x02\u{773}\x79\ + \x03\x02\x02\x02\u{774}\u{772}\x03\x02\x02\x02\u{775}\u{776}\x08\x3e\x01\ + \x02\u{776}\u{938}\x07\u{aa}\x02\x02\u{777}\u{938}\x05\u{9c}\x4f\x02\u{778}\ + \u{779}\x05\u{d8}\x6d\x02\u{779}\u{77a}\x05\u{92}\x4a\x02\u{77a}\u{938}\ + \x03\x02\x02\x02\u{77b}\u{77c}\x07\x4e\x02\x02\u{77c}\u{77d}\x07\u{c7}\x02\ + \x02\u{77d}\u{938}\x05\u{92}\x4a\x02\u{77e}\u{938}\x05\u{da}\x6e\x02\u{77f}\ + \u{938}\x05\u{9a}\x4e\x02\u{780}\u{938}\x05\u{92}\x4a\x02\u{781}\u{938}\ + \x07\u{134}\x02\x02\u{782}\u{938}\x07\u{131}\x02\x02\u{783}\u{784}\x07\u{c5}\ + \x02\x02\u{784}\u{785}\x07\x04\x02\x02\u{785}\u{786}\x05\x78\x3d\x02\u{786}\ + \u{787}\x07\x73\x02\x02\u{787}\u{788}\x05\x78\x3d\x02\u{788}\u{789}\x07\ + \x05\x02\x02\u{789}\u{938}\x03\x02\x02\x02\u{78a}\u{78b}\x07\x04\x02\x02\ + \u{78b}\u{78e}\x05\x72\x3a\x02\u{78c}\u{78d}\x07\x2c\x02\x02\u{78d}\u{78f}\ + \x05\x72\x3a\x02\u{78e}\u{78c}\x03\x02\x02\x02\u{78f}\u{790}\x03\x02\x02\ + \x02\u{790}\u{78e}\x03\x02\x02\x02\u{790}\u{791}\x03\x02\x02\x02\u{791}\ + \u{792}\x03\x02\x02\x02\u{792}\u{793}\x07\x05\x02\x02\u{793}\u{938}\x03\ + \x02\x02\x02\u{794}\u{795}\x07\u{de}\x02\x02\u{795}\u{796}\x07\x04\x02\x02\ + \u{796}\u{79b}\x05\x72\x3a\x02\u{797}\u{798}\x07\x2c\x02\x02\u{798}\u{79a}\ + \x05\x72\x3a\x02\u{799}\u{797}\x03\x02\x02\x02\u{79a}\u{79d}\x03\x02\x02\ + \x02\u{79b}\u{799}\x03\x02\x02\x02\u{79b}\u{79c}\x03\x02\x02\x02\u{79c}\ + \u{79e}\x03\x02\x02\x02\u{79d}\u{79b}\x03\x02\x02\x02\u{79e}\u{79f}\x07\ + \x05\x02\x02\u{79f}\u{938}\x03\x02\x02\x02\u{7a0}\u{7a1}\x07\u{91}\x02\x02\ + \u{7a1}\u{7a3}\x07\x04\x02\x02\u{7a2}\u{7a4}\x05\x3c\x1f\x02\u{7a3}\u{7a2}\ + \x03\x02\x02\x02\u{7a3}\u{7a4}\x03\x02\x02\x02\u{7a4}\u{7a5}\x03\x02\x02\ + \x02\u{7a5}\u{7a8}\x05\x72\x3a\x02\u{7a6}\u{7a7}\x07\x2c\x02\x02\u{7a7}\ + \u{7a9}\x05\u{92}\x4a\x02\u{7a8}\u{7a6}\x03\x02\x02\x02\u{7a8}\u{7a9}\x03\ + \x02\x02\x02\u{7a9}\u{7ad}\x03\x02\x02\x02\u{7aa}\u{7ab}\x07\u{b1}\x02\x02\ + \u{7ab}\u{7ac}\x07\u{bb}\x02\x02\u{7ac}\u{7ae}\x05\x4c\x27\x02\u{7ad}\u{7aa}\ + \x03\x02\x02\x02\u{7ad}\u{7ae}\x03\x02\x02\x02\u{7ae}\u{7af}\x03\x02\x02\ + \x02\u{7af}\u{7b0}\x07\x05\x02\x02\u{7b0}\u{7b1}\x07\u{11e}\x02\x02\u{7b1}\ + \u{7b2}\x07\x6c\x02\x02\u{7b2}\u{7b3}\x07\x04\x02\x02\u{7b3}\u{7b4}\x07\ + \u{b6}\x02\x02\u{7b4}\u{7b5}\x07\x24\x02\x02\u{7b5}\u{7ba}\x05\x2a\x16\x02\ + \u{7b6}\u{7b7}\x07\x2c\x02\x02\u{7b7}\u{7b9}\x05\x2a\x16\x02\u{7b8}\u{7b6}\ + \x03\x02\x02\x02\u{7b9}\u{7bc}\x03\x02\x02\x02\u{7ba}\u{7b8}\x03\x02\x02\ + \x02\u{7ba}\u{7bb}\x03\x02\x02\x02\u{7bb}\u{7bd}\x03\x02\x02\x02\u{7bc}\ + \u{7ba}\x03\x02\x02\x02\u{7bd}\u{7be}\x07\x05\x02\x02\u{7be}\u{938}\x03\ + \x02\x02\x02\u{7bf}\u{7c1}\x05\u{8e}\x48\x02\u{7c0}\u{7bf}\x03\x02\x02\x02\ + \u{7c0}\u{7c1}\x03\x02\x02\x02\u{7c1}\u{7c2}\x03\x02\x02\x02\u{7c2}\u{7c3}\ + \x05\u{cc}\x67\x02\u{7c3}\u{7c7}\x07\x04\x02\x02\u{7c4}\u{7c5}\x05\u{d8}\ + \x6d\x02\u{7c5}\u{7c6}\x07\x03\x02\x02\u{7c6}\u{7c8}\x03\x02\x02\x02\u{7c7}\ + \u{7c4}\x03\x02\x02\x02\u{7c7}\u{7c8}\x03\x02\x02\x02\u{7c8}\u{7c9}\x03\ + \x02\x02\x02\u{7c9}\u{7ca}\x07\u{12d}\x02\x02\u{7ca}\u{7cc}\x07\x05\x02\ + \x02\u{7cb}\u{7cd}\x05\u{aa}\x56\x02\u{7cc}\u{7cb}\x03\x02\x02\x02\u{7cc}\ + \u{7cd}\x03\x02\x02\x02\u{7cd}\u{7cf}\x03\x02\x02\x02\u{7ce}\u{7d0}\x05\ + \u{ae}\x58\x02\u{7cf}\u{7ce}\x03\x02\x02\x02\u{7cf}\u{7d0}\x03\x02\x02\x02\ + \u{7d0}\u{938}\x03\x02\x02\x02\u{7d1}\u{7d3}\x05\u{8e}\x48\x02\u{7d2}\u{7d1}\ + \x03\x02\x02\x02\u{7d2}\u{7d3}\x03\x02\x02\x02\u{7d3}\u{7d4}\x03\x02\x02\ + \x02\u{7d4}\u{7d5}\x05\u{cc}\x67\x02\u{7d5}\u{7e1}\x07\x04\x02\x02\u{7d6}\ + \u{7d8}\x05\x3c\x1f\x02\u{7d7}\u{7d6}\x03\x02\x02\x02\u{7d7}\u{7d8}\x03\ + \x02\x02\x02\u{7d8}\u{7d9}\x03\x02\x02\x02\u{7d9}\u{7de}\x05\x72\x3a\x02\ + \u{7da}\u{7db}\x07\x2c\x02\x02\u{7db}\u{7dd}\x05\x72\x3a\x02\u{7dc}\u{7da}\ + \x03\x02\x02\x02\u{7dd}\u{7e0}\x03\x02\x02\x02\u{7de}\u{7dc}\x03\x02\x02\ + \x02\u{7de}\u{7df}\x03\x02\x02\x02\u{7df}\u{7e2}\x03\x02\x02\x02\u{7e0}\ + \u{7de}\x03\x02\x02\x02\u{7e1}\u{7d7}\x03\x02\x02\x02\u{7e1}\u{7e2}\x03\ + \x02\x02\x02\u{7e2}\u{7ed}\x03\x02\x02\x02\u{7e3}\u{7e4}\x07\u{b6}\x02\x02\ + \u{7e4}\u{7e5}\x07\x24\x02\x02\u{7e5}\u{7ea}\x05\x2a\x16\x02\u{7e6}\u{7e7}\ + \x07\x2c\x02\x02\u{7e7}\u{7e9}\x05\x2a\x16\x02\u{7e8}\u{7e6}\x03\x02\x02\ + \x02\u{7e9}\u{7ec}\x03\x02\x02\x02\u{7ea}\u{7e8}\x03\x02\x02\x02\u{7ea}\ + \u{7eb}\x03\x02\x02\x02\u{7eb}\u{7ee}\x03\x02\x02\x02\u{7ec}\u{7ea}\x03\ + \x02\x02\x02\u{7ed}\u{7e3}\x03\x02\x02\x02\u{7ed}\u{7ee}\x03\x02\x02\x02\ + \u{7ee}\u{7ef}\x03\x02\x02\x02\u{7ef}\u{7f1}\x07\x05\x02\x02\u{7f0}\u{7f2}\ + \x05\u{aa}\x56\x02\u{7f1}\u{7f0}\x03\x02\x02\x02\u{7f1}\u{7f2}\x03\x02\x02\ + \x02\u{7f2}\u{7f7}\x03\x02\x02\x02\u{7f3}\u{7f5}\x05\u{90}\x49\x02\u{7f4}\ + \u{7f3}\x03\x02\x02\x02\u{7f4}\u{7f5}\x03\x02\x02\x02\u{7f5}\u{7f6}\x03\ + \x02\x02\x02\u{7f6}\u{7f8}\x05\u{ae}\x58\x02\u{7f7}\u{7f4}\x03\x02\x02\x02\ + \u{7f7}\u{7f8}\x03\x02\x02\x02\u{7f8}\u{938}\x03\x02\x02\x02\u{7f9}\u{7fa}\ + \x05\u{d8}\x6d\x02\u{7fa}\u{7fb}\x05\u{ae}\x58\x02\u{7fb}\u{938}\x03\x02\ + \x02\x02\u{7fc}\u{7fd}\x05\u{d8}\x6d\x02\u{7fd}\u{7fe}\x07\x08\x02\x02\u{7fe}\ + \u{7ff}\x05\x72\x3a\x02\u{7ff}\u{938}\x03\x02\x02\x02\u{800}\u{809}\x07\ + \x04\x02\x02\u{801}\u{806}\x05\u{d8}\x6d\x02\u{802}\u{803}\x07\x2c\x02\x02\ + \u{803}\u{805}\x05\u{d8}\x6d\x02\u{804}\u{802}\x03\x02\x02\x02\u{805}\u{808}\ + \x03\x02\x02\x02\u{806}\u{804}\x03\x02\x02\x02\u{806}\u{807}\x03\x02\x02\ + \x02\u{807}\u{80a}\x03\x02\x02\x02\u{808}\u{806}\x03\x02\x02\x02\u{809}\ + \u{801}\x03\x02\x02\x02\u{809}\u{80a}\x03\x02\x02\x02\u{80a}\u{80b}\x03\ + \x02\x02\x02\u{80b}\u{80c}\x07\x05\x02\x02\u{80c}\u{80d}\x07\x08\x02\x02\ + \u{80d}\u{938}\x05\x72\x3a\x02\u{80e}\u{80f}\x07\x04\x02\x02\u{80f}\u{810}\ + \x05\x0e\x08\x02\u{810}\u{811}\x07\x05\x02\x02\u{811}\u{938}\x03\x02\x02\ + \x02\u{812}\u{813}\x07\x59\x02\x02\u{813}\u{814}\x07\x04\x02\x02\u{814}\ + \u{815}\x05\x0e\x08\x02\u{815}\u{816}\x07\x05\x02\x02\u{816}\u{938}\x03\ + \x02\x02\x02\u{817}\u{818}\x07\x27\x02\x02\u{818}\u{81a}\x05\x72\x3a\x02\ + \u{819}\u{81b}\x05\u{a8}\x55\x02\u{81a}\u{819}\x03\x02\x02\x02\u{81b}\u{81c}\ + \x03\x02\x02\x02\u{81c}\u{81a}\x03\x02\x02\x02\u{81c}\u{81d}\x03\x02\x02\ + \x02\u{81d}\u{820}\x03\x02\x02\x02\u{81e}\u{81f}\x07\x50\x02\x02\u{81f}\ + \u{821}\x05\x72\x3a\x02\u{820}\u{81e}\x03\x02\x02\x02\u{820}\u{821}\x03\ + \x02\x02\x02\u{821}\u{822}\x03\x02\x02\x02\u{822}\u{823}\x07\x53\x02\x02\ + \u{823}\u{938}\x03\x02\x02\x02\u{824}\u{826}\x07\x27\x02\x02\u{825}\u{827}\ + \x05\u{a8}\x55\x02\u{826}\u{825}\x03\x02\x02\x02\u{827}\u{828}\x03\x02\x02\ + \x02\u{828}\u{826}\x03\x02\x02\x02\u{828}\u{829}\x03\x02\x02\x02\u{829}\ + \u{82c}\x03\x02\x02\x02\u{82a}\u{82b}\x07\x50\x02\x02\u{82b}\u{82d}\x05\ + \x72\x3a\x02\u{82c}\u{82a}\x03\x02\x02\x02\u{82c}\u{82d}\x03\x02\x02\x02\ + \u{82d}\u{82e}\x03\x02\x02\x02\u{82e}\u{82f}\x07\x53\x02\x02\u{82f}\u{938}\ + \x03\x02\x02\x02\u{830}\u{831}\x07\x28\x02\x02\u{831}\u{832}\x07\x04\x02\ + \x02\u{832}\u{833}\x05\x72\x3a\x02\u{833}\u{834}\x07\x1d\x02\x02\u{834}\ + \u{835}\x05\u{a2}\x52\x02\u{835}\u{836}\x07\x05\x02\x02\u{836}\u{938}\x03\ + \x02\x02\x02\u{837}\u{838}\x07\u{102}\x02\x02\u{838}\u{839}\x07\x04\x02\ + \x02\u{839}\u{83a}\x05\x72\x3a\x02\u{83a}\u{83b}\x07\x1d\x02\x02\u{83b}\ + \u{83c}\x05\u{a2}\x52\x02\u{83c}\u{83d}\x07\x05\x02\x02\u{83d}\u{938}\x03\ + \x02\x02\x02\u{83e}\u{83f}\x07\x1c\x02\x02\u{83f}\u{848}\x07\x09\x02\x02\ + \u{840}\u{845}\x05\x72\x3a\x02\u{841}\u{842}\x07\x2c\x02\x02\u{842}\u{844}\ + \x05\x72\x3a\x02\u{843}\u{841}\x03\x02\x02\x02\u{844}\u{847}\x03\x02\x02\ + \x02\u{845}\u{843}\x03\x02\x02\x02\u{845}\u{846}\x03\x02\x02\x02\u{846}\ + \u{849}\x03\x02\x02\x02\u{847}\u{845}\x03\x02\x02\x02\u{848}\u{840}\x03\ + \x02\x02\x02\u{848}\u{849}\x03\x02\x02\x02\u{849}\u{84a}\x03\x02\x02\x02\ + \u{84a}\u{938}\x07\x0a\x02\x02\u{84b}\u{938}\x05\u{d8}\x6d\x02\u{84c}\u{938}\ + \x07\x39\x02\x02\u{84d}\u{851}\x07\x3d\x02\x02\u{84e}\u{84f}\x07\x04\x02\ + \x02\u{84f}\u{850}\x07\u{135}\x02\x02\u{850}\u{852}\x07\x05\x02\x02\u{851}\ + \u{84e}\x03\x02\x02\x02\u{851}\u{852}\x03\x02\x02\x02\u{852}\u{938}\x03\ + \x02\x02\x02\u{853}\u{857}\x07\x3e\x02\x02\u{854}\u{855}\x07\x04\x02\x02\ + \u{855}\u{856}\x07\u{135}\x02\x02\u{856}\u{858}\x07\x05\x02\x02\u{857}\u{854}\ + \x03\x02\x02\x02\u{857}\u{858}\x03\x02\x02\x02\u{858}\u{938}\x03\x02\x02\ + \x02\u{859}\u{85d}\x07\u{93}\x02\x02\u{85a}\u{85b}\x07\x04\x02\x02\u{85b}\ + \u{85c}\x07\u{135}\x02\x02\u{85c}\u{85e}\x07\x05\x02\x02\u{85d}\u{85a}\x03\ + \x02\x02\x02\u{85d}\u{85e}\x03\x02\x02\x02\u{85e}\u{938}\x03\x02\x02\x02\ + \u{85f}\u{863}\x07\u{94}\x02\x02\u{860}\u{861}\x07\x04\x02\x02\u{861}\u{862}\ + \x07\u{135}\x02\x02\u{862}\u{864}\x07\x05\x02\x02\u{863}\u{860}\x03\x02\ + \x02\x02\u{863}\u{864}\x03\x02\x02\x02\u{864}\u{938}\x03\x02\x02\x02\u{865}\ + \u{938}\x07\x3f\x02\x02\u{866}\u{938}\x07\x38\x02\x02\u{867}\u{938}\x07\ + \x3c\x02\x02\u{868}\u{938}\x07\x3a\x02\x02\u{869}\u{86a}\x07\u{ff}\x02\x02\ + \u{86a}\u{872}\x07\x04\x02\x02\u{86b}\u{86d}\x05\x4a\x26\x02\u{86c}\u{86b}\ + \x03\x02\x02\x02\u{86c}\u{86d}\x03\x02\x02\x02\u{86d}\u{86f}\x03\x02\x02\ + \x02\u{86e}\u{870}\x05\x78\x3d\x02\u{86f}\u{86e}\x03\x02\x02\x02\u{86f}\ + \u{870}\x03\x02\x02\x02\u{870}\u{871}\x03\x02\x02\x02\u{871}\u{873}\x07\ + \x64\x02\x02\u{872}\u{86c}\x03\x02\x02\x02\u{872}\u{873}\x03\x02\x02\x02\ + \u{873}\u{874}\x03\x02\x02\x02\u{874}\u{875}\x05\x78\x3d\x02\u{875}\u{876}\ + \x07\x05\x02\x02\u{876}\u{938}\x03\x02\x02\x02\u{877}\u{878}\x07\u{ff}\x02\ + \x02\u{878}\u{879}\x07\x04\x02\x02\u{879}\u{87a}\x05\x78\x3d\x02\u{87a}\ + \u{87b}\x07\x2c\x02\x02\u{87b}\u{87c}\x05\x78\x3d\x02\u{87c}\u{87d}\x07\ + \x05\x02\x02\u{87d}\u{938}\x03\x02\x02\x02\u{87e}\u{87f}\x07\u{f1}\x02\x02\ + \u{87f}\u{880}\x07\x04\x02\x02\u{880}\u{881}\x05\x78\x3d\x02\u{881}\u{882}\ + \x07\x64\x02\x02\u{882}\u{885}\x05\x78\x3d\x02\u{883}\u{884}\x07\x62\x02\ + \x02\u{884}\u{886}\x05\x78\x3d\x02\u{885}\u{883}\x03\x02\x02\x02\u{885}\ + \u{886}\x03\x02\x02\x02\u{886}\u{887}\x03\x02\x02\x02\u{887}\u{888}\x07\ + \x05\x02\x02\u{888}\u{938}\x03\x02\x02\x02\u{889}\u{88a}\x07\u{a8}\x02\x02\ + \u{88a}\u{88b}\x07\x04\x02\x02\u{88b}\u{88e}\x05\x78\x3d\x02\u{88c}\u{88d}\ + \x07\x2c\x02\x02\u{88d}\u{88f}\x05\u{a0}\x51\x02\u{88e}\u{88c}\x03\x02\x02\ + \x02\u{88e}\u{88f}\x03\x02\x02\x02\u{88f}\u{890}\x03\x02\x02\x02\u{890}\ + \u{891}\x07\x05\x02\x02\u{891}\u{938}\x03\x02\x02\x02\u{892}\u{893}\x07\ + \x5b\x02\x02\u{893}\u{894}\x07\x04\x02\x02\u{894}\u{895}\x05\u{d8}\x6d\x02\ + \u{895}\u{896}\x07\x64\x02\x02\u{896}\u{897}\x05\x78\x3d\x02\u{897}\u{898}\ + \x07\x05\x02\x02\u{898}\u{938}\x03\x02\x02\x02\u{899}\u{89a}\x07\x04\x02\ + \x02\u{89a}\u{89b}\x05\x72\x3a\x02\u{89b}\u{89c}\x07\x05\x02\x02\u{89c}\ + \u{938}\x03\x02\x02\x02\u{89d}\u{89e}\x07\x6d\x02\x02\u{89e}\u{8a7}\x07\ + \x04\x02\x02\u{89f}\u{8a4}\x05\u{cc}\x67\x02\u{8a0}\u{8a1}\x07\x2c\x02\x02\ + \u{8a1}\u{8a3}\x05\u{cc}\x67\x02\u{8a2}\u{8a0}\x03\x02\x02\x02\u{8a3}\u{8a6}\ + \x03\x02\x02\x02\u{8a4}\u{8a2}\x03\x02\x02\x02\u{8a4}\u{8a5}\x03\x02\x02\ + \x02\u{8a5}\u{8a8}\x03\x02\x02\x02\u{8a6}\u{8a4}\x03\x02\x02\x02\u{8a7}\ + \u{89f}\x03\x02\x02\x02\u{8a7}\u{8a8}\x03\x02\x02\x02\u{8a8}\u{8a9}\x03\ + \x02\x02\x02\u{8a9}\u{938}\x07\x05\x02\x02\u{8aa}\u{8ab}\x07\u{83}\x02\x02\ + \u{8ab}\u{8ac}\x07\x04\x02\x02\u{8ac}\u{8b1}\x05\x7c\x3f\x02\u{8ad}\u{8ae}\ + \x05\u{84}\x43\x02\u{8ae}\u{8af}\x07\u{b1}\x02\x02\u{8af}\u{8b0}\x07\x54\ + \x02\x02\u{8b0}\u{8b2}\x03\x02\x02\x02\u{8b1}\u{8ad}\x03\x02\x02\x02\u{8b1}\ + \u{8b2}\x03\x02\x02\x02\u{8b2}\u{8b3}\x03\x02\x02\x02\u{8b3}\u{8b4}\x07\ + \x05\x02\x02\u{8b4}\u{938}\x03\x02\x02\x02\u{8b5}\u{8b6}\x07\u{86}\x02\x02\ + \u{8b6}\u{8b7}\x07\x04\x02\x02\u{8b7}\u{8ba}\x05\x7c\x3f\x02\u{8b8}\u{8b9}\ + \x07\u{d7}\x02\x02\u{8b9}\u{8bb}\x05\u{a2}\x52\x02\u{8ba}\u{8b8}\x03\x02\ + \x02\x02\u{8ba}\u{8bb}\x03\x02\x02\x02\u{8bb}\u{8c0}\x03\x02\x02\x02\u{8bc}\ + \u{8bd}\x05\u{86}\x44\x02\u{8bd}\u{8be}\x07\u{b1}\x02\x02\u{8be}\u{8bf}\ + \x07\x51\x02\x02\u{8bf}\u{8c1}\x03\x02\x02\x02\u{8c0}\u{8bc}\x03\x02\x02\ + \x02\u{8c0}\u{8c1}\x03\x02\x02\x02\u{8c1}\u{8c6}\x03\x02\x02\x02\u{8c2}\ + \u{8c3}\x05\u{86}\x44\x02\u{8c3}\u{8c4}\x07\u{b1}\x02\x02\u{8c4}\u{8c5}\ + \x07\x54\x02\x02\u{8c5}\u{8c7}\x03\x02\x02\x02\u{8c6}\u{8c2}\x03\x02\x02\ + \x02\u{8c6}\u{8c7}\x03\x02\x02\x02\u{8c7}\u{8c8}\x03\x02\x02\x02\u{8c8}\ + \u{8c9}\x07\x05\x02\x02\u{8c9}\u{938}\x03\x02\x02\x02\u{8ca}\u{8cb}\x07\ + \u{85}\x02\x02\u{8cb}\u{8cc}\x07\x04\x02\x02\u{8cc}\u{8d3}\x05\x7c\x3f\x02\ + \u{8cd}\u{8ce}\x07\u{d7}\x02\x02\u{8ce}\u{8d1}\x05\u{a2}\x52\x02\u{8cf}\ + \u{8d0}\x07\x63\x02\x02\u{8d0}\u{8d2}\x05\u{80}\x41\x02\u{8d1}\u{8cf}\x03\ + \x02\x02\x02\u{8d1}\u{8d2}\x03\x02\x02\x02\u{8d2}\u{8d4}\x03\x02\x02\x02\ + \u{8d3}\u{8cd}\x03\x02\x02\x02\u{8d3}\u{8d4}\x03\x02\x02\x02\u{8d4}\u{8d8}\ + \x03\x02\x02\x02\u{8d5}\u{8d6}\x05\u{88}\x45\x02\u{8d6}\u{8d7}\x07\u{121}\ + \x02\x02\u{8d7}\u{8d9}\x03\x02\x02\x02\u{8d8}\u{8d5}\x03\x02\x02\x02\u{8d8}\ + \u{8d9}\x03\x02\x02\x02\u{8d9}\u{8e1}\x03\x02\x02\x02\u{8da}\u{8db}\x09\ + \x13\x02\x02\u{8db}\u{8df}\x07\u{cc}\x02\x02\u{8dc}\u{8dd}\x07\u{b1}\x02\ + \x02\u{8dd}\u{8de}\x07\u{e1}\x02\x02\u{8de}\u{8e0}\x07\u{f7}\x02\x02\u{8df}\ + \u{8dc}\x03\x02\x02\x02\u{8df}\u{8e0}\x03\x02\x02\x02\u{8e0}\u{8e2}\x03\ + \x02\x02\x02\u{8e1}\u{8da}\x03\x02\x02\x02\u{8e1}\u{8e2}\x03\x02\x02\x02\ + \u{8e2}\u{8e7}\x03\x02\x02\x02\u{8e3}\u{8e4}\x05\u{8a}\x46\x02\u{8e4}\u{8e5}\ + \x07\u{b1}\x02\x02\u{8e5}\u{8e6}\x07\x51\x02\x02\u{8e6}\u{8e8}\x03\x02\x02\ + \x02\u{8e7}\u{8e3}\x03\x02\x02\x02\u{8e7}\u{8e8}\x03\x02\x02\x02\u{8e8}\ + \u{8ed}\x03\x02\x02\x02\u{8e9}\u{8ea}\x05\u{8a}\x46\x02\u{8ea}\u{8eb}\x07\ + \u{b1}\x02\x02\u{8eb}\u{8ec}\x07\x54\x02\x02\u{8ec}\u{8ee}\x03\x02\x02\x02\ + \u{8ed}\u{8e9}\x03\x02\x02\x02\u{8ed}\u{8ee}\x03\x02\x02\x02\u{8ee}\u{8ef}\ + \x03\x02\x02\x02\u{8ef}\u{8f0}\x07\x05\x02\x02\u{8f0}\u{938}\x03\x02\x02\ + \x02\u{8f1}\u{8f2}\x07\u{84}\x02\x02\u{8f2}\u{90f}\x07\x04\x02\x02\u{8f3}\ + \u{8f8}\x05\u{8c}\x47\x02\u{8f4}\u{8f5}\x07\x2c\x02\x02\u{8f5}\u{8f7}\x05\ + \u{8c}\x47\x02\u{8f6}\u{8f4}\x03\x02\x02\x02\u{8f7}\u{8fa}\x03\x02\x02\x02\ + \u{8f8}\u{8f6}\x03\x02\x02\x02\u{8f8}\u{8f9}\x03\x02\x02\x02\u{8f9}\u{901}\ + \x03\x02\x02\x02\u{8fa}\u{8f8}\x03\x02\x02\x02\u{8fb}\u{8fc}\x07\u{aa}\x02\ + \x02\u{8fc}\u{8fd}\x07\u{b1}\x02\x02\u{8fd}\u{902}\x07\u{aa}\x02\x02\u{8fe}\ + \u{8ff}\x07\x13\x02\x02\u{8ff}\u{900}\x07\u{b1}\x02\x02\u{900}\u{902}\x07\ + \u{aa}\x02\x02\u{901}\u{8fb}\x03\x02\x02\x02\u{901}\u{8fe}\x03\x02\x02\x02\ + \u{901}\u{902}\x03\x02\x02\x02\u{902}\u{90d}\x03\x02\x02\x02\u{903}\u{904}\ + \x07\u{11d}\x02\x02\u{904}\u{906}\x07\u{109}\x02\x02\u{905}\u{907}\x07\u{89}\ + \x02\x02\u{906}\u{905}\x03\x02\x02\x02\u{906}\u{907}\x03\x02\x02\x02\u{907}\ + \u{90e}\x03\x02\x02\x02\u{908}\u{909}\x07\u{11f}\x02\x02\u{909}\u{90b}\x07\ + \u{109}\x02\x02\u{90a}\u{90c}\x07\u{89}\x02\x02\u{90b}\u{90a}\x03\x02\x02\ + \x02\u{90b}\u{90c}\x03\x02\x02\x02\u{90c}\u{90e}\x03\x02\x02\x02\u{90d}\ + \u{903}\x03\x02\x02\x02\u{90d}\u{908}\x03\x02\x02\x02\u{90d}\u{90e}\x03\ + \x02\x02\x02\u{90e}\u{910}\x03\x02\x02\x02\u{90f}\u{8f3}\x03\x02\x02\x02\ + \u{90f}\u{910}\x03\x02\x02\x02\u{910}\u{917}\x03\x02\x02\x02\u{911}\u{912}\ + \x07\u{d7}\x02\x02\u{912}\u{915}\x05\u{a2}\x52\x02\u{913}\u{914}\x07\x63\ + \x02\x02\u{914}\u{916}\x05\u{80}\x41\x02\u{915}\u{913}\x03\x02\x02\x02\u{915}\ + \u{916}\x03\x02\x02\x02\u{916}\u{918}\x03\x02\x02\x02\u{917}\u{911}\x03\ + \x02\x02\x02\u{917}\u{918}\x03\x02\x02\x02\u{918}\u{919}\x03\x02\x02\x02\ + \u{919}\u{938}\x07\x05\x02\x02\u{91a}\u{91b}\x07\u{82}\x02\x02\u{91b}\u{92c}\ + \x07\x04\x02\x02\u{91c}\u{921}\x05\x7e\x40\x02\u{91d}\u{91e}\x07\x2c\x02\ + \x02\u{91e}\u{920}\x05\x7e\x40\x02\u{91f}\u{91d}\x03\x02\x02\x02\u{920}\ + \u{923}\x03\x02\x02\x02\u{921}\u{91f}\x03\x02\x02\x02\u{921}\u{922}\x03\ + \x02\x02\x02\u{922}\u{92a}\x03\x02\x02\x02\u{923}\u{921}\x03\x02\x02\x02\ + \u{924}\u{925}\x07\u{aa}\x02\x02\u{925}\u{926}\x07\u{b1}\x02\x02\u{926}\ + \u{92b}\x07\u{aa}\x02\x02\u{927}\u{928}\x07\x13\x02\x02\u{928}\u{929}\x07\ + \u{b1}\x02\x02\u{929}\u{92b}\x07\u{aa}\x02\x02\u{92a}\u{924}\x03\x02\x02\ + \x02\u{92a}\u{927}\x03\x02\x02\x02\u{92a}\u{92b}\x03\x02\x02\x02\u{92b}\ + \u{92d}\x03\x02\x02\x02\u{92c}\u{91c}\x03\x02\x02\x02\u{92c}\u{92d}\x03\ + \x02\x02\x02\u{92d}\u{934}\x03\x02\x02\x02\u{92e}\u{92f}\x07\u{d7}\x02\x02\ + \u{92f}\u{932}\x05\u{a2}\x52\x02\u{930}\u{931}\x07\x63\x02\x02\u{931}\u{933}\ + \x05\u{80}\x41\x02\u{932}\u{930}\x03\x02\x02\x02\u{932}\u{933}\x03\x02\x02\ + \x02\u{933}\u{935}\x03\x02\x02\x02\u{934}\u{92e}\x03\x02\x02\x02\u{934}\ + \u{935}\x03\x02\x02\x02\u{935}\u{936}\x03\x02\x02\x02\u{936}\u{938}\x07\ + \x05\x02\x02\u{937}\u{775}\x03\x02\x02\x02\u{937}\u{777}\x03\x02\x02\x02\ + \u{937}\u{778}\x03\x02\x02\x02\u{937}\u{77b}\x03\x02\x02\x02\u{937}\u{77e}\ + \x03\x02\x02\x02\u{937}\u{77f}\x03\x02\x02\x02\u{937}\u{780}\x03\x02\x02\ + \x02\u{937}\u{781}\x03\x02\x02\x02\u{937}\u{782}\x03\x02\x02\x02\u{937}\ + \u{783}\x03\x02\x02\x02\u{937}\u{78a}\x03\x02\x02\x02\u{937}\u{794}\x03\ + \x02\x02\x02\u{937}\u{7a0}\x03\x02\x02\x02\u{937}\u{7c0}\x03\x02\x02\x02\ + \u{937}\u{7d2}\x03\x02\x02\x02\u{937}\u{7f9}\x03\x02\x02\x02\u{937}\u{7fc}\ + \x03\x02\x02\x02\u{937}\u{800}\x03\x02\x02\x02\u{937}\u{80e}\x03\x02\x02\ + \x02\u{937}\u{812}\x03\x02\x02\x02\u{937}\u{817}\x03\x02\x02\x02\u{937}\ + \u{824}\x03\x02\x02\x02\u{937}\u{830}\x03\x02\x02\x02\u{937}\u{837}\x03\ + \x02\x02\x02\u{937}\u{83e}\x03\x02\x02\x02\u{937}\u{84b}\x03\x02\x02\x02\ + \u{937}\u{84c}\x03\x02\x02\x02\u{937}\u{84d}\x03\x02\x02\x02\u{937}\u{853}\ + \x03\x02\x02\x02\u{937}\u{859}\x03\x02\x02\x02\u{937}\u{85f}\x03\x02\x02\ + \x02\u{937}\u{865}\x03\x02\x02\x02\u{937}\u{866}\x03\x02\x02\x02\u{937}\ + \u{867}\x03\x02\x02\x02\u{937}\u{868}\x03\x02\x02\x02\u{937}\u{869}\x03\ + \x02\x02\x02\u{937}\u{877}\x03\x02\x02\x02\u{937}\u{87e}\x03\x02\x02\x02\ + \u{937}\u{889}\x03\x02\x02\x02\u{937}\u{892}\x03\x02\x02\x02\u{937}\u{899}\ + \x03\x02\x02\x02\u{937}\u{89d}\x03\x02\x02\x02\u{937}\u{8aa}\x03\x02\x02\ + \x02\u{937}\u{8b5}\x03\x02\x02\x02\u{937}\u{8ca}\x03\x02\x02\x02\u{937}\ + \u{8f1}\x03\x02\x02\x02\u{937}\u{91a}\x03\x02\x02\x02\u{938}\u{943}\x03\ + \x02\x02\x02\u{939}\u{93a}\x0c\x1a\x02\x02\u{93a}\u{93b}\x07\x09\x02\x02\ + \u{93b}\u{93c}\x05\x78\x3d\x02\u{93c}\u{93d}\x07\x0a\x02\x02\u{93d}\u{942}\ + \x03\x02\x02\x02\u{93e}\u{93f}\x0c\x18\x02\x02\u{93f}\u{940}\x07\x03\x02\ + \x02\u{940}\u{942}\x05\u{d8}\x6d\x02\u{941}\u{939}\x03\x02\x02\x02\u{941}\ + \u{93e}\x03\x02\x02\x02\u{942}\u{945}\x03\x02\x02\x02\u{943}\u{941}\x03\ + \x02\x02\x02\u{943}\u{944}\x03\x02\x02\x02\u{944}\x7b\x03\x02\x02\x02\u{945}\ + \u{943}\x03\x02\x02\x02\u{946}\u{947}\x05\x7e\x40\x02\u{947}\u{948}\x07\ + \x2c\x02\x02\u{948}\u{952}\x05\u{92}\x4a\x02\u{949}\u{94a}\x07\u{be}\x02\ + \x02\u{94a}\u{94f}\x05\u{82}\x42\x02\u{94b}\u{94c}\x07\x2c\x02\x02\u{94c}\ + \u{94e}\x05\u{82}\x42\x02\u{94d}\u{94b}\x03\x02\x02\x02\u{94e}\u{951}\x03\ + \x02\x02\x02\u{94f}\u{94d}\x03\x02\x02\x02\u{94f}\u{950}\x03\x02\x02\x02\ + \u{950}\u{953}\x03\x02\x02\x02\u{951}\u{94f}\x03\x02\x02\x02\u{952}\u{949}\ + \x03\x02\x02\x02\u{952}\u{953}\x03\x02\x02\x02\u{953}\x7d\x03\x02\x02\x02\ + \u{954}\u{957}\x05\x72\x3a\x02\u{955}\u{956}\x07\x63\x02\x02\u{956}\u{958}\ + \x05\u{80}\x41\x02\u{957}\u{955}\x03\x02\x02\x02\u{957}\u{958}\x03\x02\x02\ + \x02\u{958}\x7f\x03\x02\x02\x02\u{959}\u{95c}\x07\u{81}\x02\x02\u{95a}\u{95b}\ + \x07\x52\x02\x02\u{95b}\u{95d}\x09\x14\x02\x02\u{95c}\u{95a}\x03\x02\x02\ + \x02\u{95c}\u{95d}\x03\x02\x02\x02\u{95d}\u{81}\x03\x02\x02\x02\u{95e}\u{95f}\ + \x05\x7e\x40\x02\u{95f}\u{960}\x07\x1d\x02\x02\u{960}\u{961}\x05\u{d8}\x6d\ + \x02\u{961}\u{83}\x03\x02\x02\x02\u{962}\u{963}\x09\x15\x02\x02\u{963}\u{85}\ + \x03\x02\x02\x02\u{964}\u{969}\x07\x54\x02\x02\u{965}\u{969}\x07\u{aa}\x02\ + \x02\u{966}\u{967}\x07\x44\x02\x02\u{967}\u{969}\x05\x72\x3a\x02\u{968}\ + \u{964}\x03\x02\x02\x02\u{968}\u{965}\x03\x02\x02\x02\u{968}\u{966}\x03\ + \x02\x02\x02\u{969}\u{87}\x03\x02\x02\x02\u{96a}\u{96c}\x07\u{11f}\x02\x02\ + \u{96b}\u{96d}\x07\x1c\x02\x02\u{96c}\u{96b}\x03\x02\x02\x02\u{96c}\u{96d}\ + \x03\x02\x02\x02\u{96d}\u{976}\x03\x02\x02\x02\u{96e}\u{970}\x07\u{11d}\ + \x02\x02\u{96f}\u{971}\x09\x16\x02\x02\u{970}\u{96f}\x03\x02\x02\x02\u{970}\ + \u{971}\x03\x02\x02\x02\u{971}\u{973}\x03\x02\x02\x02\u{972}\u{974}\x07\ + \x1c\x02\x02\u{973}\u{972}\x03\x02\x02\x02\u{973}\u{974}\x03\x02\x02\x02\ + \u{974}\u{976}\x03\x02\x02\x02\u{975}\u{96a}\x03\x02\x02\x02\u{975}\u{96e}\ + \x03\x02\x02\x02\u{976}\u{89}\x03\x02\x02\x02\u{977}\u{97e}\x07\x54\x02\ + \x02\u{978}\u{97e}\x07\u{aa}\x02\x02\u{979}\u{97a}\x07\x51\x02\x02\u{97a}\ + \u{97e}\x07\x1c\x02\x02\u{97b}\u{97c}\x07\x51\x02\x02\u{97c}\u{97e}\x07\ + \u{ad}\x02\x02\u{97d}\u{977}\x03\x02\x02\x02\u{97d}\u{978}\x03\x02\x02\x02\ + \u{97d}\u{979}\x03\x02\x02\x02\u{97d}\u{97b}\x03\x02\x02\x02\u{97e}\u{8b}\ + \x03\x02\x02\x02\u{97f}\u{981}\x07\u{88}\x02\x02\u{980}\u{97f}\x03\x02\x02\ + \x02\u{980}\u{981}\x03\x02\x02\x02\u{981}\u{982}\x03\x02\x02\x02\u{982}\ + \u{983}\x05\x72\x3a\x02\u{983}\u{984}\x07\u{115}\x02\x02\u{984}\u{985}\x05\ + \x7e\x40\x02\u{985}\u{98b}\x03\x02\x02\x02\u{986}\u{987}\x05\x72\x3a\x02\ + \u{987}\u{988}\x07\x0b\x02\x02\u{988}\u{989}\x05\x7e\x40\x02\u{989}\u{98b}\ + \x03\x02\x02\x02\u{98a}\u{980}\x03\x02\x02\x02\u{98a}\u{986}\x03\x02\x02\ + \x02\u{98b}\u{8d}\x03\x02\x02\x02\u{98c}\u{98d}\x09\x17\x02\x02\u{98d}\u{8f}\ + \x03\x02\x02\x02\u{98e}\u{98f}\x07\x72\x02\x02\u{98f}\u{993}\x07\u{ac}\x02\ + \x02\u{990}\u{991}\x07\u{d5}\x02\x02\u{991}\u{993}\x07\u{ac}\x02\x02\u{992}\ + \u{98e}\x03\x02\x02\x02\u{992}\u{990}\x03\x02\x02\x02\u{993}\u{91}\x03\x02\ + \x02\x02\u{994}\u{99b}\x07\u{132}\x02\x02\u{995}\u{998}\x07\u{133}\x02\x02\ + \u{996}\u{997}\x07\u{104}\x02\x02\u{997}\u{999}\x07\u{132}\x02\x02\u{998}\ + \u{996}\x03\x02\x02\x02\u{998}\u{999}\x03\x02\x02\x02\u{999}\u{99b}\x03\ + \x02\x02\x02\u{99a}\u{994}\x03\x02\x02\x02\u{99a}\u{995}\x03\x02\x02\x02\ + \u{99b}\u{93}\x03\x02\x02\x02\u{99c}\u{99d}\x07\u{fa}\x02\x02\u{99d}\u{99e}\ + \x07\u{124}\x02\x02\u{99e}\u{9a3}\x05\u{9c}\x4f\x02\u{99f}\u{9a0}\x07\u{fa}\ + \x02\x02\u{9a0}\u{9a1}\x07\u{124}\x02\x02\u{9a1}\u{9a3}\x05\u{92}\x4a\x02\ + \u{9a2}\u{99c}\x03\x02\x02\x02\u{9a2}\u{99f}\x03\x02\x02\x02\u{9a3}\u{95}\ + \x03\x02\x02\x02\u{9a4}\u{9a5}\x09\x18\x02\x02\u{9a5}\u{97}\x03\x02\x02\ + \x02\u{9a6}\u{9a7}\x09\x19\x02\x02\u{9a7}\u{99}\x03\x02\x02\x02\u{9a8}\u{9a9}\ + \x09\x1a\x02\x02\u{9a9}\u{9b}\x03\x02\x02\x02\u{9aa}\u{9ac}\x07\x7a\x02\ + \x02\u{9ab}\u{9ad}\x09\x11\x02\x02\u{9ac}\u{9ab}\x03\x02\x02\x02\u{9ac}\ + \u{9ad}\x03\x02\x02\x02\u{9ad}\u{9ae}\x03\x02\x02\x02\u{9ae}\u{9af}\x05\ + \u{92}\x4a\x02\u{9af}\u{9b2}\x05\u{9e}\x50\x02\u{9b0}\u{9b1}\x07\u{fc}\x02\ + \x02\u{9b1}\u{9b3}\x05\u{9e}\x50\x02\u{9b2}\u{9b0}\x03\x02\x02\x02\u{9b2}\ + \u{9b3}\x03\x02\x02\x02\u{9b3}\u{9d}\x03\x02\x02\x02\u{9b4}\u{9b5}\x09\x1b\ + \x02\x02\u{9b5}\u{9f}\x03\x02\x02\x02\u{9b6}\u{9b7}\x09\x1c\x02\x02\u{9b7}\ + \u{a1}\x03\x02\x02\x02\u{9b8}\u{9b9}\x08\x52\x01\x02\u{9b9}\u{9ba}\x07\u{de}\ + \x02\x02\u{9ba}\u{9bb}\x07\x04\x02\x02\u{9bb}\u{9c0}\x05\u{a4}\x53\x02\u{9bc}\ + \u{9bd}\x07\x2c\x02\x02\u{9bd}\u{9bf}\x05\u{a4}\x53\x02\u{9be}\u{9bc}\x03\ + \x02\x02\x02\u{9bf}\u{9c2}\x03\x02\x02\x02\u{9c0}\u{9be}\x03\x02\x02\x02\ + \u{9c0}\u{9c1}\x03\x02\x02\x02\u{9c1}\u{9c3}\x03\x02\x02\x02\u{9c2}\u{9c0}\ + \x03\x02\x02\x02\u{9c3}\u{9c4}\x07\x05\x02\x02\u{9c4}\u{a14}\x03\x02\x02\ + \x02\u{9c5}\u{9c6}\x07\x7a\x02\x02\u{9c6}\u{9c9}\x05\u{9e}\x50\x02\u{9c7}\ + \u{9c8}\x07\u{fc}\x02\x02\u{9c8}\u{9ca}\x05\u{9e}\x50\x02\u{9c9}\u{9c7}\ + \x03\x02\x02\x02\u{9c9}\u{9ca}\x03\x02\x02\x02\u{9ca}\u{a14}\x03\x02\x02\ + \x02\u{9cb}\u{9d0}\x07\u{fb}\x02\x02\u{9cc}\u{9cd}\x07\x04\x02\x02\u{9cd}\ + \u{9ce}\x05\u{a6}\x54\x02\u{9ce}\u{9cf}\x07\x05\x02\x02\u{9cf}\u{9d1}\x03\ + \x02\x02\x02\u{9d0}\u{9cc}\x03\x02\x02\x02\u{9d0}\u{9d1}\x03\x02\x02\x02\ + \u{9d1}\u{9d5}\x03\x02\x02\x02\u{9d2}\u{9d3}\x07\u{11f}\x02\x02\u{9d3}\u{9d4}\ + \x07\u{fa}\x02\x02\u{9d4}\u{9d6}\x07\u{124}\x02\x02\u{9d5}\u{9d2}\x03\x02\ + \x02\x02\u{9d5}\u{9d6}\x03\x02\x02\x02\u{9d6}\u{a14}\x03\x02\x02\x02\u{9d7}\ + \u{9dc}\x07\u{fb}\x02\x02\u{9d8}\u{9d9}\x07\x04\x02\x02\u{9d9}\u{9da}\x05\ + \u{a6}\x54\x02\u{9da}\u{9db}\x07\x05\x02\x02\u{9db}\u{9dd}\x03\x02\x02\x02\ + \u{9dc}\u{9d8}\x03\x02\x02\x02\u{9dc}\u{9dd}\x03\x02\x02\x02\u{9dd}\u{9de}\ + \x03\x02\x02\x02\u{9de}\u{9df}\x07\u{11d}\x02\x02\u{9df}\u{9e0}\x07\u{fa}\ + \x02\x02\u{9e0}\u{a14}\x07\u{124}\x02\x02\u{9e1}\u{9e6}\x07\u{fa}\x02\x02\ + \u{9e2}\u{9e3}\x07\x04\x02\x02\u{9e3}\u{9e4}\x05\u{a6}\x54\x02\u{9e4}\u{9e5}\ + \x07\x05\x02\x02\u{9e5}\u{9e7}\x03\x02\x02\x02\u{9e6}\u{9e2}\x03\x02\x02\ + \x02\u{9e6}\u{9e7}\x03\x02\x02\x02\u{9e7}\u{9eb}\x03\x02\x02\x02\u{9e8}\ + \u{9e9}\x07\u{11f}\x02\x02\u{9e9}\u{9ea}\x07\u{fa}\x02\x02\u{9ea}\u{9ec}\ + \x07\u{124}\x02\x02\u{9eb}\u{9e8}\x03\x02\x02\x02\u{9eb}\u{9ec}\x03\x02\ + \x02\x02\u{9ec}\u{a14}\x03\x02\x02\x02\u{9ed}\u{9f2}\x07\u{fa}\x02\x02\u{9ee}\ + \u{9ef}\x07\x04\x02\x02\u{9ef}\u{9f0}\x05\u{a6}\x54\x02\u{9f0}\u{9f1}\x07\ + \x05\x02\x02\u{9f1}\u{9f3}\x03\x02\x02\x02\u{9f2}\u{9ee}\x03\x02\x02\x02\ + \u{9f2}\u{9f3}\x03\x02\x02\x02\u{9f3}\u{9f4}\x03\x02\x02\x02\u{9f4}\u{9f5}\ + \x07\u{11d}\x02\x02\u{9f5}\u{9f6}\x07\u{fa}\x02\x02\u{9f6}\u{a14}\x07\u{124}\ + \x02\x02\u{9f7}\u{9f8}\x07\x4e\x02\x02\u{9f8}\u{a14}\x07\u{c7}\x02\x02\u{9f9}\ + \u{9fa}\x07\x1c\x02\x02\u{9fa}\u{9fb}\x07\u{127}\x02\x02\u{9fb}\u{9fc}\x05\ + \u{a2}\x52\x02\u{9fc}\u{9fd}\x07\u{129}\x02\x02\u{9fd}\u{a14}\x03\x02\x02\ + \x02\u{9fe}\u{9ff}\x07\u{96}\x02\x02\u{9ff}\u{a00}\x07\u{127}\x02\x02\u{a00}\ + \u{a01}\x05\u{a2}\x52\x02\u{a01}\u{a02}\x07\x2c\x02\x02\u{a02}\u{a03}\x05\ + \u{a2}\x52\x02\u{a03}\u{a04}\x07\u{129}\x02\x02\u{a04}\u{a14}\x03\x02\x02\ + \x02\u{a05}\u{a11}\x05\u{d8}\x6d\x02\u{a06}\u{a07}\x07\x04\x02\x02\u{a07}\ + \u{a0c}\x05\u{a6}\x54\x02\u{a08}\u{a09}\x07\x2c\x02\x02\u{a09}\u{a0b}\x05\ + \u{a6}\x54\x02\u{a0a}\u{a08}\x03\x02\x02\x02\u{a0b}\u{a0e}\x03\x02\x02\x02\ + \u{a0c}\u{a0a}\x03\x02\x02\x02\u{a0c}\u{a0d}\x03\x02\x02\x02\u{a0d}\u{a0f}\ + \x03\x02\x02\x02\u{a0e}\u{a0c}\x03\x02\x02\x02\u{a0f}\u{a10}\x07\x05\x02\ + \x02\u{a10}\u{a12}\x03\x02\x02\x02\u{a11}\u{a06}\x03\x02\x02\x02\u{a11}\ + \u{a12}\x03\x02\x02\x02\u{a12}\u{a14}\x03\x02\x02\x02\u{a13}\u{9b8}\x03\ + \x02\x02\x02\u{a13}\u{9c5}\x03\x02\x02\x02\u{a13}\u{9cb}\x03\x02\x02\x02\ + \u{a13}\u{9d7}\x03\x02\x02\x02\u{a13}\u{9e1}\x03\x02\x02\x02\u{a13}\u{9ed}\ + \x03\x02\x02\x02\u{a13}\u{9f7}\x03\x02\x02\x02\u{a13}\u{9f9}\x03\x02\x02\ + \x02\u{a13}\u{9fe}\x03\x02\x02\x02\u{a13}\u{a05}\x03\x02\x02\x02\u{a14}\ + \u{a1e}\x03\x02\x02\x02\u{a15}\u{a16}\x0c\x04\x02\x02\u{a16}\u{a1a}\x07\ + \x1c\x02\x02\u{a17}\u{a18}\x07\x09\x02\x02\u{a18}\u{a19}\x07\u{135}\x02\ + \x02\u{a19}\u{a1b}\x07\x0a\x02\x02\u{a1a}\u{a17}\x03\x02\x02\x02\u{a1a}\ + \u{a1b}\x03\x02\x02\x02\u{a1b}\u{a1d}\x03\x02\x02\x02\u{a1c}\u{a15}\x03\ + \x02\x02\x02\u{a1d}\u{a20}\x03\x02\x02\x02\u{a1e}\u{a1c}\x03\x02\x02\x02\ + \u{a1e}\u{a1f}\x03\x02\x02\x02\u{a1f}\u{a3}\x03\x02\x02\x02\u{a20}\u{a1e}\ + \x03\x02\x02\x02\u{a21}\u{a26}\x05\u{a2}\x52\x02\u{a22}\u{a23}\x05\u{d8}\ + \x6d\x02\u{a23}\u{a24}\x05\u{a2}\x52\x02\u{a24}\u{a26}\x03\x02\x02\x02\u{a25}\ + \u{a21}\x03\x02\x02\x02\u{a25}\u{a22}\x03\x02\x02\x02\u{a26}\u{a5}\x03\x02\ + \x02\x02\u{a27}\u{a2a}\x07\u{135}\x02\x02\u{a28}\u{a2a}\x05\u{a2}\x52\x02\ + \u{a29}\u{a27}\x03\x02\x02\x02\u{a29}\u{a28}\x03\x02\x02\x02\u{a2a}\u{a7}\ + \x03\x02\x02\x02\u{a2b}\u{a2c}\x07\u{11a}\x02\x02\u{a2c}\u{a2d}\x05\x72\ + \x3a\x02\u{a2d}\u{a2e}\x07\u{f8}\x02\x02\u{a2e}\u{a2f}\x05\x72\x3a\x02\u{a2f}\ + \u{a9}\x03\x02\x02\x02\u{a30}\u{a31}\x07\x5e\x02\x02\u{a31}\u{a32}\x07\x04\ + \x02\x02\u{a32}\u{a33}\x07\u{11b}\x02\x02\u{a33}\u{a34}\x05\x74\x3b\x02\ + \u{a34}\u{a35}\x07\x05\x02\x02\u{a35}\u{ab}\x03\x02\x02\x02\u{a36}\u{a37}\ + \x07\u{11a}\x02\x02\u{a37}\u{a3a}\x07\u{98}\x02\x02\u{a38}\u{a39}\x07\x1a\ + \x02\x02\u{a39}\u{a3b}\x05\x72\x3a\x02\u{a3a}\u{a38}\x03\x02\x02\x02\u{a3a}\ + \u{a3b}\x03\x02\x02\x02\u{a3b}\u{a3c}\x03\x02\x02\x02\u{a3c}\u{a3d}\x07\ + \u{f8}\x02\x02\u{a3d}\u{a3e}\x07\u{10d}\x02\x02\u{a3e}\u{a3f}\x07\u{ea}\ + \x02\x02\u{a3f}\u{a40}\x05\u{d8}\x6d\x02\u{a40}\u{a41}\x07\u{125}\x02\x02\ + \u{a41}\u{a49}\x05\x72\x3a\x02\u{a42}\u{a43}\x07\x2c\x02\x02\u{a43}\u{a44}\ + \x05\u{d8}\x6d\x02\u{a44}\u{a45}\x07\u{125}\x02\x02\u{a45}\u{a46}\x05\x72\ + \x3a\x02\u{a46}\u{a48}\x03\x02\x02\x02\u{a47}\u{a42}\x03\x02\x02\x02\u{a48}\ + \u{a4b}\x03\x02\x02\x02\u{a49}\u{a47}\x03\x02\x02\x02\u{a49}\u{a4a}\x03\ + \x02\x02\x02\u{a4a}\u{a77}\x03\x02\x02\x02\u{a4b}\u{a49}\x03\x02\x02\x02\ + \u{a4c}\u{a4d}\x07\u{11a}\x02\x02\u{a4d}\u{a50}\x07\u{98}\x02\x02\u{a4e}\ + \u{a4f}\x07\x1a\x02\x02\u{a4f}\u{a51}\x05\x72\x3a\x02\u{a50}\u{a4e}\x03\ + \x02\x02\x02\u{a50}\u{a51}\x03\x02\x02\x02\u{a51}\u{a52}\x03\x02\x02\x02\ + \u{a52}\u{a53}\x07\u{f8}\x02\x02\u{a53}\u{a77}\x07\x47\x02\x02\u{a54}\u{a55}\ + \x07\u{11a}\x02\x02\u{a55}\u{a56}\x07\u{a9}\x02\x02\u{a56}\u{a59}\x07\u{98}\ + \x02\x02\u{a57}\u{a58}\x07\x1a\x02\x02\u{a58}\u{a5a}\x05\x72\x3a\x02\u{a59}\ + \u{a57}\x03\x02\x02\x02\u{a59}\u{a5a}\x03\x02\x02\x02\u{a5a}\u{a5b}\x03\ + \x02\x02\x02\u{a5b}\u{a5c}\x07\u{f8}\x02\x02\u{a5c}\u{a68}\x07\x78\x02\x02\ + \u{a5d}\u{a5e}\x07\x04\x02\x02\u{a5e}\u{a63}\x05\u{d8}\x6d\x02\u{a5f}\u{a60}\ + \x07\x2c\x02\x02\u{a60}\u{a62}\x05\u{d8}\x6d\x02\u{a61}\u{a5f}\x03\x02\x02\ + \x02\u{a62}\u{a65}\x03\x02\x02\x02\u{a63}\u{a61}\x03\x02\x02\x02\u{a63}\ + \u{a64}\x03\x02\x02\x02\u{a64}\u{a66}\x03\x02\x02\x02\u{a65}\u{a63}\x03\ + \x02\x02\x02\u{a66}\u{a67}\x07\x05\x02\x02\u{a67}\u{a69}\x03\x02\x02\x02\ + \u{a68}\u{a5d}\x03\x02\x02\x02\u{a68}\u{a69}\x03\x02\x02\x02\u{a69}\u{a6a}\ + \x03\x02\x02\x02\u{a6a}\u{a6b}\x07\u{116}\x02\x02\u{a6b}\u{a6c}\x07\x04\ + \x02\x02\u{a6c}\u{a71}\x05\x72\x3a\x02\u{a6d}\u{a6e}\x07\x2c\x02\x02\u{a6e}\ + \u{a70}\x05\x72\x3a\x02\u{a6f}\u{a6d}\x03\x02\x02\x02\u{a70}\u{a73}\x03\ + \x02\x02\x02\u{a71}\u{a6f}\x03\x02\x02\x02\u{a71}\u{a72}\x03\x02\x02\x02\ + \u{a72}\u{a74}\x03\x02\x02\x02\u{a73}\u{a71}\x03\x02\x02\x02\u{a74}\u{a75}\ + \x07\x05\x02\x02\u{a75}\u{a77}\x03\x02\x02\x02\u{a76}\u{a36}\x03\x02\x02\ + \x02\u{a76}\u{a4c}\x03\x02\x02\x02\u{a76}\u{a54}\x03\x02\x02\x02\u{a77}\ + \u{ad}\x03\x02\x02\x02\u{a78}\u{a7e}\x07\u{ba}\x02\x02\u{a79}\u{a7f}\x05\ + \u{d8}\x6d\x02\u{a7a}\u{a7b}\x07\x04\x02\x02\u{a7b}\u{a7c}\x05\x38\x1d\x02\ + \u{a7c}\u{a7d}\x07\x05\x02\x02\u{a7d}\u{a7f}\x03\x02\x02\x02\u{a7e}\u{a79}\ + \x03\x02\x02\x02\u{a7e}\u{a7a}\x03\x02\x02\x02\u{a7f}\u{af}\x03\x02\x02\ + \x02\u{a80}\u{a81}\x07\u{9c}\x02\x02\u{a81}\u{a86}\x05\x52\x2a\x02\u{a82}\ + \u{a83}\x07\x2c\x02\x02\u{a83}\u{a85}\x05\x52\x2a\x02\u{a84}\u{a82}\x03\ + \x02\x02\x02\u{a85}\u{a88}\x03\x02\x02\x02\u{a86}\u{a84}\x03\x02\x02\x02\ + \u{a86}\u{a87}\x03\x02\x02\x02\u{a87}\u{a8a}\x03\x02\x02\x02\u{a88}\u{a86}\ + \x03\x02\x02\x02\u{a89}\u{a80}\x03\x02\x02\x02\u{a89}\u{a8a}\x03\x02\x02\ + \x02\u{a8a}\u{a8b}\x03\x02\x02\x02\u{a8b}\u{a8f}\x05\u{b2}\x5a\x02\u{a8c}\ + \u{a8d}\x07\x16\x02\x02\u{a8d}\u{a8e}\x07\u{97}\x02\x02\u{a8e}\u{a90}\x05\ + \x58\x2d\x02\u{a8f}\u{a8c}\x03\x02\x02\x02\u{a8f}\u{a90}\x03\x02\x02\x02\ + \u{a90}\u{a92}\x03\x02\x02\x02\u{a91}\u{a93}\x09\x10\x02\x02\u{a92}\u{a91}\ + \x03\x02\x02\x02\u{a92}\u{a93}\x03\x02\x02\x02\u{a93}\u{a99}\x03\x02\x02\ + \x02\u{a94}\u{a95}\x07\u{c1}\x02\x02\u{a95}\u{a96}\x07\x04\x02\x02\u{a96}\ + \u{a97}\x05\u{b6}\x5c\x02\u{a97}\u{a98}\x07\x05\x02\x02\u{a98}\u{a9a}\x03\ + \x02\x02\x02\u{a99}\u{a94}\x03\x02\x02\x02\u{a99}\u{a9a}\x03\x02\x02\x02\ + \u{a9a}\u{aa4}\x03\x02\x02\x02\u{a9b}\u{a9c}\x07\u{f0}\x02\x02\u{a9c}\u{aa1}\ + \x05\x5a\x2e\x02\u{a9d}\u{a9e}\x07\x2c\x02\x02\u{a9e}\u{aa0}\x05\x5a\x2e\ + \x02\u{a9f}\u{a9d}\x03\x02\x02\x02\u{aa0}\u{aa3}\x03\x02\x02\x02\u{aa1}\ + \u{a9f}\x03\x02\x02\x02\u{aa1}\u{aa2}\x03\x02\x02\x02\u{aa2}\u{aa5}\x03\ + \x02\x02\x02\u{aa3}\u{aa1}\x03\x02\x02\x02\u{aa4}\u{a9b}\x03\x02\x02\x02\ + \u{aa4}\u{aa5}\x03\x02\x02\x02\u{aa5}\u{aaf}\x03\x02\x02\x02\u{aa6}\u{aa7}\ + \x07\x45\x02\x02\u{aa7}\u{aac}\x05\x5c\x2f\x02\u{aa8}\u{aa9}\x07\x2c\x02\ + \x02\u{aa9}\u{aab}\x05\x5c\x2f\x02\u{aaa}\u{aa8}\x03\x02\x02\x02\u{aab}\ + \u{aae}\x03\x02\x02\x02\u{aac}\u{aaa}\x03\x02\x02\x02\u{aac}\u{aad}\x03\ + \x02\x02\x02\u{aad}\u{ab0}\x03\x02\x02\x02\u{aae}\u{aac}\x03\x02\x02\x02\ + \u{aaf}\u{aa6}\x03\x02\x02\x02\u{aaf}\u{ab0}\x03\x02\x02\x02\u{ab0}\u{b1}\ + \x03\x02\x02\x02\u{ab1}\u{ab2}\x07\u{cd}\x02\x02\u{ab2}\u{aca}\x05\u{b4}\ + \x5b\x02\u{ab3}\u{ab4}\x07\u{df}\x02\x02\u{ab4}\u{aca}\x05\u{b4}\x5b\x02\ + \u{ab5}\u{ab6}\x07\x6e\x02\x02\u{ab6}\u{aca}\x05\u{b4}\x5b\x02\u{ab7}\u{ab8}\ + \x07\u{cd}\x02\x02\u{ab8}\u{ab9}\x07\x22\x02\x02\u{ab9}\u{aba}\x05\u{b4}\ + \x5b\x02\u{aba}\u{abb}\x07\x1a\x02\x02\u{abb}\u{abc}\x05\u{b4}\x5b\x02\u{abc}\ + \u{aca}\x03\x02\x02\x02\u{abd}\u{abe}\x07\u{df}\x02\x02\u{abe}\u{abf}\x07\ + \x22\x02\x02\u{abf}\u{ac0}\x05\u{b4}\x5b\x02\u{ac0}\u{ac1}\x07\x1a\x02\x02\ + \u{ac1}\u{ac2}\x05\u{b4}\x5b\x02\u{ac2}\u{aca}\x03\x02\x02\x02\u{ac3}\u{ac4}\ + \x07\x6e\x02\x02\u{ac4}\u{ac5}\x07\x22\x02\x02\u{ac5}\u{ac6}\x05\u{b4}\x5b\ + \x02\u{ac6}\u{ac7}\x07\x1a\x02\x02\u{ac7}\u{ac8}\x05\u{b4}\x5b\x02\u{ac8}\ + \u{aca}\x03\x02\x02\x02\u{ac9}\u{ab1}\x03\x02\x02\x02\u{ac9}\u{ab3}\x03\ + \x02\x02\x02\u{ac9}\u{ab5}\x03\x02\x02\x02\u{ac9}\u{ab7}\x03\x02\x02\x02\ + \u{ac9}\u{abd}\x03\x02\x02\x02\u{ac9}\u{ac3}\x03\x02\x02\x02\u{aca}\u{b3}\ + \x03\x02\x02\x02\u{acb}\u{acc}\x07\u{105}\x02\x02\u{acc}\u{ad5}\x07\u{c6}\ + \x02\x02\u{acd}\u{ace}\x07\u{105}\x02\x02\u{ace}\u{ad5}\x07\x61\x02\x02\ + \u{acf}\u{ad0}\x07\x37\x02\x02\u{ad0}\u{ad5}\x07\u{de}\x02\x02\u{ad1}\u{ad2}\ + \x05\x72\x3a\x02\u{ad2}\u{ad3}\x09\x1d\x02\x02\u{ad3}\u{ad5}\x03\x02\x02\ + \x02\u{ad4}\u{acb}\x03\x02\x02\x02\u{ad4}\u{acd}\x03\x02\x02\x02\u{ad4}\ + \u{acf}\x03\x02\x02\x02\u{ad4}\u{ad1}\x03\x02\x02\x02\u{ad5}\u{b5}\x03\x02\ + \x02\x02\u{ad6}\u{ad7}\x08\x5c\x01\x02\u{ad7}\u{ad9}\x05\u{b8}\x5d\x02\u{ad8}\ + \u{ada}\x05\u{ba}\x5e\x02\u{ad9}\u{ad8}\x03\x02\x02\x02\u{ad9}\u{ada}\x03\ + \x02\x02\x02\u{ada}\u{ae2}\x03\x02\x02\x02\u{adb}\u{adc}\x0c\x04\x02\x02\ + \u{adc}\u{ae1}\x05\u{b6}\x5c\x05\u{add}\u{ade}\x0c\x03\x02\x02\u{ade}\u{adf}\ + \x07\x0c\x02\x02\u{adf}\u{ae1}\x05\u{b6}\x5c\x04\u{ae0}\u{adb}\x03\x02\x02\ + \x02\u{ae0}\u{add}\x03\x02\x02\x02\u{ae1}\u{ae4}\x03\x02\x02\x02\u{ae2}\ + \u{ae0}\x03\x02\x02\x02\u{ae2}\u{ae3}\x03\x02\x02\x02\u{ae3}\u{b7}\x03\x02\ + \x02\x02\u{ae4}\u{ae2}\x03\x02\x02\x02\u{ae5}\u{aff}\x05\u{d8}\x6d\x02\u{ae6}\ + \u{ae7}\x07\x04\x02\x02\u{ae7}\u{aff}\x07\x05\x02\x02\u{ae8}\u{ae9}\x07\ + \u{c4}\x02\x02\u{ae9}\u{aea}\x07\x04\x02\x02\u{aea}\u{aef}\x05\u{b6}\x5c\ + \x02\u{aeb}\u{aec}\x07\x2c\x02\x02\u{aec}\u{aee}\x05\u{b6}\x5c\x02\u{aed}\ + \u{aeb}\x03\x02\x02\x02\u{aee}\u{af1}\x03\x02\x02\x02\u{aef}\u{aed}\x03\ + \x02\x02\x02\u{aef}\u{af0}\x03\x02\x02\x02\u{af0}\u{af2}\x03\x02\x02\x02\ + \u{af1}\u{aef}\x03\x02\x02\x02\u{af2}\u{af3}\x07\x05\x02\x02\u{af3}\u{aff}\ + \x03\x02\x02\x02\u{af4}\u{af5}\x07\x04\x02\x02\u{af5}\u{af6}\x05\u{b6}\x5c\ + \x02\u{af6}\u{af7}\x07\x05\x02\x02\u{af7}\u{aff}\x03\x02\x02\x02\u{af8}\ + \u{aff}\x07\x0d\x02\x02\u{af9}\u{aff}\x07\x0e\x02\x02\u{afa}\u{afb}\x07\ + \x0f\x02\x02\u{afb}\u{afc}\x05\u{b6}\x5c\x02\u{afc}\u{afd}\x07\x10\x02\x02\ + \u{afd}\u{aff}\x03\x02\x02\x02\u{afe}\u{ae5}\x03\x02\x02\x02\u{afe}\u{ae6}\ + \x03\x02\x02\x02\u{afe}\u{ae8}\x03\x02\x02\x02\u{afe}\u{af4}\x03\x02\x02\ + \x02\u{afe}\u{af8}\x03\x02\x02\x02\u{afe}\u{af9}\x03\x02\x02\x02\u{afe}\ + \u{afa}\x03\x02\x02\x02\u{aff}\u{b9}\x03\x02\x02\x02\u{b00}\u{b02}\x07\u{12d}\ + \x02\x02\u{b01}\u{b03}\x07\u{131}\x02\x02\u{b02}\u{b01}\x03\x02\x02\x02\ + \u{b02}\u{b03}\x03\x02\x02\x02\u{b03}\u{b1f}\x03\x02\x02\x02\u{b04}\u{b06}\ + \x07\u{12b}\x02\x02\u{b05}\u{b07}\x07\u{131}\x02\x02\u{b06}\u{b05}\x03\x02\ + \x02\x02\u{b06}\u{b07}\x03\x02\x02\x02\u{b07}\u{b1f}\x03\x02\x02\x02\u{b08}\ + \u{b0a}\x07\u{131}\x02\x02\u{b09}\u{b0b}\x07\u{131}\x02\x02\u{b0a}\u{b09}\ + \x03\x02\x02\x02\u{b0a}\u{b0b}\x03\x02\x02\x02\u{b0b}\u{b1f}\x03\x02\x02\ + \x02\u{b0c}\u{b0d}\x07\x11\x02\x02\u{b0d}\u{b0e}\x07\u{135}\x02\x02\u{b0e}\ + \u{b10}\x07\x12\x02\x02\u{b0f}\u{b11}\x07\u{131}\x02\x02\u{b10}\u{b0f}\x03\ + \x02\x02\x02\u{b10}\u{b11}\x03\x02\x02\x02\u{b11}\u{b1f}\x03\x02\x02\x02\ + \u{b12}\u{b14}\x07\x11\x02\x02\u{b13}\u{b15}\x07\u{135}\x02\x02\u{b14}\u{b13}\ + \x03\x02\x02\x02\u{b14}\u{b15}\x03\x02\x02\x02\u{b15}\u{b16}\x03\x02\x02\ + \x02\u{b16}\u{b18}\x07\x2c\x02\x02\u{b17}\u{b19}\x07\u{135}\x02\x02\u{b18}\ + \u{b17}\x03\x02\x02\x02\u{b18}\u{b19}\x03\x02\x02\x02\u{b19}\u{b1a}\x03\ + \x02\x02\x02\u{b1a}\u{b1c}\x07\x12\x02\x02\u{b1b}\u{b1d}\x07\u{131}\x02\ + \x02\u{b1c}\u{b1b}\x03\x02\x02\x02\u{b1c}\u{b1d}\x03\x02\x02\x02\u{b1d}\ + \u{b1f}\x03\x02\x02\x02\u{b1e}\u{b00}\x03\x02\x02\x02\u{b1e}\u{b04}\x03\ + \x02\x02\x02\u{b1e}\u{b08}\x03\x02\x02\x02\u{b1e}\u{b0c}\x03\x02\x02\x02\ + \u{b1e}\u{b12}\x03\x02\x02\x02\u{b1f}\u{bb}\x03\x02\x02\x02\u{b20}\u{b21}\ + \x05\u{d8}\x6d\x02\u{b21}\u{b22}\x07\u{125}\x02\x02\u{b22}\u{b23}\x05\x72\ + \x3a\x02\u{b23}\u{bd}\x03\x02\x02\x02\u{b24}\u{b25}\x07\x63\x02\x02\u{b25}\ + \u{b29}\x09\x1e\x02\x02\u{b26}\u{b27}\x07\u{103}\x02\x02\u{b27}\u{b29}\x09\ + \x1f\x02\x02\u{b28}\u{b24}\x03\x02\x02\x02\u{b28}\u{b26}\x03\x02\x02\x02\ + \u{b29}\u{bf}\x03\x02\x02\x02\u{b2a}\u{b2b}\x07\x7f\x02\x02\u{b2b}\u{b2c}\ + \x07\u{8e}\x02\x02\u{b2c}\u{b30}\x05\u{c2}\x62\x02\u{b2d}\u{b2e}\x07\u{ce}\ + \x02\x02\u{b2e}\u{b30}\x09\x20\x02\x02\u{b2f}\u{b2a}\x03\x02\x02\x02\u{b2f}\ + \u{b2d}\x03\x02\x02\x02\u{b30}\u{c1}\x03\x02\x02\x02\u{b31}\u{b32}\x07\u{ce}\ + \x02\x02\u{b32}\u{b39}\x07\u{106}\x02\x02\u{b33}\u{b34}\x07\u{ce}\x02\x02\ + \u{b34}\u{b39}\x07\x2f\x02\x02\u{b35}\u{b36}\x07\u{d2}\x02\x02\u{b36}\u{b39}\ + \x07\u{ce}\x02\x02\u{b37}\u{b39}\x07\u{e8}\x02\x02\u{b38}\u{b31}\x03\x02\ + \x02\x02\u{b38}\u{b33}\x03\x02\x02\x02\u{b38}\u{b35}\x03\x02\x02\x02\u{b38}\ + \u{b37}\x03\x02\x02\x02\u{b39}\u{c3}\x03\x02\x02\x02\u{b3a}\u{b40}\x05\x72\ + \x3a\x02\u{b3b}\u{b3c}\x05\u{d8}\x6d\x02\u{b3c}\u{b3d}\x07\x07\x02\x02\u{b3d}\ + \u{b3e}\x05\x72\x3a\x02\u{b3e}\u{b40}\x03\x02\x02\x02\u{b3f}\u{b3a}\x03\ + \x02\x02\x02\u{b3f}\u{b3b}\x03\x02\x02\x02\u{b40}\u{c5}\x03\x02\x02\x02\ + \u{b41}\u{b42}\x05\u{d8}\x6d\x02\u{b42}\u{b43}\x07\x03\x02\x02\u{b43}\u{b44}\ + \x05\u{d8}\x6d\x02\u{b44}\u{b47}\x03\x02\x02\x02\u{b45}\u{b47}\x05\u{d8}\ + \x6d\x02\u{b46}\u{b41}\x03\x02\x02\x02\u{b46}\u{b45}\x03\x02\x02\x02\u{b47}\ + \u{c7}\x03\x02\x02\x02\u{b48}\u{b4d}\x05\u{c6}\x64\x02\u{b49}\u{b4a}\x07\ + \x2c\x02\x02\u{b4a}\u{b4c}\x05\u{c6}\x64\x02\u{b4b}\u{b49}\x03\x02\x02\x02\ + \u{b4c}\u{b4f}\x03\x02\x02\x02\u{b4d}\u{b4b}\x03\x02\x02\x02\u{b4d}\u{b4e}\ + \x03\x02\x02\x02\u{b4e}\u{c9}\x03\x02\x02\x02\u{b4f}\u{b4d}\x03\x02\x02\ + \x02\u{b50}\u{b51}\x09\x21\x02\x02\u{b51}\u{cb}\x03\x02\x02\x02\u{b52}\u{b57}\ + \x05\u{d8}\x6d\x02\u{b53}\u{b54}\x07\x03\x02\x02\u{b54}\u{b56}\x05\u{d8}\ + \x6d\x02\u{b55}\u{b53}\x03\x02\x02\x02\u{b56}\u{b59}\x03\x02\x02\x02\u{b57}\ + \u{b55}\x03\x02\x02\x02\u{b57}\u{b58}\x03\x02\x02\x02\u{b58}\u{cd}\x03\x02\ + \x02\x02\u{b59}\u{b57}\x03\x02\x02\x02\u{b5a}\u{b5b}\x07\x62\x02\x02\u{b5b}\ + \u{b5c}\x05\u{d0}\x69\x02\u{b5c}\u{b5d}\x07\x1d\x02\x02\u{b5d}\u{b5e}\x07\ + \u{ae}\x02\x02\u{b5e}\u{b5f}\x05\x78\x3d\x02\u{b5f}\u{cf}\x03\x02\x02\x02\ + \u{b60}\u{b61}\x09\x22\x02\x02\u{b61}\u{d1}\x03\x02\x02\x02\u{b62}\u{b66}\ + \x05\u{d4}\x6b\x02\u{b63}\u{b66}\x07\x3f\x02\x02\u{b64}\u{b66}\x07\x3b\x02\ + \x02\u{b65}\u{b62}\x03\x02\x02\x02\u{b65}\u{b63}\x03\x02\x02\x02\u{b65}\ + \u{b64}\x03\x02\x02\x02\u{b66}\u{d3}\x03\x02\x02\x02\u{b67}\u{b6d}\x05\u{d8}\ + \x6d\x02\u{b68}\u{b69}\x07\u{10f}\x02\x02\u{b69}\u{b6d}\x05\u{d8}\x6d\x02\ + \u{b6a}\u{b6b}\x07\u{da}\x02\x02\u{b6b}\u{b6d}\x05\u{d8}\x6d\x02\u{b6c}\ + \u{b67}\x03\x02\x02\x02\u{b6c}\u{b68}\x03\x02\x02\x02\u{b6c}\u{b6a}\x03\ + \x02\x02\x02\u{b6d}\u{d5}\x03\x02\x02\x02\u{b6e}\u{b73}\x05\u{d8}\x6d\x02\ + \u{b6f}\u{b70}\x07\x2c\x02\x02\u{b70}\u{b72}\x05\u{d8}\x6d\x02\u{b71}\u{b6f}\ + \x03\x02\x02\x02\u{b72}\u{b75}\x03\x02\x02\x02\u{b73}\u{b71}\x03\x02\x02\ + \x02\u{b73}\u{b74}\x03\x02\x02\x02\u{b74}\u{d7}\x03\x02\x02\x02\u{b75}\u{b73}\ + \x03\x02\x02\x02\u{b76}\u{b7c}\x07\u{138}\x02\x02\u{b77}\u{b7c}\x07\u{13a}\ + \x02\x02\u{b78}\u{b7c}\x05\u{dc}\x6f\x02\u{b79}\u{b7c}\x07\u{13b}\x02\x02\ + \u{b7a}\u{b7c}\x07\u{139}\x02\x02\u{b7b}\u{b76}\x03\x02\x02\x02\u{b7b}\u{b77}\ + \x03\x02\x02\x02\u{b7b}\u{b78}\x03\x02\x02\x02\u{b7b}\u{b79}\x03\x02\x02\ + \x02\u{b7b}\u{b7a}\x03\x02\x02\x02\u{b7c}\u{d9}\x03\x02\x02\x02\u{b7d}\u{b7f}\ + \x07\u{12c}\x02\x02\u{b7e}\u{b7d}\x03\x02\x02\x02\u{b7e}\u{b7f}\x03\x02\ + \x02\x02\u{b7f}\u{b80}\x03\x02\x02\x02\u{b80}\u{b8a}\x07\u{136}\x02\x02\ + \u{b81}\u{b83}\x07\u{12c}\x02\x02\u{b82}\u{b81}\x03\x02\x02\x02\u{b82}\u{b83}\ + \x03\x02\x02\x02\u{b83}\u{b84}\x03\x02\x02\x02\u{b84}\u{b8a}\x07\u{137}\ + \x02\x02\u{b85}\u{b87}\x07\u{12c}\x02\x02\u{b86}\u{b85}\x03\x02\x02\x02\ + \u{b86}\u{b87}\x03\x02\x02\x02\u{b87}\u{b88}\x03\x02\x02\x02\u{b88}\u{b8a}\ + \x07\u{135}\x02\x02\u{b89}\u{b7e}\x03\x02\x02\x02\u{b89}\u{b82}\x03\x02\ + \x02\x02\u{b89}\u{b86}\x03\x02\x02\x02\u{b8a}\u{db}\x03\x02\x02\x02\u{b8b}\ + \u{b8c}\x09\x23\x02\x02\u{b8c}\u{dd}\x03\x02\x02\x02\u{18c}\u{fa}\u{ff}\ + \u{103}\u{109}\u{10d}\u{122}\u{126}\u{12a}\u{12e}\u{136}\u{13a}\u{13d}\u{144}\ + \u{14d}\u{153}\u{157}\u{15d}\u{164}\u{16d}\u{179}\u{182}\u{18b}\u{191}\u{19c}\ + \u{1a4}\u{1ac}\u{1b3}\u{1bd}\u{1c4}\u{1cc}\u{1f0}\u{1f3}\u{1f6}\u{1fa}\u{200}\ + \u{205}\u{20c}\u{212}\u{216}\u{21a}\u{222}\u{228}\u{22c}\u{23a}\u{242}\u{255}\ + \u{26e}\u{271}\u{27b}\u{27f}\u{286}\u{290}\u{296}\u{29b}\u{29f}\u{2a5}\u{2ae}\ + \u{2b4}\u{2b8}\u{2bf}\u{2c3}\u{2cb}\u{2d0}\u{2d4}\u{2dc}\u{2e4}\u{2e9}\u{2ed}\ + \u{2f7}\u{2fe}\u{303}\u{307}\u{311}\u{314}\u{31d}\u{322}\u{328}\u{340}\u{346}\ + \u{348}\u{34e}\u{354}\u{356}\u{35e}\u{360}\u{366}\u{36c}\u{36e}\u{37d}\u{382}\ + \u{389}\u{395}\u{397}\u{39f}\u{3a1}\u{3b3}\u{3b6}\u{3ba}\u{3be}\u{3d0}\u{3d3}\ + \u{3e3}\u{3ed}\u{3f2}\u{3f8}\u{3fb}\u{404}\u{406}\u{409}\u{40f}\u{416}\u{41b}\ + \u{421}\u{425}\u{429}\u{42f}\u{43a}\u{443}\u{44d}\u{450}\u{455}\u{457}\u{45e}\ + \u{464}\u{466}\u{46a}\u{474}\u{47a}\u{47d}\u{47f}\u{48b}\u{492}\u{496}\u{49a}\ + \u{49e}\u{4a7}\u{4aa}\u{4ae}\u{4b3}\u{4b7}\u{4bf}\u{4c2}\u{4c9}\u{4cd}\u{4d4}\ + \u{4df}\u{4e2}\u{4ec}\u{4ef}\u{4fa}\u{4ff}\u{507}\u{50a}\u{50e}\u{517}\u{520}\ + \u{523}\u{52c}\u{52f}\u{532}\u{536}\u{541}\u{544}\u{54b}\u{54e}\u{561}\u{565}\ + \u{569}\u{56d}\u{571}\u{575}\u{577}\u{582}\u{587}\u{590}\u{599}\u{59c}\u{5a2}\ + \u{5ae}\u{5b1}\u{5ba}\u{5bd}\u{5c5}\u{5c8}\u{5cb}\u{5d0}\u{5d3}\u{5df}\u{5e2}\ + \u{5ea}\u{5ef}\u{5f3}\u{5f5}\u{5f7}\u{606}\u{608}\u{613}\u{628}\u{632}\u{63d}\ + \u{641}\u{643}\u{64b}\u{652}\u{65f}\u{665}\u{675}\u{67e}\u{681}\u{689}\u{68c}\ + \u{693}\u{698}\u{6a3}\u{6a6}\u{6aa}\u{6ac}\u{6b4}\u{6be}\u{6c4}\u{6c6}\u{6cd}\ + \u{6d1}\u{6d3}\u{6da}\u{6de}\u{6e0}\u{6e2}\u{6eb}\u{6f6}\u{6fa}\u{704}\u{70e}\ + \u{712}\u{71a}\u{71c}\u{729}\u{731}\u{73a}\u{740}\u{748}\u{74e}\u{752}\u{757}\ + \u{75c}\u{762}\u{770}\u{772}\u{790}\u{79b}\u{7a3}\u{7a8}\u{7ad}\u{7ba}\u{7c0}\ + \u{7c7}\u{7cc}\u{7cf}\u{7d2}\u{7d7}\u{7de}\u{7e1}\u{7ea}\u{7ed}\u{7f1}\u{7f4}\ + \u{7f7}\u{806}\u{809}\u{81c}\u{820}\u{828}\u{82c}\u{845}\u{848}\u{851}\u{857}\ + \u{85d}\u{863}\u{86c}\u{86f}\u{872}\u{885}\u{88e}\u{8a4}\u{8a7}\u{8b1}\u{8ba}\ + \u{8c0}\u{8c6}\u{8d1}\u{8d3}\u{8d8}\u{8df}\u{8e1}\u{8e7}\u{8ed}\u{8f8}\u{901}\ + \u{906}\u{90b}\u{90d}\u{90f}\u{915}\u{917}\u{921}\u{92a}\u{92c}\u{932}\u{934}\ + \u{937}\u{941}\u{943}\u{94f}\u{952}\u{957}\u{95c}\u{968}\u{96c}\u{970}\u{973}\ + \u{975}\u{97d}\u{980}\u{98a}\u{992}\u{998}\u{99a}\u{9a2}\u{9ac}\u{9b2}\u{9c0}\ + \u{9c9}\u{9d0}\u{9d5}\u{9dc}\u{9e6}\u{9eb}\u{9f2}\u{a0c}\u{a11}\u{a13}\u{a1a}\ + \u{a1e}\u{a25}\u{a29}\u{a3a}\u{a49}\u{a50}\u{a59}\u{a63}\u{a68}\u{a71}\u{a76}\ + \u{a7e}\u{a86}\u{a89}\u{a8f}\u{a92}\u{a99}\u{aa1}\u{aa4}\u{aac}\u{aaf}\u{ac9}\ + \u{ad4}\u{ad9}\u{ae0}\u{ae2}\u{aef}\u{afe}\u{b02}\u{b06}\u{b0a}\u{b10}\u{b14}\ + \u{b18}\u{b1c}\u{b1e}\u{b28}\u{b2f}\u{b38}\u{b3f}\u{b46}\u{b4d}\u{b57}\u{b65}\ + \u{b6c}\u{b73}\u{b7b}\u{b7e}\u{b82}\u{b86}\u{b89}"; + diff --git a/datafusion/sql/src/lib.rs b/datafusion/sql/src/lib.rs index efe239f458111..b7b1c9ded4a2f 100644 --- a/datafusion/sql/src/lib.rs +++ b/datafusion/sql/src/lib.rs @@ -29,5 +29,15 @@ mod statement; pub mod utils; mod values; +mod antlr +{ + pub mod presto { + pub mod prestolexer; + pub mod prestolistener; + pub mod prestoparser; + } +} +pub mod planner2; + pub use datafusion_common::{ResolvedTableReference, TableReference}; pub use sqlparser; diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs new file mode 100644 index 0000000000000..52c9cba8a69e8 --- /dev/null +++ b/datafusion/sql/src/planner2.rs @@ -0,0 +1,66 @@ +use datafusion_expr::{LogicalPlan, LogicalPlanBuilder}; + +use crate::antlr::presto::prestoparser::*; +use std::rc::Rc; +use datafusion_common::Result; + +struct Binder(); + +impl Binder { + fn bind_Query_from_singleStatement<'input>( + &self, + ctx: Rc>, + ) -> Result { + self.bind_Query_from_statement( + ctx.statement().expect("No statement in singleStatement"), + ) + } + + fn bind_Query_from_statement<'input>( + &self, + ctx: Rc>, + ) -> Result { + LogicalPlanBuilder::empty(true).build() + } +} + +pub fn bind<'input>( + root: Rc>, +) -> Result { + let binder = Binder(); + return binder.bind_Query_from_singleStatement(root); +} + +#[cfg(test)] +mod tests { + use std::rc::Rc; + + use antlr_rust::common_token_stream::CommonTokenStream; + use antlr_rust::errors::ANTLRError; + use antlr_rust::input_stream::InputStream; + use antlr_rust::token_factory::ArenaCommonFactory; + use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; + use crate::antlr::presto::prestolexer::PrestoLexer; + + use super::bind; + + fn parse<'input>(sql: &'input str, tf: &'input ArenaCommonFactory<'input>) -> Result>,ANTLRError> { + println!("test started"); + + let mut _lexer: PrestoLexer<'input, InputStream<&'input str>> = + PrestoLexer::new_with_token_factory(InputStream::new(&sql), &tf); + let token_source = CommonTokenStream::new(_lexer); + let mut parser = PrestoParser::new(token_source); + println!("\nstart parsing"); + parser.singleStatement() + } + + #[test] + fn it_works() { + let tf = ArenaCommonFactory::default(); + let root = parse("SELECT A FROM B", &tf).unwrap(); + let plan = bind(root).unwrap(); + let expected = "EmptyRelation"; + assert_eq!(expected, format!("{plan:?}")); + } +} \ No newline at end of file From 2208e78d3f90986e6bcfea4fdb45ec94369825d7 Mon Sep 17 00:00:00 2001 From: Zhong Xu Date: Tue, 10 Jan 2023 19:47:29 -0800 Subject: [PATCH 02/25] match_ctx --- datafusion/sql/src/planner2.rs | 52 ++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 52c9cba8a69e8..a5a67f8df6f8f 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -1,52 +1,68 @@ -use datafusion_expr::{LogicalPlan, LogicalPlanBuilder}; +#![allow(non_snake_case)] + +use datafusion_expr::{EmptyRelation, LogicalPlan}; use crate::antlr::presto::prestoparser::*; +use datafusion_common::{DFSchema, DFSchemaRef, DataFusionError, Result}; use std::rc::Rc; -use datafusion_common::Result; struct Binder(); impl Binder { - fn bind_Query_from_singleStatement<'input>( + fn bind_LogicalPlan_from_singleStatement<'input>( &self, ctx: Rc>, ) -> Result { - self.bind_Query_from_statement( - ctx.statement().expect("No statement in singleStatement"), - ) + self.bind_LogicalPlan_from_statement(ctx.statement().unwrap()) } - fn bind_Query_from_statement<'input>( + fn bind_LogicalPlan_from_statement<'input>( &self, ctx: Rc>, ) -> Result { - LogicalPlanBuilder::empty(true).build() + match &*ctx { + StatementContextAll::StatementDefaultContext(c) => { + self.bind_LogicalPlan_from_query(c.query().unwrap()) + } + _ => Err(DataFusionError::NotImplemented(String::from(""))), + } + } + + fn bind_LogicalPlan_from_query<'input>( + &self, + ctx: Rc>, + ) -> Result { + Ok(LogicalPlan::EmptyRelation(EmptyRelation { + produce_one_row: true, + schema: DFSchemaRef::new(DFSchema::empty()), + })) } } -pub fn bind<'input>( - root: Rc>, -) -> Result { +pub fn bind<'input>(root: Rc>) -> Result { let binder = Binder(); - return binder.bind_Query_from_singleStatement(root); + return binder.bind_LogicalPlan_from_singleStatement(root); } #[cfg(test)] mod tests { use std::rc::Rc; + use crate::antlr::presto::prestolexer::PrestoLexer; + use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; use antlr_rust::common_token_stream::CommonTokenStream; use antlr_rust::errors::ANTLRError; use antlr_rust::input_stream::InputStream; use antlr_rust::token_factory::ArenaCommonFactory; - use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; - use crate::antlr::presto::prestolexer::PrestoLexer; use super::bind; - - fn parse<'input>(sql: &'input str, tf: &'input ArenaCommonFactory<'input>) -> Result>,ANTLRError> { + + fn parse<'input>( + sql: &'input str, + tf: &'input ArenaCommonFactory<'input>, + ) -> Result>, ANTLRError> { println!("test started"); - + let mut _lexer: PrestoLexer<'input, InputStream<&'input str>> = PrestoLexer::new_with_token_factory(InputStream::new(&sql), &tf); let token_source = CommonTokenStream::new(_lexer); @@ -63,4 +79,4 @@ mod tests { let expected = "EmptyRelation"; assert_eq!(expected, format!("{plan:?}")); } -} \ No newline at end of file +} From e58cb7df6f8aca37a082bd13e2c7a0d989c0f75b Mon Sep 17 00:00:00 2001 From: Zhong Xu Date: Tue, 10 Jan 2023 20:13:41 -0800 Subject: [PATCH 03/25] queryNoWith --- datafusion/sql/src/planner2.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index a5a67f8df6f8f..ba29814e8323a 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -31,6 +31,16 @@ impl Binder { fn bind_LogicalPlan_from_query<'input>( &self, ctx: Rc>, + ) -> Result { + match ctx.with() { + None => self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap()), + Some(_) => Err(DataFusionError::NotImplemented(String::from(""))), + } + } + + fn bind_LogicalPlan_from_queryNoWith<'input>( + &self, + ctx: Rc>, ) -> Result { Ok(LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, From 37963a2f0dbba8286a3eb596dc927a3aa1f47a7c Mon Sep 17 00:00:00 2001 From: Zhong Xu Date: Wed, 11 Jan 2023 11:11:36 -0800 Subject: [PATCH 04/25] queryTerm --- datafusion/sql/src/planner2.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index ba29814e8323a..3124b06713647 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -32,21 +32,41 @@ impl Binder { &self, ctx: Rc>, ) -> Result { - match ctx.with() { - None => self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap()), - Some(_) => Err(DataFusionError::NotImplemented(String::from(""))), + if ctx.with().is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); } + self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap()) } fn bind_LogicalPlan_from_queryNoWith<'input>( &self, ctx: Rc>, + ) -> Result { + if ctx.sortItem_all().len() > 0 { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.offset.is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.limit.is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.FETCH().is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + self.bind_LogicalPlan_from_queryTerm(ctx.queryTerm().unwrap()) + } + + fn bind_LogicalPlan_from_queryTerm<'input>( + &self, + ctx: Rc>, ) -> Result { Ok(LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, schema: DFSchemaRef::new(DFSchema::empty()), })) } + } pub fn bind<'input>(root: Rc>) -> Result { From ee26d41bf6796f94deccce17d4ddccefdacc6c93 Mon Sep 17 00:00:00 2001 From: Zhong Xu Date: Wed, 11 Jan 2023 14:39:16 -0800 Subject: [PATCH 05/25] [try]querySpecification --- datafusion/sql/src/planner2.rs | 108 ++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 2 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 3124b06713647..acb82d51cf38c 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -22,12 +22,19 @@ impl Binder { ) -> Result { match &*ctx { StatementContextAll::StatementDefaultContext(c) => { - self.bind_LogicalPlan_from_query(c.query().unwrap()) + self.bind_LogicalPlan_from_statementDefault(c) } _ => Err(DataFusionError::NotImplemented(String::from(""))), } } + fn bind_LogicalPlan_from_statementDefault<'input>( + &self, + ctx: &StatementDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_query(ctx.query().unwrap()) + } + fn bind_LogicalPlan_from_query<'input>( &self, ctx: Rc>, @@ -61,12 +68,109 @@ impl Binder { &self, ctx: Rc>, ) -> Result { + match &*ctx { + QueryTermContextAll::QueryTermDefaultContext(c) => { + self.bind_LogicalPlan_from_queryTermDefault(c) + } + _ => Err(DataFusionError::NotImplemented(String::from(""))), + } + } + + fn bind_LogicalPlan_from_queryTermDefault<'input>( + &self, + ctx: &QueryTermDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_queryPrimary(ctx.queryPrimary().unwrap()) + } + + fn bind_LogicalPlan_from_queryPrimary<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + QueryPrimaryContextAll::QueryPrimaryDefaultContext(c) => { + self.bind_LogicalPlan_from_queryPrimaryDefault(c) + } + _ => Err(DataFusionError::NotImplemented(String::from(""))), + } + } + + fn bind_LogicalPlan_from_queryPrimaryDefault<'input>( + &self, + ctx: &QueryPrimaryDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_querySpecification(ctx.querySpecification().unwrap()) + } + + fn bind_LogicalPlan_from_querySpecification<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.setQuantifier().is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.where_.is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.groupBy().is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.having.is_some() { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.windowDefinition_all().len() > 0 { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + if ctx.relation_all().len() > 0 { + return Err(DataFusionError::NotImplemented(String::from(""))); + } + let parent = if ctx.relation_all().len() > 0 { + EmptyRelation { + produce_one_row: true, + schema: DFSchemaRef::new(DFSchema::empty()), + } + } else { + self.bind_LogicalPlan_from_relation(ctx.relation(0)) + }; + + // TODO + Ok(LogicalPlan::EmptyRelation(EmptyRelation { + produce_one_row: true, + schema: DFSchemaRef::new(DFSchema::empty()), + })) + } + + fn bind_LogicalPlan_from_relation<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + RelationContextAll::RelationDefaultContext(c) => { + self.bind_LogicalPlan_from_relationDefault(c) + } + _ => Err(DataFusionError::NotImplemented(String::from(""))), + } + } + + fn bind_LogicalPlan_from_relationDefault<'input>( + &self, + ctx: &RelationDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_sampledRelation(ctx.sampledRelation().unwrap()) + } + + fn bind_LogicalPlan_from_sampledRelation<'input>( + &self, + ctx: Rc>, + ) -> Result { + // TODO Ok(LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, schema: DFSchemaRef::new(DFSchema::empty()), - })) + })) } + } pub fn bind<'input>(root: Rc>) -> Result { From 0361727d8bb4fd8b655c210fd7e627d2b5feb514 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Wed, 11 Jan 2023 18:57:34 -0800 Subject: [PATCH 06/25] querySpecification --- datafusion/sql/src/planner2.rs | 135 ++++++++++++++++++++++++++------- 1 file changed, 109 insertions(+), 26 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index acb82d51cf38c..204ad4447e1f9 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -24,7 +24,9 @@ impl Binder { StatementContextAll::StatementDefaultContext(c) => { self.bind_LogicalPlan_from_statementDefault(c) } - _ => Err(DataFusionError::NotImplemented(String::from(""))), + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_statement", + ))), } } @@ -40,7 +42,9 @@ impl Binder { ctx: Rc>, ) -> Result { if ctx.with().is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_query", + ))); } self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap()) } @@ -50,16 +54,24 @@ impl Binder { ctx: Rc>, ) -> Result { if ctx.sortItem_all().len() > 0 { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented sortItem", + ))); } if ctx.offset.is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented offset", + ))); } if ctx.limit.is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented limit", + ))); } if ctx.FETCH().is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented FETCH", + ))); } self.bind_LogicalPlan_from_queryTerm(ctx.queryTerm().unwrap()) } @@ -72,7 +84,9 @@ impl Binder { QueryTermContextAll::QueryTermDefaultContext(c) => { self.bind_LogicalPlan_from_queryTermDefault(c) } - _ => Err(DataFusionError::NotImplemented(String::from(""))), + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_queryTerm", + ))), } } @@ -91,7 +105,9 @@ impl Binder { QueryPrimaryContextAll::QueryPrimaryDefaultContext(c) => { self.bind_LogicalPlan_from_queryPrimaryDefault(c) } - _ => Err(DataFusionError::NotImplemented(String::from(""))), + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_queryPrimary", + ))), } } @@ -107,37 +123,49 @@ impl Binder { ctx: Rc>, ) -> Result { if ctx.setQuantifier().is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented setQuantifier", + ))); } if ctx.where_.is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented where", + ))); } if ctx.groupBy().is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented groupby", + ))); } if ctx.having.is_some() { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented having", + ))); } if ctx.windowDefinition_all().len() > 0 { - return Err(DataFusionError::NotImplemented(String::from(""))); + return Err(DataFusionError::NotImplemented(String::from( + "not implemented windowDefinition", + ))); } - if ctx.relation_all().len() > 0 { - return Err(DataFusionError::NotImplemented(String::from(""))); + if ctx.relation_all().len() > 1 { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented relation", + ))); } let parent = if ctx.relation_all().len() > 0 { - EmptyRelation { + LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, schema: DFSchemaRef::new(DFSchema::empty()), - } + }) } else { - self.bind_LogicalPlan_from_relation(ctx.relation(0)) + self.bind_LogicalPlan_from_relation(ctx.relation(0).unwrap())? }; // TODO Ok(LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, schema: DFSchemaRef::new(DFSchema::empty()), - })) + })) } fn bind_LogicalPlan_from_relation<'input>( @@ -148,10 +176,12 @@ impl Binder { RelationContextAll::RelationDefaultContext(c) => { self.bind_LogicalPlan_from_relationDefault(c) } - _ => Err(DataFusionError::NotImplemented(String::from(""))), + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_relation", + ))), } } - + fn bind_LogicalPlan_from_relationDefault<'input>( &self, ctx: &RelationDefaultContext<'input>, @@ -161,16 +191,69 @@ impl Binder { fn bind_LogicalPlan_from_sampledRelation<'input>( &self, - ctx: Rc>, + ctx: Rc>, ) -> Result { - // TODO + if ctx.sampleType().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented sampleType", + ))); + } + self.bind_LogicalPlan_from_patternRecognition(ctx.patternRecognition().unwrap()) + } + + fn bind_LogicalPlan_from_patternRecognition<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.MATCH_RECOGNIZE().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented MATCH_RECOGNIZE", + ))); + } + self.bind_LogicalPlan_from_aliasedRelation(ctx.aliasedRelation().unwrap()) + } + + fn bind_LogicalPlan_from_aliasedRelation<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.identifier().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented identifier in aliasedRelation", + ))); + } + self.bind_LogicalPlan_from_relationPrimary(ctx.relationPrimary().unwrap()) + } + + fn bind_LogicalPlan_from_relationPrimary<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + RelationPrimaryContextAll::TableNameContext(c) => { + self.bind_LogicalPlan_from_tableName(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_relationPrimary", + ))), + } + } + + fn bind_LogicalPlan_from_tableName<'input>( + &self, + ctx: &TableNameContext<'input>, + ) -> Result { + if ctx.queryPeriod().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented queryPeriod", + ))); + } + Ok(LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, schema: DFSchemaRef::new(DFSchema::empty()), - })) + })) } - - } pub fn bind<'input>(root: Rc>) -> Result { From 07be2ce9aaf1ccb75de12b31709714622065d135 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Fri, 13 Jan 2023 10:11:16 -0800 Subject: [PATCH 07/25] remove struct Binder --- datafusion/sql/src/planner2.rs | 507 +++++++++++++++++++-------------- 1 file changed, 287 insertions(+), 220 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 204ad4447e1f9..8ab48e1b3c538 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -1,278 +1,291 @@ #![allow(non_snake_case)] -use datafusion_expr::{EmptyRelation, LogicalPlan}; +use datafusion_expr::{EmptyRelation, LogicalPlan, TableSource}; use crate::antlr::presto::prestoparser::*; -use datafusion_common::{DFSchema, DFSchemaRef, DataFusionError, Result}; -use std::rc::Rc; +use datafusion_common::{DFSchema, DFSchemaRef, DataFusionError, Result, TableReference}; +use std::{rc::Rc, result, sync::Arc}; -struct Binder(); +struct NotAbleToResolve; -impl Binder { - fn bind_LogicalPlan_from_singleStatement<'input>( +trait BindingContext { + fn resolve_table( &self, - ctx: Rc>, - ) -> Result { - self.bind_LogicalPlan_from_statement(ctx.statement().unwrap()) + _: TableReference, + ) -> result::Result, NotAbleToResolve> { + Err(NotAbleToResolve {}) } +} - fn bind_LogicalPlan_from_statement<'input>( - &self, - ctx: Rc>, - ) -> Result { - match &*ctx { - StatementContextAll::StatementDefaultContext(c) => { - self.bind_LogicalPlan_from_statementDefault(c) - } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_statement", - ))), - } - } +struct BindingContextStack { + stack: Vec>, +} - fn bind_LogicalPlan_from_statementDefault<'input>( - &self, - ctx: &StatementDefaultContext<'input>, - ) -> Result { - self.bind_LogicalPlan_from_query(ctx.query().unwrap()) - } +fn bind_LogicalPlan_from_singleStatement<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + bind_LogicalPlan_from_statement(bc, ctx.statement().unwrap()) +} - fn bind_LogicalPlan_from_query<'input>( - &self, - ctx: Rc>, - ) -> Result { - if ctx.with().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_query", - ))); +fn bind_LogicalPlan_from_statement<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + match &*ctx { + StatementContextAll::StatementDefaultContext(c) => { + bind_LogicalPlan_from_statementDefault(bc, c) } - self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap()) + // StatmentContextAll::Use + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_statement", + ))), } +} - fn bind_LogicalPlan_from_queryNoWith<'input>( - &self, - ctx: Rc>, - ) -> Result { - if ctx.sortItem_all().len() > 0 { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented sortItem", - ))); - } - if ctx.offset.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented offset", - ))); - } - if ctx.limit.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented limit", - ))); - } - if ctx.FETCH().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented FETCH", - ))); - } - self.bind_LogicalPlan_from_queryTerm(ctx.queryTerm().unwrap()) - } +fn bind_LogicalPlan_from_statementDefault<'input>( + bc: BindingContextStack, + ctx: &StatementDefaultContext<'input>, +) -> Result { + bind_LogicalPlan_from_query(bc, ctx.query().unwrap()) +} - fn bind_LogicalPlan_from_queryTerm<'input>( - &self, - ctx: Rc>, - ) -> Result { - match &*ctx { - QueryTermContextAll::QueryTermDefaultContext(c) => { - self.bind_LogicalPlan_from_queryTermDefault(c) - } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_queryTerm", - ))), - } +fn bind_LogicalPlan_from_query<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + if ctx.with().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_query", + ))); } + bind_LogicalPlan_from_queryNoWith(bc, ctx.queryNoWith().unwrap()) +} - fn bind_LogicalPlan_from_queryTermDefault<'input>( - &self, - ctx: &QueryTermDefaultContext<'input>, - ) -> Result { - self.bind_LogicalPlan_from_queryPrimary(ctx.queryPrimary().unwrap()) +fn bind_LogicalPlan_from_queryNoWith<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + if ctx.sortItem_all().len() > 0 { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented sortItem", + ))); } + if ctx.offset.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented offset", + ))); + } + if ctx.limit.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented limit", + ))); + } + if ctx.FETCH().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented FETCH", + ))); + } + bind_LogicalPlan_from_queryTerm(bc, ctx.queryTerm().unwrap()) +} - fn bind_LogicalPlan_from_queryPrimary<'input>( - &self, - ctx: Rc>, - ) -> Result { - match &*ctx { - QueryPrimaryContextAll::QueryPrimaryDefaultContext(c) => { - self.bind_LogicalPlan_from_queryPrimaryDefault(c) - } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_queryPrimary", - ))), +fn bind_LogicalPlan_from_queryTerm<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + match &*ctx { + QueryTermContextAll::QueryTermDefaultContext(c) => { + bind_LogicalPlan_from_queryTermDefault(bc, c) } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_queryTerm", + ))), } +} - fn bind_LogicalPlan_from_queryPrimaryDefault<'input>( - &self, - ctx: &QueryPrimaryDefaultContext<'input>, - ) -> Result { - self.bind_LogicalPlan_from_querySpecification(ctx.querySpecification().unwrap()) - } +fn bind_LogicalPlan_from_queryTermDefault<'input>( + bc: BindingContextStack, + ctx: &QueryTermDefaultContext<'input>, +) -> Result { + bind_LogicalPlan_from_queryPrimary(bc, ctx.queryPrimary().unwrap()) +} - fn bind_LogicalPlan_from_querySpecification<'input>( - &self, - ctx: Rc>, - ) -> Result { - if ctx.setQuantifier().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented setQuantifier", - ))); - } - if ctx.where_.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented where", - ))); +fn bind_LogicalPlan_from_queryPrimary<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + match &*ctx { + QueryPrimaryContextAll::QueryPrimaryDefaultContext(c) => { + bind_LogicalPlan_from_queryPrimaryDefault(bc, c) } - if ctx.groupBy().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented groupby", - ))); - } - if ctx.having.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented having", - ))); - } - if ctx.windowDefinition_all().len() > 0 { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented windowDefinition", - ))); - } - if ctx.relation_all().len() > 1 { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented relation", - ))); - } - let parent = if ctx.relation_all().len() > 0 { - LogicalPlan::EmptyRelation(EmptyRelation { - produce_one_row: true, - schema: DFSchemaRef::new(DFSchema::empty()), - }) - } else { - self.bind_LogicalPlan_from_relation(ctx.relation(0).unwrap())? - }; + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_queryPrimary", + ))), + } +} + +fn bind_LogicalPlan_from_queryPrimaryDefault<'input>( + bc: BindingContextStack, + ctx: &QueryPrimaryDefaultContext<'input>, +) -> Result { + bind_LogicalPlan_from_querySpecification(bc, ctx.querySpecification().unwrap()) +} - // TODO - Ok(LogicalPlan::EmptyRelation(EmptyRelation { +fn bind_LogicalPlan_from_querySpecification<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + if ctx.setQuantifier().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented setQuantifier", + ))); + } + if ctx.where_.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented where", + ))); + } + if ctx.groupBy().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented groupby", + ))); + } + if ctx.having.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented having", + ))); + } + if ctx.windowDefinition_all().len() > 0 { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented windowDefinition", + ))); + } + if ctx.relation_all().len() > 1 { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented relation", + ))); + } + let parent = if ctx.relation_all().len() > 0 { + LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, schema: DFSchemaRef::new(DFSchema::empty()), - })) - } + }) + } else { + bind_LogicalPlan_from_relation(bc, ctx.relation(0).unwrap())? + }; - fn bind_LogicalPlan_from_relation<'input>( - &self, - ctx: Rc>, - ) -> Result { - match &*ctx { - RelationContextAll::RelationDefaultContext(c) => { - self.bind_LogicalPlan_from_relationDefault(c) - } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_relation", - ))), + // TODO + Ok(LogicalPlan::EmptyRelation(EmptyRelation { + produce_one_row: true, + schema: DFSchemaRef::new(DFSchema::empty()), + })) +} + +fn bind_LogicalPlan_from_relation<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + match &*ctx { + RelationContextAll::RelationDefaultContext(c) => { + bind_LogicalPlan_from_relationDefault(bc, c) } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_relation", + ))), } +} - fn bind_LogicalPlan_from_relationDefault<'input>( - &self, - ctx: &RelationDefaultContext<'input>, - ) -> Result { - self.bind_LogicalPlan_from_sampledRelation(ctx.sampledRelation().unwrap()) - } +fn bind_LogicalPlan_from_relationDefault<'input>( + bc: BindingContextStack, + ctx: &RelationDefaultContext<'input>, +) -> Result { + bind_LogicalPlan_from_sampledRelation(bc, ctx.sampledRelation().unwrap()) +} - fn bind_LogicalPlan_from_sampledRelation<'input>( - &self, - ctx: Rc>, - ) -> Result { - if ctx.sampleType().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented sampleType", - ))); - } - self.bind_LogicalPlan_from_patternRecognition(ctx.patternRecognition().unwrap()) +fn bind_LogicalPlan_from_sampledRelation<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + if ctx.sampleType().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented sampleType", + ))); } + bind_LogicalPlan_from_patternRecognition(bc, ctx.patternRecognition().unwrap()) +} - fn bind_LogicalPlan_from_patternRecognition<'input>( - &self, - ctx: Rc>, - ) -> Result { - if ctx.MATCH_RECOGNIZE().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented MATCH_RECOGNIZE", - ))); - } - self.bind_LogicalPlan_from_aliasedRelation(ctx.aliasedRelation().unwrap()) +fn bind_LogicalPlan_from_patternRecognition<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + if ctx.MATCH_RECOGNIZE().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented MATCH_RECOGNIZE", + ))); } + bind_LogicalPlan_from_aliasedRelation(bc, ctx.aliasedRelation().unwrap()) +} - fn bind_LogicalPlan_from_aliasedRelation<'input>( - &self, - ctx: Rc>, - ) -> Result { - if ctx.identifier().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented identifier in aliasedRelation", - ))); - } - self.bind_LogicalPlan_from_relationPrimary(ctx.relationPrimary().unwrap()) +fn bind_LogicalPlan_from_aliasedRelation<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + if ctx.identifier().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented identifier in aliasedRelation", + ))); } + bind_LogicalPlan_from_relationPrimary(bc, ctx.relationPrimary().unwrap()) +} - fn bind_LogicalPlan_from_relationPrimary<'input>( - &self, - ctx: Rc>, - ) -> Result { - match &*ctx { - RelationPrimaryContextAll::TableNameContext(c) => { - self.bind_LogicalPlan_from_tableName(c) - } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_relationPrimary", - ))), +fn bind_LogicalPlan_from_relationPrimary<'input>( + bc: BindingContextStack, + ctx: Rc>, +) -> Result { + match &*ctx { + RelationPrimaryContextAll::TableNameContext(c) => { + bind_LogicalPlan_from_tableName(bc, c) } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_relationPrimary", + ))), } +} - fn bind_LogicalPlan_from_tableName<'input>( - &self, - ctx: &TableNameContext<'input>, - ) -> Result { - if ctx.queryPeriod().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented queryPeriod", - ))); - } - - Ok(LogicalPlan::EmptyRelation(EmptyRelation { - produce_one_row: true, - schema: DFSchemaRef::new(DFSchema::empty()), - })) +fn bind_LogicalPlan_from_tableName<'input>( + bc: BindingContextStack, + ctx: &TableNameContext<'input>, +) -> Result { + if ctx.queryPeriod().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented queryPeriod", + ))); } -} -pub fn bind<'input>(root: Rc>) -> Result { - let binder = Binder(); - return binder.bind_LogicalPlan_from_singleStatement(root); + Ok(LogicalPlan::EmptyRelation(EmptyRelation { + produce_one_row: true, + schema: DFSchemaRef::new(DFSchema::empty()), + })) } #[cfg(test)] mod tests { use std::rc::Rc; + use std::result; + use std::sync::Arc; use crate::antlr::presto::prestolexer::PrestoLexer; use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; + use crate::planner2::{bind_LogicalPlan_from_singleStatement, BindingContextStack}; use antlr_rust::common_token_stream::CommonTokenStream; use antlr_rust::errors::ANTLRError; use antlr_rust::input_stream::InputStream; use antlr_rust::token_factory::ArenaCommonFactory; + use arrow_schema::{DataType, Field, Schema, SchemaRef, TimeUnit}; + use datafusion_common::TableReference; + use datafusion_expr::{LogicalPlan, TableSource}; - use super::bind; + use super::{BindingContext, NotAbleToResolve}; fn parse<'input>( sql: &'input str, @@ -288,11 +301,65 @@ mod tests { parser.singleStatement() } + struct EmptyTable { + table_schema: SchemaRef, + } + + impl EmptyTable { + fn new(table_schema: SchemaRef) -> Self { + Self { table_schema } + } + } + + impl TableSource for EmptyTable { + fn as_any(&self) -> &dyn std::any::Any { + self + } + + fn schema(&self) -> SchemaRef { + self.table_schema.clone() + } + } + + struct TableBindingContext; + + impl BindingContext for TableBindingContext { + fn resolve_table( + &self, + name: TableReference, + ) -> result::Result, NotAbleToResolve> { + let schema = match name.table() { + "person" => Ok(Schema::new(vec![ + Field::new("id", DataType::UInt32, false), + Field::new("first_name", DataType::Utf8, false), + Field::new("last_name", DataType::Utf8, false), + Field::new("age", DataType::Int32, false), + Field::new("state", DataType::Utf8, false), + Field::new("salary", DataType::Float64, false), + Field::new( + "birth_date", + DataType::Timestamp(TimeUnit::Nanosecond, None), + false, + ), + Field::new("😀", DataType::Int32, false), + ])), + _ => Err(NotAbleToResolve), + }; + + match schema { + Ok(t) => Ok(Arc::new(EmptyTable::new(Arc::new(t)))), + Err(e) => Err(e), + } + } + } #[test] fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT A FROM B", &tf).unwrap(); - let plan = bind(root).unwrap(); + let bc = BindingContextStack { + stack: vec![Box::new(TableBindingContext {})], + }; + let plan = bind_LogicalPlan_from_singleStatement(bc, root).unwrap(); let expected = "EmptyRelation"; assert_eq!(expected, format!("{plan:?}")); } From 39f5f5c44429610cbf92f55c153abaacb10ef9d4 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Fri, 13 Jan 2023 18:22:34 -0800 Subject: [PATCH 08/25] bind tableRef --- datafusion/sql/src/planner2.rs | 147 +++++++++++++++++++++++---------- 1 file changed, 105 insertions(+), 42 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 8ab48e1b3c538..088e6f97478ef 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -1,19 +1,21 @@ #![allow(non_snake_case)] +#![allow(dead_code)] -use datafusion_expr::{EmptyRelation, LogicalPlan, TableSource}; +use antlr_rust::tree::ParseTree; +use datafusion_expr::{EmptyRelation, LogicalPlan, LogicalPlanBuilder, TableSource}; use crate::antlr::presto::prestoparser::*; -use datafusion_common::{DFSchema, DFSchemaRef, DataFusionError, Result, TableReference}; -use std::{rc::Rc, result, sync::Arc}; - -struct NotAbleToResolve; +use datafusion_common::{ + DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, +}; +use std::{rc::Rc, sync::Arc}; trait BindingContext { - fn resolve_table( - &self, - _: TableReference, - ) -> result::Result, NotAbleToResolve> { - Err(NotAbleToResolve {}) + fn resolve_table(&self, name: TableReference) -> Result> { + Err(DataFusionError::Plan(format!( + "No table named: {} found", + name.table() + ))) } } @@ -21,15 +23,30 @@ struct BindingContextStack { stack: Vec>, } +impl BindingContext for BindingContextStack { + fn resolve_table(&self, table_ref: TableReference) -> Result> { + for bc in self.stack.iter().rev() { + let result = bc.resolve_table(table_ref); + if result.is_ok() { + return result; + } + } + Err(DataFusionError::Plan(format!( + "No table named: {} found", + table_ref.table() + ))) + } +} + fn bind_LogicalPlan_from_singleStatement<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { bind_LogicalPlan_from_statement(bc, ctx.statement().unwrap()) } fn bind_LogicalPlan_from_statement<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { match &*ctx { @@ -44,14 +61,14 @@ fn bind_LogicalPlan_from_statement<'input>( } fn bind_LogicalPlan_from_statementDefault<'input>( - bc: BindingContextStack, + bc: Rc, ctx: &StatementDefaultContext<'input>, ) -> Result { bind_LogicalPlan_from_query(bc, ctx.query().unwrap()) } fn bind_LogicalPlan_from_query<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { if ctx.with().is_some() { @@ -63,7 +80,7 @@ fn bind_LogicalPlan_from_query<'input>( } fn bind_LogicalPlan_from_queryNoWith<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { if ctx.sortItem_all().len() > 0 { @@ -90,7 +107,7 @@ fn bind_LogicalPlan_from_queryNoWith<'input>( } fn bind_LogicalPlan_from_queryTerm<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { match &*ctx { @@ -104,14 +121,14 @@ fn bind_LogicalPlan_from_queryTerm<'input>( } fn bind_LogicalPlan_from_queryTermDefault<'input>( - bc: BindingContextStack, + bc: Rc, ctx: &QueryTermDefaultContext<'input>, ) -> Result { bind_LogicalPlan_from_queryPrimary(bc, ctx.queryPrimary().unwrap()) } fn bind_LogicalPlan_from_queryPrimary<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { match &*ctx { @@ -125,14 +142,14 @@ fn bind_LogicalPlan_from_queryPrimary<'input>( } fn bind_LogicalPlan_from_queryPrimaryDefault<'input>( - bc: BindingContextStack, + bc: Rc, ctx: &QueryPrimaryDefaultContext<'input>, ) -> Result { bind_LogicalPlan_from_querySpecification(bc, ctx.querySpecification().unwrap()) } fn bind_LogicalPlan_from_querySpecification<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { if ctx.setQuantifier().is_some() { @@ -174,6 +191,7 @@ fn bind_LogicalPlan_from_querySpecification<'input>( bind_LogicalPlan_from_relation(bc, ctx.relation(0).unwrap())? }; + // TODO Ok(LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, @@ -182,7 +200,7 @@ fn bind_LogicalPlan_from_querySpecification<'input>( } fn bind_LogicalPlan_from_relation<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { match &*ctx { @@ -196,14 +214,14 @@ fn bind_LogicalPlan_from_relation<'input>( } fn bind_LogicalPlan_from_relationDefault<'input>( - bc: BindingContextStack, + bc: Rc, ctx: &RelationDefaultContext<'input>, ) -> Result { bind_LogicalPlan_from_sampledRelation(bc, ctx.sampledRelation().unwrap()) } fn bind_LogicalPlan_from_sampledRelation<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { if ctx.sampleType().is_some() { @@ -215,7 +233,7 @@ fn bind_LogicalPlan_from_sampledRelation<'input>( } fn bind_LogicalPlan_from_patternRecognition<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { if ctx.MATCH_RECOGNIZE().is_some() { @@ -227,7 +245,7 @@ fn bind_LogicalPlan_from_patternRecognition<'input>( } fn bind_LogicalPlan_from_aliasedRelation<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { if ctx.identifier().is_some() { @@ -239,7 +257,7 @@ fn bind_LogicalPlan_from_aliasedRelation<'input>( } fn bind_LogicalPlan_from_relationPrimary<'input>( - bc: BindingContextStack, + bc: Rc, ctx: Rc>, ) -> Result { match &*ctx { @@ -253,7 +271,7 @@ fn bind_LogicalPlan_from_relationPrimary<'input>( } fn bind_LogicalPlan_from_tableName<'input>( - bc: BindingContextStack, + bc: Rc, ctx: &TableNameContext<'input>, ) -> Result { if ctx.queryPeriod().is_some() { @@ -262,10 +280,54 @@ fn bind_LogicalPlan_from_tableName<'input>( ))); } - Ok(LogicalPlan::EmptyRelation(EmptyRelation { - produce_one_row: true, - schema: DFSchemaRef::new(DFSchema::empty()), - })) + let table_ref_result = bind_OwnedTableReference_from_qualified_name( + bc.clone(), + ctx.qualifiedName().unwrap(), + ); + if table_ref_result.is_err() { + return Err(table_ref_result.unwrap_err()); + } + match bc + .clone() + .resolve_table(table_ref_result.unwrap().as_table_reference()) + { + Ok(table_source) => { + LogicalPlanBuilder::scan(&String::from("B"), table_source, None)?.build() + } + Err(e) => Err(e), + } +} + +fn bind_OwnedTableReference_from_qualified_name<'input>( + bc: Rc, + ctx: Rc>, +) -> Result { + let identifiers: Vec<_> = ctx + .identifier_all() + .iter() + .map(|i| bind_str_from_identifier(bc.clone(), i)) + .collect(); + if identifiers.len() == 1 { + Ok(OwnedTableReference::Bare { + table: identifiers[0].clone(), + }) + } else if identifiers.len() == 2 { + Ok(OwnedTableReference::Partial { + schema: identifiers[0].clone(), + table: identifiers[1].clone(), + }) + } else { + Err(DataFusionError::Plan( + "Cannot bind TableReference".to_owned(), + )) + } +} + +fn bind_str_from_identifier<'input>( + _: Rc, + ctx: &Rc>, +) -> String { + ctx.get_text() } #[cfg(test)] @@ -282,15 +344,16 @@ mod tests { use antlr_rust::input_stream::InputStream; use antlr_rust::token_factory::ArenaCommonFactory; use arrow_schema::{DataType, Field, Schema, SchemaRef, TimeUnit}; - use datafusion_common::TableReference; - use datafusion_expr::{LogicalPlan, TableSource}; + use datafusion_common::Result; + use datafusion_common::{DataFusionError, TableReference}; + use datafusion_expr::{TableSource}; - use super::{BindingContext, NotAbleToResolve}; + use super::BindingContext; fn parse<'input>( sql: &'input str, tf: &'input ArenaCommonFactory<'input>, - ) -> Result>, ANTLRError> { + ) -> result::Result>, ANTLRError> { println!("test started"); let mut _lexer: PrestoLexer<'input, InputStream<&'input str>> = @@ -324,10 +387,7 @@ mod tests { struct TableBindingContext; impl BindingContext for TableBindingContext { - fn resolve_table( - &self, - name: TableReference, - ) -> result::Result, NotAbleToResolve> { + fn resolve_table(&self, name: TableReference) -> Result> { let schema = match name.table() { "person" => Ok(Schema::new(vec![ Field::new("id", DataType::UInt32, false), @@ -343,7 +403,10 @@ mod tests { ), Field::new("😀", DataType::Int32, false), ])), - _ => Err(NotAbleToResolve), + _ => Err(DataFusionError::Plan(format!( + "No table named: {} found", + name.table() + ))), }; match schema { @@ -356,9 +419,9 @@ mod tests { fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT A FROM B", &tf).unwrap(); - let bc = BindingContextStack { + let bc = Rc::new(BindingContextStack { stack: vec![Box::new(TableBindingContext {})], - }; + }); let plan = bind_LogicalPlan_from_singleStatement(bc, root).unwrap(); let expected = "EmptyRelation"; assert_eq!(expected, format!("{plan:?}")); From 1856370a7d99afb631e6f14f22f62a52f5ef6515 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Fri, 13 Jan 2023 19:05:49 -0800 Subject: [PATCH 09/25] binding context --- datafusion/sql/src/planner2.rs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 088e6f97478ef..2e199e82c3a14 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -8,7 +8,12 @@ use crate::antlr::presto::prestoparser::*; use datafusion_common::{ DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::{rc::Rc, sync::Arc}; +use std::{ + cell::{Cell, RefCell}, + iter, + rc::Rc, + sync::Arc, +}; trait BindingContext { fn resolve_table(&self, name: TableReference) -> Result> { @@ -20,12 +25,18 @@ trait BindingContext { } struct BindingContextStack { - stack: Vec>, + stack: RefCell>>, +} + +impl BindingContextStack { + fn push(&self, bc: Box) { + self.stack.borrow_mut().push(bc); + } } impl BindingContext for BindingContextStack { fn resolve_table(&self, table_ref: TableReference) -> Result> { - for bc in self.stack.iter().rev() { + for bc in self.stack.borrow().iter().rev() { let result = bc.resolve_table(table_ref); if result.is_ok() { return result; @@ -191,7 +202,6 @@ fn bind_LogicalPlan_from_querySpecification<'input>( bind_LogicalPlan_from_relation(bc, ctx.relation(0).unwrap())? }; - // TODO Ok(LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, @@ -332,6 +342,7 @@ fn bind_str_from_identifier<'input>( #[cfg(test)] mod tests { + use std::cell::RefCell; use std::rc::Rc; use std::result; use std::sync::Arc; @@ -346,7 +357,7 @@ mod tests { use arrow_schema::{DataType, Field, Schema, SchemaRef, TimeUnit}; use datafusion_common::Result; use datafusion_common::{DataFusionError, TableReference}; - use datafusion_expr::{TableSource}; + use datafusion_expr::TableSource; use super::BindingContext; @@ -420,7 +431,7 @@ mod tests { let tf = ArenaCommonFactory::default(); let root = parse("SELECT A FROM B", &tf).unwrap(); let bc = Rc::new(BindingContextStack { - stack: vec![Box::new(TableBindingContext {})], + stack: RefCell::new(vec![Box::new(TableBindingContext {})]), }); let plan = bind_LogicalPlan_from_singleStatement(bc, root).unwrap(); let expected = "EmptyRelation"; From aae45ff21a5a16bc12a6781e02a287f103e3a6d2 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Fri, 13 Jan 2023 22:51:20 -0800 Subject: [PATCH 10/25] simplest --- datafusion/sql/src/planner2.rs | 87 ++++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 20 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 2e199e82c3a14..d65f6acb850cb 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -2,28 +2,52 @@ #![allow(dead_code)] use antlr_rust::tree::ParseTree; -use datafusion_expr::{EmptyRelation, LogicalPlan, LogicalPlanBuilder, TableSource}; +use datafusion_expr::{ + EmptyRelation, Expr, LogicalPlan, LogicalPlanBuilder, TableSource, +}; use crate::antlr::presto::prestoparser::*; use datafusion_common::{ - DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, + Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, + TableReference, }; use std::{ cell::{Cell, RefCell}, - iter, + clone, iter, rc::Rc, sync::Arc, }; trait BindingContext { - fn resolve_table(&self, name: TableReference) -> Result> { - Err(DataFusionError::Plan(format!( - "No table named: {} found", - name.table() + fn resolve_table(&self, _: TableReference) -> Result> { + Err(DataFusionError::NotImplemented(String::from( + "Not implement resolve_table", + ))) + } + + fn resolve_column(&self, _: String) -> Result { + Err(DataFusionError::NotImplemented(String::from( + "Not implement resolve_column", ))) } } +struct ColumnBindingContext { + schema: DFSchemaRef, +} + +impl BindingContext for ColumnBindingContext { + fn resolve_column(&self, name: String) -> Result { + match self.schema.index_of_column_by_name(None, name.as_str()) { + Ok(_) => Ok(Expr::Column(Column { + relation: None, + name: name, + })), + Err(e) => Err(e), + } + } +} + struct BindingContextStack { stack: RefCell>>, } @@ -193,19 +217,39 @@ fn bind_LogicalPlan_from_querySpecification<'input>( "not implemented relation", ))); } - let parent = if ctx.relation_all().len() > 0 { + let parent = if ctx.relation_all().len() == 0 { LogicalPlan::EmptyRelation(EmptyRelation { produce_one_row: true, schema: DFSchemaRef::new(DFSchema::empty()), }) } else { - bind_LogicalPlan_from_relation(bc, ctx.relation(0).unwrap())? + bind_LogicalPlan_from_relation(bc.clone(), ctx.relation(0).unwrap())? + }; + + let column_binding_context = ColumnBindingContext { + schema: parent.schema().clone(), }; - // TODO - Ok(LogicalPlan::EmptyRelation(EmptyRelation { - produce_one_row: true, - schema: DFSchemaRef::new(DFSchema::empty()), + let new_bc = bc.clone(); + new_bc.push(Box::new(column_binding_context)); + let items: Vec<_> = ctx + .querySelectItems() + .unwrap() + .selectItem_all() + .iter() + .map(|item| bind_Expr_from_selectItem(new_bc.clone(), item.clone()).unwrap()) + .collect(); + + LogicalPlanBuilder::from(parent).project(items)?.build() +} + +fn bind_Expr_from_selectItem<'input>( + bc: Rc, + ctx: Rc>, +) -> Result { + Ok(Expr::Column(Column { + relation: None, + name: String::from("ID"), })) } @@ -301,9 +345,12 @@ fn bind_LogicalPlan_from_tableName<'input>( .clone() .resolve_table(table_ref_result.unwrap().as_table_reference()) { - Ok(table_source) => { - LogicalPlanBuilder::scan(&String::from("B"), table_source, None)?.build() - } + Ok(table_source) => LogicalPlanBuilder::scan( + String::from("PERSON"), + table_source, + None, + )? + .build(), Err(e) => Err(e), } } @@ -400,8 +447,8 @@ mod tests { impl BindingContext for TableBindingContext { fn resolve_table(&self, name: TableReference) -> Result> { let schema = match name.table() { - "person" => Ok(Schema::new(vec![ - Field::new("id", DataType::UInt32, false), + "PERSON" => Ok(Schema::new(vec![ + Field::new("ID", DataType::UInt32, false), Field::new("first_name", DataType::Utf8, false), Field::new("last_name", DataType::Utf8, false), Field::new("age", DataType::Int32, false), @@ -429,12 +476,12 @@ mod tests { #[test] fn it_works() { let tf = ArenaCommonFactory::default(); - let root = parse("SELECT A FROM B", &tf).unwrap(); + let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); let bc = Rc::new(BindingContextStack { stack: RefCell::new(vec![Box::new(TableBindingContext {})]), }); let plan = bind_LogicalPlan_from_singleStatement(bc, root).unwrap(); - let expected = "EmptyRelation"; + let expected = "Projection: PERSON.ID\n TableScan: PERSON"; assert_eq!(expected, format!("{plan:?}")); } } From ef535de0cafa01655729545e2079155dc9a5beb0 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Fri, 13 Jan 2023 23:23:57 -0800 Subject: [PATCH 11/25] put binder back --- datafusion/sql/src/planner2.rs | 595 +++++++++++++++++---------------- 1 file changed, 307 insertions(+), 288 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index d65f6acb850cb..045133d88e119 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -11,12 +11,7 @@ use datafusion_common::{ Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::{ - cell::{Cell, RefCell}, - clone, iter, - rc::Rc, - sync::Arc, -}; +use std::{cell::RefCell, rc::Rc, sync::Arc}; trait BindingContext { fn resolve_table(&self, _: TableReference) -> Result> { @@ -53,6 +48,12 @@ struct BindingContextStack { } impl BindingContextStack { + fn new() -> Self { + BindingContextStack { + stack: RefCell::new(vec![]), + } + } + fn push(&self, bc: Box) { self.stack.borrow_mut().push(bc); } @@ -73,318 +74,327 @@ impl BindingContext for BindingContextStack { } } -fn bind_LogicalPlan_from_singleStatement<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - bind_LogicalPlan_from_statement(bc, ctx.statement().unwrap()) +struct Binder { + context: RefCell, } -fn bind_LogicalPlan_from_statement<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - match &*ctx { - StatementContextAll::StatementDefaultContext(c) => { - bind_LogicalPlan_from_statementDefault(bc, c) +impl Binder { + fn new() -> Self { + Binder { + context: RefCell::new(BindingContextStack::new()), } - // StatmentContextAll::Use - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_statement", - ))), } -} - -fn bind_LogicalPlan_from_statementDefault<'input>( - bc: Rc, - ctx: &StatementDefaultContext<'input>, -) -> Result { - bind_LogicalPlan_from_query(bc, ctx.query().unwrap()) -} + fn bind_LogicalPlan_from_singleStatement<'input>( + &self, + ctx: Rc>, + ) -> Result { + self.bind_LogicalPlan_from_statement(ctx.statement().unwrap()) + } -fn bind_LogicalPlan_from_query<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - if ctx.with().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_query", - ))); + fn bind_LogicalPlan_from_statement<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + StatementContextAll::StatementDefaultContext(c) => { + self.bind_LogicalPlan_from_statementDefault(c) + } + // StatmentContextAll::Use + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_statement", + ))), + } } - bind_LogicalPlan_from_queryNoWith(bc, ctx.queryNoWith().unwrap()) -} -fn bind_LogicalPlan_from_queryNoWith<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - if ctx.sortItem_all().len() > 0 { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented sortItem", - ))); - } - if ctx.offset.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented offset", - ))); - } - if ctx.limit.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented limit", - ))); - } - if ctx.FETCH().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented FETCH", - ))); - } - bind_LogicalPlan_from_queryTerm(bc, ctx.queryTerm().unwrap()) -} + fn bind_LogicalPlan_from_statementDefault<'input>( + &self, + ctx: &StatementDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_query(ctx.query().unwrap()) + } -fn bind_LogicalPlan_from_queryTerm<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - match &*ctx { - QueryTermContextAll::QueryTermDefaultContext(c) => { - bind_LogicalPlan_from_queryTermDefault(bc, c) + fn bind_LogicalPlan_from_query<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.with().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_query", + ))); } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_queryTerm", - ))), + self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap()) } -} -fn bind_LogicalPlan_from_queryTermDefault<'input>( - bc: Rc, - ctx: &QueryTermDefaultContext<'input>, -) -> Result { - bind_LogicalPlan_from_queryPrimary(bc, ctx.queryPrimary().unwrap()) -} + fn bind_LogicalPlan_from_queryNoWith<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.sortItem_all().len() > 0 { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented sortItem", + ))); + } + if ctx.offset.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented offset", + ))); + } + if ctx.limit.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented limit", + ))); + } + if ctx.FETCH().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented FETCH", + ))); + } + self.bind_LogicalPlan_from_queryTerm(ctx.queryTerm().unwrap()) + } -fn bind_LogicalPlan_from_queryPrimary<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - match &*ctx { - QueryPrimaryContextAll::QueryPrimaryDefaultContext(c) => { - bind_LogicalPlan_from_queryPrimaryDefault(bc, c) + fn bind_LogicalPlan_from_queryTerm<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + QueryTermContextAll::QueryTermDefaultContext(c) => { + self.bind_LogicalPlan_from_queryTermDefault(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_queryTerm", + ))), } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_queryPrimary", - ))), } -} -fn bind_LogicalPlan_from_queryPrimaryDefault<'input>( - bc: Rc, - ctx: &QueryPrimaryDefaultContext<'input>, -) -> Result { - bind_LogicalPlan_from_querySpecification(bc, ctx.querySpecification().unwrap()) -} + fn bind_LogicalPlan_from_queryTermDefault<'input>( + &self, + ctx: &QueryTermDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_queryPrimary(ctx.queryPrimary().unwrap()) + } -fn bind_LogicalPlan_from_querySpecification<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - if ctx.setQuantifier().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented setQuantifier", - ))); - } - if ctx.where_.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented where", - ))); - } - if ctx.groupBy().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented groupby", - ))); - } - if ctx.having.is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented having", - ))); - } - if ctx.windowDefinition_all().len() > 0 { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented windowDefinition", - ))); - } - if ctx.relation_all().len() > 1 { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented relation", - ))); - } - let parent = if ctx.relation_all().len() == 0 { - LogicalPlan::EmptyRelation(EmptyRelation { - produce_one_row: true, - schema: DFSchemaRef::new(DFSchema::empty()), - }) - } else { - bind_LogicalPlan_from_relation(bc.clone(), ctx.relation(0).unwrap())? - }; - - let column_binding_context = ColumnBindingContext { - schema: parent.schema().clone(), - }; - - let new_bc = bc.clone(); - new_bc.push(Box::new(column_binding_context)); - let items: Vec<_> = ctx - .querySelectItems() - .unwrap() - .selectItem_all() - .iter() - .map(|item| bind_Expr_from_selectItem(new_bc.clone(), item.clone()).unwrap()) - .collect(); - - LogicalPlanBuilder::from(parent).project(items)?.build() -} + fn bind_LogicalPlan_from_queryPrimary<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + QueryPrimaryContextAll::QueryPrimaryDefaultContext(c) => { + self.bind_LogicalPlan_from_queryPrimaryDefault(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_queryPrimary", + ))), + } + } -fn bind_Expr_from_selectItem<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - Ok(Expr::Column(Column { - relation: None, - name: String::from("ID"), - })) -} + fn bind_LogicalPlan_from_queryPrimaryDefault<'input>( + &self, + ctx: &QueryPrimaryDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_querySpecification(ctx.querySpecification().unwrap()) + } -fn bind_LogicalPlan_from_relation<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - match &*ctx { - RelationContextAll::RelationDefaultContext(c) => { - bind_LogicalPlan_from_relationDefault(bc, c) + fn bind_LogicalPlan_from_querySpecification<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.setQuantifier().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented setQuantifier", + ))); + } + if ctx.where_.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented where", + ))); + } + if ctx.groupBy().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented groupby", + ))); + } + if ctx.having.is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented having", + ))); + } + if ctx.windowDefinition_all().len() > 0 { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented windowDefinition", + ))); + } + if ctx.relation_all().len() > 1 { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented relation", + ))); + } + let parent = if ctx.relation_all().len() == 0 { + LogicalPlan::EmptyRelation(EmptyRelation { + produce_one_row: true, + schema: DFSchemaRef::new(DFSchema::empty()), + }) + } else { + self.bind_LogicalPlan_from_relation(ctx.relation(0).unwrap())? + }; + + let column_binding_context = ColumnBindingContext { + schema: parent.schema().clone(), + }; + + self.context + .borrow_mut() + .push(Box::new(column_binding_context)); + let items: Vec<_> = ctx + .querySelectItems() + .unwrap() + .selectItem_all() + .iter() + .map(|item| self.bind_Expr_from_selectItem(item.clone()).unwrap()) + .collect(); + + LogicalPlanBuilder::from(parent).project(items)?.build() + } + + fn bind_Expr_from_selectItem<'input>( + &self, + ctx: Rc>, + ) -> Result { + Ok(Expr::Column(Column { + relation: None, + name: String::from("ID"), + })) + } + + fn bind_LogicalPlan_from_relation<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + RelationContextAll::RelationDefaultContext(c) => { + self.bind_LogicalPlan_from_relationDefault(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_relation", + ))), } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_relation", - ))), } -} -fn bind_LogicalPlan_from_relationDefault<'input>( - bc: Rc, - ctx: &RelationDefaultContext<'input>, -) -> Result { - bind_LogicalPlan_from_sampledRelation(bc, ctx.sampledRelation().unwrap()) -} + fn bind_LogicalPlan_from_relationDefault<'input>( + &self, + ctx: &RelationDefaultContext<'input>, + ) -> Result { + self.bind_LogicalPlan_from_sampledRelation(ctx.sampledRelation().unwrap()) + } -fn bind_LogicalPlan_from_sampledRelation<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - if ctx.sampleType().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented sampleType", - ))); + fn bind_LogicalPlan_from_sampledRelation<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.sampleType().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented sampleType", + ))); + } + self.bind_LogicalPlan_from_patternRecognition(ctx.patternRecognition().unwrap()) } - bind_LogicalPlan_from_patternRecognition(bc, ctx.patternRecognition().unwrap()) -} -fn bind_LogicalPlan_from_patternRecognition<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - if ctx.MATCH_RECOGNIZE().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented MATCH_RECOGNIZE", - ))); + fn bind_LogicalPlan_from_patternRecognition<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.MATCH_RECOGNIZE().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented MATCH_RECOGNIZE", + ))); + } + self.bind_LogicalPlan_from_aliasedRelation(ctx.aliasedRelation().unwrap()) } - bind_LogicalPlan_from_aliasedRelation(bc, ctx.aliasedRelation().unwrap()) -} -fn bind_LogicalPlan_from_aliasedRelation<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - if ctx.identifier().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented identifier in aliasedRelation", - ))); + fn bind_LogicalPlan_from_aliasedRelation<'input>( + &self, + ctx: Rc>, + ) -> Result { + if ctx.identifier().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented identifier in aliasedRelation", + ))); + } + self.bind_LogicalPlan_from_relationPrimary(ctx.relationPrimary().unwrap()) } - bind_LogicalPlan_from_relationPrimary(bc, ctx.relationPrimary().unwrap()) -} -fn bind_LogicalPlan_from_relationPrimary<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - match &*ctx { - RelationPrimaryContextAll::TableNameContext(c) => { - bind_LogicalPlan_from_tableName(bc, c) + fn bind_LogicalPlan_from_relationPrimary<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + RelationPrimaryContextAll::TableNameContext(c) => { + self.bind_LogicalPlan_from_tableName(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_relationPrimary", + ))), } - _ => Err(DataFusionError::NotImplemented(String::from( - "not implemented bind_LogicalPlan_from_relationPrimary", - ))), } -} -fn bind_LogicalPlan_from_tableName<'input>( - bc: Rc, - ctx: &TableNameContext<'input>, -) -> Result { - if ctx.queryPeriod().is_some() { - return Err(DataFusionError::NotImplemented(String::from( - "not implemented queryPeriod", - ))); - } - - let table_ref_result = bind_OwnedTableReference_from_qualified_name( - bc.clone(), - ctx.qualifiedName().unwrap(), - ); - if table_ref_result.is_err() { - return Err(table_ref_result.unwrap_err()); - } - match bc - .clone() - .resolve_table(table_ref_result.unwrap().as_table_reference()) - { - Ok(table_source) => LogicalPlanBuilder::scan( - String::from("PERSON"), - table_source, - None, - )? - .build(), - Err(e) => Err(e), + fn bind_LogicalPlan_from_tableName<'input>( + &self, + ctx: &TableNameContext<'input>, + ) -> Result { + if ctx.queryPeriod().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented queryPeriod", + ))); + } + + let table_ref_result = self + .bind_OwnedTableReference_from_qualified_name(ctx.qualifiedName().unwrap()); + if table_ref_result.is_err() { + return Err(table_ref_result.unwrap_err()); + } + match self + .context + .borrow() + .resolve_table(table_ref_result.unwrap().as_table_reference()) + { + Ok(table_source) => { + LogicalPlanBuilder::scan(String::from("PERSON"), table_source, None)? + .build() + } + Err(e) => Err(e), + } } -} -fn bind_OwnedTableReference_from_qualified_name<'input>( - bc: Rc, - ctx: Rc>, -) -> Result { - let identifiers: Vec<_> = ctx - .identifier_all() - .iter() - .map(|i| bind_str_from_identifier(bc.clone(), i)) - .collect(); - if identifiers.len() == 1 { - Ok(OwnedTableReference::Bare { - table: identifiers[0].clone(), - }) - } else if identifiers.len() == 2 { - Ok(OwnedTableReference::Partial { - schema: identifiers[0].clone(), - table: identifiers[1].clone(), - }) - } else { - Err(DataFusionError::Plan( - "Cannot bind TableReference".to_owned(), - )) + fn bind_OwnedTableReference_from_qualified_name<'input>( + &self, + ctx: Rc>, + ) -> Result { + let identifiers: Vec<_> = ctx + .identifier_all() + .iter() + .map(|i| self.bind_str_from_identifier(i)) + .collect(); + if identifiers.len() == 1 { + Ok(OwnedTableReference::Bare { + table: identifiers[0].clone(), + }) + } else if identifiers.len() == 2 { + Ok(OwnedTableReference::Partial { + schema: identifiers[0].clone(), + table: identifiers[1].clone(), + }) + } else { + Err(DataFusionError::Plan( + "Cannot bind TableReference".to_owned(), + )) + } } -} -fn bind_str_from_identifier<'input>( - _: Rc, - ctx: &Rc>, -) -> String { - ctx.get_text() + fn bind_str_from_identifier<'input>( + &self, + ctx: &Rc>, + ) -> String { + ctx.get_text() + } } #[cfg(test)] @@ -396,7 +406,7 @@ mod tests { use crate::antlr::presto::prestolexer::PrestoLexer; use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; - use crate::planner2::{bind_LogicalPlan_from_singleStatement, BindingContextStack}; + use crate::planner2::{Binder, BindingContextStack}; use antlr_rust::common_token_stream::CommonTokenStream; use antlr_rust::errors::ANTLRError; use antlr_rust::input_stream::InputStream; @@ -444,6 +454,12 @@ mod tests { struct TableBindingContext; + impl TableBindingContext { + fn new() -> Self { + TableBindingContext + } + } + impl BindingContext for TableBindingContext { fn resolve_table(&self, name: TableReference) -> Result> { let schema = match name.table() { @@ -477,10 +493,13 @@ mod tests { fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); - let bc = Rc::new(BindingContextStack { - stack: RefCell::new(vec![Box::new(TableBindingContext {})]), - }); - let plan = bind_LogicalPlan_from_singleStatement(bc, root).unwrap(); + let binder = Binder::new(); + binder + .context + .borrow_mut() + .push(Box::new(TableBindingContext::new())); + + let plan = binder.bind_LogicalPlan_from_singleStatement(root).unwrap(); let expected = "Projection: PERSON.ID\n TableScan: PERSON"; assert_eq!(expected, format!("{plan:?}")); } From c7dfeebc112d63bfc065eef12a76432edd249cd4 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 08:02:38 -0800 Subject: [PATCH 12/25] update push --- datafusion/sql/src/planner2.rs | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 045133d88e119..15a7c36626190 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -44,18 +44,20 @@ impl BindingContext for ColumnBindingContext { } struct BindingContextStack { - stack: RefCell>>, + stack: RefCell>>, } impl BindingContextStack { - fn new() -> Self { + fn new(stack: RefCell>>) -> Self { BindingContextStack { - stack: RefCell::new(vec![]), + stack: stack, } } - fn push(&self, bc: Box) { - self.stack.borrow_mut().push(bc); + fn push(&self, bc: Arc) -> BindingContextStack { + let mut new_stack = self.stack.borrow_mut().clone(); + new_stack.push(bc); + BindingContextStack { stack: RefCell::new(new_stack) } } } @@ -79,11 +81,12 @@ struct Binder { } impl Binder { - fn new() -> Self { + fn new(context: RefCell) -> Self { Binder { - context: RefCell::new(BindingContextStack::new()), + context: context, } } + fn bind_LogicalPlan_from_singleStatement<'input>( &self, ctx: Rc>, @@ -241,15 +244,14 @@ impl Binder { schema: parent.schema().clone(), }; - self.context - .borrow_mut() - .push(Box::new(column_binding_context)); + let new_context = self.context.borrow().push(Arc::new(column_binding_context)); + let new_binder = Binder::new(RefCell::new(new_context)); let items: Vec<_> = ctx .querySelectItems() .unwrap() .selectItem_all() .iter() - .map(|item| self.bind_Expr_from_selectItem(item.clone()).unwrap()) + .map(|item| new_binder.bind_Expr_from_selectItem(item.clone()).unwrap()) .collect(); LogicalPlanBuilder::from(parent).project(items)?.build() @@ -493,12 +495,8 @@ mod tests { fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); - let binder = Binder::new(); - binder - .context - .borrow_mut() - .push(Box::new(TableBindingContext::new())); - + let binder = Binder::new(RefCell::new(BindingContextStack::new(RefCell::new(vec![Arc::new(TableBindingContext::new())])))); + let plan = binder.bind_LogicalPlan_from_singleStatement(root).unwrap(); let expected = "Projection: PERSON.ID\n TableScan: PERSON"; assert_eq!(expected, format!("{plan:?}")); From ac412f962f76218e4a6d4beb5dfd2ee00aa12ae3 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 08:29:47 -0800 Subject: [PATCH 13/25] cell --- datafusion/sql/src/planner2.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 15a7c36626190..034573e4f6489 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -11,7 +11,7 @@ use datafusion_common::{ Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::{cell::RefCell, rc::Rc, sync::Arc}; +use std::{cell::{RefCell, Cell}, rc::Rc, sync::Arc}; trait BindingContext { fn resolve_table(&self, _: TableReference) -> Result> { @@ -44,26 +44,26 @@ impl BindingContext for ColumnBindingContext { } struct BindingContextStack { - stack: RefCell>>, + stack: Cell>>, } impl BindingContextStack { - fn new(stack: RefCell>>) -> Self { + fn new(stack: Cell>>) -> Self { BindingContextStack { stack: stack, } } fn push(&self, bc: Arc) -> BindingContextStack { - let mut new_stack = self.stack.borrow_mut().clone(); + let mut new_stack = self.stack.take().clone(); new_stack.push(bc); - BindingContextStack { stack: RefCell::new(new_stack) } + BindingContextStack { stack: Cell::new(new_stack) } } } impl BindingContext for BindingContextStack { fn resolve_table(&self, table_ref: TableReference) -> Result> { - for bc in self.stack.borrow().iter().rev() { + for bc in self.stack.take().iter().rev() { let result = bc.resolve_table(table_ref); if result.is_ok() { return result; @@ -401,7 +401,7 @@ impl Binder { #[cfg(test)] mod tests { - use std::cell::RefCell; + use std::cell::{RefCell, Cell}; use std::rc::Rc; use std::result; use std::sync::Arc; @@ -495,7 +495,7 @@ mod tests { fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); - let binder = Binder::new(RefCell::new(BindingContextStack::new(RefCell::new(vec![Arc::new(TableBindingContext::new())])))); + let binder = Binder::new(RefCell::new(BindingContextStack::new(Cell::new(vec![Arc::new(TableBindingContext::new())])))); let plan = binder.bind_LogicalPlan_from_singleStatement(root).unwrap(); let expected = "Projection: PERSON.ID\n TableScan: PERSON"; From 2ede08a1692ed09a421e427ef1f0d78e92056f1b Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 09:48:51 -0800 Subject: [PATCH 14/25] remove RefCell --- datafusion/sql/src/planner2.rs | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 034573e4f6489..822ae0ff7abd2 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -11,7 +11,7 @@ use datafusion_common::{ Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::{cell::{RefCell, Cell}, rc::Rc, sync::Arc}; +use std::{cell::Cell, rc::Rc, sync::Arc}; trait BindingContext { fn resolve_table(&self, _: TableReference) -> Result> { @@ -49,15 +49,15 @@ struct BindingContextStack { impl BindingContextStack { fn new(stack: Cell>>) -> Self { - BindingContextStack { - stack: stack, - } + BindingContextStack { stack: stack } } fn push(&self, bc: Arc) -> BindingContextStack { let mut new_stack = self.stack.take().clone(); new_stack.push(bc); - BindingContextStack { stack: Cell::new(new_stack) } + BindingContextStack { + stack: Cell::new(new_stack), + } } } @@ -77,14 +77,12 @@ impl BindingContext for BindingContextStack { } struct Binder { - context: RefCell, + context: BindingContextStack, } impl Binder { - fn new(context: RefCell) -> Self { - Binder { - context: context, - } + fn new(context: BindingContextStack) -> Self { + Binder { context: context } } fn bind_LogicalPlan_from_singleStatement<'input>( @@ -244,8 +242,8 @@ impl Binder { schema: parent.schema().clone(), }; - let new_context = self.context.borrow().push(Arc::new(column_binding_context)); - let new_binder = Binder::new(RefCell::new(new_context)); + let new_context = self.context.push(Arc::new(column_binding_context)); + let new_binder = Binder::new(new_context); let items: Vec<_> = ctx .querySelectItems() .unwrap() @@ -355,7 +353,6 @@ impl Binder { } match self .context - .borrow() .resolve_table(table_ref_result.unwrap().as_table_reference()) { Ok(table_source) => { @@ -401,7 +398,7 @@ impl Binder { #[cfg(test)] mod tests { - use std::cell::{RefCell, Cell}; + use std::cell::Cell; use std::rc::Rc; use std::result; use std::sync::Arc; @@ -495,8 +492,10 @@ mod tests { fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); - let binder = Binder::new(RefCell::new(BindingContextStack::new(Cell::new(vec![Arc::new(TableBindingContext::new())])))); - + let binder = Binder::new(BindingContextStack::new(Cell::new(vec![Arc::new( + TableBindingContext::new(), + )]))); + let plan = binder.bind_LogicalPlan_from_singleStatement(root).unwrap(); let expected = "Projection: PERSON.ID\n TableScan: PERSON"; assert_eq!(expected, format!("{plan:?}")); From 9b0033cf614cebcbb8d484fff71def59129413b2 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 10:07:32 -0800 Subject: [PATCH 15/25] with --- datafusion/sql/src/planner2.rs | 42 +++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 822ae0ff7abd2..3bdce9fef93ba 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -85,6 +85,22 @@ impl Binder { Binder { context: context } } + fn with(&self, context: BindingContextStack, f: F) -> T + where + F: Fn(&Binder) -> T, + { + let binder = Binder::new(context); + f(&binder) + } + + fn with_push(&self, context: Arc, f: F) -> T + where + F: Fn(&Binder) -> T, + { + let new_context = self.context.push(context); + self.with(new_context, f) + } + fn bind_LogicalPlan_from_singleStatement<'input>( &self, ctx: Rc>, @@ -238,19 +254,19 @@ impl Binder { self.bind_LogicalPlan_from_relation(ctx.relation(0).unwrap())? }; - let column_binding_context = ColumnBindingContext { - schema: parent.schema().clone(), - }; - - let new_context = self.context.push(Arc::new(column_binding_context)); - let new_binder = Binder::new(new_context); - let items: Vec<_> = ctx - .querySelectItems() - .unwrap() - .selectItem_all() - .iter() - .map(|item| new_binder.bind_Expr_from_selectItem(item.clone()).unwrap()) - .collect(); + let items: Vec<_> = self.with_push( + Arc::new(ColumnBindingContext { + schema: parent.schema().clone(), + }), + |binder| { + ctx.querySelectItems() + .unwrap() + .selectItem_all() + .iter() + .map(|item| binder.bind_Expr_from_selectItem(item.clone()).unwrap()) + .collect() + }, + ); LogicalPlanBuilder::from(parent).project(items)?.build() } From b526821c39027c58991a86b3a016a1edc7217d95 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 10:23:27 -0800 Subject: [PATCH 16/25] bc stack --- datafusion/sql/src/planner2.rs | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 3bdce9fef93ba..0b733b28c0469 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -55,24 +55,32 @@ impl BindingContextStack { fn push(&self, bc: Arc) -> BindingContextStack { let mut new_stack = self.stack.take().clone(); new_stack.push(bc); - BindingContextStack { - stack: Cell::new(new_stack), - } + BindingContextStack::new(Cell::new(new_stack)) } -} -impl BindingContext for BindingContextStack { - fn resolve_table(&self, table_ref: TableReference) -> Result> { + fn resolve(&self, f: F) -> Result + where + F: Fn(&Arc) -> Result, + { for bc in self.stack.take().iter().rev() { - let result = bc.resolve_table(table_ref); + let result = f(bc); if result.is_ok() { return result; } } - Err(DataFusionError::Plan(format!( - "No table named: {} found", - table_ref.table() - ))) + Err(DataFusionError::Internal(String::from("not resolved"))) + } +} + +impl BindingContext for BindingContextStack { + fn resolve_table(&self, table_ref: TableReference) -> Result> { + match self.resolve(|bc| bc.resolve_table(table_ref)) { + Ok(result) => Ok(result), + Err(_) => Err(DataFusionError::Plan(format!( + "No table named: {} found", + table_ref.table() + ))), + } } } From 7b03aa91e9d2cb1071ebceddd460e6b7cedf05d7 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 10:59:38 -0800 Subject: [PATCH 17/25] many expr --- datafusion/sql/src/planner2.rs | 100 ++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 2 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 0b733b28c0469..b25de591a398f 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -283,12 +283,108 @@ impl Binder { &self, ctx: Rc>, ) -> Result { + match &*ctx { + SelectItemContextAll::SelectSingleContext(c) => { + self.bind_Expr_from_selectSingle(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_Expr_from_selectItem", + ))), + } + } + + fn bind_Expr_from_selectSingle<'input>( + &self, + ctx: &SelectSingleContext<'input>, + ) -> Result { + if ctx.identifier().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented identifer in selectSingle", + ))); + } + self.bind_Expr_from_expression(ctx.expression().unwrap()) + } + + fn bind_Expr_from_expression<'input>( + &self, + ctx: Rc> + ) -> Result { + self.bind_Expr_from_booleanExpression(ctx.booleanExpression().unwrap()) + } + + fn bind_Expr_from_booleanExpression<'input>( + &self, + ctx: Rc> + ) -> Result { + match &*ctx { + BooleanExpressionContextAll::PredicatedContext(c) => { + self.bind_Expr_from_predicated(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_Expr_from_booleanExpression", + ))), + } + } + + fn bind_Expr_from_predicated<'input>( + &self, + ctx: &PredicatedContext<'input> + ) -> Result { + if ctx.predicate().is_some() { + return Err(DataFusionError::NotImplemented(String::from( + "not implemented predicate", + ))); + } + self.bind_Expr_from_valueExpression(ctx.valueExpression().unwrap()) + } + + fn bind_Expr_from_valueExpression<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + ValueExpressionContextAll::ValueExpressionDefaultContext(c) => { + self.bind_Expr_from_valueExpressionDefault(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_LogicalPlan_from_relation", + ))), + } + } + + fn bind_Expr_from_valueExpressionDefault<'input>( + &self, + ctx: &ValueExpressionDefaultContext<'input>, + ) -> Result { + self.bind_Expr_from_primaryExpression(ctx.primaryExpression().unwrap()) + } + + fn bind_Expr_from_primaryExpression<'input>( + &self, + ctx: Rc>, + ) -> Result { + match &*ctx { + PrimaryExpressionContextAll::ColumnReferenceContext(c) => { + self.bind_Expr_from_columnReference(c) + } + _ => Err(DataFusionError::NotImplemented(String::from( + "not implemented bind_Expr_from_primaryExpression", + ))), + } + } + + fn bind_Expr_from_columnReference<'input>( + &self, + ctx: &ColumnReferenceContext<'input>, + ) -> Result { + let name = self.bind_str_from_identifier(&ctx.identifier().unwrap()); Ok(Expr::Column(Column { relation: None, - name: String::from("ID"), - })) + name: name, + })) } + fn bind_LogicalPlan_from_relation<'input>( &self, ctx: Rc>, From 4f6a963d00add3d099bc7f2d4ce2d4c565880dbc Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 11:40:18 -0800 Subject: [PATCH 18/25] fix stack --- datafusion/sql/src/planner2.rs | 43 ++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index b25de591a398f..9d6ceb2c59f98 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -11,7 +11,7 @@ use datafusion_common::{ Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::{cell::Cell, rc::Rc, sync::Arc}; +use std::{cell::RefCell, rc::Rc, sync::Arc}; trait BindingContext { fn resolve_table(&self, _: TableReference) -> Result> { @@ -20,7 +20,7 @@ trait BindingContext { ))) } - fn resolve_column(&self, _: String) -> Result { + fn resolve_column(&self, _: &str) -> Result { Err(DataFusionError::NotImplemented(String::from( "Not implement resolve_column", ))) @@ -32,11 +32,11 @@ struct ColumnBindingContext { } impl BindingContext for ColumnBindingContext { - fn resolve_column(&self, name: String) -> Result { - match self.schema.index_of_column_by_name(None, name.as_str()) { + fn resolve_column(&self, name: &str) -> Result { + match self.schema.index_of_column_by_name(None, name) { Ok(_) => Ok(Expr::Column(Column { relation: None, - name: name, + name: name.to_string(), })), Err(e) => Err(e), } @@ -44,25 +44,25 @@ impl BindingContext for ColumnBindingContext { } struct BindingContextStack { - stack: Cell>>, + stack: RefCell>>, } impl BindingContextStack { - fn new(stack: Cell>>) -> Self { + fn new(stack: RefCell>>) -> Self { BindingContextStack { stack: stack } } fn push(&self, bc: Arc) -> BindingContextStack { - let mut new_stack = self.stack.take().clone(); + let mut new_stack = self.stack.borrow().clone(); new_stack.push(bc); - BindingContextStack::new(Cell::new(new_stack)) + BindingContextStack::new(RefCell::new(new_stack)) } fn resolve(&self, f: F) -> Result where F: Fn(&Arc) -> Result, { - for bc in self.stack.take().iter().rev() { + for bc in self.stack.borrow().iter().rev() { let result = f(bc); if result.is_ok() { return result; @@ -82,6 +82,13 @@ impl BindingContext for BindingContextStack { ))), } } + + fn resolve_column(&self, name: &str) -> Result { + match self.resolve(|bc| bc.resolve_column(name)) { + Ok(result) => Ok(result), + Err(_) => Err(DataFusionError::Plan(format!("No column: {} found", name))), + } + } } struct Binder { @@ -307,14 +314,14 @@ impl Binder { fn bind_Expr_from_expression<'input>( &self, - ctx: Rc> + ctx: Rc>, ) -> Result { self.bind_Expr_from_booleanExpression(ctx.booleanExpression().unwrap()) } fn bind_Expr_from_booleanExpression<'input>( &self, - ctx: Rc> + ctx: Rc>, ) -> Result { match &*ctx { BooleanExpressionContextAll::PredicatedContext(c) => { @@ -328,7 +335,7 @@ impl Binder { fn bind_Expr_from_predicated<'input>( &self, - ctx: &PredicatedContext<'input> + ctx: &PredicatedContext<'input>, ) -> Result { if ctx.predicate().is_some() { return Err(DataFusionError::NotImplemented(String::from( @@ -378,13 +385,9 @@ impl Binder { ctx: &ColumnReferenceContext<'input>, ) -> Result { let name = self.bind_str_from_identifier(&ctx.identifier().unwrap()); - Ok(Expr::Column(Column { - relation: None, - name: name, - })) + self.context.resolve_column(name.as_str()) } - fn bind_LogicalPlan_from_relation<'input>( &self, ctx: Rc>, @@ -518,7 +521,7 @@ impl Binder { #[cfg(test)] mod tests { - use std::cell::Cell; + use std::cell::RefCell; use std::rc::Rc; use std::result; use std::sync::Arc; @@ -612,7 +615,7 @@ mod tests { fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); - let binder = Binder::new(BindingContextStack::new(Cell::new(vec![Arc::new( + let binder = Binder::new(BindingContextStack::new(RefCell::new(vec![Arc::new( TableBindingContext::new(), )]))); From 33492fc94e132cb2536a843853e5305625d97f60 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 11:45:21 -0800 Subject: [PATCH 19/25] remove RefCell --- datafusion/sql/src/planner2.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 9d6ceb2c59f98..840891b437fc8 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -11,7 +11,7 @@ use datafusion_common::{ Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::{cell::RefCell, rc::Rc, sync::Arc}; +use std::{rc::Rc, sync::Arc}; trait BindingContext { fn resolve_table(&self, _: TableReference) -> Result> { @@ -44,25 +44,25 @@ impl BindingContext for ColumnBindingContext { } struct BindingContextStack { - stack: RefCell>>, + stack: Vec>, } impl BindingContextStack { - fn new(stack: RefCell>>) -> Self { + fn new(stack: Vec>) -> Self { BindingContextStack { stack: stack } } fn push(&self, bc: Arc) -> BindingContextStack { - let mut new_stack = self.stack.borrow().clone(); + let mut new_stack = self.stack.clone(); new_stack.push(bc); - BindingContextStack::new(RefCell::new(new_stack)) + BindingContextStack::new(new_stack) } fn resolve(&self, f: F) -> Result where F: Fn(&Arc) -> Result, { - for bc in self.stack.borrow().iter().rev() { + for bc in self.stack.iter().rev() { let result = f(bc); if result.is_ok() { return result; @@ -521,7 +521,6 @@ impl Binder { #[cfg(test)] mod tests { - use std::cell::RefCell; use std::rc::Rc; use std::result; use std::sync::Arc; @@ -615,9 +614,9 @@ mod tests { fn it_works() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); - let binder = Binder::new(BindingContextStack::new(RefCell::new(vec![Arc::new( + let binder = Binder::new(BindingContextStack::new(vec![Arc::new( TableBindingContext::new(), - )]))); + )])); let plan = binder.bind_LogicalPlan_from_singleStatement(root).unwrap(); let expected = "Projection: PERSON.ID\n TableScan: PERSON"; From 77d00f3e3ef35769031a079f42fbb95c0a24970a Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 11:58:23 -0800 Subject: [PATCH 20/25] all antlr rules are borrow --- datafusion/sql/src/planner2.rs | 89 +++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 39 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 840891b437fc8..1ac135eb45d14 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -11,7 +11,7 @@ use datafusion_common::{ Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::{rc::Rc, sync::Arc}; +use std::sync::Arc; trait BindingContext { fn resolve_table(&self, _: TableReference) -> Result> { @@ -118,14 +118,14 @@ impl Binder { fn bind_LogicalPlan_from_singleStatement<'input>( &self, - ctx: Rc>, + ctx: &SingleStatementContextAll<'input>, ) -> Result { - self.bind_LogicalPlan_from_statement(ctx.statement().unwrap()) + self.bind_LogicalPlan_from_statement(ctx.statement().unwrap().as_ref()) } fn bind_LogicalPlan_from_statement<'input>( &self, - ctx: Rc>, + ctx: &StatementContextAll<'input>, ) -> Result { match &*ctx { StatementContextAll::StatementDefaultContext(c) => { @@ -142,24 +142,24 @@ impl Binder { &self, ctx: &StatementDefaultContext<'input>, ) -> Result { - self.bind_LogicalPlan_from_query(ctx.query().unwrap()) + self.bind_LogicalPlan_from_query(ctx.query().unwrap().as_ref()) } fn bind_LogicalPlan_from_query<'input>( &self, - ctx: Rc>, + ctx: &QueryContextAll<'input>, ) -> Result { if ctx.with().is_some() { return Err(DataFusionError::NotImplemented(String::from( "not implemented bind_LogicalPlan_from_query", ))); } - self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap()) + self.bind_LogicalPlan_from_queryNoWith(ctx.queryNoWith().unwrap().as_ref()) } fn bind_LogicalPlan_from_queryNoWith<'input>( &self, - ctx: Rc>, + ctx: &QueryNoWithContextAll<'input>, ) -> Result { if ctx.sortItem_all().len() > 0 { return Err(DataFusionError::NotImplemented(String::from( @@ -181,12 +181,12 @@ impl Binder { "not implemented FETCH", ))); } - self.bind_LogicalPlan_from_queryTerm(ctx.queryTerm().unwrap()) + self.bind_LogicalPlan_from_queryTerm(ctx.queryTerm().unwrap().as_ref()) } fn bind_LogicalPlan_from_queryTerm<'input>( &self, - ctx: Rc>, + ctx: &QueryTermContextAll<'input>, ) -> Result { match &*ctx { QueryTermContextAll::QueryTermDefaultContext(c) => { @@ -202,12 +202,12 @@ impl Binder { &self, ctx: &QueryTermDefaultContext<'input>, ) -> Result { - self.bind_LogicalPlan_from_queryPrimary(ctx.queryPrimary().unwrap()) + self.bind_LogicalPlan_from_queryPrimary(ctx.queryPrimary().unwrap().as_ref()) } fn bind_LogicalPlan_from_queryPrimary<'input>( &self, - ctx: Rc>, + ctx: &QueryPrimaryContextAll<'input>, ) -> Result { match &*ctx { QueryPrimaryContextAll::QueryPrimaryDefaultContext(c) => { @@ -223,12 +223,14 @@ impl Binder { &self, ctx: &QueryPrimaryDefaultContext<'input>, ) -> Result { - self.bind_LogicalPlan_from_querySpecification(ctx.querySpecification().unwrap()) + self.bind_LogicalPlan_from_querySpecification( + ctx.querySpecification().unwrap().as_ref(), + ) } fn bind_LogicalPlan_from_querySpecification<'input>( &self, - ctx: Rc>, + ctx: &QuerySpecificationContextAll<'input>, ) -> Result { if ctx.setQuantifier().is_some() { return Err(DataFusionError::NotImplemented(String::from( @@ -266,7 +268,7 @@ impl Binder { schema: DFSchemaRef::new(DFSchema::empty()), }) } else { - self.bind_LogicalPlan_from_relation(ctx.relation(0).unwrap())? + self.bind_LogicalPlan_from_relation(ctx.relation(0).unwrap().as_ref())? }; let items: Vec<_> = self.with_push( @@ -278,7 +280,7 @@ impl Binder { .unwrap() .selectItem_all() .iter() - .map(|item| binder.bind_Expr_from_selectItem(item.clone()).unwrap()) + .map(|item| binder.bind_Expr_from_selectItem(item).unwrap()) .collect() }, ); @@ -288,7 +290,7 @@ impl Binder { fn bind_Expr_from_selectItem<'input>( &self, - ctx: Rc>, + ctx: &SelectItemContextAll<'input>, ) -> Result { match &*ctx { SelectItemContextAll::SelectSingleContext(c) => { @@ -309,19 +311,19 @@ impl Binder { "not implemented identifer in selectSingle", ))); } - self.bind_Expr_from_expression(ctx.expression().unwrap()) + self.bind_Expr_from_expression(ctx.expression().unwrap().as_ref()) } fn bind_Expr_from_expression<'input>( &self, - ctx: Rc>, + ctx: &ExpressionContextAll<'input>, ) -> Result { - self.bind_Expr_from_booleanExpression(ctx.booleanExpression().unwrap()) + self.bind_Expr_from_booleanExpression(ctx.booleanExpression().unwrap().as_ref()) } fn bind_Expr_from_booleanExpression<'input>( &self, - ctx: Rc>, + ctx: &BooleanExpressionContextAll<'input>, ) -> Result { match &*ctx { BooleanExpressionContextAll::PredicatedContext(c) => { @@ -342,12 +344,12 @@ impl Binder { "not implemented predicate", ))); } - self.bind_Expr_from_valueExpression(ctx.valueExpression().unwrap()) + self.bind_Expr_from_valueExpression(ctx.valueExpression().unwrap().as_ref()) } fn bind_Expr_from_valueExpression<'input>( &self, - ctx: Rc>, + ctx: &ValueExpressionContextAll<'input>, ) -> Result { match &*ctx { ValueExpressionContextAll::ValueExpressionDefaultContext(c) => { @@ -363,12 +365,12 @@ impl Binder { &self, ctx: &ValueExpressionDefaultContext<'input>, ) -> Result { - self.bind_Expr_from_primaryExpression(ctx.primaryExpression().unwrap()) + self.bind_Expr_from_primaryExpression(ctx.primaryExpression().unwrap().as_ref()) } fn bind_Expr_from_primaryExpression<'input>( &self, - ctx: Rc>, + ctx: &PrimaryExpressionContextAll<'input>, ) -> Result { match &*ctx { PrimaryExpressionContextAll::ColumnReferenceContext(c) => { @@ -390,7 +392,7 @@ impl Binder { fn bind_LogicalPlan_from_relation<'input>( &self, - ctx: Rc>, + ctx: &RelationContextAll<'input>, ) -> Result { match &*ctx { RelationContextAll::RelationDefaultContext(c) => { @@ -406,48 +408,56 @@ impl Binder { &self, ctx: &RelationDefaultContext<'input>, ) -> Result { - self.bind_LogicalPlan_from_sampledRelation(ctx.sampledRelation().unwrap()) + self.bind_LogicalPlan_from_sampledRelation( + ctx.sampledRelation().unwrap().as_ref(), + ) } fn bind_LogicalPlan_from_sampledRelation<'input>( &self, - ctx: Rc>, + ctx: &SampledRelationContextAll<'input>, ) -> Result { if ctx.sampleType().is_some() { return Err(DataFusionError::NotImplemented(String::from( "not implemented sampleType", ))); } - self.bind_LogicalPlan_from_patternRecognition(ctx.patternRecognition().unwrap()) + self.bind_LogicalPlan_from_patternRecognition( + ctx.patternRecognition().unwrap().as_ref(), + ) } fn bind_LogicalPlan_from_patternRecognition<'input>( &self, - ctx: Rc>, + ctx: &PatternRecognitionContextAll<'input>, ) -> Result { if ctx.MATCH_RECOGNIZE().is_some() { return Err(DataFusionError::NotImplemented(String::from( "not implemented MATCH_RECOGNIZE", ))); } - self.bind_LogicalPlan_from_aliasedRelation(ctx.aliasedRelation().unwrap()) + self.bind_LogicalPlan_from_aliasedRelation( + ctx.aliasedRelation().unwrap().as_ref(), + ) } fn bind_LogicalPlan_from_aliasedRelation<'input>( &self, - ctx: Rc>, + ctx: &AliasedRelationContextAll<'input>, ) -> Result { if ctx.identifier().is_some() { return Err(DataFusionError::NotImplemented(String::from( "not implemented identifier in aliasedRelation", ))); } - self.bind_LogicalPlan_from_relationPrimary(ctx.relationPrimary().unwrap()) + self.bind_LogicalPlan_from_relationPrimary( + ctx.relationPrimary().unwrap().as_ref(), + ) } fn bind_LogicalPlan_from_relationPrimary<'input>( &self, - ctx: Rc>, + ctx: &RelationPrimaryContextAll<'input>, ) -> Result { match &*ctx { RelationPrimaryContextAll::TableNameContext(c) => { @@ -469,8 +479,9 @@ impl Binder { ))); } - let table_ref_result = self - .bind_OwnedTableReference_from_qualified_name(ctx.qualifiedName().unwrap()); + let table_ref_result = self.bind_OwnedTableReference_from_qualified_name( + ctx.qualifiedName().unwrap().as_ref(), + ); if table_ref_result.is_err() { return Err(table_ref_result.unwrap_err()); } @@ -488,7 +499,7 @@ impl Binder { fn bind_OwnedTableReference_from_qualified_name<'input>( &self, - ctx: Rc>, + ctx: &QualifiedNameContextAll<'input>, ) -> Result { let identifiers: Vec<_> = ctx .identifier_all() @@ -513,7 +524,7 @@ impl Binder { fn bind_str_from_identifier<'input>( &self, - ctx: &Rc>, + ctx: &IdentifierContextAll<'input>, ) -> String { ctx.get_text() } @@ -618,7 +629,7 @@ mod tests { TableBindingContext::new(), )])); - let plan = binder.bind_LogicalPlan_from_singleStatement(root).unwrap(); + let plan = binder.bind_LogicalPlan_from_singleStatement(&root).unwrap(); let expected = "Projection: PERSON.ID\n TableScan: PERSON"; assert_eq!(expected, format!("{plan:?}")); } From 0bb5b0becca6a5c32bbb45cd2ea210055bbd4b10 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 14:09:36 -0800 Subject: [PATCH 21/25] case insensitive --- datafusion/sql/Cargo.toml | 3 +- datafusion/sql/src/planner2.rs | 147 ++++++++++++++++++++++++++++++--- 2 files changed, 138 insertions(+), 12 deletions(-) diff --git a/datafusion/sql/Cargo.toml b/datafusion/sql/Cargo.toml index 0384871676aca..683ba7acc7e29 100644 --- a/datafusion/sql/Cargo.toml +++ b/datafusion/sql/Cargo.toml @@ -42,4 +42,5 @@ datafusion-common = { path = "../common", version = "16.0.0" } datafusion-expr = { path = "../expr", version = "16.0.0" } log = "^0.4" sqlparser = "0.30" -antlr-rust = "0.3.0-beta" \ No newline at end of file +antlr-rust = "0.3.0-beta" +better_any = "0.2.0-dev.1" \ No newline at end of file diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 1ac135eb45d14..881d1cdf6c806 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -490,7 +490,7 @@ impl Binder { .resolve_table(table_ref_result.unwrap().as_table_reference()) { Ok(table_source) => { - LogicalPlanBuilder::scan(String::from("PERSON"), table_source, None)? + LogicalPlanBuilder::scan(String::from("person"), table_source, None)? .build() } Err(e) => Err(e), @@ -532,6 +532,7 @@ impl Binder { #[cfg(test)] mod tests { + use std::ops::Deref; use std::rc::Rc; use std::result; use std::sync::Arc; @@ -539,9 +540,11 @@ mod tests { use crate::antlr::presto::prestolexer::PrestoLexer; use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; use crate::planner2::{Binder, BindingContextStack}; + use antlr_rust::char_stream::{CharStream, InputData}; use antlr_rust::common_token_stream::CommonTokenStream; use antlr_rust::errors::ANTLRError; - use antlr_rust::input_stream::InputStream; + use antlr_rust::int_stream::{self, IntStream}; + // use antlr_rust::input_stream::InputStream; use antlr_rust::token_factory::ArenaCommonFactory; use arrow_schema::{DataType, Field, Schema, SchemaRef, TimeUnit}; use datafusion_common::Result; @@ -550,17 +553,139 @@ mod tests { use super::BindingContext; + #[derive(Debug)] + pub struct CaseInsensitiveInputStream { + name: String, + data_raw: Data, + index: isize, + } + + better_any::tid! {impl<'a, T: 'static> TidAble<'a> for CaseInsensitiveInputStream<&'a T> where T: ?Sized} + better_any::tid! {impl<'a, T: 'static> TidAble<'a> for CaseInsensitiveInputStream> where T: ?Sized} + + impl<'a, T: From<&'a str>> CharStream for CaseInsensitiveInputStream<&'a str> { + #[inline] + fn get_text(&self, start: isize, stop: isize) -> T { + self.get_text_inner(start, stop).into() + } + } + + impl<'a, Data> CaseInsensitiveInputStream<&'a Data> + where + Data: ?Sized + InputData, + { + fn get_text_inner(&self, start: isize, stop: isize) -> &'a Data { + // println!("get text {}..{} of {:?}",start,stop,self.data_raw.to_display()); + let start = start as usize; + let stop = self.data_raw.offset(stop, 1).unwrap_or(stop) as usize; + // println!("justed range {}..{} ",start,stop); + // let start = self.data_raw.offset(0,start).unwrap() as usize; + // let stop = self.data_raw.offset(0,stop + 1).unwrap() as usize; + + if stop < self.data_raw.len() { + &self.data_raw[start..stop] + } else { + &self.data_raw[start..] + } + } + + /// Creates new `InputStream` over borrowed data + pub fn new(data_raw: &'a Data) -> Self { + // let data_raw = data_raw.as_ref(); + // let data = data_raw.to_indexed_vec(); + Self { + name: "".to_string(), + data_raw, + index: 0, + // phantom: Default::default(), + } + } + } + impl<'a, Data: Deref> IntStream for CaseInsensitiveInputStream + where + Data::Target: InputData, + { + #[inline] + fn consume(&mut self) { + if let Some(index) = self.data_raw.offset(self.index, 1) { + self.index = index; + // self.current = self.data_raw.deref().item(index).unwrap_or(TOKEN_EOF); + // Ok(()) + } else { + panic!("cannot consume EOF"); + } + } + + #[inline] + fn la(&mut self, mut offset: isize) -> isize { + if offset == 1 { + return match self.data_raw.item(self.index) { + Some(v) => match v { + 97..=122 => v - 33, + _ => v, + }, + None => int_stream::EOF, + }; + } + if offset == 0 { + panic!("should not be called with offset 0"); + } + if offset < 0 { + offset += 1; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + } + + match self + .data_raw + .offset(self.index, offset - 1) + .and_then(|index| self.data_raw.item(index)) + { + Some(v) => match v { + 97..=122 => v - 33, + _ => v, + }, + None => int_stream::EOF, + } + } + + #[inline] + fn mark(&mut self) -> isize { + -1 + } + + #[inline] + fn release(&mut self, _marker: isize) {} + + #[inline] + fn index(&self) -> isize { + self.index + } + + #[inline] + fn seek(&mut self, index: isize) { + self.index = index + } + + #[inline] + fn size(&self) -> isize { + self.data_raw.len() as isize + } + + fn get_source_name(&self) -> String { + self.name.clone() + } + } + fn parse<'input>( sql: &'input str, tf: &'input ArenaCommonFactory<'input>, ) -> result::Result>, ANTLRError> { - println!("test started"); - - let mut _lexer: PrestoLexer<'input, InputStream<&'input str>> = - PrestoLexer::new_with_token_factory(InputStream::new(&sql), &tf); + let mut _lexer: PrestoLexer<'input, CaseInsensitiveInputStream<&'input str>> = + PrestoLexer::new_with_token_factory( + CaseInsensitiveInputStream::new(&sql), + &tf, + ); let token_source = CommonTokenStream::new(_lexer); let mut parser = PrestoParser::new(token_source); - println!("\nstart parsing"); parser.singleStatement() } @@ -595,8 +720,8 @@ mod tests { impl BindingContext for TableBindingContext { fn resolve_table(&self, name: TableReference) -> Result> { let schema = match name.table() { - "PERSON" => Ok(Schema::new(vec![ - Field::new("ID", DataType::UInt32, false), + "person" => Ok(Schema::new(vec![ + Field::new("id", DataType::UInt32, false), Field::new("first_name", DataType::Utf8, false), Field::new("last_name", DataType::Utf8, false), Field::new("age", DataType::Int32, false), @@ -624,13 +749,13 @@ mod tests { #[test] fn it_works() { let tf = ArenaCommonFactory::default(); - let root = parse("SELECT ID FROM PERSON", &tf).unwrap(); + let root = parse("SELECT id FROM person", &tf).unwrap(); let binder = Binder::new(BindingContextStack::new(vec![Arc::new( TableBindingContext::new(), )])); let plan = binder.bind_LogicalPlan_from_singleStatement(&root).unwrap(); - let expected = "Projection: PERSON.ID\n TableScan: PERSON"; + let expected = "Projection: person.id\n TableScan: person"; assert_eq!(expected, format!("{plan:?}")); } } From 0c94edc28421612daa58ef337fe8714dafd947d7 Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 14:40:29 -0800 Subject: [PATCH 22/25] table ref --- datafusion/sql/src/planner2.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 881d1cdf6c806..84269f49c9a85 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -14,7 +14,7 @@ use datafusion_common::{ use std::sync::Arc; trait BindingContext { - fn resolve_table(&self, _: TableReference) -> Result> { + fn resolve_table(&self, _: &TableReference) -> Result> { Err(DataFusionError::NotImplemented(String::from( "Not implement resolve_table", ))) @@ -73,7 +73,7 @@ impl BindingContextStack { } impl BindingContext for BindingContextStack { - fn resolve_table(&self, table_ref: TableReference) -> Result> { + fn resolve_table(&self, table_ref: &TableReference) -> Result> { match self.resolve(|bc| bc.resolve_table(table_ref)) { Ok(result) => Ok(result), Err(_) => Err(DataFusionError::Plan(format!( @@ -485,13 +485,11 @@ impl Binder { if table_ref_result.is_err() { return Err(table_ref_result.unwrap_err()); } - match self - .context - .resolve_table(table_ref_result.unwrap().as_table_reference()) - { + let owned_table_ref = table_ref_result.unwrap(); + let table_ref = owned_table_ref.as_table_reference(); + match self.context.resolve_table(&table_ref) { Ok(table_source) => { - LogicalPlanBuilder::scan(String::from("person"), table_source, None)? - .build() + LogicalPlanBuilder::scan(table_ref.table(), table_source, None)?.build() } Err(e) => Err(e), } @@ -718,7 +716,7 @@ mod tests { } impl BindingContext for TableBindingContext { - fn resolve_table(&self, name: TableReference) -> Result> { + fn resolve_table(&self, name: &TableReference) -> Result> { let schema = match name.table() { "person" => Ok(Schema::new(vec![ Field::new("id", DataType::UInt32, false), From 202f6419c198a7bf2299b87b6bd69a9fd1996f1a Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 14:49:19 -0800 Subject: [PATCH 23/25] split parser --- datafusion/sql/src/lib.rs | 3 +- datafusion/sql/src/planner2.rs | 147 +-------------------------------- 2 files changed, 3 insertions(+), 147 deletions(-) diff --git a/datafusion/sql/src/lib.rs b/datafusion/sql/src/lib.rs index b7b1c9ded4a2f..e77e39bcd6545 100644 --- a/datafusion/sql/src/lib.rs +++ b/datafusion/sql/src/lib.rs @@ -20,7 +20,9 @@ mod expr; pub mod parser; +pub mod parser2; pub mod planner; +pub mod planner2; mod query; mod relation; mod select; @@ -37,7 +39,6 @@ mod antlr pub mod prestoparser; } } -pub mod planner2; pub use datafusion_common::{ResolvedTableReference, TableReference}; pub use sqlparser; diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index 84269f49c9a85..fd464f4c539e1 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -530,19 +530,10 @@ impl Binder { #[cfg(test)] mod tests { - use std::ops::Deref; - use std::rc::Rc; - use std::result; use std::sync::Arc; - use crate::antlr::presto::prestolexer::PrestoLexer; - use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; + use crate::parser2::parse; use crate::planner2::{Binder, BindingContextStack}; - use antlr_rust::char_stream::{CharStream, InputData}; - use antlr_rust::common_token_stream::CommonTokenStream; - use antlr_rust::errors::ANTLRError; - use antlr_rust::int_stream::{self, IntStream}; - // use antlr_rust::input_stream::InputStream; use antlr_rust::token_factory::ArenaCommonFactory; use arrow_schema::{DataType, Field, Schema, SchemaRef, TimeUnit}; use datafusion_common::Result; @@ -551,142 +542,6 @@ mod tests { use super::BindingContext; - #[derive(Debug)] - pub struct CaseInsensitiveInputStream { - name: String, - data_raw: Data, - index: isize, - } - - better_any::tid! {impl<'a, T: 'static> TidAble<'a> for CaseInsensitiveInputStream<&'a T> where T: ?Sized} - better_any::tid! {impl<'a, T: 'static> TidAble<'a> for CaseInsensitiveInputStream> where T: ?Sized} - - impl<'a, T: From<&'a str>> CharStream for CaseInsensitiveInputStream<&'a str> { - #[inline] - fn get_text(&self, start: isize, stop: isize) -> T { - self.get_text_inner(start, stop).into() - } - } - - impl<'a, Data> CaseInsensitiveInputStream<&'a Data> - where - Data: ?Sized + InputData, - { - fn get_text_inner(&self, start: isize, stop: isize) -> &'a Data { - // println!("get text {}..{} of {:?}",start,stop,self.data_raw.to_display()); - let start = start as usize; - let stop = self.data_raw.offset(stop, 1).unwrap_or(stop) as usize; - // println!("justed range {}..{} ",start,stop); - // let start = self.data_raw.offset(0,start).unwrap() as usize; - // let stop = self.data_raw.offset(0,stop + 1).unwrap() as usize; - - if stop < self.data_raw.len() { - &self.data_raw[start..stop] - } else { - &self.data_raw[start..] - } - } - - /// Creates new `InputStream` over borrowed data - pub fn new(data_raw: &'a Data) -> Self { - // let data_raw = data_raw.as_ref(); - // let data = data_raw.to_indexed_vec(); - Self { - name: "".to_string(), - data_raw, - index: 0, - // phantom: Default::default(), - } - } - } - impl<'a, Data: Deref> IntStream for CaseInsensitiveInputStream - where - Data::Target: InputData, - { - #[inline] - fn consume(&mut self) { - if let Some(index) = self.data_raw.offset(self.index, 1) { - self.index = index; - // self.current = self.data_raw.deref().item(index).unwrap_or(TOKEN_EOF); - // Ok(()) - } else { - panic!("cannot consume EOF"); - } - } - - #[inline] - fn la(&mut self, mut offset: isize) -> isize { - if offset == 1 { - return match self.data_raw.item(self.index) { - Some(v) => match v { - 97..=122 => v - 33, - _ => v, - }, - None => int_stream::EOF, - }; - } - if offset == 0 { - panic!("should not be called with offset 0"); - } - if offset < 0 { - offset += 1; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] - } - - match self - .data_raw - .offset(self.index, offset - 1) - .and_then(|index| self.data_raw.item(index)) - { - Some(v) => match v { - 97..=122 => v - 33, - _ => v, - }, - None => int_stream::EOF, - } - } - - #[inline] - fn mark(&mut self) -> isize { - -1 - } - - #[inline] - fn release(&mut self, _marker: isize) {} - - #[inline] - fn index(&self) -> isize { - self.index - } - - #[inline] - fn seek(&mut self, index: isize) { - self.index = index - } - - #[inline] - fn size(&self) -> isize { - self.data_raw.len() as isize - } - - fn get_source_name(&self) -> String { - self.name.clone() - } - } - - fn parse<'input>( - sql: &'input str, - tf: &'input ArenaCommonFactory<'input>, - ) -> result::Result>, ANTLRError> { - let mut _lexer: PrestoLexer<'input, CaseInsensitiveInputStream<&'input str>> = - PrestoLexer::new_with_token_factory( - CaseInsensitiveInputStream::new(&sql), - &tf, - ); - let token_source = CommonTokenStream::new(_lexer); - let mut parser = PrestoParser::new(token_source); - parser.singleStatement() - } - struct EmptyTable { table_schema: SchemaRef, } From abcb88d5f9843e651d53f6497b2bb664cacdc27d Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 16:07:35 -0800 Subject: [PATCH 24/25] complete --- datafusion/sql/src/planner2.rs | 114 +++++++++++++++++++++++++-------- 1 file changed, 88 insertions(+), 26 deletions(-) diff --git a/datafusion/sql/src/planner2.rs b/datafusion/sql/src/planner2.rs index fd464f4c539e1..9240b9fd93424 100644 --- a/datafusion/sql/src/planner2.rs +++ b/datafusion/sql/src/planner2.rs @@ -1,7 +1,7 @@ #![allow(non_snake_case)] #![allow(dead_code)] -use antlr_rust::tree::ParseTree; +use antlr_rust::{parser_rule_context::ParserRuleContext, tree::ParseTree}; use datafusion_expr::{ EmptyRelation, Expr, LogicalPlan, LogicalPlanBuilder, TableSource, }; @@ -11,16 +11,20 @@ use datafusion_common::{ Column, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result, TableReference, }; -use std::sync::Arc; +use std::{result, sync::Arc}; trait BindingContext { - fn resolve_table(&self, _: &TableReference) -> Result> { + fn resolve_table( + &self, + _: &CodeLocation, + _: &TableReference, + ) -> Result> { Err(DataFusionError::NotImplemented(String::from( "Not implement resolve_table", ))) } - fn resolve_column(&self, _: &str) -> Result { + fn resolve_column(&self, _: &CodeLocation, _: &str) -> Result { Err(DataFusionError::NotImplemented(String::from( "Not implement resolve_column", ))) @@ -32,7 +36,7 @@ struct ColumnBindingContext { } impl BindingContext for ColumnBindingContext { - fn resolve_column(&self, name: &str) -> Result { + fn resolve_column(&self, _: &CodeLocation, name: &str) -> Result { match self.schema.index_of_column_by_name(None, name) { Ok(_) => Ok(Expr::Column(Column { relation: None, @@ -73,24 +77,44 @@ impl BindingContextStack { } impl BindingContext for BindingContextStack { - fn resolve_table(&self, table_ref: &TableReference) -> Result> { - match self.resolve(|bc| bc.resolve_table(table_ref)) { + fn resolve_table( + &self, + location: &CodeLocation, + table_ref: &TableReference, + ) -> Result> { + match self.resolve(|bc| bc.resolve_table(location, table_ref)) { Ok(result) => Ok(result), Err(_) => Err(DataFusionError::Plan(format!( - "No table named: {} found", + "({},{}) No table named: {} found", + location.row, + location.col, table_ref.table() ))), } } - fn resolve_column(&self, name: &str) -> Result { - match self.resolve(|bc| bc.resolve_column(name)) { + fn resolve_column(&self, location: &CodeLocation, name: &str) -> Result { + match self.resolve(|bc| bc.resolve_column(location, name)) { Ok(result) => Ok(result), - Err(_) => Err(DataFusionError::Plan(format!("No column: {} found", name))), + Err(_) => Err(DataFusionError::Plan(format!( + "({},{}) No column: {} found", + location.row, location.col, name + ))), } } } +struct CodeLocation { + row: isize, + col: isize, +} + +impl CodeLocation { + fn new(row: isize, col: isize) -> Self { + CodeLocation { row: row, col: col } + } +} + struct Binder { context: BindingContextStack, } @@ -271,7 +295,7 @@ impl Binder { self.bind_LogicalPlan_from_relation(ctx.relation(0).unwrap().as_ref())? }; - let items: Vec<_> = self.with_push( + match self.with_push( Arc::new(ColumnBindingContext { schema: parent.schema().clone(), }), @@ -280,12 +304,13 @@ impl Binder { .unwrap() .selectItem_all() .iter() - .map(|item| binder.bind_Expr_from_selectItem(item).unwrap()) - .collect() + .map(|item| binder.bind_Expr_from_selectItem(item)) + .collect::, _>>() }, - ); - - LogicalPlanBuilder::from(parent).project(items)?.build() + ) { + Ok(items) => LogicalPlanBuilder::from(parent).project(items)?.build(), + Err(e) => Err(e), + } } fn bind_Expr_from_selectItem<'input>( @@ -387,7 +412,10 @@ impl Binder { ctx: &ColumnReferenceContext<'input>, ) -> Result { let name = self.bind_str_from_identifier(&ctx.identifier().unwrap()); - self.context.resolve_column(name.as_str()) + self.context.resolve_column( + &CodeLocation::new(ctx.start().line, ctx.start().column), + name.as_str(), + ) } fn bind_LogicalPlan_from_relation<'input>( @@ -487,7 +515,10 @@ impl Binder { } let owned_table_ref = table_ref_result.unwrap(); let table_ref = owned_table_ref.as_table_reference(); - match self.context.resolve_table(&table_ref) { + match self.context.resolve_table( + &CodeLocation::new(ctx.start().line, ctx.start().column), + &table_ref, + ) { Ok(table_source) => { LogicalPlanBuilder::scan(table_ref.table(), table_source, None)?.build() } @@ -540,7 +571,7 @@ mod tests { use datafusion_common::{DataFusionError, TableReference}; use datafusion_expr::TableSource; - use super::BindingContext; + use super::{BindingContext, CodeLocation}; struct EmptyTable { table_schema: SchemaRef, @@ -571,7 +602,11 @@ mod tests { } impl BindingContext for TableBindingContext { - fn resolve_table(&self, name: &TableReference) -> Result> { + fn resolve_table( + &self, + _: &CodeLocation, + name: &TableReference, + ) -> Result> { let schema = match name.table() { "person" => Ok(Schema::new(vec![ Field::new("id", DataType::UInt32, false), @@ -587,10 +622,7 @@ mod tests { ), Field::new("😀", DataType::Int32, false), ])), - _ => Err(DataFusionError::Plan(format!( - "No table named: {} found", - name.table() - ))), + _ => Err(DataFusionError::Internal(String::from("not resolved"))), }; match schema { @@ -600,7 +632,7 @@ mod tests { } } #[test] - fn it_works() { + fn simple_select() { let tf = ArenaCommonFactory::default(); let root = parse("SELECT id FROM person", &tf).unwrap(); let binder = Binder::new(BindingContextStack::new(vec![Arc::new( @@ -611,4 +643,34 @@ mod tests { let expected = "Projection: person.id\n TableScan: person"; assert_eq!(expected, format!("{plan:?}")); } + + #[test] + fn bad_table_name() { + let tf = ArenaCommonFactory::default(); + let root = parse("SELECT id FROM person1", &tf).unwrap(); + let binder = Binder::new(BindingContextStack::new(vec![Arc::new( + TableBindingContext::new(), + )])); + + let err = binder + .bind_LogicalPlan_from_singleStatement(&root) + .unwrap_err(); + let expected = "Plan(\"(1,15) No table named: person1 found\")"; + assert_eq!(expected, format!("{err:?}")); + } + + #[test] + fn bad_column_name() { + let tf = ArenaCommonFactory::default(); + let root = parse("SELECT id1 FROM person", &tf).unwrap(); + let binder = Binder::new(BindingContextStack::new(vec![Arc::new( + TableBindingContext::new(), + )])); + + let err = binder + .bind_LogicalPlan_from_singleStatement(&root) + .unwrap_err(); + let expected = "Plan(\"(1,7) No column: id1 found\")"; + assert_eq!(expected, format!("{err:?}")); + } } From c218c330c1ec812c1dbbe03c070793c374dbee7a Mon Sep 17 00:00:00 2001 From: zhong xu Date: Sat, 14 Jan 2023 16:11:26 -0800 Subject: [PATCH 25/25] parser --- datafusion/sql/src/parser2.rs | 144 ++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 datafusion/sql/src/parser2.rs diff --git a/datafusion/sql/src/parser2.rs b/datafusion/sql/src/parser2.rs new file mode 100644 index 0000000000000..53eb1b753b2d3 --- /dev/null +++ b/datafusion/sql/src/parser2.rs @@ -0,0 +1,144 @@ +use std::ops::Deref; +use std::rc::Rc; +use std::result; + +use crate::antlr::presto::prestolexer::PrestoLexer; +use crate::antlr::presto::prestoparser::{PrestoParser, SingleStatementContextAll}; +use antlr_rust::char_stream::{CharStream, InputData}; +use antlr_rust::common_token_stream::CommonTokenStream; +use antlr_rust::errors::ANTLRError; +use antlr_rust::int_stream::{self, IntStream}; +use antlr_rust::token_factory::ArenaCommonFactory; + +#[derive(Debug)] +pub struct CaseInsensitiveInputStream { + name: String, + data_raw: Data, + index: isize, +} + +better_any::tid! {impl<'a, T: 'static> TidAble<'a> for CaseInsensitiveInputStream<&'a T> where T: ?Sized} +better_any::tid! {impl<'a, T: 'static> TidAble<'a> for CaseInsensitiveInputStream> where T: ?Sized} + +impl<'a, T: From<&'a str>> CharStream for CaseInsensitiveInputStream<&'a str> { + #[inline] + fn get_text(&self, start: isize, stop: isize) -> T { + self.get_text_inner(start, stop).into() + } +} + +impl<'a, Data> CaseInsensitiveInputStream<&'a Data> +where + Data: ?Sized + InputData, +{ + fn get_text_inner(&self, start: isize, stop: isize) -> &'a Data { + // println!("get text {}..{} of {:?}",start,stop,self.data_raw.to_display()); + let start = start as usize; + let stop = self.data_raw.offset(stop, 1).unwrap_or(stop) as usize; + // println!("justed range {}..{} ",start,stop); + // let start = self.data_raw.offset(0,start).unwrap() as usize; + // let stop = self.data_raw.offset(0,stop + 1).unwrap() as usize; + + if stop < self.data_raw.len() { + &self.data_raw[start..stop] + } else { + &self.data_raw[start..] + } + } + + /// Creates new `InputStream` over borrowed data + pub fn new(data_raw: &'a Data) -> Self { + // let data_raw = data_raw.as_ref(); + // let data = data_raw.to_indexed_vec(); + Self { + name: "".to_string(), + data_raw, + index: 0, + // phantom: Default::default(), + } + } +} +impl<'a, Data: Deref> IntStream for CaseInsensitiveInputStream +where + Data::Target: InputData, +{ + #[inline] + fn consume(&mut self) { + if let Some(index) = self.data_raw.offset(self.index, 1) { + self.index = index; + // self.current = self.data_raw.deref().item(index).unwrap_or(TOKEN_EOF); + // Ok(()) + } else { + panic!("cannot consume EOF"); + } + } + + #[inline] + fn la(&mut self, mut offset: isize) -> isize { + if offset == 1 { + return match self.data_raw.item(self.index) { + Some(v) => match v { + 97..=122 => v - 33, + _ => v, + }, + None => int_stream::EOF, + }; + } + if offset == 0 { + panic!("should not be called with offset 0"); + } + if offset < 0 { + offset += 1; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + } + + match self + .data_raw + .offset(self.index, offset - 1) + .and_then(|index| self.data_raw.item(index)) + { + Some(v) => match v { + 97..=122 => v - 33, + _ => v, + }, + None => int_stream::EOF, + } + } + + #[inline] + fn mark(&mut self) -> isize { + -1 + } + + #[inline] + fn release(&mut self, _marker: isize) {} + + #[inline] + fn index(&self) -> isize { + self.index + } + + #[inline] + fn seek(&mut self, index: isize) { + self.index = index + } + + #[inline] + fn size(&self) -> isize { + self.data_raw.len() as isize + } + + fn get_source_name(&self) -> String { + self.name.clone() + } +} + +pub fn parse<'input>( + sql: &'input str, + tf: &'input ArenaCommonFactory<'input>, +) -> result::Result>, ANTLRError> { + let mut _lexer: PrestoLexer<'input, CaseInsensitiveInputStream<&'input str>> = + PrestoLexer::new_with_token_factory(CaseInsensitiveInputStream::new(&sql), &tf); + let token_source = CommonTokenStream::new(_lexer); + let mut parser = PrestoParser::new(token_source); + parser.singleStatement() +}