All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.hudi.spark.sql.parser.HoodieSqlBaseParser Maven / Gradle / Ivy

// Generated from org/apache/hudi/spark/sql/parser/HoodieSqlBase.g4 by ANTLR 4.8
package org.apache.hudi.spark.sql.parser;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;

@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class HoodieSqlBaseParser extends Parser {
	static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); }

	protected static final DFA[] _decisionToDFA;
	protected static final PredictionContextCache _sharedContextCache =
		new PredictionContextCache();
	public static final int
		T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, ADD=7, AFTER=8, ALL=9, 
		ALTER=10, ANALYZE=11, AND=12, ANTI=13, ANY=14, ARCHIVE=15, ARRAY=16, AS=17, 
		ASC=18, AT=19, AUTHORIZATION=20, BETWEEN=21, BOTH=22, BUCKET=23, BUCKETS=24, 
		BY=25, CACHE=26, CASCADE=27, CASE=28, CAST=29, CHANGE=30, CHECK=31, CLEAR=32, 
		CLUSTER=33, CLUSTERED=34, CODEGEN=35, COLLATE=36, COLLECTION=37, COLUMN=38, 
		COLUMNS=39, COMMENT=40, COMMIT=41, COMPACT=42, COMPACTIONS=43, COMPUTE=44, 
		CONCATENATE=45, CONSTRAINT=46, COST=47, CREATE=48, CROSS=49, CUBE=50, 
		CURRENT=51, CURRENT_DATE=52, CURRENT_TIME=53, CURRENT_TIMESTAMP=54, CURRENT_USER=55, 
		DAY=56, DATA=57, DATABASE=58, DATABASES=59, DBPROPERTIES=60, DEFINED=61, 
		DELETE=62, DELIMITED=63, DESC=64, DESCRIBE=65, DFS=66, DIRECTORIES=67, 
		DIRECTORY=68, DISTINCT=69, DISTRIBUTE=70, DIV=71, DROP=72, ELSE=73, END=74, 
		ESCAPE=75, ESCAPED=76, EXCEPT=77, EXCHANGE=78, EXISTS=79, EXPLAIN=80, 
		EXPORT=81, EXTENDED=82, EXTERNAL=83, EXTRACT=84, FALSE=85, FETCH=86, FIELDS=87, 
		FILTER=88, FILEFORMAT=89, FIRST=90, FOLLOWING=91, FOR=92, FOREIGN=93, 
		FORMAT=94, FORMATTED=95, FROM=96, FULL=97, FUNCTION=98, FUNCTIONS=99, 
		GLOBAL=100, GRANT=101, GROUP=102, GROUPING=103, HAVING=104, HOUR=105, 
		IF=106, IGNORE=107, IMPORT=108, IN=109, INDEX=110, INDEXES=111, INNER=112, 
		INPATH=113, INPUTFORMAT=114, INSERT=115, INTERSECT=116, INTERVAL=117, 
		INTO=118, IS=119, ITEMS=120, JOIN=121, KEYS=122, LAST=123, LATERAL=124, 
		LAZY=125, LEADING=126, LEFT=127, LIKE=128, LIMIT=129, LINES=130, LIST=131, 
		LOAD=132, LOCAL=133, LOCATION=134, LOCK=135, LOCKS=136, LOGICAL=137, MACRO=138, 
		MAP=139, MATCHED=140, MERGE=141, MINUTE=142, MONTH=143, MSCK=144, NAMESPACE=145, 
		NAMESPACES=146, NATURAL=147, NO=148, NOT=149, NULL=150, NULLS=151, OF=152, 
		ON=153, ONLY=154, OPTION=155, OPTIONS=156, OR=157, ORDER=158, OUT=159, 
		OUTER=160, OUTPUTFORMAT=161, OVER=162, OVERLAPS=163, OVERLAY=164, OVERWRITE=165, 
		PARTITION=166, PARTITIONED=167, PARTITIONS=168, PERCENTLIT=169, PIVOT=170, 
		PLACING=171, POSITION=172, PRECEDING=173, PRIMARY=174, PRINCIPALS=175, 
		PROPERTIES=176, PURGE=177, QUERY=178, RANGE=179, RECORDREADER=180, RECORDWRITER=181, 
		RECOVER=182, REDUCE=183, REFERENCES=184, REFRESH=185, RENAME=186, REPAIR=187, 
		REPLACE=188, RESET=189, RESPECT=190, RESTRICT=191, REVOKE=192, RIGHT=193, 
		RLIKE=194, ROLE=195, ROLES=196, ROLLBACK=197, ROLLUP=198, ROW=199, ROWS=200, 
		SECOND=201, SCHEMA=202, SELECT=203, SEMI=204, SEPARATED=205, SERDE=206, 
		SERDEPROPERTIES=207, SESSION_USER=208, SET=209, SETMINUS=210, SETS=211, 
		SHOW=212, SKEWED=213, SOME=214, SORT=215, SORTED=216, START=217, STATISTICS=218, 
		STORED=219, STRATIFY=220, STRUCT=221, SUBSTR=222, SUBSTRING=223, SYNC=224, 
		TABLE=225, TABLES=226, TABLESAMPLE=227, TBLPROPERTIES=228, TEMPORARY=229, 
		TERMINATED=230, THEN=231, TIME=232, TO=233, TOUCH=234, TRAILING=235, TRANSACTION=236, 
		TRANSACTIONS=237, TRANSFORM=238, TRIM=239, TRUE=240, TRUNCATE=241, TRY_CAST=242, 
		TYPE=243, UNARCHIVE=244, UNBOUNDED=245, UNCACHE=246, UNION=247, UNIQUE=248, 
		UNKNOWN=249, UNLOCK=250, UNSET=251, UPDATE=252, USE=253, USER=254, USING=255, 
		VALUES=256, VIEW=257, VIEWS=258, WHEN=259, WHERE=260, WINDOW=261, WITH=262, 
		YEAR=263, ZONE=264, SYSTEM_VERSION=265, VERSION=266, SYSTEM_TIME=267, 
		TIMESTAMP=268, LEFT_PAREN=269, RIGHT_PAREN=270, COMMA=271, DOT=272, EQ=273, 
		NSEQ=274, NEQ=275, NEQJ=276, LT=277, LTE=278, GT=279, GTE=280, PLUS=281, 
		MINUS=282, ASTERISK=283, SLASH=284, PERCENT=285, TILDE=286, AMPERSAND=287, 
		PIPE=288, CONCAT_PIPE=289, HAT=290, STRING=291, BIGINT_LITERAL=292, SMALLINT_LITERAL=293, 
		TINYINT_LITERAL=294, INTEGER_VALUE=295, EXPONENT_VALUE=296, DECIMAL_VALUE=297, 
		FLOAT_LITERAL=298, DOUBLE_LITERAL=299, BIGDECIMAL_LITERAL=300, IDENTIFIER=301, 
		BACKQUOTED_IDENTIFIER=302, SIMPLE_COMMENT=303, BRACKETED_COMMENT=304, 
		WS=305, UNRECOGNIZED=306;
	public static final int
		RULE_singleStatement = 0, RULE_statement = 1, RULE_singleExpression = 2, 
		RULE_singleTableIdentifier = 3, RULE_singleMultipartIdentifier = 4, RULE_singleFunctionIdentifier = 5, 
		RULE_singleDataType = 6, RULE_singleTableSchema = 7, RULE_configKey = 8, 
		RULE_configValue = 9, RULE_unsupportedHiveNativeCommands = 10, RULE_createTableHeader = 11, 
		RULE_replaceTableHeader = 12, RULE_bucketSpec = 13, RULE_skewSpec = 14, 
		RULE_locationSpec = 15, RULE_commentSpec = 16, RULE_query = 17, RULE_insertInto = 18, 
		RULE_partitionSpecLocation = 19, RULE_partitionSpec = 20, RULE_partitionVal = 21, 
		RULE_namespace = 22, RULE_describeFuncName = 23, RULE_describeColName = 24, 
		RULE_ctes = 25, RULE_namedQuery = 26, RULE_tableProvider = 27, RULE_createTableClauses = 28, 
		RULE_tablePropertyList = 29, RULE_tableProperty = 30, RULE_tablePropertyKey = 31, 
		RULE_tablePropertyValue = 32, RULE_constantList = 33, RULE_nestedConstantList = 34, 
		RULE_createFileFormat = 35, RULE_fileFormat = 36, RULE_storageHandler = 37, 
		RULE_resource = 38, RULE_dmlStatementNoWith = 39, RULE_queryOrganization = 40, 
		RULE_multiInsertQueryBody = 41, RULE_queryTerm = 42, RULE_queryPrimary = 43, 
		RULE_sortItem = 44, RULE_fromStatement = 45, RULE_fromStatementBody = 46, 
		RULE_querySpecification = 47, RULE_transformClause = 48, RULE_selectClause = 49, 
		RULE_setClause = 50, RULE_matchedClause = 51, RULE_notMatchedClause = 52, 
		RULE_matchedAction = 53, RULE_notMatchedAction = 54, RULE_assignmentList = 55, 
		RULE_assignment = 56, RULE_whereClause = 57, RULE_havingClause = 58, RULE_hint = 59, 
		RULE_hintStatement = 60, RULE_fromClause = 61, RULE_temporalClause = 62, 
		RULE_aggregationClause = 63, RULE_groupByClause = 64, RULE_groupingAnalytics = 65, 
		RULE_groupingElement = 66, RULE_groupingSet = 67, RULE_pivotClause = 68, 
		RULE_pivotColumn = 69, RULE_pivotValue = 70, RULE_lateralView = 71, RULE_setQuantifier = 72, 
		RULE_relation = 73, RULE_joinRelation = 74, RULE_joinType = 75, RULE_joinCriteria = 76, 
		RULE_sample = 77, RULE_sampleMethod = 78, RULE_identifierList = 79, RULE_identifierSeq = 80, 
		RULE_orderedIdentifierList = 81, RULE_orderedIdentifier = 82, RULE_identifierCommentList = 83, 
		RULE_identifierComment = 84, RULE_relationPrimary = 85, RULE_inlineTable = 86, 
		RULE_functionTable = 87, RULE_tableAlias = 88, RULE_rowFormat = 89, RULE_multipartIdentifierList = 90, 
		RULE_multipartIdentifier = 91, RULE_tableIdentifier = 92, RULE_functionIdentifier = 93, 
		RULE_multipartIdentifierPropertyList = 94, RULE_multipartIdentifierProperty = 95, 
		RULE_propertyList = 96, RULE_property = 97, RULE_propertyKey = 98, RULE_propertyValue = 99, 
		RULE_namedExpression = 100, RULE_namedExpressionSeq = 101, RULE_partitionFieldList = 102, 
		RULE_partitionField = 103, RULE_transform = 104, RULE_transformArgument = 105, 
		RULE_expression = 106, RULE_expressionSeq = 107, RULE_booleanExpression = 108, 
		RULE_predicate = 109, RULE_valueExpression = 110, RULE_primaryExpression = 111, 
		RULE_constant = 112, RULE_comparisonOperator = 113, RULE_arithmeticOperator = 114, 
		RULE_predicateOperator = 115, RULE_booleanValue = 116, RULE_interval = 117, 
		RULE_errorCapturingMultiUnitsInterval = 118, RULE_multiUnitsInterval = 119, 
		RULE_errorCapturingUnitToUnitInterval = 120, RULE_unitToUnitInterval = 121, 
		RULE_intervalValue = 122, RULE_colPosition = 123, RULE_dataType = 124, 
		RULE_qualifiedColTypeWithPositionList = 125, RULE_qualifiedColTypeWithPosition = 126, 
		RULE_colTypeList = 127, RULE_colType = 128, RULE_complexColTypeList = 129, 
		RULE_complexColType = 130, RULE_whenClause = 131, RULE_windowClause = 132, 
		RULE_namedWindow = 133, RULE_windowSpec = 134, RULE_windowFrame = 135, 
		RULE_frameBound = 136, RULE_qualifiedNameList = 137, RULE_functionName = 138, 
		RULE_qualifiedName = 139, RULE_errorCapturingIdentifier = 140, RULE_errorCapturingIdentifierExtra = 141, 
		RULE_identifier = 142, RULE_strictIdentifier = 143, RULE_quotedIdentifier = 144, 
		RULE_number = 145, RULE_alterColumnAction = 146, RULE_ansiNonReserved = 147, 
		RULE_strictNonReserved = 148, RULE_nonReserved = 149;
	private static String[] makeRuleNames() {
		return new String[] {
			"singleStatement", "statement", "singleExpression", "singleTableIdentifier", 
			"singleMultipartIdentifier", "singleFunctionIdentifier", "singleDataType", 
			"singleTableSchema", "configKey", "configValue", "unsupportedHiveNativeCommands", 
			"createTableHeader", "replaceTableHeader", "bucketSpec", "skewSpec", 
			"locationSpec", "commentSpec", "query", "insertInto", "partitionSpecLocation", 
			"partitionSpec", "partitionVal", "namespace", "describeFuncName", "describeColName", 
			"ctes", "namedQuery", "tableProvider", "createTableClauses", "tablePropertyList", 
			"tableProperty", "tablePropertyKey", "tablePropertyValue", "constantList", 
			"nestedConstantList", "createFileFormat", "fileFormat", "storageHandler", 
			"resource", "dmlStatementNoWith", "queryOrganization", "multiInsertQueryBody", 
			"queryTerm", "queryPrimary", "sortItem", "fromStatement", "fromStatementBody", 
			"querySpecification", "transformClause", "selectClause", "setClause", 
			"matchedClause", "notMatchedClause", "matchedAction", "notMatchedAction", 
			"assignmentList", "assignment", "whereClause", "havingClause", "hint", 
			"hintStatement", "fromClause", "temporalClause", "aggregationClause", 
			"groupByClause", "groupingAnalytics", "groupingElement", "groupingSet", 
			"pivotClause", "pivotColumn", "pivotValue", "lateralView", "setQuantifier", 
			"relation", "joinRelation", "joinType", "joinCriteria", "sample", "sampleMethod", 
			"identifierList", "identifierSeq", "orderedIdentifierList", "orderedIdentifier", 
			"identifierCommentList", "identifierComment", "relationPrimary", "inlineTable", 
			"functionTable", "tableAlias", "rowFormat", "multipartIdentifierList", 
			"multipartIdentifier", "tableIdentifier", "functionIdentifier", "multipartIdentifierPropertyList", 
			"multipartIdentifierProperty", "propertyList", "property", "propertyKey", 
			"propertyValue", "namedExpression", "namedExpressionSeq", "partitionFieldList", 
			"partitionField", "transform", "transformArgument", "expression", "expressionSeq", 
			"booleanExpression", "predicate", "valueExpression", "primaryExpression", 
			"constant", "comparisonOperator", "arithmeticOperator", "predicateOperator", 
			"booleanValue", "interval", "errorCapturingMultiUnitsInterval", "multiUnitsInterval", 
			"errorCapturingUnitToUnitInterval", "unitToUnitInterval", "intervalValue", 
			"colPosition", "dataType", "qualifiedColTypeWithPositionList", "qualifiedColTypeWithPosition", 
			"colTypeList", "colType", "complexColTypeList", "complexColType", "whenClause", 
			"windowClause", "namedWindow", "windowSpec", "windowFrame", "frameBound", 
			"qualifiedNameList", "functionName", "qualifiedName", "errorCapturingIdentifier", 
			"errorCapturingIdentifierExtra", "identifier", "strictIdentifier", "quotedIdentifier", 
			"number", "alterColumnAction", "ansiNonReserved", "strictNonReserved", 
			"nonReserved"
		};
	}
	public static final String[] ruleNames = makeRuleNames();

	private static String[] makeLiteralNames() {
		return new String[] {
			null, "'/*+'", "'*/'", "'->'", "'['", "']'", "':'", "'ADD'", "'AFTER'", 
			"'ALL'", "'ALTER'", "'ANALYZE'", "'AND'", "'ANTI'", "'ANY'", "'ARCHIVE'", 
			"'ARRAY'", "'AS'", "'ASC'", "'AT'", "'AUTHORIZATION'", "'BETWEEN'", "'BOTH'", 
			"'BUCKET'", "'BUCKETS'", "'BY'", "'CACHE'", "'CASCADE'", "'CASE'", "'CAST'", 
			"'CHANGE'", "'CHECK'", "'CLEAR'", "'CLUSTER'", "'CLUSTERED'", "'CODEGEN'", 
			"'COLLATE'", "'COLLECTION'", "'COLUMN'", "'COLUMNS'", "'COMMENT'", "'COMMIT'", 
			"'COMPACT'", "'COMPACTIONS'", "'COMPUTE'", "'CONCATENATE'", "'CONSTRAINT'", 
			"'COST'", "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", "'CURRENT_DATE'", 
			"'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DAY'", "'DATA'", 
			"'DATABASE'", null, "'DBPROPERTIES'", "'DEFINED'", "'DELETE'", "'DELIMITED'", 
			"'DESC'", "'DESCRIBE'", "'DFS'", "'DIRECTORIES'", "'DIRECTORY'", "'DISTINCT'", 
			"'DISTRIBUTE'", "'DIV'", "'DROP'", "'ELSE'", "'END'", "'ESCAPE'", "'ESCAPED'", 
			"'EXCEPT'", "'EXCHANGE'", "'EXISTS'", "'EXPLAIN'", "'EXPORT'", "'EXTENDED'", 
			"'EXTERNAL'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FIELDS'", "'FILTER'", 
			"'FILEFORMAT'", "'FIRST'", "'FOLLOWING'", "'FOR'", "'FOREIGN'", "'FORMAT'", 
			"'FORMATTED'", "'FROM'", "'FULL'", "'FUNCTION'", "'FUNCTIONS'", "'GLOBAL'", 
			"'GRANT'", "'GROUP'", "'GROUPING'", "'HAVING'", "'HOUR'", "'IF'", "'IGNORE'", 
			"'IMPORT'", "'IN'", "'INDEX'", "'INDEXES'", "'INNER'", "'INPATH'", "'INPUTFORMAT'", 
			"'INSERT'", "'INTERSECT'", "'INTERVAL'", "'INTO'", "'IS'", "'ITEMS'", 
			"'JOIN'", "'KEYS'", "'LAST'", "'LATERAL'", "'LAZY'", "'LEADING'", "'LEFT'", 
			"'LIKE'", "'LIMIT'", "'LINES'", "'LIST'", "'LOAD'", "'LOCAL'", "'LOCATION'", 
			"'LOCK'", "'LOCKS'", "'LOGICAL'", "'MACRO'", "'MAP'", "'MATCHED'", "'MERGE'", 
			"'MINUTE'", "'MONTH'", "'MSCK'", "'NAMESPACE'", "'NAMESPACES'", "'NATURAL'", 
			"'NO'", null, "'NULL'", "'NULLS'", "'OF'", "'ON'", "'ONLY'", "'OPTION'", 
			"'OPTIONS'", "'OR'", "'ORDER'", "'OUT'", "'OUTER'", "'OUTPUTFORMAT'", 
			"'OVER'", "'OVERLAPS'", "'OVERLAY'", "'OVERWRITE'", "'PARTITION'", "'PARTITIONED'", 
			"'PARTITIONS'", "'PERCENT'", "'PIVOT'", "'PLACING'", "'POSITION'", "'PRECEDING'", 
			"'PRIMARY'", "'PRINCIPALS'", "'PROPERTIES'", "'PURGE'", "'QUERY'", "'RANGE'", 
			"'RECORDREADER'", "'RECORDWRITER'", "'RECOVER'", "'REDUCE'", "'REFERENCES'", 
			"'REFRESH'", "'RENAME'", "'REPAIR'", "'REPLACE'", "'RESET'", "'RESPECT'", 
			"'RESTRICT'", "'REVOKE'", "'RIGHT'", null, "'ROLE'", "'ROLES'", "'ROLLBACK'", 
			"'ROLLUP'", "'ROW'", "'ROWS'", "'SECOND'", "'SCHEMA'", "'SELECT'", "'SEMI'", 
			"'SEPARATED'", "'SERDE'", "'SERDEPROPERTIES'", "'SESSION_USER'", "'SET'", 
			"'MINUS'", "'SETS'", "'SHOW'", "'SKEWED'", "'SOME'", "'SORT'", "'SORTED'", 
			"'START'", "'STATISTICS'", "'STORED'", "'STRATIFY'", "'STRUCT'", "'SUBSTR'", 
			"'SUBSTRING'", "'SYNC'", "'TABLE'", "'TABLES'", "'TABLESAMPLE'", "'TBLPROPERTIES'", 
			null, "'TERMINATED'", "'THEN'", "'TIME'", "'TO'", "'TOUCH'", "'TRAILING'", 
			"'TRANSACTION'", "'TRANSACTIONS'", "'TRANSFORM'", "'TRIM'", "'TRUE'", 
			"'TRUNCATE'", "'TRY_CAST'", "'TYPE'", "'UNARCHIVE'", "'UNBOUNDED'", "'UNCACHE'", 
			"'UNION'", "'UNIQUE'", "'UNKNOWN'", "'UNLOCK'", "'UNSET'", "'UPDATE'", 
			"'USE'", "'USER'", "'USING'", "'VALUES'", "'VIEW'", "'VIEWS'", "'WHEN'", 
			"'WHERE'", "'WINDOW'", "'WITH'", "'YEAR'", "'ZONE'", "'SYSTEM_VERSION'", 
			"'VERSION'", "'SYSTEM_TIME'", "'TIMESTAMP'", "'('", "')'", "','", "'.'", 
			null, "'<=>'", "'<>'", "'!='", "'<'", null, "'>'", null, "'+'", "'-'", 
			"'*'", "'/'", "'%'", "'~'", "'&'", "'|'", "'||'", "'^'"
		};
	}
	private static final String[] _LITERAL_NAMES = makeLiteralNames();
	private static String[] makeSymbolicNames() {
		return new String[] {
			null, null, null, null, null, null, null, "ADD", "AFTER", "ALL", "ALTER", 
			"ANALYZE", "AND", "ANTI", "ANY", "ARCHIVE", "ARRAY", "AS", "ASC", "AT", 
			"AUTHORIZATION", "BETWEEN", "BOTH", "BUCKET", "BUCKETS", "BY", "CACHE", 
			"CASCADE", "CASE", "CAST", "CHANGE", "CHECK", "CLEAR", "CLUSTER", "CLUSTERED", 
			"CODEGEN", "COLLATE", "COLLECTION", "COLUMN", "COLUMNS", "COMMENT", "COMMIT", 
			"COMPACT", "COMPACTIONS", "COMPUTE", "CONCATENATE", "CONSTRAINT", "COST", 
			"CREATE", "CROSS", "CUBE", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", 
			"CURRENT_TIMESTAMP", "CURRENT_USER", "DAY", "DATA", "DATABASE", "DATABASES", 
			"DBPROPERTIES", "DEFINED", "DELETE", "DELIMITED", "DESC", "DESCRIBE", 
			"DFS", "DIRECTORIES", "DIRECTORY", "DISTINCT", "DISTRIBUTE", "DIV", "DROP", 
			"ELSE", "END", "ESCAPE", "ESCAPED", "EXCEPT", "EXCHANGE", "EXISTS", "EXPLAIN", 
			"EXPORT", "EXTENDED", "EXTERNAL", "EXTRACT", "FALSE", "FETCH", "FIELDS", 
			"FILTER", "FILEFORMAT", "FIRST", "FOLLOWING", "FOR", "FOREIGN", "FORMAT", 
			"FORMATTED", "FROM", "FULL", "FUNCTION", "FUNCTIONS", "GLOBAL", "GRANT", 
			"GROUP", "GROUPING", "HAVING", "HOUR", "IF", "IGNORE", "IMPORT", "IN", 
			"INDEX", "INDEXES", "INNER", "INPATH", "INPUTFORMAT", "INSERT", "INTERSECT", 
			"INTERVAL", "INTO", "IS", "ITEMS", "JOIN", "KEYS", "LAST", "LATERAL", 
			"LAZY", "LEADING", "LEFT", "LIKE", "LIMIT", "LINES", "LIST", "LOAD", 
			"LOCAL", "LOCATION", "LOCK", "LOCKS", "LOGICAL", "MACRO", "MAP", "MATCHED", 
			"MERGE", "MINUTE", "MONTH", "MSCK", "NAMESPACE", "NAMESPACES", "NATURAL", 
			"NO", "NOT", "NULL", "NULLS", "OF", "ON", "ONLY", "OPTION", "OPTIONS", 
			"OR", "ORDER", "OUT", "OUTER", "OUTPUTFORMAT", "OVER", "OVERLAPS", "OVERLAY", 
			"OVERWRITE", "PARTITION", "PARTITIONED", "PARTITIONS", "PERCENTLIT", 
			"PIVOT", "PLACING", "POSITION", "PRECEDING", "PRIMARY", "PRINCIPALS", 
			"PROPERTIES", "PURGE", "QUERY", "RANGE", "RECORDREADER", "RECORDWRITER", 
			"RECOVER", "REDUCE", "REFERENCES", "REFRESH", "RENAME", "REPAIR", "REPLACE", 
			"RESET", "RESPECT", "RESTRICT", "REVOKE", "RIGHT", "RLIKE", "ROLE", "ROLES", 
			"ROLLBACK", "ROLLUP", "ROW", "ROWS", "SECOND", "SCHEMA", "SELECT", "SEMI", 
			"SEPARATED", "SERDE", "SERDEPROPERTIES", "SESSION_USER", "SET", "SETMINUS", 
			"SETS", "SHOW", "SKEWED", "SOME", "SORT", "SORTED", "START", "STATISTICS", 
			"STORED", "STRATIFY", "STRUCT", "SUBSTR", "SUBSTRING", "SYNC", "TABLE", 
			"TABLES", "TABLESAMPLE", "TBLPROPERTIES", "TEMPORARY", "TERMINATED", 
			"THEN", "TIME", "TO", "TOUCH", "TRAILING", "TRANSACTION", "TRANSACTIONS", 
			"TRANSFORM", "TRIM", "TRUE", "TRUNCATE", "TRY_CAST", "TYPE", "UNARCHIVE", 
			"UNBOUNDED", "UNCACHE", "UNION", "UNIQUE", "UNKNOWN", "UNLOCK", "UNSET", 
			"UPDATE", "USE", "USER", "USING", "VALUES", "VIEW", "VIEWS", "WHEN", 
			"WHERE", "WINDOW", "WITH", "YEAR", "ZONE", "SYSTEM_VERSION", "VERSION", 
			"SYSTEM_TIME", "TIMESTAMP", "LEFT_PAREN", "RIGHT_PAREN", "COMMA", "DOT", 
			"EQ", "NSEQ", "NEQ", "NEQJ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", 
			"ASTERISK", "SLASH", "PERCENT", "TILDE", "AMPERSAND", "PIPE", "CONCAT_PIPE", 
			"HAT", "STRING", "BIGINT_LITERAL", "SMALLINT_LITERAL", "TINYINT_LITERAL", 
			"INTEGER_VALUE", "EXPONENT_VALUE", "DECIMAL_VALUE", "FLOAT_LITERAL", 
			"DOUBLE_LITERAL", "BIGDECIMAL_LITERAL", "IDENTIFIER", "BACKQUOTED_IDENTIFIER", 
			"SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", "UNRECOGNIZED"
		};
	}
	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);

	/**
	 * @deprecated Use {@link #VOCABULARY} instead.
	 */
	@Deprecated
	public static final String[] tokenNames;
	static {
		tokenNames = new String[_SYMBOLIC_NAMES.length];
		for (int i = 0; i < tokenNames.length; i++) {
			tokenNames[i] = VOCABULARY.getLiteralName(i);
			if (tokenNames[i] == null) {
				tokenNames[i] = VOCABULARY.getSymbolicName(i);
			}

			if (tokenNames[i] == null) {
				tokenNames[i] = "";
			}
		}
	}

	@Override
	@Deprecated
	public String[] getTokenNames() {
		return tokenNames;
	}

	@Override

	public Vocabulary getVocabulary() {
		return VOCABULARY;
	}

	@Override
	public String getGrammarFileName() { return "HoodieSqlBase.g4"; }

	@Override
	public String[] getRuleNames() { return ruleNames; }

	@Override
	public String getSerializedATN() { return _serializedATN; }

	@Override
	public ATN getATN() { return _ATN; }


	  /**
	   * When false, INTERSECT is given the greater precedence over the other set
	   * operations (UNION, EXCEPT and MINUS) as per the SQL standard.
	   */
	  public boolean legacy_setops_precedence_enabled = false;

	  /**
	   * When false, a literal with an exponent would be converted into
	   * double type rather than decimal type.
	   */
	  public boolean legacy_exponent_literal_as_decimal_enabled = false;

	  /**
	   * When true, the behavior of keywords follows ANSI SQL standard.
	   */
	  public boolean SQL_standard_keyword_behavior = false;

	public HoodieSqlBaseParser(TokenStream input) {
		super(input);
		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
	}

	public static class SingleStatementContext extends ParserRuleContext {
		public StatementContext statement() {
			return getRuleContext(StatementContext.class,0);
		}
		public TerminalNode EOF() { return getToken(HoodieSqlBaseParser.EOF, 0); }
		public SingleStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleStatementContext singleStatement() throws RecognitionException {
		SingleStatementContext _localctx = new SingleStatementContext(_ctx, getState());
		enterRule(_localctx, 0, RULE_singleStatement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(300);
			statement();
			setState(301);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StatementContext extends ParserRuleContext {
		public StatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_statement; }
	 
		public StatementContext() { }
		public void copyFrom(StatementContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class RefreshIndexContext extends StatementContext {
		public TerminalNode REFRESH() { return getToken(HoodieSqlBaseParser.REFRESH, 0); }
		public TerminalNode INDEX() { return getToken(HoodieSqlBaseParser.INDEX, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public TableIdentifierContext tableIdentifier() {
			return getRuleContext(TableIdentifierContext.class,0);
		}
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public RefreshIndexContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterRefreshIndex(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitRefreshIndex(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitRefreshIndex(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class PassThroughContext extends StatementContext {
		public PassThroughContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPassThrough(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPassThrough(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPassThrough(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class QueryStatementContext extends StatementContext {
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public QueryStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQueryStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQueryStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQueryStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class CreateTableContext extends StatementContext {
		public CreateTableHeaderContext createTableHeader() {
			return getRuleContext(CreateTableHeaderContext.class,0);
		}
		public CreateTableClausesContext createTableClauses() {
			return getRuleContext(CreateTableClausesContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public ColTypeListContext colTypeList() {
			return getRuleContext(ColTypeListContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TableProviderContext tableProvider() {
			return getRuleContext(TableProviderContext.class,0);
		}
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public CreateTableContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCreateTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCreateTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCreateTable(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ShowIndexesContext extends StatementContext {
		public TerminalNode SHOW() { return getToken(HoodieSqlBaseParser.SHOW, 0); }
		public TerminalNode INDEXES() { return getToken(HoodieSqlBaseParser.INDEXES, 0); }
		public TableIdentifierContext tableIdentifier() {
			return getRuleContext(TableIdentifierContext.class,0);
		}
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public TerminalNode IN() { return getToken(HoodieSqlBaseParser.IN, 0); }
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public ShowIndexesContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterShowIndexes(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitShowIndexes(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitShowIndexes(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class DmlStatementContext extends StatementContext {
		public DmlStatementNoWithContext dmlStatementNoWith() {
			return getRuleContext(DmlStatementNoWithContext.class,0);
		}
		public CtesContext ctes() {
			return getRuleContext(CtesContext.class,0);
		}
		public DmlStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDmlStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDmlStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDmlStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class CreateIndexContext extends StatementContext {
		public IdentifierContext indexType;
		public MultipartIdentifierPropertyListContext columns;
		public PropertyListContext indexOptions;
		public TerminalNode CREATE() { return getToken(HoodieSqlBaseParser.CREATE, 0); }
		public TerminalNode INDEX() { return getToken(HoodieSqlBaseParser.INDEX, 0); }
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public TableIdentifierContext tableIdentifier() {
			return getRuleContext(TableIdentifierContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public MultipartIdentifierPropertyListContext multipartIdentifierPropertyList() {
			return getRuleContext(MultipartIdentifierPropertyListContext.class,0);
		}
		public TerminalNode IF() { return getToken(HoodieSqlBaseParser.IF, 0); }
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public TerminalNode USING() { return getToken(HoodieSqlBaseParser.USING, 0); }
		public TerminalNode OPTIONS() { return getToken(HoodieSqlBaseParser.OPTIONS, 0); }
		public PropertyListContext propertyList() {
			return getRuleContext(PropertyListContext.class,0);
		}
		public CreateIndexContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCreateIndex(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCreateIndex(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCreateIndex(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class DropIndexContext extends StatementContext {
		public TerminalNode DROP() { return getToken(HoodieSqlBaseParser.DROP, 0); }
		public TerminalNode INDEX() { return getToken(HoodieSqlBaseParser.INDEX, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public TableIdentifierContext tableIdentifier() {
			return getRuleContext(TableIdentifierContext.class,0);
		}
		public TerminalNode IF() { return getToken(HoodieSqlBaseParser.IF, 0); }
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public DropIndexContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDropIndex(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDropIndex(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDropIndex(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StatementContext statement() throws RecognitionException {
		StatementContext _localctx = new StatementContext(_ctx, getState());
		enterRule(_localctx, 2, RULE_statement);
		int _la;
		try {
			int _alt;
			setState(384);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
			case 1:
				_localctx = new QueryStatementContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(303);
				query();
				}
				break;
			case 2:
				_localctx = new DmlStatementContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(305);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==WITH) {
					{
					setState(304);
					ctes();
					}
				}

				setState(307);
				dmlStatementNoWith();
				}
				break;
			case 3:
				_localctx = new CreateTableContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(308);
				createTableHeader();
				setState(313);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
				case 1:
					{
					setState(309);
					match(LEFT_PAREN);
					setState(310);
					colTypeList();
					setState(311);
					match(RIGHT_PAREN);
					}
					break;
				}
				setState(316);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==USING) {
					{
					setState(315);
					tableProvider();
					}
				}

				setState(318);
				createTableClauses();
				setState(323);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==AS || _la==FROM || _la==MAP || ((((_la - 183)) & ~0x3f) == 0 && ((1L << (_la - 183)) & ((1L << (REDUCE - 183)) | (1L << (SELECT - 183)) | (1L << (TABLE - 183)))) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & ((1L << (VALUES - 256)) | (1L << (WITH - 256)) | (1L << (LEFT_PAREN - 256)))) != 0)) {
					{
					setState(320);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==AS) {
						{
						setState(319);
						match(AS);
						}
					}

					setState(322);
					query();
					}
				}

				}
				break;
			case 4:
				_localctx = new CreateIndexContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(325);
				match(CREATE);
				setState(326);
				match(INDEX);
				setState(330);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
				case 1:
					{
					setState(327);
					match(IF);
					setState(328);
					match(NOT);
					setState(329);
					match(EXISTS);
					}
					break;
				}
				setState(332);
				identifier();
				setState(333);
				match(ON);
				setState(335);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
				case 1:
					{
					setState(334);
					match(TABLE);
					}
					break;
				}
				setState(337);
				tableIdentifier();
				setState(340);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==USING) {
					{
					setState(338);
					match(USING);
					setState(339);
					((CreateIndexContext)_localctx).indexType = identifier();
					}
				}

				setState(342);
				match(LEFT_PAREN);
				setState(343);
				((CreateIndexContext)_localctx).columns = multipartIdentifierPropertyList();
				setState(344);
				match(RIGHT_PAREN);
				setState(347);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OPTIONS) {
					{
					setState(345);
					match(OPTIONS);
					setState(346);
					((CreateIndexContext)_localctx).indexOptions = propertyList();
					}
				}

				}
				break;
			case 5:
				_localctx = new DropIndexContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(349);
				match(DROP);
				setState(350);
				match(INDEX);
				setState(353);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) {
				case 1:
					{
					setState(351);
					match(IF);
					setState(352);
					match(EXISTS);
					}
					break;
				}
				setState(355);
				identifier();
				setState(356);
				match(ON);
				setState(358);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
				case 1:
					{
					setState(357);
					match(TABLE);
					}
					break;
				}
				setState(360);
				tableIdentifier();
				}
				break;
			case 6:
				_localctx = new ShowIndexesContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(362);
				match(SHOW);
				setState(363);
				match(INDEXES);
				setState(364);
				_la = _input.LA(1);
				if ( !(_la==FROM || _la==IN) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(366);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
				case 1:
					{
					setState(365);
					match(TABLE);
					}
					break;
				}
				setState(368);
				tableIdentifier();
				}
				break;
			case 7:
				_localctx = new RefreshIndexContext(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(369);
				match(REFRESH);
				setState(370);
				match(INDEX);
				setState(371);
				identifier();
				setState(372);
				match(ON);
				setState(374);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) {
				case 1:
					{
					setState(373);
					match(TABLE);
					}
					break;
				}
				setState(376);
				tableIdentifier();
				}
				break;
			case 8:
				_localctx = new PassThroughContext(_localctx);
				enterOuterAlt(_localctx, 8);
				{
				setState(381);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,13,_ctx);
				while ( _alt!=1 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1+1 ) {
						{
						{
						setState(378);
						matchWildcard();
						}
						} 
					}
					setState(383);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,13,_ctx);
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SingleExpressionContext extends ParserRuleContext {
		public NamedExpressionContext namedExpression() {
			return getRuleContext(NamedExpressionContext.class,0);
		}
		public TerminalNode EOF() { return getToken(HoodieSqlBaseParser.EOF, 0); }
		public SingleExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleExpressionContext singleExpression() throws RecognitionException {
		SingleExpressionContext _localctx = new SingleExpressionContext(_ctx, getState());
		enterRule(_localctx, 4, RULE_singleExpression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(386);
			namedExpression();
			setState(387);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SingleTableIdentifierContext extends ParserRuleContext {
		public TableIdentifierContext tableIdentifier() {
			return getRuleContext(TableIdentifierContext.class,0);
		}
		public TerminalNode EOF() { return getToken(HoodieSqlBaseParser.EOF, 0); }
		public SingleTableIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleTableIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleTableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleTableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleTableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleTableIdentifierContext singleTableIdentifier() throws RecognitionException {
		SingleTableIdentifierContext _localctx = new SingleTableIdentifierContext(_ctx, getState());
		enterRule(_localctx, 6, RULE_singleTableIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(389);
			tableIdentifier();
			setState(390);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SingleMultipartIdentifierContext extends ParserRuleContext {
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TerminalNode EOF() { return getToken(HoodieSqlBaseParser.EOF, 0); }
		public SingleMultipartIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleMultipartIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleMultipartIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleMultipartIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleMultipartIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleMultipartIdentifierContext singleMultipartIdentifier() throws RecognitionException {
		SingleMultipartIdentifierContext _localctx = new SingleMultipartIdentifierContext(_ctx, getState());
		enterRule(_localctx, 8, RULE_singleMultipartIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(392);
			multipartIdentifier();
			setState(393);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SingleFunctionIdentifierContext extends ParserRuleContext {
		public FunctionIdentifierContext functionIdentifier() {
			return getRuleContext(FunctionIdentifierContext.class,0);
		}
		public TerminalNode EOF() { return getToken(HoodieSqlBaseParser.EOF, 0); }
		public SingleFunctionIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleFunctionIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleFunctionIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleFunctionIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleFunctionIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleFunctionIdentifierContext singleFunctionIdentifier() throws RecognitionException {
		SingleFunctionIdentifierContext _localctx = new SingleFunctionIdentifierContext(_ctx, getState());
		enterRule(_localctx, 10, RULE_singleFunctionIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(395);
			functionIdentifier();
			setState(396);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SingleDataTypeContext extends ParserRuleContext {
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public TerminalNode EOF() { return getToken(HoodieSqlBaseParser.EOF, 0); }
		public SingleDataTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleDataType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleDataType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleDataType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleDataType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleDataTypeContext singleDataType() throws RecognitionException {
		SingleDataTypeContext _localctx = new SingleDataTypeContext(_ctx, getState());
		enterRule(_localctx, 12, RULE_singleDataType);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(398);
			dataType();
			setState(399);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SingleTableSchemaContext extends ParserRuleContext {
		public ColTypeListContext colTypeList() {
			return getRuleContext(ColTypeListContext.class,0);
		}
		public TerminalNode EOF() { return getToken(HoodieSqlBaseParser.EOF, 0); }
		public SingleTableSchemaContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleTableSchema; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleTableSchema(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleTableSchema(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleTableSchema(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleTableSchemaContext singleTableSchema() throws RecognitionException {
		SingleTableSchemaContext _localctx = new SingleTableSchemaContext(_ctx, getState());
		enterRule(_localctx, 14, RULE_singleTableSchema);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(401);
			colTypeList();
			setState(402);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ConfigKeyContext extends ParserRuleContext {
		public QuotedIdentifierContext quotedIdentifier() {
			return getRuleContext(QuotedIdentifierContext.class,0);
		}
		public ConfigKeyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_configKey; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterConfigKey(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitConfigKey(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitConfigKey(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ConfigKeyContext configKey() throws RecognitionException {
		ConfigKeyContext _localctx = new ConfigKeyContext(_ctx, getState());
		enterRule(_localctx, 16, RULE_configKey);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(404);
			quotedIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ConfigValueContext extends ParserRuleContext {
		public QuotedIdentifierContext quotedIdentifier() {
			return getRuleContext(QuotedIdentifierContext.class,0);
		}
		public ConfigValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_configValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterConfigValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitConfigValue(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitConfigValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ConfigValueContext configValue() throws RecognitionException {
		ConfigValueContext _localctx = new ConfigValueContext(_ctx, getState());
		enterRule(_localctx, 18, RULE_configValue);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(406);
			quotedIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class UnsupportedHiveNativeCommandsContext extends ParserRuleContext {
		public Token kw1;
		public Token kw2;
		public Token kw3;
		public Token kw4;
		public Token kw5;
		public Token kw6;
		public TerminalNode CREATE() { return getToken(HoodieSqlBaseParser.CREATE, 0); }
		public TerminalNode ROLE() { return getToken(HoodieSqlBaseParser.ROLE, 0); }
		public TerminalNode DROP() { return getToken(HoodieSqlBaseParser.DROP, 0); }
		public TerminalNode GRANT() { return getToken(HoodieSqlBaseParser.GRANT, 0); }
		public TerminalNode REVOKE() { return getToken(HoodieSqlBaseParser.REVOKE, 0); }
		public TerminalNode SHOW() { return getToken(HoodieSqlBaseParser.SHOW, 0); }
		public TerminalNode PRINCIPALS() { return getToken(HoodieSqlBaseParser.PRINCIPALS, 0); }
		public TerminalNode ROLES() { return getToken(HoodieSqlBaseParser.ROLES, 0); }
		public TerminalNode CURRENT() { return getToken(HoodieSqlBaseParser.CURRENT, 0); }
		public TerminalNode EXPORT() { return getToken(HoodieSqlBaseParser.EXPORT, 0); }
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public TerminalNode IMPORT() { return getToken(HoodieSqlBaseParser.IMPORT, 0); }
		public TerminalNode COMPACTIONS() { return getToken(HoodieSqlBaseParser.COMPACTIONS, 0); }
		public TerminalNode TRANSACTIONS() { return getToken(HoodieSqlBaseParser.TRANSACTIONS, 0); }
		public TerminalNode INDEXES() { return getToken(HoodieSqlBaseParser.INDEXES, 0); }
		public TerminalNode LOCKS() { return getToken(HoodieSqlBaseParser.LOCKS, 0); }
		public TerminalNode INDEX() { return getToken(HoodieSqlBaseParser.INDEX, 0); }
		public TerminalNode ALTER() { return getToken(HoodieSqlBaseParser.ALTER, 0); }
		public TerminalNode LOCK() { return getToken(HoodieSqlBaseParser.LOCK, 0); }
		public TerminalNode DATABASE() { return getToken(HoodieSqlBaseParser.DATABASE, 0); }
		public TerminalNode UNLOCK() { return getToken(HoodieSqlBaseParser.UNLOCK, 0); }
		public TerminalNode TEMPORARY() { return getToken(HoodieSqlBaseParser.TEMPORARY, 0); }
		public TerminalNode MACRO() { return getToken(HoodieSqlBaseParser.MACRO, 0); }
		public TableIdentifierContext tableIdentifier() {
			return getRuleContext(TableIdentifierContext.class,0);
		}
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode CLUSTERED() { return getToken(HoodieSqlBaseParser.CLUSTERED, 0); }
		public TerminalNode BY() { return getToken(HoodieSqlBaseParser.BY, 0); }
		public TerminalNode SORTED() { return getToken(HoodieSqlBaseParser.SORTED, 0); }
		public TerminalNode SKEWED() { return getToken(HoodieSqlBaseParser.SKEWED, 0); }
		public TerminalNode STORED() { return getToken(HoodieSqlBaseParser.STORED, 0); }
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public TerminalNode DIRECTORIES() { return getToken(HoodieSqlBaseParser.DIRECTORIES, 0); }
		public TerminalNode SET() { return getToken(HoodieSqlBaseParser.SET, 0); }
		public TerminalNode LOCATION() { return getToken(HoodieSqlBaseParser.LOCATION, 0); }
		public TerminalNode EXCHANGE() { return getToken(HoodieSqlBaseParser.EXCHANGE, 0); }
		public TerminalNode PARTITION() { return getToken(HoodieSqlBaseParser.PARTITION, 0); }
		public TerminalNode ARCHIVE() { return getToken(HoodieSqlBaseParser.ARCHIVE, 0); }
		public TerminalNode UNARCHIVE() { return getToken(HoodieSqlBaseParser.UNARCHIVE, 0); }
		public TerminalNode TOUCH() { return getToken(HoodieSqlBaseParser.TOUCH, 0); }
		public TerminalNode COMPACT() { return getToken(HoodieSqlBaseParser.COMPACT, 0); }
		public PartitionSpecContext partitionSpec() {
			return getRuleContext(PartitionSpecContext.class,0);
		}
		public TerminalNode CONCATENATE() { return getToken(HoodieSqlBaseParser.CONCATENATE, 0); }
		public TerminalNode FILEFORMAT() { return getToken(HoodieSqlBaseParser.FILEFORMAT, 0); }
		public TerminalNode REPLACE() { return getToken(HoodieSqlBaseParser.REPLACE, 0); }
		public TerminalNode COLUMNS() { return getToken(HoodieSqlBaseParser.COLUMNS, 0); }
		public TerminalNode START() { return getToken(HoodieSqlBaseParser.START, 0); }
		public TerminalNode TRANSACTION() { return getToken(HoodieSqlBaseParser.TRANSACTION, 0); }
		public TerminalNode COMMIT() { return getToken(HoodieSqlBaseParser.COMMIT, 0); }
		public TerminalNode ROLLBACK() { return getToken(HoodieSqlBaseParser.ROLLBACK, 0); }
		public TerminalNode DFS() { return getToken(HoodieSqlBaseParser.DFS, 0); }
		public UnsupportedHiveNativeCommandsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unsupportedHiveNativeCommands; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterUnsupportedHiveNativeCommands(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitUnsupportedHiveNativeCommands(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitUnsupportedHiveNativeCommands(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UnsupportedHiveNativeCommandsContext unsupportedHiveNativeCommands() throws RecognitionException {
		UnsupportedHiveNativeCommandsContext _localctx = new UnsupportedHiveNativeCommandsContext(_ctx, getState());
		enterRule(_localctx, 20, RULE_unsupportedHiveNativeCommands);
		int _la;
		try {
			setState(576);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(408);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(CREATE);
				setState(409);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(ROLE);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(410);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(DROP);
				setState(411);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(ROLE);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(412);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(GRANT);
				setState(414);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ROLE) {
					{
					setState(413);
					((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(ROLE);
					}
				}

				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(416);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(REVOKE);
				setState(418);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ROLE) {
					{
					setState(417);
					((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(ROLE);
					}
				}

				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(420);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(421);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(GRANT);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(422);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(423);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(ROLE);
				setState(425);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==GRANT) {
					{
					setState(424);
					((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(GRANT);
					}
				}

				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(427);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(428);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(PRINCIPALS);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(429);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(430);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(ROLES);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(431);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(432);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(CURRENT);
				setState(433);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(ROLES);
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(434);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(EXPORT);
				setState(435);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				}
				break;
			case 11:
				enterOuterAlt(_localctx, 11);
				{
				setState(436);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(IMPORT);
				setState(437);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				}
				break;
			case 12:
				enterOuterAlt(_localctx, 12);
				{
				setState(438);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(439);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(COMPACTIONS);
				}
				break;
			case 13:
				enterOuterAlt(_localctx, 13);
				{
				setState(440);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(441);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(CREATE);
				setState(442);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(TABLE);
				}
				break;
			case 14:
				enterOuterAlt(_localctx, 14);
				{
				setState(443);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(444);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TRANSACTIONS);
				}
				break;
			case 15:
				enterOuterAlt(_localctx, 15);
				{
				setState(445);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(446);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(INDEXES);
				}
				break;
			case 16:
				enterOuterAlt(_localctx, 16);
				{
				setState(447);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(SHOW);
				setState(448);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(LOCKS);
				}
				break;
			case 17:
				enterOuterAlt(_localctx, 17);
				{
				setState(449);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(CREATE);
				setState(450);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(INDEX);
				}
				break;
			case 18:
				enterOuterAlt(_localctx, 18);
				{
				setState(451);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(DROP);
				setState(452);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(INDEX);
				}
				break;
			case 19:
				enterOuterAlt(_localctx, 19);
				{
				setState(453);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(454);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(INDEX);
				}
				break;
			case 20:
				enterOuterAlt(_localctx, 20);
				{
				setState(455);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(LOCK);
				setState(456);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				}
				break;
			case 21:
				enterOuterAlt(_localctx, 21);
				{
				setState(457);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(LOCK);
				setState(458);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(DATABASE);
				}
				break;
			case 22:
				enterOuterAlt(_localctx, 22);
				{
				setState(459);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(UNLOCK);
				setState(460);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				}
				break;
			case 23:
				enterOuterAlt(_localctx, 23);
				{
				setState(461);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(UNLOCK);
				setState(462);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(DATABASE);
				}
				break;
			case 24:
				enterOuterAlt(_localctx, 24);
				{
				setState(463);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(CREATE);
				setState(464);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TEMPORARY);
				setState(465);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(MACRO);
				}
				break;
			case 25:
				enterOuterAlt(_localctx, 25);
				{
				setState(466);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(DROP);
				setState(467);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TEMPORARY);
				setState(468);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(MACRO);
				}
				break;
			case 26:
				enterOuterAlt(_localctx, 26);
				{
				setState(469);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(470);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(471);
				tableIdentifier();
				setState(472);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(NOT);
				setState(473);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(CLUSTERED);
				}
				break;
			case 27:
				enterOuterAlt(_localctx, 27);
				{
				setState(475);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(476);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(477);
				tableIdentifier();
				setState(478);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(CLUSTERED);
				setState(479);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(BY);
				}
				break;
			case 28:
				enterOuterAlt(_localctx, 28);
				{
				setState(481);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(482);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(483);
				tableIdentifier();
				setState(484);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(NOT);
				setState(485);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(SORTED);
				}
				break;
			case 29:
				enterOuterAlt(_localctx, 29);
				{
				setState(487);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(488);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(489);
				tableIdentifier();
				setState(490);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(SKEWED);
				setState(491);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(BY);
				}
				break;
			case 30:
				enterOuterAlt(_localctx, 30);
				{
				setState(493);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(494);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(495);
				tableIdentifier();
				setState(496);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(NOT);
				setState(497);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(SKEWED);
				}
				break;
			case 31:
				enterOuterAlt(_localctx, 31);
				{
				setState(499);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(500);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(501);
				tableIdentifier();
				setState(502);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(NOT);
				setState(503);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(STORED);
				setState(504);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw5 = match(AS);
				setState(505);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw6 = match(DIRECTORIES);
				}
				break;
			case 32:
				enterOuterAlt(_localctx, 32);
				{
				setState(507);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(508);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(509);
				tableIdentifier();
				setState(510);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(SET);
				setState(511);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(SKEWED);
				setState(512);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw5 = match(LOCATION);
				}
				break;
			case 33:
				enterOuterAlt(_localctx, 33);
				{
				setState(514);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(515);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(516);
				tableIdentifier();
				setState(517);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(EXCHANGE);
				setState(518);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(PARTITION);
				}
				break;
			case 34:
				enterOuterAlt(_localctx, 34);
				{
				setState(520);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(521);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(522);
				tableIdentifier();
				setState(523);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(ARCHIVE);
				setState(524);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(PARTITION);
				}
				break;
			case 35:
				enterOuterAlt(_localctx, 35);
				{
				setState(526);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(527);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(528);
				tableIdentifier();
				setState(529);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(UNARCHIVE);
				setState(530);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(PARTITION);
				}
				break;
			case 36:
				enterOuterAlt(_localctx, 36);
				{
				setState(532);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(533);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(534);
				tableIdentifier();
				setState(535);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(TOUCH);
				}
				break;
			case 37:
				enterOuterAlt(_localctx, 37);
				{
				setState(537);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(538);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(539);
				tableIdentifier();
				setState(541);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PARTITION) {
					{
					setState(540);
					partitionSpec();
					}
				}

				setState(543);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(COMPACT);
				}
				break;
			case 38:
				enterOuterAlt(_localctx, 38);
				{
				setState(545);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(546);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(547);
				tableIdentifier();
				setState(549);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PARTITION) {
					{
					setState(548);
					partitionSpec();
					}
				}

				setState(551);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(CONCATENATE);
				}
				break;
			case 39:
				enterOuterAlt(_localctx, 39);
				{
				setState(553);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(554);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(555);
				tableIdentifier();
				setState(557);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PARTITION) {
					{
					setState(556);
					partitionSpec();
					}
				}

				setState(559);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(SET);
				setState(560);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(FILEFORMAT);
				}
				break;
			case 40:
				enterOuterAlt(_localctx, 40);
				{
				setState(562);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ALTER);
				setState(563);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TABLE);
				setState(564);
				tableIdentifier();
				setState(566);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PARTITION) {
					{
					setState(565);
					partitionSpec();
					}
				}

				setState(568);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw3 = match(REPLACE);
				setState(569);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw4 = match(COLUMNS);
				}
				break;
			case 41:
				enterOuterAlt(_localctx, 41);
				{
				setState(571);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(START);
				setState(572);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw2 = match(TRANSACTION);
				}
				break;
			case 42:
				enterOuterAlt(_localctx, 42);
				{
				setState(573);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(COMMIT);
				}
				break;
			case 43:
				enterOuterAlt(_localctx, 43);
				{
				setState(574);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(ROLLBACK);
				}
				break;
			case 44:
				enterOuterAlt(_localctx, 44);
				{
				setState(575);
				((UnsupportedHiveNativeCommandsContext)_localctx).kw1 = match(DFS);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CreateTableHeaderContext extends ParserRuleContext {
		public TerminalNode CREATE() { return getToken(HoodieSqlBaseParser.CREATE, 0); }
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TerminalNode TEMPORARY() { return getToken(HoodieSqlBaseParser.TEMPORARY, 0); }
		public TerminalNode EXTERNAL() { return getToken(HoodieSqlBaseParser.EXTERNAL, 0); }
		public TerminalNode IF() { return getToken(HoodieSqlBaseParser.IF, 0); }
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public CreateTableHeaderContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_createTableHeader; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCreateTableHeader(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCreateTableHeader(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCreateTableHeader(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CreateTableHeaderContext createTableHeader() throws RecognitionException {
		CreateTableHeaderContext _localctx = new CreateTableHeaderContext(_ctx, getState());
		enterRule(_localctx, 22, RULE_createTableHeader);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(578);
			match(CREATE);
			setState(580);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==TEMPORARY) {
				{
				setState(579);
				match(TEMPORARY);
				}
			}

			setState(583);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==EXTERNAL) {
				{
				setState(582);
				match(EXTERNAL);
				}
			}

			setState(585);
			match(TABLE);
			setState(589);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) {
			case 1:
				{
				setState(586);
				match(IF);
				setState(587);
				match(NOT);
				setState(588);
				match(EXISTS);
				}
				break;
			}
			setState(591);
			multipartIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ReplaceTableHeaderContext extends ParserRuleContext {
		public TerminalNode REPLACE() { return getToken(HoodieSqlBaseParser.REPLACE, 0); }
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TerminalNode CREATE() { return getToken(HoodieSqlBaseParser.CREATE, 0); }
		public TerminalNode OR() { return getToken(HoodieSqlBaseParser.OR, 0); }
		public ReplaceTableHeaderContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_replaceTableHeader; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterReplaceTableHeader(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitReplaceTableHeader(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitReplaceTableHeader(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ReplaceTableHeaderContext replaceTableHeader() throws RecognitionException {
		ReplaceTableHeaderContext _localctx = new ReplaceTableHeaderContext(_ctx, getState());
		enterRule(_localctx, 24, RULE_replaceTableHeader);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(595);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==CREATE) {
				{
				setState(593);
				match(CREATE);
				setState(594);
				match(OR);
				}
			}

			setState(597);
			match(REPLACE);
			setState(598);
			match(TABLE);
			setState(599);
			multipartIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BucketSpecContext extends ParserRuleContext {
		public TerminalNode CLUSTERED() { return getToken(HoodieSqlBaseParser.CLUSTERED, 0); }
		public List BY() { return getTokens(HoodieSqlBaseParser.BY); }
		public TerminalNode BY(int i) {
			return getToken(HoodieSqlBaseParser.BY, i);
		}
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public TerminalNode INTO() { return getToken(HoodieSqlBaseParser.INTO, 0); }
		public TerminalNode INTEGER_VALUE() { return getToken(HoodieSqlBaseParser.INTEGER_VALUE, 0); }
		public TerminalNode BUCKETS() { return getToken(HoodieSqlBaseParser.BUCKETS, 0); }
		public TerminalNode SORTED() { return getToken(HoodieSqlBaseParser.SORTED, 0); }
		public OrderedIdentifierListContext orderedIdentifierList() {
			return getRuleContext(OrderedIdentifierListContext.class,0);
		}
		public BucketSpecContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_bucketSpec; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterBucketSpec(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitBucketSpec(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitBucketSpec(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BucketSpecContext bucketSpec() throws RecognitionException {
		BucketSpecContext _localctx = new BucketSpecContext(_ctx, getState());
		enterRule(_localctx, 26, RULE_bucketSpec);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(601);
			match(CLUSTERED);
			setState(602);
			match(BY);
			setState(603);
			identifierList();
			setState(607);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==SORTED) {
				{
				setState(604);
				match(SORTED);
				setState(605);
				match(BY);
				setState(606);
				orderedIdentifierList();
				}
			}

			setState(609);
			match(INTO);
			setState(610);
			match(INTEGER_VALUE);
			setState(611);
			match(BUCKETS);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SkewSpecContext extends ParserRuleContext {
		public TerminalNode SKEWED() { return getToken(HoodieSqlBaseParser.SKEWED, 0); }
		public TerminalNode BY() { return getToken(HoodieSqlBaseParser.BY, 0); }
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public ConstantListContext constantList() {
			return getRuleContext(ConstantListContext.class,0);
		}
		public NestedConstantListContext nestedConstantList() {
			return getRuleContext(NestedConstantListContext.class,0);
		}
		public TerminalNode STORED() { return getToken(HoodieSqlBaseParser.STORED, 0); }
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public TerminalNode DIRECTORIES() { return getToken(HoodieSqlBaseParser.DIRECTORIES, 0); }
		public SkewSpecContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_skewSpec; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSkewSpec(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSkewSpec(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSkewSpec(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SkewSpecContext skewSpec() throws RecognitionException {
		SkewSpecContext _localctx = new SkewSpecContext(_ctx, getState());
		enterRule(_localctx, 28, RULE_skewSpec);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(613);
			match(SKEWED);
			setState(614);
			match(BY);
			setState(615);
			identifierList();
			setState(616);
			match(ON);
			setState(619);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
			case 1:
				{
				setState(617);
				constantList();
				}
				break;
			case 2:
				{
				setState(618);
				nestedConstantList();
				}
				break;
			}
			setState(624);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) {
			case 1:
				{
				setState(621);
				match(STORED);
				setState(622);
				match(AS);
				setState(623);
				match(DIRECTORIES);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class LocationSpecContext extends ParserRuleContext {
		public TerminalNode LOCATION() { return getToken(HoodieSqlBaseParser.LOCATION, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public LocationSpecContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_locationSpec; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterLocationSpec(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitLocationSpec(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitLocationSpec(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LocationSpecContext locationSpec() throws RecognitionException {
		LocationSpecContext _localctx = new LocationSpecContext(_ctx, getState());
		enterRule(_localctx, 30, RULE_locationSpec);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(626);
			match(LOCATION);
			setState(627);
			match(STRING);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CommentSpecContext extends ParserRuleContext {
		public TerminalNode COMMENT() { return getToken(HoodieSqlBaseParser.COMMENT, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public CommentSpecContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_commentSpec; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCommentSpec(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCommentSpec(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCommentSpec(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CommentSpecContext commentSpec() throws RecognitionException {
		CommentSpecContext _localctx = new CommentSpecContext(_ctx, getState());
		enterRule(_localctx, 32, RULE_commentSpec);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(629);
			match(COMMENT);
			setState(630);
			match(STRING);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QueryContext extends ParserRuleContext {
		public QueryTermContext queryTerm() {
			return getRuleContext(QueryTermContext.class,0);
		}
		public QueryOrganizationContext queryOrganization() {
			return getRuleContext(QueryOrganizationContext.class,0);
		}
		public CtesContext ctes() {
			return getRuleContext(CtesContext.class,0);
		}
		public QueryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_query; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQuery(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQuery(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQuery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryContext query() throws RecognitionException {
		QueryContext _localctx = new QueryContext(_ctx, getState());
		enterRule(_localctx, 34, RULE_query);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(633);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==WITH) {
				{
				setState(632);
				ctes();
				}
			}

			setState(635);
			queryTerm(0);
			setState(636);
			queryOrganization();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InsertIntoContext extends ParserRuleContext {
		public InsertIntoContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_insertInto; }
	 
		public InsertIntoContext() { }
		public void copyFrom(InsertIntoContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class InsertOverwriteHiveDirContext extends InsertIntoContext {
		public Token path;
		public TerminalNode INSERT() { return getToken(HoodieSqlBaseParser.INSERT, 0); }
		public TerminalNode OVERWRITE() { return getToken(HoodieSqlBaseParser.OVERWRITE, 0); }
		public TerminalNode DIRECTORY() { return getToken(HoodieSqlBaseParser.DIRECTORY, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TerminalNode LOCAL() { return getToken(HoodieSqlBaseParser.LOCAL, 0); }
		public RowFormatContext rowFormat() {
			return getRuleContext(RowFormatContext.class,0);
		}
		public CreateFileFormatContext createFileFormat() {
			return getRuleContext(CreateFileFormatContext.class,0);
		}
		public InsertOverwriteHiveDirContext(InsertIntoContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInsertOverwriteHiveDir(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInsertOverwriteHiveDir(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInsertOverwriteHiveDir(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InsertOverwriteDirContext extends InsertIntoContext {
		public Token path;
		public TablePropertyListContext options;
		public TerminalNode INSERT() { return getToken(HoodieSqlBaseParser.INSERT, 0); }
		public TerminalNode OVERWRITE() { return getToken(HoodieSqlBaseParser.OVERWRITE, 0); }
		public TerminalNode DIRECTORY() { return getToken(HoodieSqlBaseParser.DIRECTORY, 0); }
		public TableProviderContext tableProvider() {
			return getRuleContext(TableProviderContext.class,0);
		}
		public TerminalNode LOCAL() { return getToken(HoodieSqlBaseParser.LOCAL, 0); }
		public TerminalNode OPTIONS() { return getToken(HoodieSqlBaseParser.OPTIONS, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TablePropertyListContext tablePropertyList() {
			return getRuleContext(TablePropertyListContext.class,0);
		}
		public InsertOverwriteDirContext(InsertIntoContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInsertOverwriteDir(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInsertOverwriteDir(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInsertOverwriteDir(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InsertOverwriteTableContext extends InsertIntoContext {
		public TerminalNode INSERT() { return getToken(HoodieSqlBaseParser.INSERT, 0); }
		public TerminalNode OVERWRITE() { return getToken(HoodieSqlBaseParser.OVERWRITE, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public PartitionSpecContext partitionSpec() {
			return getRuleContext(PartitionSpecContext.class,0);
		}
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public TerminalNode IF() { return getToken(HoodieSqlBaseParser.IF, 0); }
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public InsertOverwriteTableContext(InsertIntoContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInsertOverwriteTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInsertOverwriteTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInsertOverwriteTable(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InsertIntoTableContext extends InsertIntoContext {
		public TerminalNode INSERT() { return getToken(HoodieSqlBaseParser.INSERT, 0); }
		public TerminalNode INTO() { return getToken(HoodieSqlBaseParser.INTO, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public PartitionSpecContext partitionSpec() {
			return getRuleContext(PartitionSpecContext.class,0);
		}
		public TerminalNode IF() { return getToken(HoodieSqlBaseParser.IF, 0); }
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public InsertIntoTableContext(InsertIntoContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInsertIntoTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInsertIntoTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInsertIntoTable(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InsertIntoContext insertInto() throws RecognitionException {
		InsertIntoContext _localctx = new InsertIntoContext(_ctx, getState());
		enterRule(_localctx, 36, RULE_insertInto);
		int _la;
		try {
			setState(699);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) {
			case 1:
				_localctx = new InsertOverwriteTableContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(638);
				match(INSERT);
				setState(639);
				match(OVERWRITE);
				setState(641);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) {
				case 1:
					{
					setState(640);
					match(TABLE);
					}
					break;
				}
				setState(643);
				multipartIdentifier();
				setState(650);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PARTITION) {
					{
					setState(644);
					partitionSpec();
					setState(648);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==IF) {
						{
						setState(645);
						match(IF);
						setState(646);
						match(NOT);
						setState(647);
						match(EXISTS);
						}
					}

					}
				}

				setState(653);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) {
				case 1:
					{
					setState(652);
					identifierList();
					}
					break;
				}
				}
				break;
			case 2:
				_localctx = new InsertIntoTableContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(655);
				match(INSERT);
				setState(656);
				match(INTO);
				setState(658);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
				case 1:
					{
					setState(657);
					match(TABLE);
					}
					break;
				}
				setState(660);
				multipartIdentifier();
				setState(662);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==PARTITION) {
					{
					setState(661);
					partitionSpec();
					}
				}

				setState(667);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==IF) {
					{
					setState(664);
					match(IF);
					setState(665);
					match(NOT);
					setState(666);
					match(EXISTS);
					}
				}

				setState(670);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
				case 1:
					{
					setState(669);
					identifierList();
					}
					break;
				}
				}
				break;
			case 3:
				_localctx = new InsertOverwriteHiveDirContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(672);
				match(INSERT);
				setState(673);
				match(OVERWRITE);
				setState(675);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LOCAL) {
					{
					setState(674);
					match(LOCAL);
					}
				}

				setState(677);
				match(DIRECTORY);
				setState(678);
				((InsertOverwriteHiveDirContext)_localctx).path = match(STRING);
				setState(680);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ROW) {
					{
					setState(679);
					rowFormat();
					}
				}

				setState(683);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==STORED) {
					{
					setState(682);
					createFileFormat();
					}
				}

				}
				break;
			case 4:
				_localctx = new InsertOverwriteDirContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(685);
				match(INSERT);
				setState(686);
				match(OVERWRITE);
				setState(688);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LOCAL) {
					{
					setState(687);
					match(LOCAL);
					}
				}

				setState(690);
				match(DIRECTORY);
				setState(692);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==STRING) {
					{
					setState(691);
					((InsertOverwriteDirContext)_localctx).path = match(STRING);
					}
				}

				setState(694);
				tableProvider();
				setState(697);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OPTIONS) {
					{
					setState(695);
					match(OPTIONS);
					setState(696);
					((InsertOverwriteDirContext)_localctx).options = tablePropertyList();
					}
				}

				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PartitionSpecLocationContext extends ParserRuleContext {
		public PartitionSpecContext partitionSpec() {
			return getRuleContext(PartitionSpecContext.class,0);
		}
		public LocationSpecContext locationSpec() {
			return getRuleContext(LocationSpecContext.class,0);
		}
		public PartitionSpecLocationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_partitionSpecLocation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPartitionSpecLocation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPartitionSpecLocation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPartitionSpecLocation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PartitionSpecLocationContext partitionSpecLocation() throws RecognitionException {
		PartitionSpecLocationContext _localctx = new PartitionSpecLocationContext(_ctx, getState());
		enterRule(_localctx, 38, RULE_partitionSpecLocation);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(701);
			partitionSpec();
			setState(703);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==LOCATION) {
				{
				setState(702);
				locationSpec();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PartitionSpecContext extends ParserRuleContext {
		public TerminalNode PARTITION() { return getToken(HoodieSqlBaseParser.PARTITION, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List partitionVal() {
			return getRuleContexts(PartitionValContext.class);
		}
		public PartitionValContext partitionVal(int i) {
			return getRuleContext(PartitionValContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public PartitionSpecContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_partitionSpec; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPartitionSpec(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPartitionSpec(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPartitionSpec(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PartitionSpecContext partitionSpec() throws RecognitionException {
		PartitionSpecContext _localctx = new PartitionSpecContext(_ctx, getState());
		enterRule(_localctx, 40, RULE_partitionSpec);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(705);
			match(PARTITION);
			setState(706);
			match(LEFT_PAREN);
			setState(707);
			partitionVal();
			setState(712);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(708);
				match(COMMA);
				setState(709);
				partitionVal();
				}
				}
				setState(714);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(715);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PartitionValContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode EQ() { return getToken(HoodieSqlBaseParser.EQ, 0); }
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public PartitionValContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_partitionVal; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPartitionVal(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPartitionVal(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPartitionVal(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PartitionValContext partitionVal() throws RecognitionException {
		PartitionValContext _localctx = new PartitionValContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_partitionVal);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(717);
			identifier();
			setState(720);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==EQ) {
				{
				setState(718);
				match(EQ);
				setState(719);
				constant();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NamespaceContext extends ParserRuleContext {
		public TerminalNode NAMESPACE() { return getToken(HoodieSqlBaseParser.NAMESPACE, 0); }
		public TerminalNode DATABASE() { return getToken(HoodieSqlBaseParser.DATABASE, 0); }
		public TerminalNode SCHEMA() { return getToken(HoodieSqlBaseParser.SCHEMA, 0); }
		public NamespaceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_namespace; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNamespace(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNamespace(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNamespace(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NamespaceContext namespace() throws RecognitionException {
		NamespaceContext _localctx = new NamespaceContext(_ctx, getState());
		enterRule(_localctx, 44, RULE_namespace);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(722);
			_la = _input.LA(1);
			if ( !(_la==DATABASE || _la==NAMESPACE || _la==SCHEMA) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DescribeFuncNameContext extends ParserRuleContext {
		public QualifiedNameContext qualifiedName() {
			return getRuleContext(QualifiedNameContext.class,0);
		}
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public ComparisonOperatorContext comparisonOperator() {
			return getRuleContext(ComparisonOperatorContext.class,0);
		}
		public ArithmeticOperatorContext arithmeticOperator() {
			return getRuleContext(ArithmeticOperatorContext.class,0);
		}
		public PredicateOperatorContext predicateOperator() {
			return getRuleContext(PredicateOperatorContext.class,0);
		}
		public DescribeFuncNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_describeFuncName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDescribeFuncName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDescribeFuncName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDescribeFuncName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DescribeFuncNameContext describeFuncName() throws RecognitionException {
		DescribeFuncNameContext _localctx = new DescribeFuncNameContext(_ctx, getState());
		enterRule(_localctx, 46, RULE_describeFuncName);
		try {
			setState(729);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(724);
				qualifiedName();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(725);
				match(STRING);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(726);
				comparisonOperator();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(727);
				arithmeticOperator();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(728);
				predicateOperator();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DescribeColNameContext extends ParserRuleContext {
		public IdentifierContext identifier;
		public List nameParts = new ArrayList();
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public List DOT() { return getTokens(HoodieSqlBaseParser.DOT); }
		public TerminalNode DOT(int i) {
			return getToken(HoodieSqlBaseParser.DOT, i);
		}
		public DescribeColNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_describeColName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDescribeColName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDescribeColName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDescribeColName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DescribeColNameContext describeColName() throws RecognitionException {
		DescribeColNameContext _localctx = new DescribeColNameContext(_ctx, getState());
		enterRule(_localctx, 48, RULE_describeColName);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(731);
			((DescribeColNameContext)_localctx).identifier = identifier();
			((DescribeColNameContext)_localctx).nameParts.add(((DescribeColNameContext)_localctx).identifier);
			setState(736);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==DOT) {
				{
				{
				setState(732);
				match(DOT);
				setState(733);
				((DescribeColNameContext)_localctx).identifier = identifier();
				((DescribeColNameContext)_localctx).nameParts.add(((DescribeColNameContext)_localctx).identifier);
				}
				}
				setState(738);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CtesContext extends ParserRuleContext {
		public TerminalNode WITH() { return getToken(HoodieSqlBaseParser.WITH, 0); }
		public List namedQuery() {
			return getRuleContexts(NamedQueryContext.class);
		}
		public NamedQueryContext namedQuery(int i) {
			return getRuleContext(NamedQueryContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public CtesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ctes; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCtes(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCtes(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCtes(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CtesContext ctes() throws RecognitionException {
		CtesContext _localctx = new CtesContext(_ctx, getState());
		enterRule(_localctx, 50, RULE_ctes);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(739);
			match(WITH);
			setState(740);
			namedQuery();
			setState(745);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(741);
				match(COMMA);
				setState(742);
				namedQuery();
				}
				}
				setState(747);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NamedQueryContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext name;
		public IdentifierListContext columnAliases;
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public ErrorCapturingIdentifierContext errorCapturingIdentifier() {
			return getRuleContext(ErrorCapturingIdentifierContext.class,0);
		}
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public NamedQueryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_namedQuery; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNamedQuery(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNamedQuery(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNamedQuery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NamedQueryContext namedQuery() throws RecognitionException {
		NamedQueryContext _localctx = new NamedQueryContext(_ctx, getState());
		enterRule(_localctx, 52, RULE_namedQuery);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(748);
			((NamedQueryContext)_localctx).name = errorCapturingIdentifier();
			setState(750);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) {
			case 1:
				{
				setState(749);
				((NamedQueryContext)_localctx).columnAliases = identifierList();
				}
				break;
			}
			setState(753);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==AS) {
				{
				setState(752);
				match(AS);
				}
			}

			setState(755);
			match(LEFT_PAREN);
			setState(756);
			query();
			setState(757);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TableProviderContext extends ParserRuleContext {
		public TerminalNode USING() { return getToken(HoodieSqlBaseParser.USING, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TableProviderContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableProvider; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTableProvider(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTableProvider(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTableProvider(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableProviderContext tableProvider() throws RecognitionException {
		TableProviderContext _localctx = new TableProviderContext(_ctx, getState());
		enterRule(_localctx, 54, RULE_tableProvider);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(759);
			match(USING);
			setState(760);
			multipartIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CreateTableClausesContext extends ParserRuleContext {
		public TablePropertyListContext options;
		public PartitionFieldListContext partitioning;
		public TablePropertyListContext tableProps;
		public List skewSpec() {
			return getRuleContexts(SkewSpecContext.class);
		}
		public SkewSpecContext skewSpec(int i) {
			return getRuleContext(SkewSpecContext.class,i);
		}
		public List bucketSpec() {
			return getRuleContexts(BucketSpecContext.class);
		}
		public BucketSpecContext bucketSpec(int i) {
			return getRuleContext(BucketSpecContext.class,i);
		}
		public List rowFormat() {
			return getRuleContexts(RowFormatContext.class);
		}
		public RowFormatContext rowFormat(int i) {
			return getRuleContext(RowFormatContext.class,i);
		}
		public List createFileFormat() {
			return getRuleContexts(CreateFileFormatContext.class);
		}
		public CreateFileFormatContext createFileFormat(int i) {
			return getRuleContext(CreateFileFormatContext.class,i);
		}
		public List locationSpec() {
			return getRuleContexts(LocationSpecContext.class);
		}
		public LocationSpecContext locationSpec(int i) {
			return getRuleContext(LocationSpecContext.class,i);
		}
		public List commentSpec() {
			return getRuleContexts(CommentSpecContext.class);
		}
		public CommentSpecContext commentSpec(int i) {
			return getRuleContext(CommentSpecContext.class,i);
		}
		public List OPTIONS() { return getTokens(HoodieSqlBaseParser.OPTIONS); }
		public TerminalNode OPTIONS(int i) {
			return getToken(HoodieSqlBaseParser.OPTIONS, i);
		}
		public List PARTITIONED() { return getTokens(HoodieSqlBaseParser.PARTITIONED); }
		public TerminalNode PARTITIONED(int i) {
			return getToken(HoodieSqlBaseParser.PARTITIONED, i);
		}
		public List BY() { return getTokens(HoodieSqlBaseParser.BY); }
		public TerminalNode BY(int i) {
			return getToken(HoodieSqlBaseParser.BY, i);
		}
		public List TBLPROPERTIES() { return getTokens(HoodieSqlBaseParser.TBLPROPERTIES); }
		public TerminalNode TBLPROPERTIES(int i) {
			return getToken(HoodieSqlBaseParser.TBLPROPERTIES, i);
		}
		public List tablePropertyList() {
			return getRuleContexts(TablePropertyListContext.class);
		}
		public TablePropertyListContext tablePropertyList(int i) {
			return getRuleContext(TablePropertyListContext.class,i);
		}
		public List partitionFieldList() {
			return getRuleContexts(PartitionFieldListContext.class);
		}
		public PartitionFieldListContext partitionFieldList(int i) {
			return getRuleContext(PartitionFieldListContext.class,i);
		}
		public CreateTableClausesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_createTableClauses; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCreateTableClauses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCreateTableClauses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCreateTableClauses(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CreateTableClausesContext createTableClauses() throws RecognitionException {
		CreateTableClausesContext _localctx = new CreateTableClausesContext(_ctx, getState());
		enterRule(_localctx, 56, RULE_createTableClauses);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(777);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==CLUSTERED || _la==COMMENT || ((((_la - 134)) & ~0x3f) == 0 && ((1L << (_la - 134)) & ((1L << (LOCATION - 134)) | (1L << (OPTIONS - 134)) | (1L << (PARTITIONED - 134)))) != 0) || ((((_la - 199)) & ~0x3f) == 0 && ((1L << (_la - 199)) & ((1L << (ROW - 199)) | (1L << (SKEWED - 199)) | (1L << (STORED - 199)) | (1L << (TBLPROPERTIES - 199)))) != 0)) {
				{
				setState(775);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case OPTIONS:
					{
					{
					setState(762);
					match(OPTIONS);
					setState(763);
					((CreateTableClausesContext)_localctx).options = tablePropertyList();
					}
					}
					break;
				case PARTITIONED:
					{
					{
					setState(764);
					match(PARTITIONED);
					setState(765);
					match(BY);
					setState(766);
					((CreateTableClausesContext)_localctx).partitioning = partitionFieldList();
					}
					}
					break;
				case SKEWED:
					{
					setState(767);
					skewSpec();
					}
					break;
				case CLUSTERED:
					{
					setState(768);
					bucketSpec();
					}
					break;
				case ROW:
					{
					setState(769);
					rowFormat();
					}
					break;
				case STORED:
					{
					setState(770);
					createFileFormat();
					}
					break;
				case LOCATION:
					{
					setState(771);
					locationSpec();
					}
					break;
				case COMMENT:
					{
					setState(772);
					commentSpec();
					}
					break;
				case TBLPROPERTIES:
					{
					{
					setState(773);
					match(TBLPROPERTIES);
					setState(774);
					((CreateTableClausesContext)_localctx).tableProps = tablePropertyList();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				setState(779);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TablePropertyListContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List tableProperty() {
			return getRuleContexts(TablePropertyContext.class);
		}
		public TablePropertyContext tableProperty(int i) {
			return getRuleContext(TablePropertyContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public TablePropertyListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tablePropertyList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTablePropertyList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTablePropertyList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTablePropertyList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TablePropertyListContext tablePropertyList() throws RecognitionException {
		TablePropertyListContext _localctx = new TablePropertyListContext(_ctx, getState());
		enterRule(_localctx, 58, RULE_tablePropertyList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(780);
			match(LEFT_PAREN);
			setState(781);
			tableProperty();
			setState(786);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(782);
				match(COMMA);
				setState(783);
				tableProperty();
				}
				}
				setState(788);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(789);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TablePropertyContext extends ParserRuleContext {
		public TablePropertyKeyContext key;
		public TablePropertyValueContext value;
		public TablePropertyKeyContext tablePropertyKey() {
			return getRuleContext(TablePropertyKeyContext.class,0);
		}
		public TablePropertyValueContext tablePropertyValue() {
			return getRuleContext(TablePropertyValueContext.class,0);
		}
		public TerminalNode EQ() { return getToken(HoodieSqlBaseParser.EQ, 0); }
		public TablePropertyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableProperty; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTableProperty(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTableProperty(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTableProperty(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TablePropertyContext tableProperty() throws RecognitionException {
		TablePropertyContext _localctx = new TablePropertyContext(_ctx, getState());
		enterRule(_localctx, 60, RULE_tableProperty);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(791);
			((TablePropertyContext)_localctx).key = tablePropertyKey();
			setState(796);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==FALSE || ((((_la - 240)) & ~0x3f) == 0 && ((1L << (_la - 240)) & ((1L << (TRUE - 240)) | (1L << (EQ - 240)) | (1L << (STRING - 240)) | (1L << (INTEGER_VALUE - 240)) | (1L << (DECIMAL_VALUE - 240)))) != 0)) {
				{
				setState(793);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==EQ) {
					{
					setState(792);
					match(EQ);
					}
				}

				setState(795);
				((TablePropertyContext)_localctx).value = tablePropertyValue();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TablePropertyKeyContext extends ParserRuleContext {
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public List DOT() { return getTokens(HoodieSqlBaseParser.DOT); }
		public TerminalNode DOT(int i) {
			return getToken(HoodieSqlBaseParser.DOT, i);
		}
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TablePropertyKeyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tablePropertyKey; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTablePropertyKey(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTablePropertyKey(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTablePropertyKey(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TablePropertyKeyContext tablePropertyKey() throws RecognitionException {
		TablePropertyKeyContext _localctx = new TablePropertyKeyContext(_ctx, getState());
		enterRule(_localctx, 62, RULE_tablePropertyKey);
		int _la;
		try {
			setState(807);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(798);
				identifier();
				setState(803);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==DOT) {
					{
					{
					setState(799);
					match(DOT);
					setState(800);
					identifier();
					}
					}
					setState(805);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(806);
				match(STRING);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TablePropertyValueContext extends ParserRuleContext {
		public TerminalNode INTEGER_VALUE() { return getToken(HoodieSqlBaseParser.INTEGER_VALUE, 0); }
		public TerminalNode DECIMAL_VALUE() { return getToken(HoodieSqlBaseParser.DECIMAL_VALUE, 0); }
		public BooleanValueContext booleanValue() {
			return getRuleContext(BooleanValueContext.class,0);
		}
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TablePropertyValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tablePropertyValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTablePropertyValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTablePropertyValue(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTablePropertyValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TablePropertyValueContext tablePropertyValue() throws RecognitionException {
		TablePropertyValueContext _localctx = new TablePropertyValueContext(_ctx, getState());
		enterRule(_localctx, 64, RULE_tablePropertyValue);
		try {
			setState(813);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case INTEGER_VALUE:
				enterOuterAlt(_localctx, 1);
				{
				setState(809);
				match(INTEGER_VALUE);
				}
				break;
			case DECIMAL_VALUE:
				enterOuterAlt(_localctx, 2);
				{
				setState(810);
				match(DECIMAL_VALUE);
				}
				break;
			case FALSE:
			case TRUE:
				enterOuterAlt(_localctx, 3);
				{
				setState(811);
				booleanValue();
				}
				break;
			case STRING:
				enterOuterAlt(_localctx, 4);
				{
				setState(812);
				match(STRING);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ConstantListContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List constant() {
			return getRuleContexts(ConstantContext.class);
		}
		public ConstantContext constant(int i) {
			return getRuleContext(ConstantContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public ConstantListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_constantList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterConstantList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitConstantList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitConstantList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ConstantListContext constantList() throws RecognitionException {
		ConstantListContext _localctx = new ConstantListContext(_ctx, getState());
		enterRule(_localctx, 66, RULE_constantList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(815);
			match(LEFT_PAREN);
			setState(816);
			constant();
			setState(821);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(817);
				match(COMMA);
				setState(818);
				constant();
				}
				}
				setState(823);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(824);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NestedConstantListContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List constantList() {
			return getRuleContexts(ConstantListContext.class);
		}
		public ConstantListContext constantList(int i) {
			return getRuleContext(ConstantListContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public NestedConstantListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nestedConstantList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNestedConstantList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNestedConstantList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNestedConstantList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NestedConstantListContext nestedConstantList() throws RecognitionException {
		NestedConstantListContext _localctx = new NestedConstantListContext(_ctx, getState());
		enterRule(_localctx, 68, RULE_nestedConstantList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(826);
			match(LEFT_PAREN);
			setState(827);
			constantList();
			setState(832);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(828);
				match(COMMA);
				setState(829);
				constantList();
				}
				}
				setState(834);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(835);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CreateFileFormatContext extends ParserRuleContext {
		public TerminalNode STORED() { return getToken(HoodieSqlBaseParser.STORED, 0); }
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public FileFormatContext fileFormat() {
			return getRuleContext(FileFormatContext.class,0);
		}
		public TerminalNode BY() { return getToken(HoodieSqlBaseParser.BY, 0); }
		public StorageHandlerContext storageHandler() {
			return getRuleContext(StorageHandlerContext.class,0);
		}
		public CreateFileFormatContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_createFileFormat; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCreateFileFormat(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCreateFileFormat(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCreateFileFormat(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CreateFileFormatContext createFileFormat() throws RecognitionException {
		CreateFileFormatContext _localctx = new CreateFileFormatContext(_ctx, getState());
		enterRule(_localctx, 70, RULE_createFileFormat);
		try {
			setState(843);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(837);
				match(STORED);
				setState(838);
				match(AS);
				setState(839);
				fileFormat();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(840);
				match(STORED);
				setState(841);
				match(BY);
				setState(842);
				storageHandler();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FileFormatContext extends ParserRuleContext {
		public FileFormatContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fileFormat; }
	 
		public FileFormatContext() { }
		public void copyFrom(FileFormatContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class TableFileFormatContext extends FileFormatContext {
		public Token inFmt;
		public Token outFmt;
		public TerminalNode INPUTFORMAT() { return getToken(HoodieSqlBaseParser.INPUTFORMAT, 0); }
		public TerminalNode OUTPUTFORMAT() { return getToken(HoodieSqlBaseParser.OUTPUTFORMAT, 0); }
		public List STRING() { return getTokens(HoodieSqlBaseParser.STRING); }
		public TerminalNode STRING(int i) {
			return getToken(HoodieSqlBaseParser.STRING, i);
		}
		public TableFileFormatContext(FileFormatContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTableFileFormat(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTableFileFormat(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTableFileFormat(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class GenericFileFormatContext extends FileFormatContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public GenericFileFormatContext(FileFormatContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterGenericFileFormat(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitGenericFileFormat(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitGenericFileFormat(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FileFormatContext fileFormat() throws RecognitionException {
		FileFormatContext _localctx = new FileFormatContext(_ctx, getState());
		enterRule(_localctx, 72, RULE_fileFormat);
		try {
			setState(850);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) {
			case 1:
				_localctx = new TableFileFormatContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(845);
				match(INPUTFORMAT);
				setState(846);
				((TableFileFormatContext)_localctx).inFmt = match(STRING);
				setState(847);
				match(OUTPUTFORMAT);
				setState(848);
				((TableFileFormatContext)_localctx).outFmt = match(STRING);
				}
				break;
			case 2:
				_localctx = new GenericFileFormatContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(849);
				identifier();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StorageHandlerContext extends ParserRuleContext {
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TerminalNode WITH() { return getToken(HoodieSqlBaseParser.WITH, 0); }
		public TerminalNode SERDEPROPERTIES() { return getToken(HoodieSqlBaseParser.SERDEPROPERTIES, 0); }
		public TablePropertyListContext tablePropertyList() {
			return getRuleContext(TablePropertyListContext.class,0);
		}
		public StorageHandlerContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_storageHandler; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterStorageHandler(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitStorageHandler(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitStorageHandler(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StorageHandlerContext storageHandler() throws RecognitionException {
		StorageHandlerContext _localctx = new StorageHandlerContext(_ctx, getState());
		enterRule(_localctx, 74, RULE_storageHandler);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(852);
			match(STRING);
			setState(856);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) {
			case 1:
				{
				setState(853);
				match(WITH);
				setState(854);
				match(SERDEPROPERTIES);
				setState(855);
				tablePropertyList();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ResourceContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public ResourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_resource; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterResource(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitResource(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitResource(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ResourceContext resource() throws RecognitionException {
		ResourceContext _localctx = new ResourceContext(_ctx, getState());
		enterRule(_localctx, 76, RULE_resource);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(858);
			identifier();
			setState(859);
			match(STRING);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DmlStatementNoWithContext extends ParserRuleContext {
		public DmlStatementNoWithContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dmlStatementNoWith; }
	 
		public DmlStatementNoWithContext() { }
		public void copyFrom(DmlStatementNoWithContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class DeleteFromTableContext extends DmlStatementNoWithContext {
		public TerminalNode DELETE() { return getToken(HoodieSqlBaseParser.DELETE, 0); }
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public WhereClauseContext whereClause() {
			return getRuleContext(WhereClauseContext.class,0);
		}
		public DeleteFromTableContext(DmlStatementNoWithContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDeleteFromTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDeleteFromTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDeleteFromTable(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SingleInsertQueryContext extends DmlStatementNoWithContext {
		public InsertIntoContext insertInto() {
			return getRuleContext(InsertIntoContext.class,0);
		}
		public QueryTermContext queryTerm() {
			return getRuleContext(QueryTermContext.class,0);
		}
		public QueryOrganizationContext queryOrganization() {
			return getRuleContext(QueryOrganizationContext.class,0);
		}
		public SingleInsertQueryContext(DmlStatementNoWithContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSingleInsertQuery(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSingleInsertQuery(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSingleInsertQuery(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MultiInsertQueryContext extends DmlStatementNoWithContext {
		public FromClauseContext fromClause() {
			return getRuleContext(FromClauseContext.class,0);
		}
		public List multiInsertQueryBody() {
			return getRuleContexts(MultiInsertQueryBodyContext.class);
		}
		public MultiInsertQueryBodyContext multiInsertQueryBody(int i) {
			return getRuleContext(MultiInsertQueryBodyContext.class,i);
		}
		public MultiInsertQueryContext(DmlStatementNoWithContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMultiInsertQuery(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMultiInsertQuery(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMultiInsertQuery(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class UpdateTableContext extends DmlStatementNoWithContext {
		public TerminalNode UPDATE() { return getToken(HoodieSqlBaseParser.UPDATE, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public SetClauseContext setClause() {
			return getRuleContext(SetClauseContext.class,0);
		}
		public WhereClauseContext whereClause() {
			return getRuleContext(WhereClauseContext.class,0);
		}
		public UpdateTableContext(DmlStatementNoWithContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterUpdateTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitUpdateTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitUpdateTable(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MergeIntoTableContext extends DmlStatementNoWithContext {
		public MultipartIdentifierContext target;
		public TableAliasContext targetAlias;
		public MultipartIdentifierContext source;
		public QueryContext sourceQuery;
		public TableAliasContext sourceAlias;
		public BooleanExpressionContext mergeCondition;
		public TerminalNode MERGE() { return getToken(HoodieSqlBaseParser.MERGE, 0); }
		public TerminalNode INTO() { return getToken(HoodieSqlBaseParser.INTO, 0); }
		public TerminalNode USING() { return getToken(HoodieSqlBaseParser.USING, 0); }
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public List multipartIdentifier() {
			return getRuleContexts(MultipartIdentifierContext.class);
		}
		public MultipartIdentifierContext multipartIdentifier(int i) {
			return getRuleContext(MultipartIdentifierContext.class,i);
		}
		public List tableAlias() {
			return getRuleContexts(TableAliasContext.class);
		}
		public TableAliasContext tableAlias(int i) {
			return getRuleContext(TableAliasContext.class,i);
		}
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public List matchedClause() {
			return getRuleContexts(MatchedClauseContext.class);
		}
		public MatchedClauseContext matchedClause(int i) {
			return getRuleContext(MatchedClauseContext.class,i);
		}
		public List notMatchedClause() {
			return getRuleContexts(NotMatchedClauseContext.class);
		}
		public NotMatchedClauseContext notMatchedClause(int i) {
			return getRuleContext(NotMatchedClauseContext.class,i);
		}
		public MergeIntoTableContext(DmlStatementNoWithContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMergeIntoTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMergeIntoTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMergeIntoTable(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DmlStatementNoWithContext dmlStatementNoWith() throws RecognitionException {
		DmlStatementNoWithContext _localctx = new DmlStatementNoWithContext(_ctx, getState());
		enterRule(_localctx, 78, RULE_dmlStatementNoWith);
		int _la;
		try {
			int _alt;
			setState(912);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case INSERT:
				_localctx = new SingleInsertQueryContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(861);
				insertInto();
				setState(862);
				queryTerm(0);
				setState(863);
				queryOrganization();
				}
				break;
			case FROM:
				_localctx = new MultiInsertQueryContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(865);
				fromClause();
				setState(867); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(866);
					multiInsertQueryBody();
					}
					}
					setState(869); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==INSERT );
				}
				break;
			case DELETE:
				_localctx = new DeleteFromTableContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(871);
				match(DELETE);
				setState(872);
				match(FROM);
				setState(873);
				multipartIdentifier();
				setState(874);
				tableAlias();
				setState(876);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==WHERE) {
					{
					setState(875);
					whereClause();
					}
				}

				}
				break;
			case UPDATE:
				_localctx = new UpdateTableContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(878);
				match(UPDATE);
				setState(879);
				multipartIdentifier();
				setState(880);
				tableAlias();
				setState(881);
				setClause();
				setState(883);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==WHERE) {
					{
					setState(882);
					whereClause();
					}
				}

				}
				break;
			case MERGE:
				_localctx = new MergeIntoTableContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(885);
				match(MERGE);
				setState(886);
				match(INTO);
				setState(887);
				((MergeIntoTableContext)_localctx).target = multipartIdentifier();
				setState(888);
				((MergeIntoTableContext)_localctx).targetAlias = tableAlias();
				setState(889);
				match(USING);
				setState(895);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) {
				case 1:
					{
					setState(890);
					((MergeIntoTableContext)_localctx).source = multipartIdentifier();
					}
					break;
				case 2:
					{
					setState(891);
					match(LEFT_PAREN);
					setState(892);
					((MergeIntoTableContext)_localctx).sourceQuery = query();
					setState(893);
					match(RIGHT_PAREN);
					}
					break;
				}
				setState(897);
				((MergeIntoTableContext)_localctx).sourceAlias = tableAlias();
				setState(898);
				match(ON);
				setState(899);
				((MergeIntoTableContext)_localctx).mergeCondition = booleanExpression(0);
				setState(903);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,71,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(900);
						matchedClause();
						}
						} 
					}
					setState(905);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,71,_ctx);
				}
				setState(909);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==WHEN) {
					{
					{
					setState(906);
					notMatchedClause();
					}
					}
					setState(911);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QueryOrganizationContext extends ParserRuleContext {
		public SortItemContext sortItem;
		public List order = new ArrayList();
		public ExpressionContext expression;
		public List clusterBy = new ArrayList();
		public List distributeBy = new ArrayList();
		public List sort = new ArrayList();
		public ExpressionContext limit;
		public TerminalNode ORDER() { return getToken(HoodieSqlBaseParser.ORDER, 0); }
		public List BY() { return getTokens(HoodieSqlBaseParser.BY); }
		public TerminalNode BY(int i) {
			return getToken(HoodieSqlBaseParser.BY, i);
		}
		public TerminalNode CLUSTER() { return getToken(HoodieSqlBaseParser.CLUSTER, 0); }
		public TerminalNode DISTRIBUTE() { return getToken(HoodieSqlBaseParser.DISTRIBUTE, 0); }
		public TerminalNode SORT() { return getToken(HoodieSqlBaseParser.SORT, 0); }
		public WindowClauseContext windowClause() {
			return getRuleContext(WindowClauseContext.class,0);
		}
		public TerminalNode LIMIT() { return getToken(HoodieSqlBaseParser.LIMIT, 0); }
		public List sortItem() {
			return getRuleContexts(SortItemContext.class);
		}
		public SortItemContext sortItem(int i) {
			return getRuleContext(SortItemContext.class,i);
		}
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode ALL() { return getToken(HoodieSqlBaseParser.ALL, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public QueryOrganizationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryOrganization; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQueryOrganization(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQueryOrganization(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQueryOrganization(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryOrganizationContext queryOrganization() throws RecognitionException {
		QueryOrganizationContext _localctx = new QueryOrganizationContext(_ctx, getState());
		enterRule(_localctx, 80, RULE_queryOrganization);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(924);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) {
			case 1:
				{
				setState(914);
				match(ORDER);
				setState(915);
				match(BY);
				setState(916);
				((QueryOrganizationContext)_localctx).sortItem = sortItem();
				((QueryOrganizationContext)_localctx).order.add(((QueryOrganizationContext)_localctx).sortItem);
				setState(921);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,74,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(917);
						match(COMMA);
						setState(918);
						((QueryOrganizationContext)_localctx).sortItem = sortItem();
						((QueryOrganizationContext)_localctx).order.add(((QueryOrganizationContext)_localctx).sortItem);
						}
						} 
					}
					setState(923);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,74,_ctx);
				}
				}
				break;
			}
			setState(936);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,77,_ctx) ) {
			case 1:
				{
				setState(926);
				match(CLUSTER);
				setState(927);
				match(BY);
				setState(928);
				((QueryOrganizationContext)_localctx).expression = expression();
				((QueryOrganizationContext)_localctx).clusterBy.add(((QueryOrganizationContext)_localctx).expression);
				setState(933);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,76,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(929);
						match(COMMA);
						setState(930);
						((QueryOrganizationContext)_localctx).expression = expression();
						((QueryOrganizationContext)_localctx).clusterBy.add(((QueryOrganizationContext)_localctx).expression);
						}
						} 
					}
					setState(935);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,76,_ctx);
				}
				}
				break;
			}
			setState(948);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,79,_ctx) ) {
			case 1:
				{
				setState(938);
				match(DISTRIBUTE);
				setState(939);
				match(BY);
				setState(940);
				((QueryOrganizationContext)_localctx).expression = expression();
				((QueryOrganizationContext)_localctx).distributeBy.add(((QueryOrganizationContext)_localctx).expression);
				setState(945);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,78,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(941);
						match(COMMA);
						setState(942);
						((QueryOrganizationContext)_localctx).expression = expression();
						((QueryOrganizationContext)_localctx).distributeBy.add(((QueryOrganizationContext)_localctx).expression);
						}
						} 
					}
					setState(947);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,78,_ctx);
				}
				}
				break;
			}
			setState(960);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) {
			case 1:
				{
				setState(950);
				match(SORT);
				setState(951);
				match(BY);
				setState(952);
				((QueryOrganizationContext)_localctx).sortItem = sortItem();
				((QueryOrganizationContext)_localctx).sort.add(((QueryOrganizationContext)_localctx).sortItem);
				setState(957);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,80,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(953);
						match(COMMA);
						setState(954);
						((QueryOrganizationContext)_localctx).sortItem = sortItem();
						((QueryOrganizationContext)_localctx).sort.add(((QueryOrganizationContext)_localctx).sortItem);
						}
						} 
					}
					setState(959);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,80,_ctx);
				}
				}
				break;
			}
			setState(963);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,82,_ctx) ) {
			case 1:
				{
				setState(962);
				windowClause();
				}
				break;
			}
			setState(970);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,84,_ctx) ) {
			case 1:
				{
				setState(965);
				match(LIMIT);
				setState(968);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) {
				case 1:
					{
					setState(966);
					match(ALL);
					}
					break;
				case 2:
					{
					setState(967);
					((QueryOrganizationContext)_localctx).limit = expression();
					}
					break;
				}
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultiInsertQueryBodyContext extends ParserRuleContext {
		public InsertIntoContext insertInto() {
			return getRuleContext(InsertIntoContext.class,0);
		}
		public FromStatementBodyContext fromStatementBody() {
			return getRuleContext(FromStatementBodyContext.class,0);
		}
		public MultiInsertQueryBodyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multiInsertQueryBody; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMultiInsertQueryBody(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMultiInsertQueryBody(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMultiInsertQueryBody(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultiInsertQueryBodyContext multiInsertQueryBody() throws RecognitionException {
		MultiInsertQueryBodyContext _localctx = new MultiInsertQueryBodyContext(_ctx, getState());
		enterRule(_localctx, 82, RULE_multiInsertQueryBody);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(972);
			insertInto();
			setState(973);
			fromStatementBody();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QueryTermContext extends ParserRuleContext {
		public QueryTermContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryTerm; }
	 
		public QueryTermContext() { }
		public void copyFrom(QueryTermContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class QueryTermDefaultContext extends QueryTermContext {
		public QueryPrimaryContext queryPrimary() {
			return getRuleContext(QueryPrimaryContext.class,0);
		}
		public QueryTermDefaultContext(QueryTermContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQueryTermDefault(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQueryTermDefault(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQueryTermDefault(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SetOperationContext extends QueryTermContext {
		public QueryTermContext left;
		public Token operator;
		public QueryTermContext right;
		public List queryTerm() {
			return getRuleContexts(QueryTermContext.class);
		}
		public QueryTermContext queryTerm(int i) {
			return getRuleContext(QueryTermContext.class,i);
		}
		public TerminalNode INTERSECT() { return getToken(HoodieSqlBaseParser.INTERSECT, 0); }
		public TerminalNode UNION() { return getToken(HoodieSqlBaseParser.UNION, 0); }
		public TerminalNode EXCEPT() { return getToken(HoodieSqlBaseParser.EXCEPT, 0); }
		public TerminalNode SETMINUS() { return getToken(HoodieSqlBaseParser.SETMINUS, 0); }
		public SetQuantifierContext setQuantifier() {
			return getRuleContext(SetQuantifierContext.class,0);
		}
		public SetOperationContext(QueryTermContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSetOperation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSetOperation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSetOperation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryTermContext queryTerm() throws RecognitionException {
		return queryTerm(0);
	}

	private QueryTermContext queryTerm(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		QueryTermContext _localctx = new QueryTermContext(_ctx, _parentState);
		QueryTermContext _prevctx = _localctx;
		int _startState = 84;
		enterRecursionRule(_localctx, 84, RULE_queryTerm, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			{
			_localctx = new QueryTermDefaultContext(_localctx);
			_ctx = _localctx;
			_prevctx = _localctx;

			setState(976);
			queryPrimary();
			}
			_ctx.stop = _input.LT(-1);
			setState(1001);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,89,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(999);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,88,_ctx) ) {
					case 1:
						{
						_localctx = new SetOperationContext(new QueryTermContext(_parentctx, _parentState));
						((SetOperationContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_queryTerm);
						setState(978);
						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
						setState(979);
						if (!(legacy_setops_precedence_enabled)) throw new FailedPredicateException(this, "legacy_setops_precedence_enabled");
						setState(980);
						((SetOperationContext)_localctx).operator = _input.LT(1);
						_la = _input.LA(1);
						if ( !(_la==EXCEPT || _la==INTERSECT || _la==SETMINUS || _la==UNION) ) {
							((SetOperationContext)_localctx).operator = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(982);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==ALL || _la==DISTINCT) {
							{
							setState(981);
							setQuantifier();
							}
						}

						setState(984);
						((SetOperationContext)_localctx).right = queryTerm(4);
						}
						break;
					case 2:
						{
						_localctx = new SetOperationContext(new QueryTermContext(_parentctx, _parentState));
						((SetOperationContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_queryTerm);
						setState(985);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(986);
						if (!(!legacy_setops_precedence_enabled)) throw new FailedPredicateException(this, "!legacy_setops_precedence_enabled");
						setState(987);
						((SetOperationContext)_localctx).operator = match(INTERSECT);
						setState(989);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==ALL || _la==DISTINCT) {
							{
							setState(988);
							setQuantifier();
							}
						}

						setState(991);
						((SetOperationContext)_localctx).right = queryTerm(3);
						}
						break;
					case 3:
						{
						_localctx = new SetOperationContext(new QueryTermContext(_parentctx, _parentState));
						((SetOperationContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_queryTerm);
						setState(992);
						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
						setState(993);
						if (!(!legacy_setops_precedence_enabled)) throw new FailedPredicateException(this, "!legacy_setops_precedence_enabled");
						setState(994);
						((SetOperationContext)_localctx).operator = _input.LT(1);
						_la = _input.LA(1);
						if ( !(_la==EXCEPT || _la==SETMINUS || _la==UNION) ) {
							((SetOperationContext)_localctx).operator = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(996);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==ALL || _la==DISTINCT) {
							{
							setState(995);
							setQuantifier();
							}
						}

						setState(998);
						((SetOperationContext)_localctx).right = queryTerm(2);
						}
						break;
					}
					} 
				}
				setState(1003);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,89,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class QueryPrimaryContext extends ParserRuleContext {
		public QueryPrimaryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_queryPrimary; }
	 
		public QueryPrimaryContext() { }
		public void copyFrom(QueryPrimaryContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class SubqueryContext extends QueryPrimaryContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public SubqueryContext(QueryPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSubquery(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSubquery(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSubquery(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class QueryPrimaryDefaultContext extends QueryPrimaryContext {
		public QuerySpecificationContext querySpecification() {
			return getRuleContext(QuerySpecificationContext.class,0);
		}
		public QueryPrimaryDefaultContext(QueryPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQueryPrimaryDefault(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQueryPrimaryDefault(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQueryPrimaryDefault(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InlineTableDefault1Context extends QueryPrimaryContext {
		public InlineTableContext inlineTable() {
			return getRuleContext(InlineTableContext.class,0);
		}
		public InlineTableDefault1Context(QueryPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInlineTableDefault1(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInlineTableDefault1(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInlineTableDefault1(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class FromStmtContext extends QueryPrimaryContext {
		public FromStatementContext fromStatement() {
			return getRuleContext(FromStatementContext.class,0);
		}
		public FromStmtContext(QueryPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFromStmt(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFromStmt(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFromStmt(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class TableContext extends QueryPrimaryContext {
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TableContext(QueryPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTable(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QueryPrimaryContext queryPrimary() throws RecognitionException {
		QueryPrimaryContext _localctx = new QueryPrimaryContext(_ctx, getState());
		enterRule(_localctx, 86, RULE_queryPrimary);
		try {
			setState(1013);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case MAP:
			case REDUCE:
			case SELECT:
				_localctx = new QueryPrimaryDefaultContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1004);
				querySpecification();
				}
				break;
			case FROM:
				_localctx = new FromStmtContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1005);
				fromStatement();
				}
				break;
			case TABLE:
				_localctx = new TableContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1006);
				match(TABLE);
				setState(1007);
				multipartIdentifier();
				}
				break;
			case VALUES:
				_localctx = new InlineTableDefault1Context(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(1008);
				inlineTable();
				}
				break;
			case LEFT_PAREN:
				_localctx = new SubqueryContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(1009);
				match(LEFT_PAREN);
				setState(1010);
				query();
				setState(1011);
				match(RIGHT_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SortItemContext extends ParserRuleContext {
		public Token ordering;
		public Token nullOrder;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode NULLS() { return getToken(HoodieSqlBaseParser.NULLS, 0); }
		public TerminalNode ASC() { return getToken(HoodieSqlBaseParser.ASC, 0); }
		public TerminalNode DESC() { return getToken(HoodieSqlBaseParser.DESC, 0); }
		public TerminalNode LAST() { return getToken(HoodieSqlBaseParser.LAST, 0); }
		public TerminalNode FIRST() { return getToken(HoodieSqlBaseParser.FIRST, 0); }
		public SortItemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sortItem; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSortItem(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSortItem(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSortItem(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SortItemContext sortItem() throws RecognitionException {
		SortItemContext _localctx = new SortItemContext(_ctx, getState());
		enterRule(_localctx, 88, RULE_sortItem);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1015);
			expression();
			setState(1017);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,91,_ctx) ) {
			case 1:
				{
				setState(1016);
				((SortItemContext)_localctx).ordering = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==ASC || _la==DESC) ) {
					((SortItemContext)_localctx).ordering = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			}
			setState(1021);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) {
			case 1:
				{
				setState(1019);
				match(NULLS);
				setState(1020);
				((SortItemContext)_localctx).nullOrder = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==FIRST || _la==LAST) ) {
					((SortItemContext)_localctx).nullOrder = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FromStatementContext extends ParserRuleContext {
		public FromClauseContext fromClause() {
			return getRuleContext(FromClauseContext.class,0);
		}
		public List fromStatementBody() {
			return getRuleContexts(FromStatementBodyContext.class);
		}
		public FromStatementBodyContext fromStatementBody(int i) {
			return getRuleContext(FromStatementBodyContext.class,i);
		}
		public FromStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fromStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFromStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFromStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFromStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FromStatementContext fromStatement() throws RecognitionException {
		FromStatementContext _localctx = new FromStatementContext(_ctx, getState());
		enterRule(_localctx, 90, RULE_fromStatement);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1023);
			fromClause();
			setState(1025); 
			_errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					setState(1024);
					fromStatementBody();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(1027); 
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,93,_ctx);
			} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FromStatementBodyContext extends ParserRuleContext {
		public TransformClauseContext transformClause() {
			return getRuleContext(TransformClauseContext.class,0);
		}
		public QueryOrganizationContext queryOrganization() {
			return getRuleContext(QueryOrganizationContext.class,0);
		}
		public WhereClauseContext whereClause() {
			return getRuleContext(WhereClauseContext.class,0);
		}
		public SelectClauseContext selectClause() {
			return getRuleContext(SelectClauseContext.class,0);
		}
		public List lateralView() {
			return getRuleContexts(LateralViewContext.class);
		}
		public LateralViewContext lateralView(int i) {
			return getRuleContext(LateralViewContext.class,i);
		}
		public AggregationClauseContext aggregationClause() {
			return getRuleContext(AggregationClauseContext.class,0);
		}
		public HavingClauseContext havingClause() {
			return getRuleContext(HavingClauseContext.class,0);
		}
		public WindowClauseContext windowClause() {
			return getRuleContext(WindowClauseContext.class,0);
		}
		public FromStatementBodyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fromStatementBody; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFromStatementBody(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFromStatementBody(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFromStatementBody(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FromStatementBodyContext fromStatementBody() throws RecognitionException {
		FromStatementBodyContext _localctx = new FromStatementBodyContext(_ctx, getState());
		enterRule(_localctx, 92, RULE_fromStatementBody);
		try {
			int _alt;
			setState(1056);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1029);
				transformClause();
				setState(1031);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) {
				case 1:
					{
					setState(1030);
					whereClause();
					}
					break;
				}
				setState(1033);
				queryOrganization();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1035);
				selectClause();
				setState(1039);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,95,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(1036);
						lateralView();
						}
						} 
					}
					setState(1041);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,95,_ctx);
				}
				setState(1043);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,96,_ctx) ) {
				case 1:
					{
					setState(1042);
					whereClause();
					}
					break;
				}
				setState(1046);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) {
				case 1:
					{
					setState(1045);
					aggregationClause();
					}
					break;
				}
				setState(1049);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) {
				case 1:
					{
					setState(1048);
					havingClause();
					}
					break;
				}
				setState(1052);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) {
				case 1:
					{
					setState(1051);
					windowClause();
					}
					break;
				}
				setState(1054);
				queryOrganization();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QuerySpecificationContext extends ParserRuleContext {
		public QuerySpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_querySpecification; }
	 
		public QuerySpecificationContext() { }
		public void copyFrom(QuerySpecificationContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class RegularQuerySpecificationContext extends QuerySpecificationContext {
		public SelectClauseContext selectClause() {
			return getRuleContext(SelectClauseContext.class,0);
		}
		public FromClauseContext fromClause() {
			return getRuleContext(FromClauseContext.class,0);
		}
		public List lateralView() {
			return getRuleContexts(LateralViewContext.class);
		}
		public LateralViewContext lateralView(int i) {
			return getRuleContext(LateralViewContext.class,i);
		}
		public WhereClauseContext whereClause() {
			return getRuleContext(WhereClauseContext.class,0);
		}
		public AggregationClauseContext aggregationClause() {
			return getRuleContext(AggregationClauseContext.class,0);
		}
		public HavingClauseContext havingClause() {
			return getRuleContext(HavingClauseContext.class,0);
		}
		public WindowClauseContext windowClause() {
			return getRuleContext(WindowClauseContext.class,0);
		}
		public RegularQuerySpecificationContext(QuerySpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterRegularQuerySpecification(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitRegularQuerySpecification(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitRegularQuerySpecification(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class TransformQuerySpecificationContext extends QuerySpecificationContext {
		public TransformClauseContext transformClause() {
			return getRuleContext(TransformClauseContext.class,0);
		}
		public FromClauseContext fromClause() {
			return getRuleContext(FromClauseContext.class,0);
		}
		public List lateralView() {
			return getRuleContexts(LateralViewContext.class);
		}
		public LateralViewContext lateralView(int i) {
			return getRuleContext(LateralViewContext.class,i);
		}
		public WhereClauseContext whereClause() {
			return getRuleContext(WhereClauseContext.class,0);
		}
		public AggregationClauseContext aggregationClause() {
			return getRuleContext(AggregationClauseContext.class,0);
		}
		public HavingClauseContext havingClause() {
			return getRuleContext(HavingClauseContext.class,0);
		}
		public WindowClauseContext windowClause() {
			return getRuleContext(WindowClauseContext.class,0);
		}
		public TransformQuerySpecificationContext(QuerySpecificationContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTransformQuerySpecification(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTransformQuerySpecification(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTransformQuerySpecification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QuerySpecificationContext querySpecification() throws RecognitionException {
		QuerySpecificationContext _localctx = new QuerySpecificationContext(_ctx, getState());
		enterRule(_localctx, 94, RULE_querySpecification);
		try {
			int _alt;
			setState(1102);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,113,_ctx) ) {
			case 1:
				_localctx = new TransformQuerySpecificationContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1058);
				transformClause();
				setState(1060);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,101,_ctx) ) {
				case 1:
					{
					setState(1059);
					fromClause();
					}
					break;
				}
				setState(1065);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,102,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(1062);
						lateralView();
						}
						} 
					}
					setState(1067);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,102,_ctx);
				}
				setState(1069);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,103,_ctx) ) {
				case 1:
					{
					setState(1068);
					whereClause();
					}
					break;
				}
				setState(1072);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,104,_ctx) ) {
				case 1:
					{
					setState(1071);
					aggregationClause();
					}
					break;
				}
				setState(1075);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,105,_ctx) ) {
				case 1:
					{
					setState(1074);
					havingClause();
					}
					break;
				}
				setState(1078);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) {
				case 1:
					{
					setState(1077);
					windowClause();
					}
					break;
				}
				}
				break;
			case 2:
				_localctx = new RegularQuerySpecificationContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1080);
				selectClause();
				setState(1082);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) {
				case 1:
					{
					setState(1081);
					fromClause();
					}
					break;
				}
				setState(1087);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,108,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(1084);
						lateralView();
						}
						} 
					}
					setState(1089);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,108,_ctx);
				}
				setState(1091);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,109,_ctx) ) {
				case 1:
					{
					setState(1090);
					whereClause();
					}
					break;
				}
				setState(1094);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) {
				case 1:
					{
					setState(1093);
					aggregationClause();
					}
					break;
				}
				setState(1097);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,111,_ctx) ) {
				case 1:
					{
					setState(1096);
					havingClause();
					}
					break;
				}
				setState(1100);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,112,_ctx) ) {
				case 1:
					{
					setState(1099);
					windowClause();
					}
					break;
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TransformClauseContext extends ParserRuleContext {
		public Token kind;
		public RowFormatContext inRowFormat;
		public Token recordWriter;
		public Token script;
		public RowFormatContext outRowFormat;
		public Token recordReader;
		public TerminalNode USING() { return getToken(HoodieSqlBaseParser.USING, 0); }
		public List STRING() { return getTokens(HoodieSqlBaseParser.STRING); }
		public TerminalNode STRING(int i) {
			return getToken(HoodieSqlBaseParser.STRING, i);
		}
		public TerminalNode SELECT() { return getToken(HoodieSqlBaseParser.SELECT, 0); }
		public List LEFT_PAREN() { return getTokens(HoodieSqlBaseParser.LEFT_PAREN); }
		public TerminalNode LEFT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.LEFT_PAREN, i);
		}
		public ExpressionSeqContext expressionSeq() {
			return getRuleContext(ExpressionSeqContext.class,0);
		}
		public List RIGHT_PAREN() { return getTokens(HoodieSqlBaseParser.RIGHT_PAREN); }
		public TerminalNode RIGHT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.RIGHT_PAREN, i);
		}
		public TerminalNode TRANSFORM() { return getToken(HoodieSqlBaseParser.TRANSFORM, 0); }
		public TerminalNode MAP() { return getToken(HoodieSqlBaseParser.MAP, 0); }
		public TerminalNode REDUCE() { return getToken(HoodieSqlBaseParser.REDUCE, 0); }
		public TerminalNode RECORDWRITER() { return getToken(HoodieSqlBaseParser.RECORDWRITER, 0); }
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public TerminalNode RECORDREADER() { return getToken(HoodieSqlBaseParser.RECORDREADER, 0); }
		public List rowFormat() {
			return getRuleContexts(RowFormatContext.class);
		}
		public RowFormatContext rowFormat(int i) {
			return getRuleContext(RowFormatContext.class,i);
		}
		public SetQuantifierContext setQuantifier() {
			return getRuleContext(SetQuantifierContext.class,0);
		}
		public IdentifierSeqContext identifierSeq() {
			return getRuleContext(IdentifierSeqContext.class,0);
		}
		public ColTypeListContext colTypeList() {
			return getRuleContext(ColTypeListContext.class,0);
		}
		public TransformClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_transformClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTransformClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTransformClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTransformClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TransformClauseContext transformClause() throws RecognitionException {
		TransformClauseContext _localctx = new TransformClauseContext(_ctx, getState());
		enterRule(_localctx, 96, RULE_transformClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1123);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case SELECT:
				{
				setState(1104);
				match(SELECT);
				setState(1105);
				((TransformClauseContext)_localctx).kind = match(TRANSFORM);
				setState(1106);
				match(LEFT_PAREN);
				setState(1108);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,114,_ctx) ) {
				case 1:
					{
					setState(1107);
					setQuantifier();
					}
					break;
				}
				setState(1110);
				expressionSeq();
				setState(1111);
				match(RIGHT_PAREN);
				}
				break;
			case MAP:
				{
				setState(1113);
				((TransformClauseContext)_localctx).kind = match(MAP);
				setState(1115);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,115,_ctx) ) {
				case 1:
					{
					setState(1114);
					setQuantifier();
					}
					break;
				}
				setState(1117);
				expressionSeq();
				}
				break;
			case REDUCE:
				{
				setState(1118);
				((TransformClauseContext)_localctx).kind = match(REDUCE);
				setState(1120);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,116,_ctx) ) {
				case 1:
					{
					setState(1119);
					setQuantifier();
					}
					break;
				}
				setState(1122);
				expressionSeq();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(1126);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ROW) {
				{
				setState(1125);
				((TransformClauseContext)_localctx).inRowFormat = rowFormat();
				}
			}

			setState(1130);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RECORDWRITER) {
				{
				setState(1128);
				match(RECORDWRITER);
				setState(1129);
				((TransformClauseContext)_localctx).recordWriter = match(STRING);
				}
			}

			setState(1132);
			match(USING);
			setState(1133);
			((TransformClauseContext)_localctx).script = match(STRING);
			setState(1146);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,122,_ctx) ) {
			case 1:
				{
				setState(1134);
				match(AS);
				setState(1144);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,121,_ctx) ) {
				case 1:
					{
					setState(1135);
					identifierSeq();
					}
					break;
				case 2:
					{
					setState(1136);
					colTypeList();
					}
					break;
				case 3:
					{
					{
					setState(1137);
					match(LEFT_PAREN);
					setState(1140);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,120,_ctx) ) {
					case 1:
						{
						setState(1138);
						identifierSeq();
						}
						break;
					case 2:
						{
						setState(1139);
						colTypeList();
						}
						break;
					}
					setState(1142);
					match(RIGHT_PAREN);
					}
					}
					break;
				}
				}
				break;
			}
			setState(1149);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,123,_ctx) ) {
			case 1:
				{
				setState(1148);
				((TransformClauseContext)_localctx).outRowFormat = rowFormat();
				}
				break;
			}
			setState(1153);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,124,_ctx) ) {
			case 1:
				{
				setState(1151);
				match(RECORDREADER);
				setState(1152);
				((TransformClauseContext)_localctx).recordReader = match(STRING);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SelectClauseContext extends ParserRuleContext {
		public HintContext hint;
		public List hints = new ArrayList();
		public TerminalNode SELECT() { return getToken(HoodieSqlBaseParser.SELECT, 0); }
		public NamedExpressionSeqContext namedExpressionSeq() {
			return getRuleContext(NamedExpressionSeqContext.class,0);
		}
		public SetQuantifierContext setQuantifier() {
			return getRuleContext(SetQuantifierContext.class,0);
		}
		public List hint() {
			return getRuleContexts(HintContext.class);
		}
		public HintContext hint(int i) {
			return getRuleContext(HintContext.class,i);
		}
		public SelectClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_selectClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSelectClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSelectClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSelectClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SelectClauseContext selectClause() throws RecognitionException {
		SelectClauseContext _localctx = new SelectClauseContext(_ctx, getState());
		enterRule(_localctx, 98, RULE_selectClause);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1155);
			match(SELECT);
			setState(1159);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,125,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1156);
					((SelectClauseContext)_localctx).hint = hint();
					((SelectClauseContext)_localctx).hints.add(((SelectClauseContext)_localctx).hint);
					}
					} 
				}
				setState(1161);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,125,_ctx);
			}
			setState(1163);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) {
			case 1:
				{
				setState(1162);
				setQuantifier();
				}
				break;
			}
			setState(1165);
			namedExpressionSeq();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SetClauseContext extends ParserRuleContext {
		public TerminalNode SET() { return getToken(HoodieSqlBaseParser.SET, 0); }
		public AssignmentListContext assignmentList() {
			return getRuleContext(AssignmentListContext.class,0);
		}
		public SetClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_setClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSetClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSetClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSetClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SetClauseContext setClause() throws RecognitionException {
		SetClauseContext _localctx = new SetClauseContext(_ctx, getState());
		enterRule(_localctx, 100, RULE_setClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1167);
			match(SET);
			setState(1168);
			assignmentList();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MatchedClauseContext extends ParserRuleContext {
		public BooleanExpressionContext matchedCond;
		public TerminalNode WHEN() { return getToken(HoodieSqlBaseParser.WHEN, 0); }
		public TerminalNode MATCHED() { return getToken(HoodieSqlBaseParser.MATCHED, 0); }
		public TerminalNode THEN() { return getToken(HoodieSqlBaseParser.THEN, 0); }
		public MatchedActionContext matchedAction() {
			return getRuleContext(MatchedActionContext.class,0);
		}
		public TerminalNode AND() { return getToken(HoodieSqlBaseParser.AND, 0); }
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public MatchedClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_matchedClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMatchedClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMatchedClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMatchedClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MatchedClauseContext matchedClause() throws RecognitionException {
		MatchedClauseContext _localctx = new MatchedClauseContext(_ctx, getState());
		enterRule(_localctx, 102, RULE_matchedClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1170);
			match(WHEN);
			setState(1171);
			match(MATCHED);
			setState(1174);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==AND) {
				{
				setState(1172);
				match(AND);
				setState(1173);
				((MatchedClauseContext)_localctx).matchedCond = booleanExpression(0);
				}
			}

			setState(1176);
			match(THEN);
			setState(1177);
			matchedAction();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NotMatchedClauseContext extends ParserRuleContext {
		public BooleanExpressionContext notMatchedCond;
		public TerminalNode WHEN() { return getToken(HoodieSqlBaseParser.WHEN, 0); }
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode MATCHED() { return getToken(HoodieSqlBaseParser.MATCHED, 0); }
		public TerminalNode THEN() { return getToken(HoodieSqlBaseParser.THEN, 0); }
		public NotMatchedActionContext notMatchedAction() {
			return getRuleContext(NotMatchedActionContext.class,0);
		}
		public TerminalNode AND() { return getToken(HoodieSqlBaseParser.AND, 0); }
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public NotMatchedClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_notMatchedClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNotMatchedClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNotMatchedClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNotMatchedClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NotMatchedClauseContext notMatchedClause() throws RecognitionException {
		NotMatchedClauseContext _localctx = new NotMatchedClauseContext(_ctx, getState());
		enterRule(_localctx, 104, RULE_notMatchedClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1179);
			match(WHEN);
			setState(1180);
			match(NOT);
			setState(1181);
			match(MATCHED);
			setState(1184);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==AND) {
				{
				setState(1182);
				match(AND);
				setState(1183);
				((NotMatchedClauseContext)_localctx).notMatchedCond = booleanExpression(0);
				}
			}

			setState(1186);
			match(THEN);
			setState(1187);
			notMatchedAction();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MatchedActionContext extends ParserRuleContext {
		public TerminalNode DELETE() { return getToken(HoodieSqlBaseParser.DELETE, 0); }
		public TerminalNode UPDATE() { return getToken(HoodieSqlBaseParser.UPDATE, 0); }
		public TerminalNode SET() { return getToken(HoodieSqlBaseParser.SET, 0); }
		public TerminalNode ASTERISK() { return getToken(HoodieSqlBaseParser.ASTERISK, 0); }
		public AssignmentListContext assignmentList() {
			return getRuleContext(AssignmentListContext.class,0);
		}
		public MatchedActionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_matchedAction; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMatchedAction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMatchedAction(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMatchedAction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MatchedActionContext matchedAction() throws RecognitionException {
		MatchedActionContext _localctx = new MatchedActionContext(_ctx, getState());
		enterRule(_localctx, 106, RULE_matchedAction);
		try {
			setState(1196);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1189);
				match(DELETE);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1190);
				match(UPDATE);
				setState(1191);
				match(SET);
				setState(1192);
				match(ASTERISK);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1193);
				match(UPDATE);
				setState(1194);
				match(SET);
				setState(1195);
				assignmentList();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NotMatchedActionContext extends ParserRuleContext {
		public MultipartIdentifierListContext columns;
		public TerminalNode INSERT() { return getToken(HoodieSqlBaseParser.INSERT, 0); }
		public TerminalNode ASTERISK() { return getToken(HoodieSqlBaseParser.ASTERISK, 0); }
		public List LEFT_PAREN() { return getTokens(HoodieSqlBaseParser.LEFT_PAREN); }
		public TerminalNode LEFT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.LEFT_PAREN, i);
		}
		public List RIGHT_PAREN() { return getTokens(HoodieSqlBaseParser.RIGHT_PAREN); }
		public TerminalNode RIGHT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.RIGHT_PAREN, i);
		}
		public TerminalNode VALUES() { return getToken(HoodieSqlBaseParser.VALUES, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public MultipartIdentifierListContext multipartIdentifierList() {
			return getRuleContext(MultipartIdentifierListContext.class,0);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public NotMatchedActionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_notMatchedAction; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNotMatchedAction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNotMatchedAction(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNotMatchedAction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NotMatchedActionContext notMatchedAction() throws RecognitionException {
		NotMatchedActionContext _localctx = new NotMatchedActionContext(_ctx, getState());
		enterRule(_localctx, 108, RULE_notMatchedAction);
		int _la;
		try {
			setState(1216);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1198);
				match(INSERT);
				setState(1199);
				match(ASTERISK);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1200);
				match(INSERT);
				setState(1201);
				match(LEFT_PAREN);
				setState(1202);
				((NotMatchedActionContext)_localctx).columns = multipartIdentifierList();
				setState(1203);
				match(RIGHT_PAREN);
				setState(1204);
				match(VALUES);
				setState(1205);
				match(LEFT_PAREN);
				setState(1206);
				expression();
				setState(1211);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1207);
					match(COMMA);
					setState(1208);
					expression();
					}
					}
					setState(1213);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1214);
				match(RIGHT_PAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AssignmentListContext extends ParserRuleContext {
		public List assignment() {
			return getRuleContexts(AssignmentContext.class);
		}
		public AssignmentContext assignment(int i) {
			return getRuleContext(AssignmentContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public AssignmentListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignmentList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterAssignmentList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitAssignmentList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitAssignmentList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AssignmentListContext assignmentList() throws RecognitionException {
		AssignmentListContext _localctx = new AssignmentListContext(_ctx, getState());
		enterRule(_localctx, 110, RULE_assignmentList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1218);
			assignment();
			setState(1223);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1219);
				match(COMMA);
				setState(1220);
				assignment();
				}
				}
				setState(1225);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AssignmentContext extends ParserRuleContext {
		public MultipartIdentifierContext key;
		public ExpressionContext value;
		public TerminalNode EQ() { return getToken(HoodieSqlBaseParser.EQ, 0); }
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public AssignmentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignment; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterAssignment(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitAssignment(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitAssignment(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AssignmentContext assignment() throws RecognitionException {
		AssignmentContext _localctx = new AssignmentContext(_ctx, getState());
		enterRule(_localctx, 112, RULE_assignment);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1226);
			((AssignmentContext)_localctx).key = multipartIdentifier();
			setState(1227);
			match(EQ);
			setState(1228);
			((AssignmentContext)_localctx).value = expression();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WhereClauseContext extends ParserRuleContext {
		public TerminalNode WHERE() { return getToken(HoodieSqlBaseParser.WHERE, 0); }
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public WhereClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whereClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterWhereClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitWhereClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitWhereClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhereClauseContext whereClause() throws RecognitionException {
		WhereClauseContext _localctx = new WhereClauseContext(_ctx, getState());
		enterRule(_localctx, 114, RULE_whereClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1230);
			match(WHERE);
			setState(1231);
			booleanExpression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class HavingClauseContext extends ParserRuleContext {
		public TerminalNode HAVING() { return getToken(HoodieSqlBaseParser.HAVING, 0); }
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public HavingClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_havingClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterHavingClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitHavingClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitHavingClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HavingClauseContext havingClause() throws RecognitionException {
		HavingClauseContext _localctx = new HavingClauseContext(_ctx, getState());
		enterRule(_localctx, 116, RULE_havingClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1233);
			match(HAVING);
			setState(1234);
			booleanExpression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class HintContext extends ParserRuleContext {
		public HintStatementContext hintStatement;
		public List hintStatements = new ArrayList();
		public List hintStatement() {
			return getRuleContexts(HintStatementContext.class);
		}
		public HintStatementContext hintStatement(int i) {
			return getRuleContext(HintStatementContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public HintContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_hint; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterHint(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitHint(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitHint(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HintContext hint() throws RecognitionException {
		HintContext _localctx = new HintContext(_ctx, getState());
		enterRule(_localctx, 118, RULE_hint);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1236);
			match(T__0);
			setState(1237);
			((HintContext)_localctx).hintStatement = hintStatement();
			((HintContext)_localctx).hintStatements.add(((HintContext)_localctx).hintStatement);
			setState(1244);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,134,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1239);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) {
					case 1:
						{
						setState(1238);
						match(COMMA);
						}
						break;
					}
					setState(1241);
					((HintContext)_localctx).hintStatement = hintStatement();
					((HintContext)_localctx).hintStatements.add(((HintContext)_localctx).hintStatement);
					}
					} 
				}
				setState(1246);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,134,_ctx);
			}
			setState(1247);
			match(T__1);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class HintStatementContext extends ParserRuleContext {
		public IdentifierContext hintName;
		public PrimaryExpressionContext primaryExpression;
		public List parameters = new ArrayList();
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List primaryExpression() {
			return getRuleContexts(PrimaryExpressionContext.class);
		}
		public PrimaryExpressionContext primaryExpression(int i) {
			return getRuleContext(PrimaryExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public HintStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_hintStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterHintStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitHintStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitHintStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HintStatementContext hintStatement() throws RecognitionException {
		HintStatementContext _localctx = new HintStatementContext(_ctx, getState());
		enterRule(_localctx, 120, RULE_hintStatement);
		int _la;
		try {
			setState(1262);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,136,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1249);
				((HintStatementContext)_localctx).hintName = identifier();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1250);
				((HintStatementContext)_localctx).hintName = identifier();
				setState(1251);
				match(LEFT_PAREN);
				setState(1252);
				((HintStatementContext)_localctx).primaryExpression = primaryExpression(0);
				((HintStatementContext)_localctx).parameters.add(((HintStatementContext)_localctx).primaryExpression);
				setState(1257);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1253);
					match(COMMA);
					setState(1254);
					((HintStatementContext)_localctx).primaryExpression = primaryExpression(0);
					((HintStatementContext)_localctx).parameters.add(((HintStatementContext)_localctx).primaryExpression);
					}
					}
					setState(1259);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1260);
				match(RIGHT_PAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FromClauseContext extends ParserRuleContext {
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public List relation() {
			return getRuleContexts(RelationContext.class);
		}
		public RelationContext relation(int i) {
			return getRuleContext(RelationContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public List lateralView() {
			return getRuleContexts(LateralViewContext.class);
		}
		public LateralViewContext lateralView(int i) {
			return getRuleContext(LateralViewContext.class,i);
		}
		public PivotClauseContext pivotClause() {
			return getRuleContext(PivotClauseContext.class,0);
		}
		public FromClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fromClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFromClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFromClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFromClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FromClauseContext fromClause() throws RecognitionException {
		FromClauseContext _localctx = new FromClauseContext(_ctx, getState());
		enterRule(_localctx, 122, RULE_fromClause);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1264);
			match(FROM);
			setState(1265);
			relation();
			setState(1270);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,137,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1266);
					match(COMMA);
					setState(1267);
					relation();
					}
					} 
				}
				setState(1272);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,137,_ctx);
			}
			setState(1276);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,138,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1273);
					lateralView();
					}
					} 
				}
				setState(1278);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,138,_ctx);
			}
			setState(1280);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,139,_ctx) ) {
			case 1:
				{
				setState(1279);
				pivotClause();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TemporalClauseContext extends ParserRuleContext {
		public ValueExpressionContext timestamp;
		public Token version;
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public TerminalNode OF() { return getToken(HoodieSqlBaseParser.OF, 0); }
		public TerminalNode SYSTEM_TIME() { return getToken(HoodieSqlBaseParser.SYSTEM_TIME, 0); }
		public TerminalNode TIMESTAMP() { return getToken(HoodieSqlBaseParser.TIMESTAMP, 0); }
		public ValueExpressionContext valueExpression() {
			return getRuleContext(ValueExpressionContext.class,0);
		}
		public TerminalNode FOR() { return getToken(HoodieSqlBaseParser.FOR, 0); }
		public TerminalNode SYSTEM_VERSION() { return getToken(HoodieSqlBaseParser.SYSTEM_VERSION, 0); }
		public TerminalNode VERSION() { return getToken(HoodieSqlBaseParser.VERSION, 0); }
		public TerminalNode INTEGER_VALUE() { return getToken(HoodieSqlBaseParser.INTEGER_VALUE, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TemporalClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_temporalClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTemporalClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTemporalClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTemporalClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TemporalClauseContext temporalClause() throws RecognitionException {
		TemporalClauseContext _localctx = new TemporalClauseContext(_ctx, getState());
		enterRule(_localctx, 124, RULE_temporalClause);
		int _la;
		try {
			setState(1296);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,142,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1283);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FOR) {
					{
					setState(1282);
					match(FOR);
					}
				}

				setState(1285);
				_la = _input.LA(1);
				if ( !(_la==SYSTEM_TIME || _la==TIMESTAMP) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1286);
				match(AS);
				setState(1287);
				match(OF);
				setState(1288);
				((TemporalClauseContext)_localctx).timestamp = valueExpression(0);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1290);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FOR) {
					{
					setState(1289);
					match(FOR);
					}
				}

				setState(1292);
				_la = _input.LA(1);
				if ( !(_la==SYSTEM_VERSION || _la==VERSION) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1293);
				match(AS);
				setState(1294);
				match(OF);
				setState(1295);
				((TemporalClauseContext)_localctx).version = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==STRING || _la==INTEGER_VALUE) ) {
					((TemporalClauseContext)_localctx).version = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AggregationClauseContext extends ParserRuleContext {
		public GroupByClauseContext groupByClause;
		public List groupingExpressionsWithGroupingAnalytics = new ArrayList();
		public ExpressionContext expression;
		public List groupingExpressions = new ArrayList();
		public Token kind;
		public TerminalNode GROUP() { return getToken(HoodieSqlBaseParser.GROUP, 0); }
		public TerminalNode BY() { return getToken(HoodieSqlBaseParser.BY, 0); }
		public List groupByClause() {
			return getRuleContexts(GroupByClauseContext.class);
		}
		public GroupByClauseContext groupByClause(int i) {
			return getRuleContext(GroupByClauseContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode WITH() { return getToken(HoodieSqlBaseParser.WITH, 0); }
		public TerminalNode SETS() { return getToken(HoodieSqlBaseParser.SETS, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List groupingSet() {
			return getRuleContexts(GroupingSetContext.class);
		}
		public GroupingSetContext groupingSet(int i) {
			return getRuleContext(GroupingSetContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode ROLLUP() { return getToken(HoodieSqlBaseParser.ROLLUP, 0); }
		public TerminalNode CUBE() { return getToken(HoodieSqlBaseParser.CUBE, 0); }
		public TerminalNode GROUPING() { return getToken(HoodieSqlBaseParser.GROUPING, 0); }
		public AggregationClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_aggregationClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterAggregationClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitAggregationClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitAggregationClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AggregationClauseContext aggregationClause() throws RecognitionException {
		AggregationClauseContext _localctx = new AggregationClauseContext(_ctx, getState());
		enterRule(_localctx, 126, RULE_aggregationClause);
		int _la;
		try {
			int _alt;
			setState(1337);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,147,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1298);
				match(GROUP);
				setState(1299);
				match(BY);
				setState(1300);
				((AggregationClauseContext)_localctx).groupByClause = groupByClause();
				((AggregationClauseContext)_localctx).groupingExpressionsWithGroupingAnalytics.add(((AggregationClauseContext)_localctx).groupByClause);
				setState(1305);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,143,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(1301);
						match(COMMA);
						setState(1302);
						((AggregationClauseContext)_localctx).groupByClause = groupByClause();
						((AggregationClauseContext)_localctx).groupingExpressionsWithGroupingAnalytics.add(((AggregationClauseContext)_localctx).groupByClause);
						}
						} 
					}
					setState(1307);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,143,_ctx);
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1308);
				match(GROUP);
				setState(1309);
				match(BY);
				setState(1310);
				((AggregationClauseContext)_localctx).expression = expression();
				((AggregationClauseContext)_localctx).groupingExpressions.add(((AggregationClauseContext)_localctx).expression);
				setState(1315);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,144,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(1311);
						match(COMMA);
						setState(1312);
						((AggregationClauseContext)_localctx).expression = expression();
						((AggregationClauseContext)_localctx).groupingExpressions.add(((AggregationClauseContext)_localctx).expression);
						}
						} 
					}
					setState(1317);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,144,_ctx);
				}
				setState(1335);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,146,_ctx) ) {
				case 1:
					{
					setState(1318);
					match(WITH);
					setState(1319);
					((AggregationClauseContext)_localctx).kind = match(ROLLUP);
					}
					break;
				case 2:
					{
					setState(1320);
					match(WITH);
					setState(1321);
					((AggregationClauseContext)_localctx).kind = match(CUBE);
					}
					break;
				case 3:
					{
					setState(1322);
					((AggregationClauseContext)_localctx).kind = match(GROUPING);
					setState(1323);
					match(SETS);
					setState(1324);
					match(LEFT_PAREN);
					setState(1325);
					groupingSet();
					setState(1330);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(1326);
						match(COMMA);
						setState(1327);
						groupingSet();
						}
						}
						setState(1332);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					setState(1333);
					match(RIGHT_PAREN);
					}
					break;
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class GroupByClauseContext extends ParserRuleContext {
		public GroupingAnalyticsContext groupingAnalytics() {
			return getRuleContext(GroupingAnalyticsContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public GroupByClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_groupByClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterGroupByClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitGroupByClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitGroupByClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GroupByClauseContext groupByClause() throws RecognitionException {
		GroupByClauseContext _localctx = new GroupByClauseContext(_ctx, getState());
		enterRule(_localctx, 128, RULE_groupByClause);
		try {
			setState(1341);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1339);
				groupingAnalytics();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1340);
				expression();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class GroupingAnalyticsContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List groupingSet() {
			return getRuleContexts(GroupingSetContext.class);
		}
		public GroupingSetContext groupingSet(int i) {
			return getRuleContext(GroupingSetContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode ROLLUP() { return getToken(HoodieSqlBaseParser.ROLLUP, 0); }
		public TerminalNode CUBE() { return getToken(HoodieSqlBaseParser.CUBE, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public TerminalNode GROUPING() { return getToken(HoodieSqlBaseParser.GROUPING, 0); }
		public TerminalNode SETS() { return getToken(HoodieSqlBaseParser.SETS, 0); }
		public List groupingElement() {
			return getRuleContexts(GroupingElementContext.class);
		}
		public GroupingElementContext groupingElement(int i) {
			return getRuleContext(GroupingElementContext.class,i);
		}
		public GroupingAnalyticsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_groupingAnalytics; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterGroupingAnalytics(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitGroupingAnalytics(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitGroupingAnalytics(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GroupingAnalyticsContext groupingAnalytics() throws RecognitionException {
		GroupingAnalyticsContext _localctx = new GroupingAnalyticsContext(_ctx, getState());
		enterRule(_localctx, 130, RULE_groupingAnalytics);
		int _la;
		try {
			setState(1368);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case CUBE:
			case ROLLUP:
				enterOuterAlt(_localctx, 1);
				{
				setState(1343);
				_la = _input.LA(1);
				if ( !(_la==CUBE || _la==ROLLUP) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1344);
				match(LEFT_PAREN);
				setState(1345);
				groupingSet();
				setState(1350);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1346);
					match(COMMA);
					setState(1347);
					groupingSet();
					}
					}
					setState(1352);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1353);
				match(RIGHT_PAREN);
				}
				break;
			case GROUPING:
				enterOuterAlt(_localctx, 2);
				{
				setState(1355);
				match(GROUPING);
				setState(1356);
				match(SETS);
				setState(1357);
				match(LEFT_PAREN);
				setState(1358);
				groupingElement();
				setState(1363);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1359);
					match(COMMA);
					setState(1360);
					groupingElement();
					}
					}
					setState(1365);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1366);
				match(RIGHT_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class GroupingElementContext extends ParserRuleContext {
		public GroupingAnalyticsContext groupingAnalytics() {
			return getRuleContext(GroupingAnalyticsContext.class,0);
		}
		public GroupingSetContext groupingSet() {
			return getRuleContext(GroupingSetContext.class,0);
		}
		public GroupingElementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_groupingElement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterGroupingElement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitGroupingElement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitGroupingElement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GroupingElementContext groupingElement() throws RecognitionException {
		GroupingElementContext _localctx = new GroupingElementContext(_ctx, getState());
		enterRule(_localctx, 132, RULE_groupingElement);
		try {
			setState(1372);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,152,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1370);
				groupingAnalytics();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1371);
				groupingSet();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class GroupingSetContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public GroupingSetContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_groupingSet; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterGroupingSet(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitGroupingSet(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitGroupingSet(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GroupingSetContext groupingSet() throws RecognitionException {
		GroupingSetContext _localctx = new GroupingSetContext(_ctx, getState());
		enterRule(_localctx, 134, RULE_groupingSet);
		int _la;
		try {
			setState(1387);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1374);
				match(LEFT_PAREN);
				setState(1383);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,154,_ctx) ) {
				case 1:
					{
					setState(1375);
					expression();
					setState(1380);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(1376);
						match(COMMA);
						setState(1377);
						expression();
						}
						}
						setState(1382);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
					break;
				}
				setState(1385);
				match(RIGHT_PAREN);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1386);
				expression();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PivotClauseContext extends ParserRuleContext {
		public NamedExpressionSeqContext aggregates;
		public PivotValueContext pivotValue;
		public List pivotValues = new ArrayList();
		public TerminalNode PIVOT() { return getToken(HoodieSqlBaseParser.PIVOT, 0); }
		public List LEFT_PAREN() { return getTokens(HoodieSqlBaseParser.LEFT_PAREN); }
		public TerminalNode LEFT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.LEFT_PAREN, i);
		}
		public TerminalNode FOR() { return getToken(HoodieSqlBaseParser.FOR, 0); }
		public PivotColumnContext pivotColumn() {
			return getRuleContext(PivotColumnContext.class,0);
		}
		public TerminalNode IN() { return getToken(HoodieSqlBaseParser.IN, 0); }
		public List RIGHT_PAREN() { return getTokens(HoodieSqlBaseParser.RIGHT_PAREN); }
		public TerminalNode RIGHT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.RIGHT_PAREN, i);
		}
		public NamedExpressionSeqContext namedExpressionSeq() {
			return getRuleContext(NamedExpressionSeqContext.class,0);
		}
		public List pivotValue() {
			return getRuleContexts(PivotValueContext.class);
		}
		public PivotValueContext pivotValue(int i) {
			return getRuleContext(PivotValueContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public PivotClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_pivotClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPivotClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPivotClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPivotClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PivotClauseContext pivotClause() throws RecognitionException {
		PivotClauseContext _localctx = new PivotClauseContext(_ctx, getState());
		enterRule(_localctx, 136, RULE_pivotClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1389);
			match(PIVOT);
			setState(1390);
			match(LEFT_PAREN);
			setState(1391);
			((PivotClauseContext)_localctx).aggregates = namedExpressionSeq();
			setState(1392);
			match(FOR);
			setState(1393);
			pivotColumn();
			setState(1394);
			match(IN);
			setState(1395);
			match(LEFT_PAREN);
			setState(1396);
			((PivotClauseContext)_localctx).pivotValue = pivotValue();
			((PivotClauseContext)_localctx).pivotValues.add(((PivotClauseContext)_localctx).pivotValue);
			setState(1401);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1397);
				match(COMMA);
				setState(1398);
				((PivotClauseContext)_localctx).pivotValue = pivotValue();
				((PivotClauseContext)_localctx).pivotValues.add(((PivotClauseContext)_localctx).pivotValue);
				}
				}
				setState(1403);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1404);
			match(RIGHT_PAREN);
			setState(1405);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PivotColumnContext extends ParserRuleContext {
		public IdentifierContext identifier;
		public List identifiers = new ArrayList();
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public PivotColumnContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_pivotColumn; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPivotColumn(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPivotColumn(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPivotColumn(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PivotColumnContext pivotColumn() throws RecognitionException {
		PivotColumnContext _localctx = new PivotColumnContext(_ctx, getState());
		enterRule(_localctx, 138, RULE_pivotColumn);
		int _la;
		try {
			setState(1419);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1407);
				((PivotColumnContext)_localctx).identifier = identifier();
				((PivotColumnContext)_localctx).identifiers.add(((PivotColumnContext)_localctx).identifier);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1408);
				match(LEFT_PAREN);
				setState(1409);
				((PivotColumnContext)_localctx).identifier = identifier();
				((PivotColumnContext)_localctx).identifiers.add(((PivotColumnContext)_localctx).identifier);
				setState(1414);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1410);
					match(COMMA);
					setState(1411);
					((PivotColumnContext)_localctx).identifier = identifier();
					((PivotColumnContext)_localctx).identifiers.add(((PivotColumnContext)_localctx).identifier);
					}
					}
					setState(1416);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1417);
				match(RIGHT_PAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PivotValueContext extends ParserRuleContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public PivotValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_pivotValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPivotValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPivotValue(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPivotValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PivotValueContext pivotValue() throws RecognitionException {
		PivotValueContext _localctx = new PivotValueContext(_ctx, getState());
		enterRule(_localctx, 140, RULE_pivotValue);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1421);
			expression();
			setState(1426);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,160,_ctx) ) {
			case 1:
				{
				setState(1423);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,159,_ctx) ) {
				case 1:
					{
					setState(1422);
					match(AS);
					}
					break;
				}
				setState(1425);
				identifier();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class LateralViewContext extends ParserRuleContext {
		public IdentifierContext tblName;
		public IdentifierContext identifier;
		public List colName = new ArrayList();
		public TerminalNode LATERAL() { return getToken(HoodieSqlBaseParser.LATERAL, 0); }
		public TerminalNode VIEW() { return getToken(HoodieSqlBaseParser.VIEW, 0); }
		public QualifiedNameContext qualifiedName() {
			return getRuleContext(QualifiedNameContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public TerminalNode OUTER() { return getToken(HoodieSqlBaseParser.OUTER, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public LateralViewContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_lateralView; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterLateralView(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitLateralView(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitLateralView(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LateralViewContext lateralView() throws RecognitionException {
		LateralViewContext _localctx = new LateralViewContext(_ctx, getState());
		enterRule(_localctx, 142, RULE_lateralView);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1428);
			match(LATERAL);
			setState(1429);
			match(VIEW);
			setState(1431);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,161,_ctx) ) {
			case 1:
				{
				setState(1430);
				match(OUTER);
				}
				break;
			}
			setState(1433);
			qualifiedName();
			setState(1434);
			match(LEFT_PAREN);
			setState(1443);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,163,_ctx) ) {
			case 1:
				{
				setState(1435);
				expression();
				setState(1440);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1436);
					match(COMMA);
					setState(1437);
					expression();
					}
					}
					setState(1442);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			}
			setState(1445);
			match(RIGHT_PAREN);
			setState(1446);
			((LateralViewContext)_localctx).tblName = identifier();
			setState(1458);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,166,_ctx) ) {
			case 1:
				{
				setState(1448);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,164,_ctx) ) {
				case 1:
					{
					setState(1447);
					match(AS);
					}
					break;
				}
				setState(1450);
				((LateralViewContext)_localctx).identifier = identifier();
				((LateralViewContext)_localctx).colName.add(((LateralViewContext)_localctx).identifier);
				setState(1455);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,165,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(1451);
						match(COMMA);
						setState(1452);
						((LateralViewContext)_localctx).identifier = identifier();
						((LateralViewContext)_localctx).colName.add(((LateralViewContext)_localctx).identifier);
						}
						} 
					}
					setState(1457);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,165,_ctx);
				}
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SetQuantifierContext extends ParserRuleContext {
		public TerminalNode DISTINCT() { return getToken(HoodieSqlBaseParser.DISTINCT, 0); }
		public TerminalNode ALL() { return getToken(HoodieSqlBaseParser.ALL, 0); }
		public SetQuantifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_setQuantifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSetQuantifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSetQuantifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSetQuantifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SetQuantifierContext setQuantifier() throws RecognitionException {
		SetQuantifierContext _localctx = new SetQuantifierContext(_ctx, getState());
		enterRule(_localctx, 144, RULE_setQuantifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1460);
			_la = _input.LA(1);
			if ( !(_la==ALL || _la==DISTINCT) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class RelationContext extends ParserRuleContext {
		public RelationPrimaryContext relationPrimary() {
			return getRuleContext(RelationPrimaryContext.class,0);
		}
		public TerminalNode LATERAL() { return getToken(HoodieSqlBaseParser.LATERAL, 0); }
		public List joinRelation() {
			return getRuleContexts(JoinRelationContext.class);
		}
		public JoinRelationContext joinRelation(int i) {
			return getRuleContext(JoinRelationContext.class,i);
		}
		public RelationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_relation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterRelation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitRelation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitRelation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RelationContext relation() throws RecognitionException {
		RelationContext _localctx = new RelationContext(_ctx, getState());
		enterRule(_localctx, 146, RULE_relation);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1463);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,167,_ctx) ) {
			case 1:
				{
				setState(1462);
				match(LATERAL);
				}
				break;
			}
			setState(1465);
			relationPrimary();
			setState(1469);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,168,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1466);
					joinRelation();
					}
					} 
				}
				setState(1471);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,168,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class JoinRelationContext extends ParserRuleContext {
		public RelationPrimaryContext right;
		public TerminalNode JOIN() { return getToken(HoodieSqlBaseParser.JOIN, 0); }
		public RelationPrimaryContext relationPrimary() {
			return getRuleContext(RelationPrimaryContext.class,0);
		}
		public JoinTypeContext joinType() {
			return getRuleContext(JoinTypeContext.class,0);
		}
		public TerminalNode LATERAL() { return getToken(HoodieSqlBaseParser.LATERAL, 0); }
		public JoinCriteriaContext joinCriteria() {
			return getRuleContext(JoinCriteriaContext.class,0);
		}
		public TerminalNode NATURAL() { return getToken(HoodieSqlBaseParser.NATURAL, 0); }
		public JoinRelationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_joinRelation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterJoinRelation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitJoinRelation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitJoinRelation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final JoinRelationContext joinRelation() throws RecognitionException {
		JoinRelationContext _localctx = new JoinRelationContext(_ctx, getState());
		enterRule(_localctx, 148, RULE_joinRelation);
		try {
			setState(1489);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case ANTI:
			case CROSS:
			case FULL:
			case INNER:
			case JOIN:
			case LEFT:
			case RIGHT:
			case SEMI:
				enterOuterAlt(_localctx, 1);
				{
				{
				setState(1472);
				joinType();
				}
				setState(1473);
				match(JOIN);
				setState(1475);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,169,_ctx) ) {
				case 1:
					{
					setState(1474);
					match(LATERAL);
					}
					break;
				}
				setState(1477);
				((JoinRelationContext)_localctx).right = relationPrimary();
				setState(1479);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,170,_ctx) ) {
				case 1:
					{
					setState(1478);
					joinCriteria();
					}
					break;
				}
				}
				break;
			case NATURAL:
				enterOuterAlt(_localctx, 2);
				{
				setState(1481);
				match(NATURAL);
				setState(1482);
				joinType();
				setState(1483);
				match(JOIN);
				setState(1485);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,171,_ctx) ) {
				case 1:
					{
					setState(1484);
					match(LATERAL);
					}
					break;
				}
				setState(1487);
				((JoinRelationContext)_localctx).right = relationPrimary();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class JoinTypeContext extends ParserRuleContext {
		public TerminalNode INNER() { return getToken(HoodieSqlBaseParser.INNER, 0); }
		public TerminalNode CROSS() { return getToken(HoodieSqlBaseParser.CROSS, 0); }
		public TerminalNode LEFT() { return getToken(HoodieSqlBaseParser.LEFT, 0); }
		public TerminalNode OUTER() { return getToken(HoodieSqlBaseParser.OUTER, 0); }
		public TerminalNode SEMI() { return getToken(HoodieSqlBaseParser.SEMI, 0); }
		public TerminalNode RIGHT() { return getToken(HoodieSqlBaseParser.RIGHT, 0); }
		public TerminalNode FULL() { return getToken(HoodieSqlBaseParser.FULL, 0); }
		public TerminalNode ANTI() { return getToken(HoodieSqlBaseParser.ANTI, 0); }
		public JoinTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_joinType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterJoinType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitJoinType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitJoinType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final JoinTypeContext joinType() throws RecognitionException {
		JoinTypeContext _localctx = new JoinTypeContext(_ctx, getState());
		enterRule(_localctx, 150, RULE_joinType);
		int _la;
		try {
			setState(1515);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,179,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1492);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==INNER) {
					{
					setState(1491);
					match(INNER);
					}
				}

				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1494);
				match(CROSS);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1495);
				match(LEFT);
				setState(1497);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OUTER) {
					{
					setState(1496);
					match(OUTER);
					}
				}

				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1500);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LEFT) {
					{
					setState(1499);
					match(LEFT);
					}
				}

				setState(1502);
				match(SEMI);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1503);
				match(RIGHT);
				setState(1505);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OUTER) {
					{
					setState(1504);
					match(OUTER);
					}
				}

				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1507);
				match(FULL);
				setState(1509);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==OUTER) {
					{
					setState(1508);
					match(OUTER);
					}
				}

				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(1512);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LEFT) {
					{
					setState(1511);
					match(LEFT);
					}
				}

				setState(1514);
				match(ANTI);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class JoinCriteriaContext extends ParserRuleContext {
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public TerminalNode USING() { return getToken(HoodieSqlBaseParser.USING, 0); }
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public JoinCriteriaContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_joinCriteria; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterJoinCriteria(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitJoinCriteria(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitJoinCriteria(this);
			else return visitor.visitChildren(this);
		}
	}

	public final JoinCriteriaContext joinCriteria() throws RecognitionException {
		JoinCriteriaContext _localctx = new JoinCriteriaContext(_ctx, getState());
		enterRule(_localctx, 152, RULE_joinCriteria);
		try {
			setState(1521);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case ON:
				enterOuterAlt(_localctx, 1);
				{
				setState(1517);
				match(ON);
				setState(1518);
				booleanExpression(0);
				}
				break;
			case USING:
				enterOuterAlt(_localctx, 2);
				{
				setState(1519);
				match(USING);
				setState(1520);
				identifierList();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SampleContext extends ParserRuleContext {
		public TerminalNode TABLESAMPLE() { return getToken(HoodieSqlBaseParser.TABLESAMPLE, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public SampleMethodContext sampleMethod() {
			return getRuleContext(SampleMethodContext.class,0);
		}
		public SampleContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sample; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSample(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSample(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSample(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SampleContext sample() throws RecognitionException {
		SampleContext _localctx = new SampleContext(_ctx, getState());
		enterRule(_localctx, 154, RULE_sample);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1523);
			match(TABLESAMPLE);
			setState(1524);
			match(LEFT_PAREN);
			setState(1526);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,181,_ctx) ) {
			case 1:
				{
				setState(1525);
				sampleMethod();
				}
				break;
			}
			setState(1528);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SampleMethodContext extends ParserRuleContext {
		public SampleMethodContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sampleMethod; }
	 
		public SampleMethodContext() { }
		public void copyFrom(SampleMethodContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class SampleByRowsContext extends SampleMethodContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode ROWS() { return getToken(HoodieSqlBaseParser.ROWS, 0); }
		public SampleByRowsContext(SampleMethodContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSampleByRows(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSampleByRows(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSampleByRows(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SampleByPercentileContext extends SampleMethodContext {
		public Token negativeSign;
		public Token percentage;
		public TerminalNode PERCENTLIT() { return getToken(HoodieSqlBaseParser.PERCENTLIT, 0); }
		public TerminalNode INTEGER_VALUE() { return getToken(HoodieSqlBaseParser.INTEGER_VALUE, 0); }
		public TerminalNode DECIMAL_VALUE() { return getToken(HoodieSqlBaseParser.DECIMAL_VALUE, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public SampleByPercentileContext(SampleMethodContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSampleByPercentile(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSampleByPercentile(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSampleByPercentile(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SampleByBucketContext extends SampleMethodContext {
		public Token sampleType;
		public Token numerator;
		public Token denominator;
		public TerminalNode OUT() { return getToken(HoodieSqlBaseParser.OUT, 0); }
		public TerminalNode OF() { return getToken(HoodieSqlBaseParser.OF, 0); }
		public TerminalNode BUCKET() { return getToken(HoodieSqlBaseParser.BUCKET, 0); }
		public List INTEGER_VALUE() { return getTokens(HoodieSqlBaseParser.INTEGER_VALUE); }
		public TerminalNode INTEGER_VALUE(int i) {
			return getToken(HoodieSqlBaseParser.INTEGER_VALUE, i);
		}
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public QualifiedNameContext qualifiedName() {
			return getRuleContext(QualifiedNameContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public SampleByBucketContext(SampleMethodContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSampleByBucket(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSampleByBucket(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSampleByBucket(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SampleByBytesContext extends SampleMethodContext {
		public ExpressionContext bytes;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public SampleByBytesContext(SampleMethodContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSampleByBytes(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSampleByBytes(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSampleByBytes(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SampleMethodContext sampleMethod() throws RecognitionException {
		SampleMethodContext _localctx = new SampleMethodContext(_ctx, getState());
		enterRule(_localctx, 156, RULE_sampleMethod);
		int _la;
		try {
			setState(1554);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,185,_ctx) ) {
			case 1:
				_localctx = new SampleByPercentileContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1531);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(1530);
					((SampleByPercentileContext)_localctx).negativeSign = match(MINUS);
					}
				}

				setState(1533);
				((SampleByPercentileContext)_localctx).percentage = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==INTEGER_VALUE || _la==DECIMAL_VALUE) ) {
					((SampleByPercentileContext)_localctx).percentage = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1534);
				match(PERCENTLIT);
				}
				break;
			case 2:
				_localctx = new SampleByRowsContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1535);
				expression();
				setState(1536);
				match(ROWS);
				}
				break;
			case 3:
				_localctx = new SampleByBucketContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1538);
				((SampleByBucketContext)_localctx).sampleType = match(BUCKET);
				setState(1539);
				((SampleByBucketContext)_localctx).numerator = match(INTEGER_VALUE);
				setState(1540);
				match(OUT);
				setState(1541);
				match(OF);
				setState(1542);
				((SampleByBucketContext)_localctx).denominator = match(INTEGER_VALUE);
				setState(1551);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ON) {
					{
					setState(1543);
					match(ON);
					setState(1549);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,183,_ctx) ) {
					case 1:
						{
						setState(1544);
						identifier();
						}
						break;
					case 2:
						{
						setState(1545);
						qualifiedName();
						setState(1546);
						match(LEFT_PAREN);
						setState(1547);
						match(RIGHT_PAREN);
						}
						break;
					}
					}
				}

				}
				break;
			case 4:
				_localctx = new SampleByBytesContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(1553);
				((SampleByBytesContext)_localctx).bytes = expression();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IdentifierListContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public IdentifierSeqContext identifierSeq() {
			return getRuleContext(IdentifierSeqContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public IdentifierListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifierList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIdentifierList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIdentifierList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIdentifierList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierListContext identifierList() throws RecognitionException {
		IdentifierListContext _localctx = new IdentifierListContext(_ctx, getState());
		enterRule(_localctx, 158, RULE_identifierList);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1556);
			match(LEFT_PAREN);
			setState(1557);
			identifierSeq();
			setState(1558);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IdentifierSeqContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext errorCapturingIdentifier;
		public List ident = new ArrayList();
		public List errorCapturingIdentifier() {
			return getRuleContexts(ErrorCapturingIdentifierContext.class);
		}
		public ErrorCapturingIdentifierContext errorCapturingIdentifier(int i) {
			return getRuleContext(ErrorCapturingIdentifierContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public IdentifierSeqContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifierSeq; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIdentifierSeq(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIdentifierSeq(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIdentifierSeq(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierSeqContext identifierSeq() throws RecognitionException {
		IdentifierSeqContext _localctx = new IdentifierSeqContext(_ctx, getState());
		enterRule(_localctx, 160, RULE_identifierSeq);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1560);
			((IdentifierSeqContext)_localctx).errorCapturingIdentifier = errorCapturingIdentifier();
			((IdentifierSeqContext)_localctx).ident.add(((IdentifierSeqContext)_localctx).errorCapturingIdentifier);
			setState(1565);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,186,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1561);
					match(COMMA);
					setState(1562);
					((IdentifierSeqContext)_localctx).errorCapturingIdentifier = errorCapturingIdentifier();
					((IdentifierSeqContext)_localctx).ident.add(((IdentifierSeqContext)_localctx).errorCapturingIdentifier);
					}
					} 
				}
				setState(1567);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,186,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class OrderedIdentifierListContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List orderedIdentifier() {
			return getRuleContexts(OrderedIdentifierContext.class);
		}
		public OrderedIdentifierContext orderedIdentifier(int i) {
			return getRuleContext(OrderedIdentifierContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public OrderedIdentifierListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_orderedIdentifierList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterOrderedIdentifierList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitOrderedIdentifierList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitOrderedIdentifierList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OrderedIdentifierListContext orderedIdentifierList() throws RecognitionException {
		OrderedIdentifierListContext _localctx = new OrderedIdentifierListContext(_ctx, getState());
		enterRule(_localctx, 162, RULE_orderedIdentifierList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1568);
			match(LEFT_PAREN);
			setState(1569);
			orderedIdentifier();
			setState(1574);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1570);
				match(COMMA);
				setState(1571);
				orderedIdentifier();
				}
				}
				setState(1576);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1577);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class OrderedIdentifierContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext ident;
		public Token ordering;
		public ErrorCapturingIdentifierContext errorCapturingIdentifier() {
			return getRuleContext(ErrorCapturingIdentifierContext.class,0);
		}
		public TerminalNode ASC() { return getToken(HoodieSqlBaseParser.ASC, 0); }
		public TerminalNode DESC() { return getToken(HoodieSqlBaseParser.DESC, 0); }
		public OrderedIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_orderedIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterOrderedIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitOrderedIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitOrderedIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OrderedIdentifierContext orderedIdentifier() throws RecognitionException {
		OrderedIdentifierContext _localctx = new OrderedIdentifierContext(_ctx, getState());
		enterRule(_localctx, 164, RULE_orderedIdentifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1579);
			((OrderedIdentifierContext)_localctx).ident = errorCapturingIdentifier();
			setState(1581);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ASC || _la==DESC) {
				{
				setState(1580);
				((OrderedIdentifierContext)_localctx).ordering = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==ASC || _la==DESC) ) {
					((OrderedIdentifierContext)_localctx).ordering = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IdentifierCommentListContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List identifierComment() {
			return getRuleContexts(IdentifierCommentContext.class);
		}
		public IdentifierCommentContext identifierComment(int i) {
			return getRuleContext(IdentifierCommentContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public IdentifierCommentListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifierCommentList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIdentifierCommentList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIdentifierCommentList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIdentifierCommentList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierCommentListContext identifierCommentList() throws RecognitionException {
		IdentifierCommentListContext _localctx = new IdentifierCommentListContext(_ctx, getState());
		enterRule(_localctx, 166, RULE_identifierCommentList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1583);
			match(LEFT_PAREN);
			setState(1584);
			identifierComment();
			setState(1589);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1585);
				match(COMMA);
				setState(1586);
				identifierComment();
				}
				}
				setState(1591);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1592);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IdentifierCommentContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public CommentSpecContext commentSpec() {
			return getRuleContext(CommentSpecContext.class,0);
		}
		public IdentifierCommentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifierComment; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIdentifierComment(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIdentifierComment(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIdentifierComment(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierCommentContext identifierComment() throws RecognitionException {
		IdentifierCommentContext _localctx = new IdentifierCommentContext(_ctx, getState());
		enterRule(_localctx, 168, RULE_identifierComment);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1594);
			identifier();
			setState(1596);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==COMMENT) {
				{
				setState(1595);
				commentSpec();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class RelationPrimaryContext extends ParserRuleContext {
		public RelationPrimaryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_relationPrimary; }
	 
		public RelationPrimaryContext() { }
		public void copyFrom(RelationPrimaryContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class TableValuedFunctionContext extends RelationPrimaryContext {
		public FunctionTableContext functionTable() {
			return getRuleContext(FunctionTableContext.class,0);
		}
		public TableValuedFunctionContext(RelationPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTableValuedFunction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTableValuedFunction(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTableValuedFunction(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InlineTableDefault2Context extends RelationPrimaryContext {
		public InlineTableContext inlineTable() {
			return getRuleContext(InlineTableContext.class,0);
		}
		public InlineTableDefault2Context(RelationPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInlineTableDefault2(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInlineTableDefault2(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInlineTableDefault2(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class AliasedRelationContext extends RelationPrimaryContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public RelationContext relation() {
			return getRuleContext(RelationContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public SampleContext sample() {
			return getRuleContext(SampleContext.class,0);
		}
		public AliasedRelationContext(RelationPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterAliasedRelation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitAliasedRelation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitAliasedRelation(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class AliasedQueryContext extends RelationPrimaryContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public SampleContext sample() {
			return getRuleContext(SampleContext.class,0);
		}
		public AliasedQueryContext(RelationPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterAliasedQuery(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitAliasedQuery(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitAliasedQuery(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class TableNameContext extends RelationPrimaryContext {
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public TemporalClauseContext temporalClause() {
			return getRuleContext(TemporalClauseContext.class,0);
		}
		public SampleContext sample() {
			return getRuleContext(SampleContext.class,0);
		}
		public TableNameContext(RelationPrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTableName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTableName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTableName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RelationPrimaryContext relationPrimary() throws RecognitionException {
		RelationPrimaryContext _localctx = new RelationPrimaryContext(_ctx, getState());
		enterRule(_localctx, 170, RULE_relationPrimary);
		try {
			setState(1625);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,195,_ctx) ) {
			case 1:
				_localctx = new TableNameContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1598);
				multipartIdentifier();
				setState(1600);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,191,_ctx) ) {
				case 1:
					{
					setState(1599);
					temporalClause();
					}
					break;
				}
				setState(1603);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,192,_ctx) ) {
				case 1:
					{
					setState(1602);
					sample();
					}
					break;
				}
				setState(1605);
				tableAlias();
				}
				break;
			case 2:
				_localctx = new AliasedQueryContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1607);
				match(LEFT_PAREN);
				setState(1608);
				query();
				setState(1609);
				match(RIGHT_PAREN);
				setState(1611);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,193,_ctx) ) {
				case 1:
					{
					setState(1610);
					sample();
					}
					break;
				}
				setState(1613);
				tableAlias();
				}
				break;
			case 3:
				_localctx = new AliasedRelationContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1615);
				match(LEFT_PAREN);
				setState(1616);
				relation();
				setState(1617);
				match(RIGHT_PAREN);
				setState(1619);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,194,_ctx) ) {
				case 1:
					{
					setState(1618);
					sample();
					}
					break;
				}
				setState(1621);
				tableAlias();
				}
				break;
			case 4:
				_localctx = new InlineTableDefault2Context(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(1623);
				inlineTable();
				}
				break;
			case 5:
				_localctx = new TableValuedFunctionContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(1624);
				functionTable();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InlineTableContext extends ParserRuleContext {
		public TerminalNode VALUES() { return getToken(HoodieSqlBaseParser.VALUES, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public InlineTableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_inlineTable; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInlineTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInlineTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInlineTable(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InlineTableContext inlineTable() throws RecognitionException {
		InlineTableContext _localctx = new InlineTableContext(_ctx, getState());
		enterRule(_localctx, 172, RULE_inlineTable);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1627);
			match(VALUES);
			setState(1628);
			expression();
			setState(1633);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,196,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1629);
					match(COMMA);
					setState(1630);
					expression();
					}
					} 
				}
				setState(1635);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,196,_ctx);
			}
			setState(1636);
			tableAlias();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FunctionTableContext extends ParserRuleContext {
		public FunctionNameContext funcName;
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TableAliasContext tableAlias() {
			return getRuleContext(TableAliasContext.class,0);
		}
		public FunctionNameContext functionName() {
			return getRuleContext(FunctionNameContext.class,0);
		}
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public FunctionTableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_functionTable; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFunctionTable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFunctionTable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFunctionTable(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FunctionTableContext functionTable() throws RecognitionException {
		FunctionTableContext _localctx = new FunctionTableContext(_ctx, getState());
		enterRule(_localctx, 174, RULE_functionTable);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1638);
			((FunctionTableContext)_localctx).funcName = functionName();
			setState(1639);
			match(LEFT_PAREN);
			setState(1648);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,198,_ctx) ) {
			case 1:
				{
				setState(1640);
				expression();
				setState(1645);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1641);
					match(COMMA);
					setState(1642);
					expression();
					}
					}
					setState(1647);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			}
			setState(1650);
			match(RIGHT_PAREN);
			setState(1651);
			tableAlias();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TableAliasContext extends ParserRuleContext {
		public StrictIdentifierContext strictIdentifier() {
			return getRuleContext(StrictIdentifierContext.class,0);
		}
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public TableAliasContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableAlias; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTableAlias(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTableAlias(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTableAlias(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableAliasContext tableAlias() throws RecognitionException {
		TableAliasContext _localctx = new TableAliasContext(_ctx, getState());
		enterRule(_localctx, 176, RULE_tableAlias);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1660);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,201,_ctx) ) {
			case 1:
				{
				setState(1654);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,199,_ctx) ) {
				case 1:
					{
					setState(1653);
					match(AS);
					}
					break;
				}
				setState(1656);
				strictIdentifier();
				setState(1658);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,200,_ctx) ) {
				case 1:
					{
					setState(1657);
					identifierList();
					}
					break;
				}
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class RowFormatContext extends ParserRuleContext {
		public RowFormatContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowFormat; }
	 
		public RowFormatContext() { }
		public void copyFrom(RowFormatContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class RowFormatSerdeContext extends RowFormatContext {
		public Token name;
		public TablePropertyListContext props;
		public TerminalNode ROW() { return getToken(HoodieSqlBaseParser.ROW, 0); }
		public TerminalNode FORMAT() { return getToken(HoodieSqlBaseParser.FORMAT, 0); }
		public TerminalNode SERDE() { return getToken(HoodieSqlBaseParser.SERDE, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TerminalNode WITH() { return getToken(HoodieSqlBaseParser.WITH, 0); }
		public TerminalNode SERDEPROPERTIES() { return getToken(HoodieSqlBaseParser.SERDEPROPERTIES, 0); }
		public TablePropertyListContext tablePropertyList() {
			return getRuleContext(TablePropertyListContext.class,0);
		}
		public RowFormatSerdeContext(RowFormatContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterRowFormatSerde(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitRowFormatSerde(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitRowFormatSerde(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class RowFormatDelimitedContext extends RowFormatContext {
		public Token fieldsTerminatedBy;
		public Token escapedBy;
		public Token collectionItemsTerminatedBy;
		public Token keysTerminatedBy;
		public Token linesSeparatedBy;
		public Token nullDefinedAs;
		public TerminalNode ROW() { return getToken(HoodieSqlBaseParser.ROW, 0); }
		public TerminalNode FORMAT() { return getToken(HoodieSqlBaseParser.FORMAT, 0); }
		public TerminalNode DELIMITED() { return getToken(HoodieSqlBaseParser.DELIMITED, 0); }
		public TerminalNode FIELDS() { return getToken(HoodieSqlBaseParser.FIELDS, 0); }
		public List TERMINATED() { return getTokens(HoodieSqlBaseParser.TERMINATED); }
		public TerminalNode TERMINATED(int i) {
			return getToken(HoodieSqlBaseParser.TERMINATED, i);
		}
		public List BY() { return getTokens(HoodieSqlBaseParser.BY); }
		public TerminalNode BY(int i) {
			return getToken(HoodieSqlBaseParser.BY, i);
		}
		public TerminalNode COLLECTION() { return getToken(HoodieSqlBaseParser.COLLECTION, 0); }
		public TerminalNode ITEMS() { return getToken(HoodieSqlBaseParser.ITEMS, 0); }
		public TerminalNode MAP() { return getToken(HoodieSqlBaseParser.MAP, 0); }
		public TerminalNode KEYS() { return getToken(HoodieSqlBaseParser.KEYS, 0); }
		public TerminalNode LINES() { return getToken(HoodieSqlBaseParser.LINES, 0); }
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public TerminalNode DEFINED() { return getToken(HoodieSqlBaseParser.DEFINED, 0); }
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public List STRING() { return getTokens(HoodieSqlBaseParser.STRING); }
		public TerminalNode STRING(int i) {
			return getToken(HoodieSqlBaseParser.STRING, i);
		}
		public TerminalNode ESCAPED() { return getToken(HoodieSqlBaseParser.ESCAPED, 0); }
		public RowFormatDelimitedContext(RowFormatContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterRowFormatDelimited(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitRowFormatDelimited(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitRowFormatDelimited(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RowFormatContext rowFormat() throws RecognitionException {
		RowFormatContext _localctx = new RowFormatContext(_ctx, getState());
		enterRule(_localctx, 178, RULE_rowFormat);
		try {
			setState(1711);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,209,_ctx) ) {
			case 1:
				_localctx = new RowFormatSerdeContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1662);
				match(ROW);
				setState(1663);
				match(FORMAT);
				setState(1664);
				match(SERDE);
				setState(1665);
				((RowFormatSerdeContext)_localctx).name = match(STRING);
				setState(1669);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,202,_ctx) ) {
				case 1:
					{
					setState(1666);
					match(WITH);
					setState(1667);
					match(SERDEPROPERTIES);
					setState(1668);
					((RowFormatSerdeContext)_localctx).props = tablePropertyList();
					}
					break;
				}
				}
				break;
			case 2:
				_localctx = new RowFormatDelimitedContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1671);
				match(ROW);
				setState(1672);
				match(FORMAT);
				setState(1673);
				match(DELIMITED);
				setState(1683);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,204,_ctx) ) {
				case 1:
					{
					setState(1674);
					match(FIELDS);
					setState(1675);
					match(TERMINATED);
					setState(1676);
					match(BY);
					setState(1677);
					((RowFormatDelimitedContext)_localctx).fieldsTerminatedBy = match(STRING);
					setState(1681);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,203,_ctx) ) {
					case 1:
						{
						setState(1678);
						match(ESCAPED);
						setState(1679);
						match(BY);
						setState(1680);
						((RowFormatDelimitedContext)_localctx).escapedBy = match(STRING);
						}
						break;
					}
					}
					break;
				}
				setState(1690);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,205,_ctx) ) {
				case 1:
					{
					setState(1685);
					match(COLLECTION);
					setState(1686);
					match(ITEMS);
					setState(1687);
					match(TERMINATED);
					setState(1688);
					match(BY);
					setState(1689);
					((RowFormatDelimitedContext)_localctx).collectionItemsTerminatedBy = match(STRING);
					}
					break;
				}
				setState(1697);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,206,_ctx) ) {
				case 1:
					{
					setState(1692);
					match(MAP);
					setState(1693);
					match(KEYS);
					setState(1694);
					match(TERMINATED);
					setState(1695);
					match(BY);
					setState(1696);
					((RowFormatDelimitedContext)_localctx).keysTerminatedBy = match(STRING);
					}
					break;
				}
				setState(1703);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,207,_ctx) ) {
				case 1:
					{
					setState(1699);
					match(LINES);
					setState(1700);
					match(TERMINATED);
					setState(1701);
					match(BY);
					setState(1702);
					((RowFormatDelimitedContext)_localctx).linesSeparatedBy = match(STRING);
					}
					break;
				}
				setState(1709);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,208,_ctx) ) {
				case 1:
					{
					setState(1705);
					match(NULL);
					setState(1706);
					match(DEFINED);
					setState(1707);
					match(AS);
					setState(1708);
					((RowFormatDelimitedContext)_localctx).nullDefinedAs = match(STRING);
					}
					break;
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultipartIdentifierListContext extends ParserRuleContext {
		public List multipartIdentifier() {
			return getRuleContexts(MultipartIdentifierContext.class);
		}
		public MultipartIdentifierContext multipartIdentifier(int i) {
			return getRuleContext(MultipartIdentifierContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public MultipartIdentifierListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multipartIdentifierList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMultipartIdentifierList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMultipartIdentifierList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMultipartIdentifierList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultipartIdentifierListContext multipartIdentifierList() throws RecognitionException {
		MultipartIdentifierListContext _localctx = new MultipartIdentifierListContext(_ctx, getState());
		enterRule(_localctx, 180, RULE_multipartIdentifierList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1713);
			multipartIdentifier();
			setState(1718);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1714);
				match(COMMA);
				setState(1715);
				multipartIdentifier();
				}
				}
				setState(1720);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultipartIdentifierContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext errorCapturingIdentifier;
		public List parts = new ArrayList();
		public List errorCapturingIdentifier() {
			return getRuleContexts(ErrorCapturingIdentifierContext.class);
		}
		public ErrorCapturingIdentifierContext errorCapturingIdentifier(int i) {
			return getRuleContext(ErrorCapturingIdentifierContext.class,i);
		}
		public List DOT() { return getTokens(HoodieSqlBaseParser.DOT); }
		public TerminalNode DOT(int i) {
			return getToken(HoodieSqlBaseParser.DOT, i);
		}
		public MultipartIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multipartIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMultipartIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMultipartIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMultipartIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultipartIdentifierContext multipartIdentifier() throws RecognitionException {
		MultipartIdentifierContext _localctx = new MultipartIdentifierContext(_ctx, getState());
		enterRule(_localctx, 182, RULE_multipartIdentifier);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1721);
			((MultipartIdentifierContext)_localctx).errorCapturingIdentifier = errorCapturingIdentifier();
			((MultipartIdentifierContext)_localctx).parts.add(((MultipartIdentifierContext)_localctx).errorCapturingIdentifier);
			setState(1726);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,211,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1722);
					match(DOT);
					setState(1723);
					((MultipartIdentifierContext)_localctx).errorCapturingIdentifier = errorCapturingIdentifier();
					((MultipartIdentifierContext)_localctx).parts.add(((MultipartIdentifierContext)_localctx).errorCapturingIdentifier);
					}
					} 
				}
				setState(1728);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,211,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TableIdentifierContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext db;
		public ErrorCapturingIdentifierContext table;
		public List errorCapturingIdentifier() {
			return getRuleContexts(ErrorCapturingIdentifierContext.class);
		}
		public ErrorCapturingIdentifierContext errorCapturingIdentifier(int i) {
			return getRuleContext(ErrorCapturingIdentifierContext.class,i);
		}
		public TerminalNode DOT() { return getToken(HoodieSqlBaseParser.DOT, 0); }
		public TableIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TableIdentifierContext tableIdentifier() throws RecognitionException {
		TableIdentifierContext _localctx = new TableIdentifierContext(_ctx, getState());
		enterRule(_localctx, 184, RULE_tableIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1732);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,212,_ctx) ) {
			case 1:
				{
				setState(1729);
				((TableIdentifierContext)_localctx).db = errorCapturingIdentifier();
				setState(1730);
				match(DOT);
				}
				break;
			}
			setState(1734);
			((TableIdentifierContext)_localctx).table = errorCapturingIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FunctionIdentifierContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext db;
		public ErrorCapturingIdentifierContext function;
		public List errorCapturingIdentifier() {
			return getRuleContexts(ErrorCapturingIdentifierContext.class);
		}
		public ErrorCapturingIdentifierContext errorCapturingIdentifier(int i) {
			return getRuleContext(ErrorCapturingIdentifierContext.class,i);
		}
		public TerminalNode DOT() { return getToken(HoodieSqlBaseParser.DOT, 0); }
		public FunctionIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_functionIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFunctionIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFunctionIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFunctionIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FunctionIdentifierContext functionIdentifier() throws RecognitionException {
		FunctionIdentifierContext _localctx = new FunctionIdentifierContext(_ctx, getState());
		enterRule(_localctx, 186, RULE_functionIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1739);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,213,_ctx) ) {
			case 1:
				{
				setState(1736);
				((FunctionIdentifierContext)_localctx).db = errorCapturingIdentifier();
				setState(1737);
				match(DOT);
				}
				break;
			}
			setState(1741);
			((FunctionIdentifierContext)_localctx).function = errorCapturingIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultipartIdentifierPropertyListContext extends ParserRuleContext {
		public List multipartIdentifierProperty() {
			return getRuleContexts(MultipartIdentifierPropertyContext.class);
		}
		public MultipartIdentifierPropertyContext multipartIdentifierProperty(int i) {
			return getRuleContext(MultipartIdentifierPropertyContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public MultipartIdentifierPropertyListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multipartIdentifierPropertyList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMultipartIdentifierPropertyList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMultipartIdentifierPropertyList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMultipartIdentifierPropertyList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultipartIdentifierPropertyListContext multipartIdentifierPropertyList() throws RecognitionException {
		MultipartIdentifierPropertyListContext _localctx = new MultipartIdentifierPropertyListContext(_ctx, getState());
		enterRule(_localctx, 188, RULE_multipartIdentifierPropertyList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1743);
			multipartIdentifierProperty();
			setState(1748);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1744);
				match(COMMA);
				setState(1745);
				multipartIdentifierProperty();
				}
				}
				setState(1750);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultipartIdentifierPropertyContext extends ParserRuleContext {
		public PropertyListContext options;
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TerminalNode OPTIONS() { return getToken(HoodieSqlBaseParser.OPTIONS, 0); }
		public PropertyListContext propertyList() {
			return getRuleContext(PropertyListContext.class,0);
		}
		public MultipartIdentifierPropertyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multipartIdentifierProperty; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMultipartIdentifierProperty(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMultipartIdentifierProperty(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMultipartIdentifierProperty(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultipartIdentifierPropertyContext multipartIdentifierProperty() throws RecognitionException {
		MultipartIdentifierPropertyContext _localctx = new MultipartIdentifierPropertyContext(_ctx, getState());
		enterRule(_localctx, 190, RULE_multipartIdentifierProperty);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1751);
			multipartIdentifier();
			setState(1754);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==OPTIONS) {
				{
				setState(1752);
				match(OPTIONS);
				setState(1753);
				((MultipartIdentifierPropertyContext)_localctx).options = propertyList();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PropertyListContext extends ParserRuleContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List property() {
			return getRuleContexts(PropertyContext.class);
		}
		public PropertyContext property(int i) {
			return getRuleContext(PropertyContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public PropertyListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_propertyList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPropertyList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPropertyList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPropertyList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PropertyListContext propertyList() throws RecognitionException {
		PropertyListContext _localctx = new PropertyListContext(_ctx, getState());
		enterRule(_localctx, 192, RULE_propertyList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1756);
			match(LEFT_PAREN);
			setState(1757);
			property();
			setState(1762);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1758);
				match(COMMA);
				setState(1759);
				property();
				}
				}
				setState(1764);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1765);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PropertyContext extends ParserRuleContext {
		public PropertyKeyContext key;
		public PropertyValueContext value;
		public PropertyKeyContext propertyKey() {
			return getRuleContext(PropertyKeyContext.class,0);
		}
		public PropertyValueContext propertyValue() {
			return getRuleContext(PropertyValueContext.class,0);
		}
		public TerminalNode EQ() { return getToken(HoodieSqlBaseParser.EQ, 0); }
		public PropertyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_property; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterProperty(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitProperty(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitProperty(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PropertyContext property() throws RecognitionException {
		PropertyContext _localctx = new PropertyContext(_ctx, getState());
		enterRule(_localctx, 194, RULE_property);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1767);
			((PropertyContext)_localctx).key = propertyKey();
			setState(1772);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==FALSE || ((((_la - 240)) & ~0x3f) == 0 && ((1L << (_la - 240)) & ((1L << (TRUE - 240)) | (1L << (EQ - 240)) | (1L << (STRING - 240)) | (1L << (INTEGER_VALUE - 240)) | (1L << (DECIMAL_VALUE - 240)))) != 0)) {
				{
				setState(1769);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==EQ) {
					{
					setState(1768);
					match(EQ);
					}
				}

				setState(1771);
				((PropertyContext)_localctx).value = propertyValue();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PropertyKeyContext extends ParserRuleContext {
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public List DOT() { return getTokens(HoodieSqlBaseParser.DOT); }
		public TerminalNode DOT(int i) {
			return getToken(HoodieSqlBaseParser.DOT, i);
		}
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public PropertyKeyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_propertyKey; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPropertyKey(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPropertyKey(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPropertyKey(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PropertyKeyContext propertyKey() throws RecognitionException {
		PropertyKeyContext _localctx = new PropertyKeyContext(_ctx, getState());
		enterRule(_localctx, 196, RULE_propertyKey);
		int _la;
		try {
			setState(1783);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,220,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1774);
				identifier();
				setState(1779);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==DOT) {
					{
					{
					setState(1775);
					match(DOT);
					setState(1776);
					identifier();
					}
					}
					setState(1781);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1782);
				match(STRING);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PropertyValueContext extends ParserRuleContext {
		public TerminalNode INTEGER_VALUE() { return getToken(HoodieSqlBaseParser.INTEGER_VALUE, 0); }
		public TerminalNode DECIMAL_VALUE() { return getToken(HoodieSqlBaseParser.DECIMAL_VALUE, 0); }
		public BooleanValueContext booleanValue() {
			return getRuleContext(BooleanValueContext.class,0);
		}
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public PropertyValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_propertyValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPropertyValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPropertyValue(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPropertyValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PropertyValueContext propertyValue() throws RecognitionException {
		PropertyValueContext _localctx = new PropertyValueContext(_ctx, getState());
		enterRule(_localctx, 198, RULE_propertyValue);
		try {
			setState(1789);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case INTEGER_VALUE:
				enterOuterAlt(_localctx, 1);
				{
				setState(1785);
				match(INTEGER_VALUE);
				}
				break;
			case DECIMAL_VALUE:
				enterOuterAlt(_localctx, 2);
				{
				setState(1786);
				match(DECIMAL_VALUE);
				}
				break;
			case FALSE:
			case TRUE:
				enterOuterAlt(_localctx, 3);
				{
				setState(1787);
				booleanValue();
				}
				break;
			case STRING:
				enterOuterAlt(_localctx, 4);
				{
				setState(1788);
				match(STRING);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NamedExpressionContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext name;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public IdentifierListContext identifierList() {
			return getRuleContext(IdentifierListContext.class,0);
		}
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public ErrorCapturingIdentifierContext errorCapturingIdentifier() {
			return getRuleContext(ErrorCapturingIdentifierContext.class,0);
		}
		public NamedExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_namedExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNamedExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNamedExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNamedExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NamedExpressionContext namedExpression() throws RecognitionException {
		NamedExpressionContext _localctx = new NamedExpressionContext(_ctx, getState());
		enterRule(_localctx, 200, RULE_namedExpression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1791);
			expression();
			setState(1799);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,224,_ctx) ) {
			case 1:
				{
				setState(1793);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,222,_ctx) ) {
				case 1:
					{
					setState(1792);
					match(AS);
					}
					break;
				}
				setState(1797);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,223,_ctx) ) {
				case 1:
					{
					setState(1795);
					((NamedExpressionContext)_localctx).name = errorCapturingIdentifier();
					}
					break;
				case 2:
					{
					setState(1796);
					identifierList();
					}
					break;
				}
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NamedExpressionSeqContext extends ParserRuleContext {
		public List namedExpression() {
			return getRuleContexts(NamedExpressionContext.class);
		}
		public NamedExpressionContext namedExpression(int i) {
			return getRuleContext(NamedExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public NamedExpressionSeqContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_namedExpressionSeq; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNamedExpressionSeq(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNamedExpressionSeq(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNamedExpressionSeq(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NamedExpressionSeqContext namedExpressionSeq() throws RecognitionException {
		NamedExpressionSeqContext _localctx = new NamedExpressionSeqContext(_ctx, getState());
		enterRule(_localctx, 202, RULE_namedExpressionSeq);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1801);
			namedExpression();
			setState(1806);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,225,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1802);
					match(COMMA);
					setState(1803);
					namedExpression();
					}
					} 
				}
				setState(1808);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,225,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PartitionFieldListContext extends ParserRuleContext {
		public PartitionFieldContext partitionField;
		public List fields = new ArrayList();
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List partitionField() {
			return getRuleContexts(PartitionFieldContext.class);
		}
		public PartitionFieldContext partitionField(int i) {
			return getRuleContext(PartitionFieldContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public PartitionFieldListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_partitionFieldList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPartitionFieldList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPartitionFieldList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPartitionFieldList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PartitionFieldListContext partitionFieldList() throws RecognitionException {
		PartitionFieldListContext _localctx = new PartitionFieldListContext(_ctx, getState());
		enterRule(_localctx, 204, RULE_partitionFieldList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1809);
			match(LEFT_PAREN);
			setState(1810);
			((PartitionFieldListContext)_localctx).partitionField = partitionField();
			((PartitionFieldListContext)_localctx).fields.add(((PartitionFieldListContext)_localctx).partitionField);
			setState(1815);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1811);
				match(COMMA);
				setState(1812);
				((PartitionFieldListContext)_localctx).partitionField = partitionField();
				((PartitionFieldListContext)_localctx).fields.add(((PartitionFieldListContext)_localctx).partitionField);
				}
				}
				setState(1817);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1818);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PartitionFieldContext extends ParserRuleContext {
		public PartitionFieldContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_partitionField; }
	 
		public PartitionFieldContext() { }
		public void copyFrom(PartitionFieldContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class PartitionColumnContext extends PartitionFieldContext {
		public ColTypeContext colType() {
			return getRuleContext(ColTypeContext.class,0);
		}
		public PartitionColumnContext(PartitionFieldContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPartitionColumn(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPartitionColumn(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPartitionColumn(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class PartitionTransformContext extends PartitionFieldContext {
		public TransformContext transform() {
			return getRuleContext(TransformContext.class,0);
		}
		public PartitionTransformContext(PartitionFieldContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPartitionTransform(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPartitionTransform(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPartitionTransform(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PartitionFieldContext partitionField() throws RecognitionException {
		PartitionFieldContext _localctx = new PartitionFieldContext(_ctx, getState());
		enterRule(_localctx, 206, RULE_partitionField);
		try {
			setState(1822);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,227,_ctx) ) {
			case 1:
				_localctx = new PartitionTransformContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1820);
				transform();
				}
				break;
			case 2:
				_localctx = new PartitionColumnContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1821);
				colType();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TransformContext extends ParserRuleContext {
		public TransformContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_transform; }
	 
		public TransformContext() { }
		public void copyFrom(TransformContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class IdentityTransformContext extends TransformContext {
		public QualifiedNameContext qualifiedName() {
			return getRuleContext(QualifiedNameContext.class,0);
		}
		public IdentityTransformContext(TransformContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIdentityTransform(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIdentityTransform(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIdentityTransform(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ApplyTransformContext extends TransformContext {
		public IdentifierContext transformName;
		public TransformArgumentContext transformArgument;
		public List argument = new ArrayList();
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public List transformArgument() {
			return getRuleContexts(TransformArgumentContext.class);
		}
		public TransformArgumentContext transformArgument(int i) {
			return getRuleContext(TransformArgumentContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public ApplyTransformContext(TransformContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterApplyTransform(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitApplyTransform(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitApplyTransform(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TransformContext transform() throws RecognitionException {
		TransformContext _localctx = new TransformContext(_ctx, getState());
		enterRule(_localctx, 208, RULE_transform);
		int _la;
		try {
			setState(1837);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,229,_ctx) ) {
			case 1:
				_localctx = new IdentityTransformContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1824);
				qualifiedName();
				}
				break;
			case 2:
				_localctx = new ApplyTransformContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1825);
				((ApplyTransformContext)_localctx).transformName = identifier();
				setState(1826);
				match(LEFT_PAREN);
				setState(1827);
				((ApplyTransformContext)_localctx).transformArgument = transformArgument();
				((ApplyTransformContext)_localctx).argument.add(((ApplyTransformContext)_localctx).transformArgument);
				setState(1832);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1828);
					match(COMMA);
					setState(1829);
					((ApplyTransformContext)_localctx).transformArgument = transformArgument();
					((ApplyTransformContext)_localctx).argument.add(((ApplyTransformContext)_localctx).transformArgument);
					}
					}
					setState(1834);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1835);
				match(RIGHT_PAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TransformArgumentContext extends ParserRuleContext {
		public QualifiedNameContext qualifiedName() {
			return getRuleContext(QualifiedNameContext.class,0);
		}
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public TransformArgumentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_transformArgument; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTransformArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTransformArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTransformArgument(this);
			else return visitor.visitChildren(this);
		}
	}

	public final TransformArgumentContext transformArgument() throws RecognitionException {
		TransformArgumentContext _localctx = new TransformArgumentContext(_ctx, getState());
		enterRule(_localctx, 210, RULE_transformArgument);
		try {
			setState(1841);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,230,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1839);
				qualifiedName();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1840);
				constant();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExpressionContext extends ParserRuleContext {
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public ExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionContext expression() throws RecognitionException {
		ExpressionContext _localctx = new ExpressionContext(_ctx, getState());
		enterRule(_localctx, 212, RULE_expression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1843);
			booleanExpression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExpressionSeqContext extends ParserRuleContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public ExpressionSeqContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expressionSeq; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterExpressionSeq(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitExpressionSeq(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitExpressionSeq(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionSeqContext expressionSeq() throws RecognitionException {
		ExpressionSeqContext _localctx = new ExpressionSeqContext(_ctx, getState());
		enterRule(_localctx, 214, RULE_expressionSeq);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1845);
			expression();
			setState(1850);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1846);
				match(COMMA);
				setState(1847);
				expression();
				}
				}
				setState(1852);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BooleanExpressionContext extends ParserRuleContext {
		public BooleanExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_booleanExpression; }
	 
		public BooleanExpressionContext() { }
		public void copyFrom(BooleanExpressionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class LogicalNotContext extends BooleanExpressionContext {
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public LogicalNotContext(BooleanExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterLogicalNot(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitLogicalNot(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitLogicalNot(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class PredicatedContext extends BooleanExpressionContext {
		public ValueExpressionContext valueExpression() {
			return getRuleContext(ValueExpressionContext.class,0);
		}
		public PredicateContext predicate() {
			return getRuleContext(PredicateContext.class,0);
		}
		public PredicatedContext(BooleanExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPredicated(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPredicated(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPredicated(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExistsContext extends BooleanExpressionContext {
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public ExistsContext(BooleanExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterExists(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitExists(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitExists(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class LogicalBinaryContext extends BooleanExpressionContext {
		public BooleanExpressionContext left;
		public Token operator;
		public BooleanExpressionContext right;
		public List booleanExpression() {
			return getRuleContexts(BooleanExpressionContext.class);
		}
		public BooleanExpressionContext booleanExpression(int i) {
			return getRuleContext(BooleanExpressionContext.class,i);
		}
		public TerminalNode AND() { return getToken(HoodieSqlBaseParser.AND, 0); }
		public TerminalNode OR() { return getToken(HoodieSqlBaseParser.OR, 0); }
		public LogicalBinaryContext(BooleanExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterLogicalBinary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitLogicalBinary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitLogicalBinary(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BooleanExpressionContext booleanExpression() throws RecognitionException {
		return booleanExpression(0);
	}

	private BooleanExpressionContext booleanExpression(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		BooleanExpressionContext _localctx = new BooleanExpressionContext(_ctx, _parentState);
		BooleanExpressionContext _prevctx = _localctx;
		int _startState = 216;
		enterRecursionRule(_localctx, 216, RULE_booleanExpression, _p);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1865);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,233,_ctx) ) {
			case 1:
				{
				_localctx = new LogicalNotContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(1854);
				match(NOT);
				setState(1855);
				booleanExpression(5);
				}
				break;
			case 2:
				{
				_localctx = new ExistsContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1856);
				match(EXISTS);
				setState(1857);
				match(LEFT_PAREN);
				setState(1858);
				query();
				setState(1859);
				match(RIGHT_PAREN);
				}
				break;
			case 3:
				{
				_localctx = new PredicatedContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1861);
				valueExpression(0);
				setState(1863);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,232,_ctx) ) {
				case 1:
					{
					setState(1862);
					predicate();
					}
					break;
				}
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(1875);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,235,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(1873);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,234,_ctx) ) {
					case 1:
						{
						_localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState));
						((LogicalBinaryContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression);
						setState(1867);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(1868);
						((LogicalBinaryContext)_localctx).operator = match(AND);
						setState(1869);
						((LogicalBinaryContext)_localctx).right = booleanExpression(3);
						}
						break;
					case 2:
						{
						_localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState));
						((LogicalBinaryContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression);
						setState(1870);
						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
						setState(1871);
						((LogicalBinaryContext)_localctx).operator = match(OR);
						setState(1872);
						((LogicalBinaryContext)_localctx).right = booleanExpression(2);
						}
						break;
					}
					} 
				}
				setState(1877);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,235,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class PredicateContext extends ParserRuleContext {
		public Token kind;
		public ValueExpressionContext lower;
		public ValueExpressionContext upper;
		public ValueExpressionContext pattern;
		public Token quantifier;
		public Token escapeChar;
		public ValueExpressionContext right;
		public TerminalNode AND() { return getToken(HoodieSqlBaseParser.AND, 0); }
		public TerminalNode BETWEEN() { return getToken(HoodieSqlBaseParser.BETWEEN, 0); }
		public List valueExpression() {
			return getRuleContexts(ValueExpressionContext.class);
		}
		public ValueExpressionContext valueExpression(int i) {
			return getRuleContext(ValueExpressionContext.class,i);
		}
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode IN() { return getToken(HoodieSqlBaseParser.IN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public TerminalNode RLIKE() { return getToken(HoodieSqlBaseParser.RLIKE, 0); }
		public TerminalNode LIKE() { return getToken(HoodieSqlBaseParser.LIKE, 0); }
		public TerminalNode ANY() { return getToken(HoodieSqlBaseParser.ANY, 0); }
		public TerminalNode SOME() { return getToken(HoodieSqlBaseParser.SOME, 0); }
		public TerminalNode ALL() { return getToken(HoodieSqlBaseParser.ALL, 0); }
		public TerminalNode ESCAPE() { return getToken(HoodieSqlBaseParser.ESCAPE, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TerminalNode IS() { return getToken(HoodieSqlBaseParser.IS, 0); }
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public TerminalNode TRUE() { return getToken(HoodieSqlBaseParser.TRUE, 0); }
		public TerminalNode FALSE() { return getToken(HoodieSqlBaseParser.FALSE, 0); }
		public TerminalNode UNKNOWN() { return getToken(HoodieSqlBaseParser.UNKNOWN, 0); }
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public TerminalNode DISTINCT() { return getToken(HoodieSqlBaseParser.DISTINCT, 0); }
		public PredicateContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_predicate; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPredicate(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPredicate(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPredicate(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PredicateContext predicate() throws RecognitionException {
		PredicateContext _localctx = new PredicateContext(_ctx, getState());
		enterRule(_localctx, 218, RULE_predicate);
		int _la;
		try {
			setState(1960);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,249,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1879);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1878);
					match(NOT);
					}
				}

				setState(1881);
				((PredicateContext)_localctx).kind = match(BETWEEN);
				setState(1882);
				((PredicateContext)_localctx).lower = valueExpression(0);
				setState(1883);
				match(AND);
				setState(1884);
				((PredicateContext)_localctx).upper = valueExpression(0);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1887);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1886);
					match(NOT);
					}
				}

				setState(1889);
				((PredicateContext)_localctx).kind = match(IN);
				setState(1890);
				match(LEFT_PAREN);
				setState(1891);
				expression();
				setState(1896);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1892);
					match(COMMA);
					setState(1893);
					expression();
					}
					}
					setState(1898);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1899);
				match(RIGHT_PAREN);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1902);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1901);
					match(NOT);
					}
				}

				setState(1904);
				((PredicateContext)_localctx).kind = match(IN);
				setState(1905);
				match(LEFT_PAREN);
				setState(1906);
				query();
				setState(1907);
				match(RIGHT_PAREN);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1910);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1909);
					match(NOT);
					}
				}

				setState(1912);
				((PredicateContext)_localctx).kind = match(RLIKE);
				setState(1913);
				((PredicateContext)_localctx).pattern = valueExpression(0);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1915);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1914);
					match(NOT);
					}
				}

				setState(1917);
				((PredicateContext)_localctx).kind = match(LIKE);
				setState(1918);
				((PredicateContext)_localctx).quantifier = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==ALL || _la==ANY || _la==SOME) ) {
					((PredicateContext)_localctx).quantifier = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1932);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,243,_ctx) ) {
				case 1:
					{
					setState(1919);
					match(LEFT_PAREN);
					setState(1920);
					match(RIGHT_PAREN);
					}
					break;
				case 2:
					{
					setState(1921);
					match(LEFT_PAREN);
					setState(1922);
					expression();
					setState(1927);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(1923);
						match(COMMA);
						setState(1924);
						expression();
						}
						}
						setState(1929);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					setState(1930);
					match(RIGHT_PAREN);
					}
					break;
				}
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1935);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1934);
					match(NOT);
					}
				}

				setState(1937);
				((PredicateContext)_localctx).kind = match(LIKE);
				setState(1938);
				((PredicateContext)_localctx).pattern = valueExpression(0);
				setState(1941);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,245,_ctx) ) {
				case 1:
					{
					setState(1939);
					match(ESCAPE);
					setState(1940);
					((PredicateContext)_localctx).escapeChar = match(STRING);
					}
					break;
				}
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(1943);
				match(IS);
				setState(1945);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1944);
					match(NOT);
					}
				}

				setState(1947);
				((PredicateContext)_localctx).kind = match(NULL);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(1948);
				match(IS);
				setState(1950);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1949);
					match(NOT);
					}
				}

				setState(1952);
				((PredicateContext)_localctx).kind = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==FALSE || _la==TRUE || _la==UNKNOWN) ) {
					((PredicateContext)_localctx).kind = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(1953);
				match(IS);
				setState(1955);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(1954);
					match(NOT);
					}
				}

				setState(1957);
				((PredicateContext)_localctx).kind = match(DISTINCT);
				setState(1958);
				match(FROM);
				setState(1959);
				((PredicateContext)_localctx).right = valueExpression(0);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ValueExpressionContext extends ParserRuleContext {
		public ValueExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_valueExpression; }
	 
		public ValueExpressionContext() { }
		public void copyFrom(ValueExpressionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ValueExpressionDefaultContext extends ValueExpressionContext {
		public PrimaryExpressionContext primaryExpression() {
			return getRuleContext(PrimaryExpressionContext.class,0);
		}
		public ValueExpressionDefaultContext(ValueExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterValueExpressionDefault(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitValueExpressionDefault(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitValueExpressionDefault(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ComparisonContext extends ValueExpressionContext {
		public ValueExpressionContext left;
		public ValueExpressionContext right;
		public ComparisonOperatorContext comparisonOperator() {
			return getRuleContext(ComparisonOperatorContext.class,0);
		}
		public List valueExpression() {
			return getRuleContexts(ValueExpressionContext.class);
		}
		public ValueExpressionContext valueExpression(int i) {
			return getRuleContext(ValueExpressionContext.class,i);
		}
		public ComparisonContext(ValueExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterComparison(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitComparison(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitComparison(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ArithmeticBinaryContext extends ValueExpressionContext {
		public ValueExpressionContext left;
		public Token operator;
		public ValueExpressionContext right;
		public List valueExpression() {
			return getRuleContexts(ValueExpressionContext.class);
		}
		public ValueExpressionContext valueExpression(int i) {
			return getRuleContext(ValueExpressionContext.class,i);
		}
		public TerminalNode ASTERISK() { return getToken(HoodieSqlBaseParser.ASTERISK, 0); }
		public TerminalNode SLASH() { return getToken(HoodieSqlBaseParser.SLASH, 0); }
		public TerminalNode PERCENT() { return getToken(HoodieSqlBaseParser.PERCENT, 0); }
		public TerminalNode DIV() { return getToken(HoodieSqlBaseParser.DIV, 0); }
		public TerminalNode PLUS() { return getToken(HoodieSqlBaseParser.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public TerminalNode CONCAT_PIPE() { return getToken(HoodieSqlBaseParser.CONCAT_PIPE, 0); }
		public TerminalNode AMPERSAND() { return getToken(HoodieSqlBaseParser.AMPERSAND, 0); }
		public TerminalNode HAT() { return getToken(HoodieSqlBaseParser.HAT, 0); }
		public TerminalNode PIPE() { return getToken(HoodieSqlBaseParser.PIPE, 0); }
		public ArithmeticBinaryContext(ValueExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterArithmeticBinary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitArithmeticBinary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitArithmeticBinary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ArithmeticUnaryContext extends ValueExpressionContext {
		public Token operator;
		public ValueExpressionContext valueExpression() {
			return getRuleContext(ValueExpressionContext.class,0);
		}
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public TerminalNode PLUS() { return getToken(HoodieSqlBaseParser.PLUS, 0); }
		public TerminalNode TILDE() { return getToken(HoodieSqlBaseParser.TILDE, 0); }
		public ArithmeticUnaryContext(ValueExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterArithmeticUnary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitArithmeticUnary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitArithmeticUnary(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ValueExpressionContext valueExpression() throws RecognitionException {
		return valueExpression(0);
	}

	private ValueExpressionContext valueExpression(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		ValueExpressionContext _localctx = new ValueExpressionContext(_ctx, _parentState);
		ValueExpressionContext _prevctx = _localctx;
		int _startState = 220;
		enterRecursionRule(_localctx, 220, RULE_valueExpression, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1966);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,250,_ctx) ) {
			case 1:
				{
				_localctx = new ValueExpressionDefaultContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(1963);
				primaryExpression(0);
				}
				break;
			case 2:
				{
				_localctx = new ArithmeticUnaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1964);
				((ArithmeticUnaryContext)_localctx).operator = _input.LT(1);
				_la = _input.LA(1);
				if ( !(((((_la - 281)) & ~0x3f) == 0 && ((1L << (_la - 281)) & ((1L << (PLUS - 281)) | (1L << (MINUS - 281)) | (1L << (TILDE - 281)))) != 0)) ) {
					((ArithmeticUnaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(1965);
				valueExpression(7);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(1989);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,252,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(1987);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,251,_ctx) ) {
					case 1:
						{
						_localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState));
						((ArithmeticBinaryContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
						setState(1968);
						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
						setState(1969);
						((ArithmeticBinaryContext)_localctx).operator = _input.LT(1);
						_la = _input.LA(1);
						if ( !(_la==DIV || ((((_la - 283)) & ~0x3f) == 0 && ((1L << (_la - 283)) & ((1L << (ASTERISK - 283)) | (1L << (SLASH - 283)) | (1L << (PERCENT - 283)))) != 0)) ) {
							((ArithmeticBinaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(1970);
						((ArithmeticBinaryContext)_localctx).right = valueExpression(7);
						}
						break;
					case 2:
						{
						_localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState));
						((ArithmeticBinaryContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
						setState(1971);
						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
						setState(1972);
						((ArithmeticBinaryContext)_localctx).operator = _input.LT(1);
						_la = _input.LA(1);
						if ( !(((((_la - 281)) & ~0x3f) == 0 && ((1L << (_la - 281)) & ((1L << (PLUS - 281)) | (1L << (MINUS - 281)) | (1L << (CONCAT_PIPE - 281)))) != 0)) ) {
							((ArithmeticBinaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(1973);
						((ArithmeticBinaryContext)_localctx).right = valueExpression(6);
						}
						break;
					case 3:
						{
						_localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState));
						((ArithmeticBinaryContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
						setState(1974);
						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
						setState(1975);
						((ArithmeticBinaryContext)_localctx).operator = match(AMPERSAND);
						setState(1976);
						((ArithmeticBinaryContext)_localctx).right = valueExpression(5);
						}
						break;
					case 4:
						{
						_localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState));
						((ArithmeticBinaryContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
						setState(1977);
						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
						setState(1978);
						((ArithmeticBinaryContext)_localctx).operator = match(HAT);
						setState(1979);
						((ArithmeticBinaryContext)_localctx).right = valueExpression(4);
						}
						break;
					case 5:
						{
						_localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState));
						((ArithmeticBinaryContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
						setState(1980);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(1981);
						((ArithmeticBinaryContext)_localctx).operator = match(PIPE);
						setState(1982);
						((ArithmeticBinaryContext)_localctx).right = valueExpression(3);
						}
						break;
					case 6:
						{
						_localctx = new ComparisonContext(new ValueExpressionContext(_parentctx, _parentState));
						((ComparisonContext)_localctx).left = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
						setState(1983);
						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
						setState(1984);
						comparisonOperator();
						setState(1985);
						((ComparisonContext)_localctx).right = valueExpression(2);
						}
						break;
					}
					} 
				}
				setState(1991);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,252,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class PrimaryExpressionContext extends ParserRuleContext {
		public PrimaryExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_primaryExpression; }
	 
		public PrimaryExpressionContext() { }
		public void copyFrom(PrimaryExpressionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class StructContext extends PrimaryExpressionContext {
		public NamedExpressionContext namedExpression;
		public List argument = new ArrayList();
		public TerminalNode STRUCT() { return getToken(HoodieSqlBaseParser.STRUCT, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List namedExpression() {
			return getRuleContexts(NamedExpressionContext.class);
		}
		public NamedExpressionContext namedExpression(int i) {
			return getRuleContext(NamedExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public StructContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterStruct(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitStruct(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitStruct(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class DereferenceContext extends PrimaryExpressionContext {
		public PrimaryExpressionContext base;
		public IdentifierContext fieldName;
		public TerminalNode DOT() { return getToken(HoodieSqlBaseParser.DOT, 0); }
		public PrimaryExpressionContext primaryExpression() {
			return getRuleContext(PrimaryExpressionContext.class,0);
		}
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public DereferenceContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDereference(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDereference(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDereference(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SimpleCaseContext extends PrimaryExpressionContext {
		public ExpressionContext value;
		public ExpressionContext elseExpression;
		public TerminalNode CASE() { return getToken(HoodieSqlBaseParser.CASE, 0); }
		public TerminalNode END() { return getToken(HoodieSqlBaseParser.END, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List whenClause() {
			return getRuleContexts(WhenClauseContext.class);
		}
		public WhenClauseContext whenClause(int i) {
			return getRuleContext(WhenClauseContext.class,i);
		}
		public TerminalNode ELSE() { return getToken(HoodieSqlBaseParser.ELSE, 0); }
		public SimpleCaseContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSimpleCase(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSimpleCase(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSimpleCase(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class CurrentLikeContext extends PrimaryExpressionContext {
		public Token name;
		public TerminalNode CURRENT_DATE() { return getToken(HoodieSqlBaseParser.CURRENT_DATE, 0); }
		public TerminalNode CURRENT_TIMESTAMP() { return getToken(HoodieSqlBaseParser.CURRENT_TIMESTAMP, 0); }
		public TerminalNode CURRENT_USER() { return getToken(HoodieSqlBaseParser.CURRENT_USER, 0); }
		public CurrentLikeContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCurrentLike(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCurrentLike(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCurrentLike(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ColumnReferenceContext extends PrimaryExpressionContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public ColumnReferenceContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterColumnReference(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitColumnReference(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitColumnReference(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class RowConstructorContext extends PrimaryExpressionContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List namedExpression() {
			return getRuleContexts(NamedExpressionContext.class);
		}
		public NamedExpressionContext namedExpression(int i) {
			return getRuleContext(NamedExpressionContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public RowConstructorContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterRowConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitRowConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitRowConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class LastContext extends PrimaryExpressionContext {
		public TerminalNode LAST() { return getToken(HoodieSqlBaseParser.LAST, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode IGNORE() { return getToken(HoodieSqlBaseParser.IGNORE, 0); }
		public TerminalNode NULLS() { return getToken(HoodieSqlBaseParser.NULLS, 0); }
		public LastContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterLast(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitLast(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitLast(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class StarContext extends PrimaryExpressionContext {
		public TerminalNode ASTERISK() { return getToken(HoodieSqlBaseParser.ASTERISK, 0); }
		public QualifiedNameContext qualifiedName() {
			return getRuleContext(QualifiedNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(HoodieSqlBaseParser.DOT, 0); }
		public StarContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterStar(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitStar(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitStar(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class OverlayContext extends PrimaryExpressionContext {
		public ValueExpressionContext input;
		public ValueExpressionContext replace;
		public ValueExpressionContext position;
		public ValueExpressionContext length;
		public TerminalNode OVERLAY() { return getToken(HoodieSqlBaseParser.OVERLAY, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode PLACING() { return getToken(HoodieSqlBaseParser.PLACING, 0); }
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List valueExpression() {
			return getRuleContexts(ValueExpressionContext.class);
		}
		public ValueExpressionContext valueExpression(int i) {
			return getRuleContext(ValueExpressionContext.class,i);
		}
		public TerminalNode FOR() { return getToken(HoodieSqlBaseParser.FOR, 0); }
		public OverlayContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterOverlay(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitOverlay(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitOverlay(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SubscriptContext extends PrimaryExpressionContext {
		public PrimaryExpressionContext value;
		public ValueExpressionContext index;
		public PrimaryExpressionContext primaryExpression() {
			return getRuleContext(PrimaryExpressionContext.class,0);
		}
		public ValueExpressionContext valueExpression() {
			return getRuleContext(ValueExpressionContext.class,0);
		}
		public SubscriptContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSubscript(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSubscript(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSubscript(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SubqueryExpressionContext extends PrimaryExpressionContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public QueryContext query() {
			return getRuleContext(QueryContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public SubqueryExpressionContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSubqueryExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSubqueryExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSubqueryExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SubstringContext extends PrimaryExpressionContext {
		public ValueExpressionContext str;
		public ValueExpressionContext pos;
		public ValueExpressionContext len;
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode SUBSTR() { return getToken(HoodieSqlBaseParser.SUBSTR, 0); }
		public TerminalNode SUBSTRING() { return getToken(HoodieSqlBaseParser.SUBSTRING, 0); }
		public List valueExpression() {
			return getRuleContexts(ValueExpressionContext.class);
		}
		public ValueExpressionContext valueExpression(int i) {
			return getRuleContext(ValueExpressionContext.class,i);
		}
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public TerminalNode FOR() { return getToken(HoodieSqlBaseParser.FOR, 0); }
		public SubstringContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSubstring(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSubstring(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSubstring(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class CastContext extends PrimaryExpressionContext {
		public Token name;
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode CAST() { return getToken(HoodieSqlBaseParser.CAST, 0); }
		public TerminalNode TRY_CAST() { return getToken(HoodieSqlBaseParser.TRY_CAST, 0); }
		public CastContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterCast(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitCast(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitCast(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ConstantDefaultContext extends PrimaryExpressionContext {
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public ConstantDefaultContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterConstantDefault(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitConstantDefault(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitConstantDefault(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class LambdaContext extends PrimaryExpressionContext {
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public LambdaContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterLambda(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitLambda(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitLambda(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ParenthesizedExpressionContext extends PrimaryExpressionContext {
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public ParenthesizedExpressionContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterParenthesizedExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitParenthesizedExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitParenthesizedExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExtractContext extends PrimaryExpressionContext {
		public IdentifierContext field;
		public ValueExpressionContext source;
		public TerminalNode EXTRACT() { return getToken(HoodieSqlBaseParser.EXTRACT, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public ValueExpressionContext valueExpression() {
			return getRuleContext(ValueExpressionContext.class,0);
		}
		public ExtractContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterExtract(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitExtract(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitExtract(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class TrimContext extends PrimaryExpressionContext {
		public Token trimOption;
		public ValueExpressionContext trimStr;
		public ValueExpressionContext srcStr;
		public TerminalNode TRIM() { return getToken(HoodieSqlBaseParser.TRIM, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List valueExpression() {
			return getRuleContexts(ValueExpressionContext.class);
		}
		public ValueExpressionContext valueExpression(int i) {
			return getRuleContext(ValueExpressionContext.class,i);
		}
		public TerminalNode BOTH() { return getToken(HoodieSqlBaseParser.BOTH, 0); }
		public TerminalNode LEADING() { return getToken(HoodieSqlBaseParser.LEADING, 0); }
		public TerminalNode TRAILING() { return getToken(HoodieSqlBaseParser.TRAILING, 0); }
		public TrimContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTrim(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTrim(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTrim(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class FunctionCallContext extends PrimaryExpressionContext {
		public ExpressionContext expression;
		public List argument = new ArrayList();
		public BooleanExpressionContext where;
		public Token nullsOption;
		public FunctionNameContext functionName() {
			return getRuleContext(FunctionNameContext.class,0);
		}
		public List LEFT_PAREN() { return getTokens(HoodieSqlBaseParser.LEFT_PAREN); }
		public TerminalNode LEFT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.LEFT_PAREN, i);
		}
		public List RIGHT_PAREN() { return getTokens(HoodieSqlBaseParser.RIGHT_PAREN); }
		public TerminalNode RIGHT_PAREN(int i) {
			return getToken(HoodieSqlBaseParser.RIGHT_PAREN, i);
		}
		public TerminalNode FILTER() { return getToken(HoodieSqlBaseParser.FILTER, 0); }
		public TerminalNode WHERE() { return getToken(HoodieSqlBaseParser.WHERE, 0); }
		public TerminalNode NULLS() { return getToken(HoodieSqlBaseParser.NULLS, 0); }
		public TerminalNode OVER() { return getToken(HoodieSqlBaseParser.OVER, 0); }
		public WindowSpecContext windowSpec() {
			return getRuleContext(WindowSpecContext.class,0);
		}
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public BooleanExpressionContext booleanExpression() {
			return getRuleContext(BooleanExpressionContext.class,0);
		}
		public TerminalNode IGNORE() { return getToken(HoodieSqlBaseParser.IGNORE, 0); }
		public TerminalNode RESPECT() { return getToken(HoodieSqlBaseParser.RESPECT, 0); }
		public SetQuantifierContext setQuantifier() {
			return getRuleContext(SetQuantifierContext.class,0);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public FunctionCallContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFunctionCall(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFunctionCall(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFunctionCall(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SearchedCaseContext extends PrimaryExpressionContext {
		public ExpressionContext elseExpression;
		public TerminalNode CASE() { return getToken(HoodieSqlBaseParser.CASE, 0); }
		public TerminalNode END() { return getToken(HoodieSqlBaseParser.END, 0); }
		public List whenClause() {
			return getRuleContexts(WhenClauseContext.class);
		}
		public WhenClauseContext whenClause(int i) {
			return getRuleContext(WhenClauseContext.class,i);
		}
		public TerminalNode ELSE() { return getToken(HoodieSqlBaseParser.ELSE, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public SearchedCaseContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSearchedCase(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSearchedCase(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSearchedCase(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class PositionContext extends PrimaryExpressionContext {
		public ValueExpressionContext substr;
		public ValueExpressionContext str;
		public TerminalNode POSITION() { return getToken(HoodieSqlBaseParser.POSITION, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode IN() { return getToken(HoodieSqlBaseParser.IN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List valueExpression() {
			return getRuleContexts(ValueExpressionContext.class);
		}
		public ValueExpressionContext valueExpression(int i) {
			return getRuleContext(ValueExpressionContext.class,i);
		}
		public PositionContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPosition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPosition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPosition(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class FirstContext extends PrimaryExpressionContext {
		public TerminalNode FIRST() { return getToken(HoodieSqlBaseParser.FIRST, 0); }
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode IGNORE() { return getToken(HoodieSqlBaseParser.IGNORE, 0); }
		public TerminalNode NULLS() { return getToken(HoodieSqlBaseParser.NULLS, 0); }
		public FirstContext(PrimaryExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFirst(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFirst(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFirst(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PrimaryExpressionContext primaryExpression() throws RecognitionException {
		return primaryExpression(0);
	}

	private PrimaryExpressionContext primaryExpression(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		PrimaryExpressionContext _localctx = new PrimaryExpressionContext(_ctx, _parentState);
		PrimaryExpressionContext _prevctx = _localctx;
		int _startState = 222;
		enterRecursionRule(_localctx, 222, RULE_primaryExpression, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(2180);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,273,_ctx) ) {
			case 1:
				{
				_localctx = new CurrentLikeContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(1993);
				((CurrentLikeContext)_localctx).name = _input.LT(1);
				_la = _input.LA(1);
				if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT_DATE) | (1L << CURRENT_TIMESTAMP) | (1L << CURRENT_USER))) != 0)) ) {
					((CurrentLikeContext)_localctx).name = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case 2:
				{
				_localctx = new SearchedCaseContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1994);
				match(CASE);
				setState(1996); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(1995);
					whenClause();
					}
					}
					setState(1998); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==WHEN );
				setState(2002);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ELSE) {
					{
					setState(2000);
					match(ELSE);
					setState(2001);
					((SearchedCaseContext)_localctx).elseExpression = expression();
					}
				}

				setState(2004);
				match(END);
				}
				break;
			case 3:
				{
				_localctx = new SimpleCaseContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2006);
				match(CASE);
				setState(2007);
				((SimpleCaseContext)_localctx).value = expression();
				setState(2009); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(2008);
					whenClause();
					}
					}
					setState(2011); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==WHEN );
				setState(2015);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ELSE) {
					{
					setState(2013);
					match(ELSE);
					setState(2014);
					((SimpleCaseContext)_localctx).elseExpression = expression();
					}
				}

				setState(2017);
				match(END);
				}
				break;
			case 4:
				{
				_localctx = new CastContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2019);
				((CastContext)_localctx).name = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==CAST || _la==TRY_CAST) ) {
					((CastContext)_localctx).name = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2020);
				match(LEFT_PAREN);
				setState(2021);
				expression();
				setState(2022);
				match(AS);
				setState(2023);
				dataType();
				setState(2024);
				match(RIGHT_PAREN);
				}
				break;
			case 5:
				{
				_localctx = new StructContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2026);
				match(STRUCT);
				setState(2027);
				match(LEFT_PAREN);
				setState(2036);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,258,_ctx) ) {
				case 1:
					{
					setState(2028);
					((StructContext)_localctx).namedExpression = namedExpression();
					((StructContext)_localctx).argument.add(((StructContext)_localctx).namedExpression);
					setState(2033);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(2029);
						match(COMMA);
						setState(2030);
						((StructContext)_localctx).namedExpression = namedExpression();
						((StructContext)_localctx).argument.add(((StructContext)_localctx).namedExpression);
						}
						}
						setState(2035);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
					break;
				}
				setState(2038);
				match(RIGHT_PAREN);
				}
				break;
			case 6:
				{
				_localctx = new FirstContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2039);
				match(FIRST);
				setState(2040);
				match(LEFT_PAREN);
				setState(2041);
				expression();
				setState(2044);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==IGNORE) {
					{
					setState(2042);
					match(IGNORE);
					setState(2043);
					match(NULLS);
					}
				}

				setState(2046);
				match(RIGHT_PAREN);
				}
				break;
			case 7:
				{
				_localctx = new LastContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2048);
				match(LAST);
				setState(2049);
				match(LEFT_PAREN);
				setState(2050);
				expression();
				setState(2053);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==IGNORE) {
					{
					setState(2051);
					match(IGNORE);
					setState(2052);
					match(NULLS);
					}
				}

				setState(2055);
				match(RIGHT_PAREN);
				}
				break;
			case 8:
				{
				_localctx = new PositionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2057);
				match(POSITION);
				setState(2058);
				match(LEFT_PAREN);
				setState(2059);
				((PositionContext)_localctx).substr = valueExpression(0);
				setState(2060);
				match(IN);
				setState(2061);
				((PositionContext)_localctx).str = valueExpression(0);
				setState(2062);
				match(RIGHT_PAREN);
				}
				break;
			case 9:
				{
				_localctx = new ConstantDefaultContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2064);
				constant();
				}
				break;
			case 10:
				{
				_localctx = new StarContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2065);
				match(ASTERISK);
				}
				break;
			case 11:
				{
				_localctx = new StarContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2066);
				qualifiedName();
				setState(2067);
				match(DOT);
				setState(2068);
				match(ASTERISK);
				}
				break;
			case 12:
				{
				_localctx = new RowConstructorContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2070);
				match(LEFT_PAREN);
				setState(2071);
				namedExpression();
				setState(2074); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(2072);
					match(COMMA);
					setState(2073);
					namedExpression();
					}
					}
					setState(2076); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==COMMA );
				setState(2078);
				match(RIGHT_PAREN);
				}
				break;
			case 13:
				{
				_localctx = new SubqueryExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2080);
				match(LEFT_PAREN);
				setState(2081);
				query();
				setState(2082);
				match(RIGHT_PAREN);
				}
				break;
			case 14:
				{
				_localctx = new FunctionCallContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2084);
				functionName();
				setState(2085);
				match(LEFT_PAREN);
				setState(2097);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,264,_ctx) ) {
				case 1:
					{
					setState(2087);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,262,_ctx) ) {
					case 1:
						{
						setState(2086);
						setQuantifier();
						}
						break;
					}
					setState(2089);
					((FunctionCallContext)_localctx).expression = expression();
					((FunctionCallContext)_localctx).argument.add(((FunctionCallContext)_localctx).expression);
					setState(2094);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(2090);
						match(COMMA);
						setState(2091);
						((FunctionCallContext)_localctx).expression = expression();
						((FunctionCallContext)_localctx).argument.add(((FunctionCallContext)_localctx).expression);
						}
						}
						setState(2096);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
					break;
				}
				setState(2099);
				match(RIGHT_PAREN);
				setState(2106);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,265,_ctx) ) {
				case 1:
					{
					setState(2100);
					match(FILTER);
					setState(2101);
					match(LEFT_PAREN);
					setState(2102);
					match(WHERE);
					setState(2103);
					((FunctionCallContext)_localctx).where = booleanExpression(0);
					setState(2104);
					match(RIGHT_PAREN);
					}
					break;
				}
				setState(2110);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,266,_ctx) ) {
				case 1:
					{
					setState(2108);
					((FunctionCallContext)_localctx).nullsOption = _input.LT(1);
					_la = _input.LA(1);
					if ( !(_la==IGNORE || _la==RESPECT) ) {
						((FunctionCallContext)_localctx).nullsOption = (Token)_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					setState(2109);
					match(NULLS);
					}
					break;
				}
				setState(2114);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,267,_ctx) ) {
				case 1:
					{
					setState(2112);
					match(OVER);
					setState(2113);
					windowSpec();
					}
					break;
				}
				}
				break;
			case 15:
				{
				_localctx = new LambdaContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2116);
				identifier();
				setState(2117);
				match(T__2);
				setState(2118);
				expression();
				}
				break;
			case 16:
				{
				_localctx = new LambdaContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2120);
				match(LEFT_PAREN);
				setState(2121);
				identifier();
				setState(2124); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(2122);
					match(COMMA);
					setState(2123);
					identifier();
					}
					}
					setState(2126); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==COMMA );
				setState(2128);
				match(RIGHT_PAREN);
				setState(2129);
				match(T__2);
				setState(2130);
				expression();
				}
				break;
			case 17:
				{
				_localctx = new ColumnReferenceContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2132);
				identifier();
				}
				break;
			case 18:
				{
				_localctx = new ParenthesizedExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2133);
				match(LEFT_PAREN);
				setState(2134);
				expression();
				setState(2135);
				match(RIGHT_PAREN);
				}
				break;
			case 19:
				{
				_localctx = new ExtractContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2137);
				match(EXTRACT);
				setState(2138);
				match(LEFT_PAREN);
				setState(2139);
				((ExtractContext)_localctx).field = identifier();
				setState(2140);
				match(FROM);
				setState(2141);
				((ExtractContext)_localctx).source = valueExpression(0);
				setState(2142);
				match(RIGHT_PAREN);
				}
				break;
			case 20:
				{
				_localctx = new SubstringContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2144);
				_la = _input.LA(1);
				if ( !(_la==SUBSTR || _la==SUBSTRING) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2145);
				match(LEFT_PAREN);
				setState(2146);
				((SubstringContext)_localctx).str = valueExpression(0);
				setState(2147);
				_la = _input.LA(1);
				if ( !(_la==FROM || _la==COMMA) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2148);
				((SubstringContext)_localctx).pos = valueExpression(0);
				setState(2151);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FOR || _la==COMMA) {
					{
					setState(2149);
					_la = _input.LA(1);
					if ( !(_la==FOR || _la==COMMA) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					setState(2150);
					((SubstringContext)_localctx).len = valueExpression(0);
					}
				}

				setState(2153);
				match(RIGHT_PAREN);
				}
				break;
			case 21:
				{
				_localctx = new TrimContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2155);
				match(TRIM);
				setState(2156);
				match(LEFT_PAREN);
				setState(2158);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,270,_ctx) ) {
				case 1:
					{
					setState(2157);
					((TrimContext)_localctx).trimOption = _input.LT(1);
					_la = _input.LA(1);
					if ( !(_la==BOTH || _la==LEADING || _la==TRAILING) ) {
						((TrimContext)_localctx).trimOption = (Token)_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
					break;
				}
				setState(2161);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,271,_ctx) ) {
				case 1:
					{
					setState(2160);
					((TrimContext)_localctx).trimStr = valueExpression(0);
					}
					break;
				}
				setState(2163);
				match(FROM);
				setState(2164);
				((TrimContext)_localctx).srcStr = valueExpression(0);
				setState(2165);
				match(RIGHT_PAREN);
				}
				break;
			case 22:
				{
				_localctx = new OverlayContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(2167);
				match(OVERLAY);
				setState(2168);
				match(LEFT_PAREN);
				setState(2169);
				((OverlayContext)_localctx).input = valueExpression(0);
				setState(2170);
				match(PLACING);
				setState(2171);
				((OverlayContext)_localctx).replace = valueExpression(0);
				setState(2172);
				match(FROM);
				setState(2173);
				((OverlayContext)_localctx).position = valueExpression(0);
				setState(2176);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==FOR) {
					{
					setState(2174);
					match(FOR);
					setState(2175);
					((OverlayContext)_localctx).length = valueExpression(0);
					}
				}

				setState(2178);
				match(RIGHT_PAREN);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(2192);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,275,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(2190);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,274,_ctx) ) {
					case 1:
						{
						_localctx = new SubscriptContext(new PrimaryExpressionContext(_parentctx, _parentState));
						((SubscriptContext)_localctx).value = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_primaryExpression);
						setState(2182);
						if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
						setState(2183);
						match(T__3);
						setState(2184);
						((SubscriptContext)_localctx).index = valueExpression(0);
						setState(2185);
						match(T__4);
						}
						break;
					case 2:
						{
						_localctx = new DereferenceContext(new PrimaryExpressionContext(_parentctx, _parentState));
						((DereferenceContext)_localctx).base = _prevctx;
						pushNewRecursionContext(_localctx, _startState, RULE_primaryExpression);
						setState(2187);
						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
						setState(2188);
						match(DOT);
						setState(2189);
						((DereferenceContext)_localctx).fieldName = identifier();
						}
						break;
					}
					} 
				}
				setState(2194);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,275,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class ConstantContext extends ParserRuleContext {
		public ConstantContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_constant; }
	 
		public ConstantContext() { }
		public void copyFrom(ConstantContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class NullLiteralContext extends ConstantContext {
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public NullLiteralContext(ConstantContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNullLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNullLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNullLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class StringLiteralContext extends ConstantContext {
		public List STRING() { return getTokens(HoodieSqlBaseParser.STRING); }
		public TerminalNode STRING(int i) {
			return getToken(HoodieSqlBaseParser.STRING, i);
		}
		public StringLiteralContext(ConstantContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterStringLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitStringLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitStringLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class TypeConstructorContext extends ConstantContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TypeConstructorContext(ConstantContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTypeConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTypeConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTypeConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class IntervalLiteralContext extends ConstantContext {
		public IntervalContext interval() {
			return getRuleContext(IntervalContext.class,0);
		}
		public IntervalLiteralContext(ConstantContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIntervalLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIntervalLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIntervalLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NumericLiteralContext extends ConstantContext {
		public NumberContext number() {
			return getRuleContext(NumberContext.class,0);
		}
		public NumericLiteralContext(ConstantContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNumericLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNumericLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNumericLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BooleanLiteralContext extends ConstantContext {
		public BooleanValueContext booleanValue() {
			return getRuleContext(BooleanValueContext.class,0);
		}
		public BooleanLiteralContext(ConstantContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterBooleanLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitBooleanLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitBooleanLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ConstantContext constant() throws RecognitionException {
		ConstantContext _localctx = new ConstantContext(_ctx, getState());
		enterRule(_localctx, 224, RULE_constant);
		try {
			int _alt;
			setState(2207);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,277,_ctx) ) {
			case 1:
				_localctx = new NullLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2195);
				match(NULL);
				}
				break;
			case 2:
				_localctx = new IntervalLiteralContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2196);
				interval();
				}
				break;
			case 3:
				_localctx = new TypeConstructorContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2197);
				identifier();
				setState(2198);
				match(STRING);
				}
				break;
			case 4:
				_localctx = new NumericLiteralContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(2200);
				number();
				}
				break;
			case 5:
				_localctx = new BooleanLiteralContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(2201);
				booleanValue();
				}
				break;
			case 6:
				_localctx = new StringLiteralContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(2203); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(2202);
						match(STRING);
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(2205); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,276,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ComparisonOperatorContext extends ParserRuleContext {
		public TerminalNode EQ() { return getToken(HoodieSqlBaseParser.EQ, 0); }
		public TerminalNode NEQ() { return getToken(HoodieSqlBaseParser.NEQ, 0); }
		public TerminalNode NEQJ() { return getToken(HoodieSqlBaseParser.NEQJ, 0); }
		public TerminalNode LT() { return getToken(HoodieSqlBaseParser.LT, 0); }
		public TerminalNode LTE() { return getToken(HoodieSqlBaseParser.LTE, 0); }
		public TerminalNode GT() { return getToken(HoodieSqlBaseParser.GT, 0); }
		public TerminalNode GTE() { return getToken(HoodieSqlBaseParser.GTE, 0); }
		public TerminalNode NSEQ() { return getToken(HoodieSqlBaseParser.NSEQ, 0); }
		public ComparisonOperatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_comparisonOperator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterComparisonOperator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitComparisonOperator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitComparisonOperator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ComparisonOperatorContext comparisonOperator() throws RecognitionException {
		ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState());
		enterRule(_localctx, 226, RULE_comparisonOperator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2209);
			_la = _input.LA(1);
			if ( !(((((_la - 273)) & ~0x3f) == 0 && ((1L << (_la - 273)) & ((1L << (EQ - 273)) | (1L << (NSEQ - 273)) | (1L << (NEQ - 273)) | (1L << (NEQJ - 273)) | (1L << (LT - 273)) | (1L << (LTE - 273)) | (1L << (GT - 273)) | (1L << (GTE - 273)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArithmeticOperatorContext extends ParserRuleContext {
		public TerminalNode PLUS() { return getToken(HoodieSqlBaseParser.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public TerminalNode ASTERISK() { return getToken(HoodieSqlBaseParser.ASTERISK, 0); }
		public TerminalNode SLASH() { return getToken(HoodieSqlBaseParser.SLASH, 0); }
		public TerminalNode PERCENT() { return getToken(HoodieSqlBaseParser.PERCENT, 0); }
		public TerminalNode DIV() { return getToken(HoodieSqlBaseParser.DIV, 0); }
		public TerminalNode TILDE() { return getToken(HoodieSqlBaseParser.TILDE, 0); }
		public TerminalNode AMPERSAND() { return getToken(HoodieSqlBaseParser.AMPERSAND, 0); }
		public TerminalNode PIPE() { return getToken(HoodieSqlBaseParser.PIPE, 0); }
		public TerminalNode CONCAT_PIPE() { return getToken(HoodieSqlBaseParser.CONCAT_PIPE, 0); }
		public TerminalNode HAT() { return getToken(HoodieSqlBaseParser.HAT, 0); }
		public ArithmeticOperatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arithmeticOperator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterArithmeticOperator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitArithmeticOperator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitArithmeticOperator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArithmeticOperatorContext arithmeticOperator() throws RecognitionException {
		ArithmeticOperatorContext _localctx = new ArithmeticOperatorContext(_ctx, getState());
		enterRule(_localctx, 228, RULE_arithmeticOperator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2211);
			_la = _input.LA(1);
			if ( !(_la==DIV || ((((_la - 281)) & ~0x3f) == 0 && ((1L << (_la - 281)) & ((1L << (PLUS - 281)) | (1L << (MINUS - 281)) | (1L << (ASTERISK - 281)) | (1L << (SLASH - 281)) | (1L << (PERCENT - 281)) | (1L << (TILDE - 281)) | (1L << (AMPERSAND - 281)) | (1L << (PIPE - 281)) | (1L << (CONCAT_PIPE - 281)) | (1L << (HAT - 281)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PredicateOperatorContext extends ParserRuleContext {
		public TerminalNode OR() { return getToken(HoodieSqlBaseParser.OR, 0); }
		public TerminalNode AND() { return getToken(HoodieSqlBaseParser.AND, 0); }
		public TerminalNode IN() { return getToken(HoodieSqlBaseParser.IN, 0); }
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public PredicateOperatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_predicateOperator; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPredicateOperator(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPredicateOperator(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPredicateOperator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PredicateOperatorContext predicateOperator() throws RecognitionException {
		PredicateOperatorContext _localctx = new PredicateOperatorContext(_ctx, getState());
		enterRule(_localctx, 230, RULE_predicateOperator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2213);
			_la = _input.LA(1);
			if ( !(_la==AND || ((((_la - 109)) & ~0x3f) == 0 && ((1L << (_la - 109)) & ((1L << (IN - 109)) | (1L << (NOT - 109)) | (1L << (OR - 109)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BooleanValueContext extends ParserRuleContext {
		public TerminalNode TRUE() { return getToken(HoodieSqlBaseParser.TRUE, 0); }
		public TerminalNode FALSE() { return getToken(HoodieSqlBaseParser.FALSE, 0); }
		public BooleanValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_booleanValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterBooleanValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitBooleanValue(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitBooleanValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BooleanValueContext booleanValue() throws RecognitionException {
		BooleanValueContext _localctx = new BooleanValueContext(_ctx, getState());
		enterRule(_localctx, 232, RULE_booleanValue);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2215);
			_la = _input.LA(1);
			if ( !(_la==FALSE || _la==TRUE) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IntervalContext extends ParserRuleContext {
		public TerminalNode INTERVAL() { return getToken(HoodieSqlBaseParser.INTERVAL, 0); }
		public ErrorCapturingMultiUnitsIntervalContext errorCapturingMultiUnitsInterval() {
			return getRuleContext(ErrorCapturingMultiUnitsIntervalContext.class,0);
		}
		public ErrorCapturingUnitToUnitIntervalContext errorCapturingUnitToUnitInterval() {
			return getRuleContext(ErrorCapturingUnitToUnitIntervalContext.class,0);
		}
		public IntervalContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_interval; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterInterval(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitInterval(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitInterval(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IntervalContext interval() throws RecognitionException {
		IntervalContext _localctx = new IntervalContext(_ctx, getState());
		enterRule(_localctx, 234, RULE_interval);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2217);
			match(INTERVAL);
			setState(2220);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,278,_ctx) ) {
			case 1:
				{
				setState(2218);
				errorCapturingMultiUnitsInterval();
				}
				break;
			case 2:
				{
				setState(2219);
				errorCapturingUnitToUnitInterval();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ErrorCapturingMultiUnitsIntervalContext extends ParserRuleContext {
		public MultiUnitsIntervalContext body;
		public MultiUnitsIntervalContext multiUnitsInterval() {
			return getRuleContext(MultiUnitsIntervalContext.class,0);
		}
		public UnitToUnitIntervalContext unitToUnitInterval() {
			return getRuleContext(UnitToUnitIntervalContext.class,0);
		}
		public ErrorCapturingMultiUnitsIntervalContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_errorCapturingMultiUnitsInterval; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterErrorCapturingMultiUnitsInterval(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitErrorCapturingMultiUnitsInterval(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitErrorCapturingMultiUnitsInterval(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ErrorCapturingMultiUnitsIntervalContext errorCapturingMultiUnitsInterval() throws RecognitionException {
		ErrorCapturingMultiUnitsIntervalContext _localctx = new ErrorCapturingMultiUnitsIntervalContext(_ctx, getState());
		enterRule(_localctx, 236, RULE_errorCapturingMultiUnitsInterval);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2222);
			((ErrorCapturingMultiUnitsIntervalContext)_localctx).body = multiUnitsInterval();
			setState(2224);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,279,_ctx) ) {
			case 1:
				{
				setState(2223);
				unitToUnitInterval();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultiUnitsIntervalContext extends ParserRuleContext {
		public IdentifierContext identifier;
		public List unit = new ArrayList();
		public List intervalValue() {
			return getRuleContexts(IntervalValueContext.class);
		}
		public IntervalValueContext intervalValue(int i) {
			return getRuleContext(IntervalValueContext.class,i);
		}
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public MultiUnitsIntervalContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multiUnitsInterval; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterMultiUnitsInterval(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitMultiUnitsInterval(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitMultiUnitsInterval(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultiUnitsIntervalContext multiUnitsInterval() throws RecognitionException {
		MultiUnitsIntervalContext _localctx = new MultiUnitsIntervalContext(_ctx, getState());
		enterRule(_localctx, 238, RULE_multiUnitsInterval);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(2229); 
			_errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					setState(2226);
					intervalValue();
					setState(2227);
					((MultiUnitsIntervalContext)_localctx).identifier = identifier();
					((MultiUnitsIntervalContext)_localctx).unit.add(((MultiUnitsIntervalContext)_localctx).identifier);
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(2231); 
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,280,_ctx);
			} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ErrorCapturingUnitToUnitIntervalContext extends ParserRuleContext {
		public UnitToUnitIntervalContext body;
		public MultiUnitsIntervalContext error1;
		public UnitToUnitIntervalContext error2;
		public List unitToUnitInterval() {
			return getRuleContexts(UnitToUnitIntervalContext.class);
		}
		public UnitToUnitIntervalContext unitToUnitInterval(int i) {
			return getRuleContext(UnitToUnitIntervalContext.class,i);
		}
		public MultiUnitsIntervalContext multiUnitsInterval() {
			return getRuleContext(MultiUnitsIntervalContext.class,0);
		}
		public ErrorCapturingUnitToUnitIntervalContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_errorCapturingUnitToUnitInterval; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterErrorCapturingUnitToUnitInterval(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitErrorCapturingUnitToUnitInterval(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitErrorCapturingUnitToUnitInterval(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ErrorCapturingUnitToUnitIntervalContext errorCapturingUnitToUnitInterval() throws RecognitionException {
		ErrorCapturingUnitToUnitIntervalContext _localctx = new ErrorCapturingUnitToUnitIntervalContext(_ctx, getState());
		enterRule(_localctx, 240, RULE_errorCapturingUnitToUnitInterval);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2233);
			((ErrorCapturingUnitToUnitIntervalContext)_localctx).body = unitToUnitInterval();
			setState(2236);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,281,_ctx) ) {
			case 1:
				{
				setState(2234);
				((ErrorCapturingUnitToUnitIntervalContext)_localctx).error1 = multiUnitsInterval();
				}
				break;
			case 2:
				{
				setState(2235);
				((ErrorCapturingUnitToUnitIntervalContext)_localctx).error2 = unitToUnitInterval();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class UnitToUnitIntervalContext extends ParserRuleContext {
		public IntervalValueContext value;
		public IdentifierContext from;
		public IdentifierContext to;
		public TerminalNode TO() { return getToken(HoodieSqlBaseParser.TO, 0); }
		public IntervalValueContext intervalValue() {
			return getRuleContext(IntervalValueContext.class,0);
		}
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public UnitToUnitIntervalContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unitToUnitInterval; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterUnitToUnitInterval(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitUnitToUnitInterval(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitUnitToUnitInterval(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UnitToUnitIntervalContext unitToUnitInterval() throws RecognitionException {
		UnitToUnitIntervalContext _localctx = new UnitToUnitIntervalContext(_ctx, getState());
		enterRule(_localctx, 242, RULE_unitToUnitInterval);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2238);
			((UnitToUnitIntervalContext)_localctx).value = intervalValue();
			setState(2239);
			((UnitToUnitIntervalContext)_localctx).from = identifier();
			setState(2240);
			match(TO);
			setState(2241);
			((UnitToUnitIntervalContext)_localctx).to = identifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IntervalValueContext extends ParserRuleContext {
		public TerminalNode INTEGER_VALUE() { return getToken(HoodieSqlBaseParser.INTEGER_VALUE, 0); }
		public TerminalNode DECIMAL_VALUE() { return getToken(HoodieSqlBaseParser.DECIMAL_VALUE, 0); }
		public TerminalNode STRING() { return getToken(HoodieSqlBaseParser.STRING, 0); }
		public TerminalNode PLUS() { return getToken(HoodieSqlBaseParser.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public IntervalValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_intervalValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIntervalValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIntervalValue(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIntervalValue(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IntervalValueContext intervalValue() throws RecognitionException {
		IntervalValueContext _localctx = new IntervalValueContext(_ctx, getState());
		enterRule(_localctx, 244, RULE_intervalValue);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2244);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==PLUS || _la==MINUS) {
				{
				setState(2243);
				_la = _input.LA(1);
				if ( !(_la==PLUS || _la==MINUS) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
			}

			setState(2246);
			_la = _input.LA(1);
			if ( !(((((_la - 291)) & ~0x3f) == 0 && ((1L << (_la - 291)) & ((1L << (STRING - 291)) | (1L << (INTEGER_VALUE - 291)) | (1L << (DECIMAL_VALUE - 291)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ColPositionContext extends ParserRuleContext {
		public Token position;
		public ErrorCapturingIdentifierContext afterCol;
		public TerminalNode FIRST() { return getToken(HoodieSqlBaseParser.FIRST, 0); }
		public TerminalNode AFTER() { return getToken(HoodieSqlBaseParser.AFTER, 0); }
		public ErrorCapturingIdentifierContext errorCapturingIdentifier() {
			return getRuleContext(ErrorCapturingIdentifierContext.class,0);
		}
		public ColPositionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_colPosition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterColPosition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitColPosition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitColPosition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ColPositionContext colPosition() throws RecognitionException {
		ColPositionContext _localctx = new ColPositionContext(_ctx, getState());
		enterRule(_localctx, 246, RULE_colPosition);
		try {
			setState(2251);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case FIRST:
				enterOuterAlt(_localctx, 1);
				{
				setState(2248);
				((ColPositionContext)_localctx).position = match(FIRST);
				}
				break;
			case AFTER:
				enterOuterAlt(_localctx, 2);
				{
				setState(2249);
				((ColPositionContext)_localctx).position = match(AFTER);
				setState(2250);
				((ColPositionContext)_localctx).afterCol = errorCapturingIdentifier();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DataTypeContext extends ParserRuleContext {
		public DataTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dataType; }
	 
		public DataTypeContext() { }
		public void copyFrom(DataTypeContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ComplexDataTypeContext extends DataTypeContext {
		public Token complex;
		public TerminalNode LT() { return getToken(HoodieSqlBaseParser.LT, 0); }
		public List dataType() {
			return getRuleContexts(DataTypeContext.class);
		}
		public DataTypeContext dataType(int i) {
			return getRuleContext(DataTypeContext.class,i);
		}
		public TerminalNode GT() { return getToken(HoodieSqlBaseParser.GT, 0); }
		public TerminalNode ARRAY() { return getToken(HoodieSqlBaseParser.ARRAY, 0); }
		public TerminalNode COMMA() { return getToken(HoodieSqlBaseParser.COMMA, 0); }
		public TerminalNode MAP() { return getToken(HoodieSqlBaseParser.MAP, 0); }
		public TerminalNode STRUCT() { return getToken(HoodieSqlBaseParser.STRUCT, 0); }
		public TerminalNode NEQ() { return getToken(HoodieSqlBaseParser.NEQ, 0); }
		public ComplexColTypeListContext complexColTypeList() {
			return getRuleContext(ComplexColTypeListContext.class,0);
		}
		public ComplexDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterComplexDataType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitComplexDataType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitComplexDataType(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class YearMonthIntervalDataTypeContext extends DataTypeContext {
		public Token from;
		public Token to;
		public TerminalNode INTERVAL() { return getToken(HoodieSqlBaseParser.INTERVAL, 0); }
		public TerminalNode YEAR() { return getToken(HoodieSqlBaseParser.YEAR, 0); }
		public List MONTH() { return getTokens(HoodieSqlBaseParser.MONTH); }
		public TerminalNode MONTH(int i) {
			return getToken(HoodieSqlBaseParser.MONTH, i);
		}
		public TerminalNode TO() { return getToken(HoodieSqlBaseParser.TO, 0); }
		public YearMonthIntervalDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterYearMonthIntervalDataType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitYearMonthIntervalDataType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitYearMonthIntervalDataType(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class DayTimeIntervalDataTypeContext extends DataTypeContext {
		public Token from;
		public Token to;
		public TerminalNode INTERVAL() { return getToken(HoodieSqlBaseParser.INTERVAL, 0); }
		public TerminalNode DAY() { return getToken(HoodieSqlBaseParser.DAY, 0); }
		public List HOUR() { return getTokens(HoodieSqlBaseParser.HOUR); }
		public TerminalNode HOUR(int i) {
			return getToken(HoodieSqlBaseParser.HOUR, i);
		}
		public List MINUTE() { return getTokens(HoodieSqlBaseParser.MINUTE); }
		public TerminalNode MINUTE(int i) {
			return getToken(HoodieSqlBaseParser.MINUTE, i);
		}
		public List SECOND() { return getTokens(HoodieSqlBaseParser.SECOND); }
		public TerminalNode SECOND(int i) {
			return getToken(HoodieSqlBaseParser.SECOND, i);
		}
		public TerminalNode TO() { return getToken(HoodieSqlBaseParser.TO, 0); }
		public DayTimeIntervalDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDayTimeIntervalDataType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDayTimeIntervalDataType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDayTimeIntervalDataType(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class PrimitiveDataTypeContext extends DataTypeContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public List INTEGER_VALUE() { return getTokens(HoodieSqlBaseParser.INTEGER_VALUE); }
		public TerminalNode INTEGER_VALUE(int i) {
			return getToken(HoodieSqlBaseParser.INTEGER_VALUE, i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public PrimitiveDataTypeContext(DataTypeContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterPrimitiveDataType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitPrimitiveDataType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitPrimitiveDataType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DataTypeContext dataType() throws RecognitionException {
		DataTypeContext _localctx = new DataTypeContext(_ctx, getState());
		enterRule(_localctx, 248, RULE_dataType);
		int _la;
		try {
			setState(2299);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,290,_ctx) ) {
			case 1:
				_localctx = new ComplexDataTypeContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2253);
				((ComplexDataTypeContext)_localctx).complex = match(ARRAY);
				setState(2254);
				match(LT);
				setState(2255);
				dataType();
				setState(2256);
				match(GT);
				}
				break;
			case 2:
				_localctx = new ComplexDataTypeContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2258);
				((ComplexDataTypeContext)_localctx).complex = match(MAP);
				setState(2259);
				match(LT);
				setState(2260);
				dataType();
				setState(2261);
				match(COMMA);
				setState(2262);
				dataType();
				setState(2263);
				match(GT);
				}
				break;
			case 3:
				_localctx = new ComplexDataTypeContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2265);
				((ComplexDataTypeContext)_localctx).complex = match(STRUCT);
				setState(2272);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case LT:
					{
					setState(2266);
					match(LT);
					setState(2268);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,284,_ctx) ) {
					case 1:
						{
						setState(2267);
						complexColTypeList();
						}
						break;
					}
					setState(2270);
					match(GT);
					}
					break;
				case NEQ:
					{
					setState(2271);
					match(NEQ);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 4:
				_localctx = new YearMonthIntervalDataTypeContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(2274);
				match(INTERVAL);
				setState(2275);
				((YearMonthIntervalDataTypeContext)_localctx).from = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==MONTH || _la==YEAR) ) {
					((YearMonthIntervalDataTypeContext)_localctx).from = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2278);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,286,_ctx) ) {
				case 1:
					{
					setState(2276);
					match(TO);
					setState(2277);
					((YearMonthIntervalDataTypeContext)_localctx).to = match(MONTH);
					}
					break;
				}
				}
				break;
			case 5:
				_localctx = new DayTimeIntervalDataTypeContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(2280);
				match(INTERVAL);
				setState(2281);
				((DayTimeIntervalDataTypeContext)_localctx).from = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==DAY || _la==HOUR || _la==MINUTE || _la==SECOND) ) {
					((DayTimeIntervalDataTypeContext)_localctx).from = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2284);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,287,_ctx) ) {
				case 1:
					{
					setState(2282);
					match(TO);
					setState(2283);
					((DayTimeIntervalDataTypeContext)_localctx).to = _input.LT(1);
					_la = _input.LA(1);
					if ( !(_la==HOUR || _la==MINUTE || _la==SECOND) ) {
						((DayTimeIntervalDataTypeContext)_localctx).to = (Token)_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
					break;
				}
				}
				break;
			case 6:
				_localctx = new PrimitiveDataTypeContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(2286);
				identifier();
				setState(2297);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,289,_ctx) ) {
				case 1:
					{
					setState(2287);
					match(LEFT_PAREN);
					setState(2288);
					match(INTEGER_VALUE);
					setState(2293);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(2289);
						match(COMMA);
						setState(2290);
						match(INTEGER_VALUE);
						}
						}
						setState(2295);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					setState(2296);
					match(RIGHT_PAREN);
					}
					break;
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QualifiedColTypeWithPositionListContext extends ParserRuleContext {
		public List qualifiedColTypeWithPosition() {
			return getRuleContexts(QualifiedColTypeWithPositionContext.class);
		}
		public QualifiedColTypeWithPositionContext qualifiedColTypeWithPosition(int i) {
			return getRuleContext(QualifiedColTypeWithPositionContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public QualifiedColTypeWithPositionListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_qualifiedColTypeWithPositionList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQualifiedColTypeWithPositionList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQualifiedColTypeWithPositionList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQualifiedColTypeWithPositionList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QualifiedColTypeWithPositionListContext qualifiedColTypeWithPositionList() throws RecognitionException {
		QualifiedColTypeWithPositionListContext _localctx = new QualifiedColTypeWithPositionListContext(_ctx, getState());
		enterRule(_localctx, 250, RULE_qualifiedColTypeWithPositionList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2301);
			qualifiedColTypeWithPosition();
			setState(2306);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(2302);
				match(COMMA);
				setState(2303);
				qualifiedColTypeWithPosition();
				}
				}
				setState(2308);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QualifiedColTypeWithPositionContext extends ParserRuleContext {
		public MultipartIdentifierContext name;
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public MultipartIdentifierContext multipartIdentifier() {
			return getRuleContext(MultipartIdentifierContext.class,0);
		}
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public CommentSpecContext commentSpec() {
			return getRuleContext(CommentSpecContext.class,0);
		}
		public ColPositionContext colPosition() {
			return getRuleContext(ColPositionContext.class,0);
		}
		public QualifiedColTypeWithPositionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_qualifiedColTypeWithPosition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQualifiedColTypeWithPosition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQualifiedColTypeWithPosition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQualifiedColTypeWithPosition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QualifiedColTypeWithPositionContext qualifiedColTypeWithPosition() throws RecognitionException {
		QualifiedColTypeWithPositionContext _localctx = new QualifiedColTypeWithPositionContext(_ctx, getState());
		enterRule(_localctx, 252, RULE_qualifiedColTypeWithPosition);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2309);
			((QualifiedColTypeWithPositionContext)_localctx).name = multipartIdentifier();
			setState(2310);
			dataType();
			setState(2313);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NOT) {
				{
				setState(2311);
				match(NOT);
				setState(2312);
				match(NULL);
				}
			}

			setState(2316);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==COMMENT) {
				{
				setState(2315);
				commentSpec();
				}
			}

			setState(2319);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==AFTER || _la==FIRST) {
				{
				setState(2318);
				colPosition();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ColTypeListContext extends ParserRuleContext {
		public List colType() {
			return getRuleContexts(ColTypeContext.class);
		}
		public ColTypeContext colType(int i) {
			return getRuleContext(ColTypeContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public ColTypeListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_colTypeList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterColTypeList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitColTypeList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitColTypeList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ColTypeListContext colTypeList() throws RecognitionException {
		ColTypeListContext _localctx = new ColTypeListContext(_ctx, getState());
		enterRule(_localctx, 254, RULE_colTypeList);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(2321);
			colType();
			setState(2326);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,295,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(2322);
					match(COMMA);
					setState(2323);
					colType();
					}
					} 
				}
				setState(2328);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,295,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ColTypeContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext colName;
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public ErrorCapturingIdentifierContext errorCapturingIdentifier() {
			return getRuleContext(ErrorCapturingIdentifierContext.class,0);
		}
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public CommentSpecContext commentSpec() {
			return getRuleContext(CommentSpecContext.class,0);
		}
		public ColTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_colType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterColType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitColType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitColType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ColTypeContext colType() throws RecognitionException {
		ColTypeContext _localctx = new ColTypeContext(_ctx, getState());
		enterRule(_localctx, 256, RULE_colType);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2329);
			((ColTypeContext)_localctx).colName = errorCapturingIdentifier();
			setState(2330);
			dataType();
			setState(2333);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,296,_ctx) ) {
			case 1:
				{
				setState(2331);
				match(NOT);
				setState(2332);
				match(NULL);
				}
				break;
			}
			setState(2336);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,297,_ctx) ) {
			case 1:
				{
				setState(2335);
				commentSpec();
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ComplexColTypeListContext extends ParserRuleContext {
		public List complexColType() {
			return getRuleContexts(ComplexColTypeContext.class);
		}
		public ComplexColTypeContext complexColType(int i) {
			return getRuleContext(ComplexColTypeContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public ComplexColTypeListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_complexColTypeList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterComplexColTypeList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitComplexColTypeList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitComplexColTypeList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ComplexColTypeListContext complexColTypeList() throws RecognitionException {
		ComplexColTypeListContext _localctx = new ComplexColTypeListContext(_ctx, getState());
		enterRule(_localctx, 258, RULE_complexColTypeList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2338);
			complexColType();
			setState(2343);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(2339);
				match(COMMA);
				setState(2340);
				complexColType();
				}
				}
				setState(2345);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ComplexColTypeContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public CommentSpecContext commentSpec() {
			return getRuleContext(CommentSpecContext.class,0);
		}
		public ComplexColTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_complexColType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterComplexColType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitComplexColType(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitComplexColType(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ComplexColTypeContext complexColType() throws RecognitionException {
		ComplexColTypeContext _localctx = new ComplexColTypeContext(_ctx, getState());
		enterRule(_localctx, 260, RULE_complexColType);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2346);
			identifier();
			setState(2348);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,299,_ctx) ) {
			case 1:
				{
				setState(2347);
				match(T__5);
				}
				break;
			}
			setState(2350);
			dataType();
			setState(2353);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NOT) {
				{
				setState(2351);
				match(NOT);
				setState(2352);
				match(NULL);
				}
			}

			setState(2356);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==COMMENT) {
				{
				setState(2355);
				commentSpec();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WhenClauseContext extends ParserRuleContext {
		public ExpressionContext condition;
		public ExpressionContext result;
		public TerminalNode WHEN() { return getToken(HoodieSqlBaseParser.WHEN, 0); }
		public TerminalNode THEN() { return getToken(HoodieSqlBaseParser.THEN, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public WhenClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whenClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterWhenClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitWhenClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitWhenClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhenClauseContext whenClause() throws RecognitionException {
		WhenClauseContext _localctx = new WhenClauseContext(_ctx, getState());
		enterRule(_localctx, 262, RULE_whenClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2358);
			match(WHEN);
			setState(2359);
			((WhenClauseContext)_localctx).condition = expression();
			setState(2360);
			match(THEN);
			setState(2361);
			((WhenClauseContext)_localctx).result = expression();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WindowClauseContext extends ParserRuleContext {
		public TerminalNode WINDOW() { return getToken(HoodieSqlBaseParser.WINDOW, 0); }
		public List namedWindow() {
			return getRuleContexts(NamedWindowContext.class);
		}
		public NamedWindowContext namedWindow(int i) {
			return getRuleContext(NamedWindowContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public WindowClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterWindowClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitWindowClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitWindowClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowClauseContext windowClause() throws RecognitionException {
		WindowClauseContext _localctx = new WindowClauseContext(_ctx, getState());
		enterRule(_localctx, 264, RULE_windowClause);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(2363);
			match(WINDOW);
			setState(2364);
			namedWindow();
			setState(2369);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,302,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(2365);
					match(COMMA);
					setState(2366);
					namedWindow();
					}
					} 
				}
				setState(2371);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,302,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NamedWindowContext extends ParserRuleContext {
		public ErrorCapturingIdentifierContext name;
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public WindowSpecContext windowSpec() {
			return getRuleContext(WindowSpecContext.class,0);
		}
		public ErrorCapturingIdentifierContext errorCapturingIdentifier() {
			return getRuleContext(ErrorCapturingIdentifierContext.class,0);
		}
		public NamedWindowContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_namedWindow; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNamedWindow(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNamedWindow(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNamedWindow(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NamedWindowContext namedWindow() throws RecognitionException {
		NamedWindowContext _localctx = new NamedWindowContext(_ctx, getState());
		enterRule(_localctx, 266, RULE_namedWindow);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2372);
			((NamedWindowContext)_localctx).name = errorCapturingIdentifier();
			setState(2373);
			match(AS);
			setState(2374);
			windowSpec();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WindowSpecContext extends ParserRuleContext {
		public WindowSpecContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowSpec; }
	 
		public WindowSpecContext() { }
		public void copyFrom(WindowSpecContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class WindowRefContext extends WindowSpecContext {
		public ErrorCapturingIdentifierContext name;
		public ErrorCapturingIdentifierContext errorCapturingIdentifier() {
			return getRuleContext(ErrorCapturingIdentifierContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public WindowRefContext(WindowSpecContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterWindowRef(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitWindowRef(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitWindowRef(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class WindowDefContext extends WindowSpecContext {
		public ExpressionContext expression;
		public List partition = new ArrayList();
		public TerminalNode LEFT_PAREN() { return getToken(HoodieSqlBaseParser.LEFT_PAREN, 0); }
		public TerminalNode RIGHT_PAREN() { return getToken(HoodieSqlBaseParser.RIGHT_PAREN, 0); }
		public TerminalNode CLUSTER() { return getToken(HoodieSqlBaseParser.CLUSTER, 0); }
		public List BY() { return getTokens(HoodieSqlBaseParser.BY); }
		public TerminalNode BY(int i) {
			return getToken(HoodieSqlBaseParser.BY, i);
		}
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public WindowFrameContext windowFrame() {
			return getRuleContext(WindowFrameContext.class,0);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public List sortItem() {
			return getRuleContexts(SortItemContext.class);
		}
		public SortItemContext sortItem(int i) {
			return getRuleContext(SortItemContext.class,i);
		}
		public TerminalNode PARTITION() { return getToken(HoodieSqlBaseParser.PARTITION, 0); }
		public TerminalNode DISTRIBUTE() { return getToken(HoodieSqlBaseParser.DISTRIBUTE, 0); }
		public TerminalNode ORDER() { return getToken(HoodieSqlBaseParser.ORDER, 0); }
		public TerminalNode SORT() { return getToken(HoodieSqlBaseParser.SORT, 0); }
		public WindowDefContext(WindowSpecContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterWindowDef(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitWindowDef(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitWindowDef(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowSpecContext windowSpec() throws RecognitionException {
		WindowSpecContext _localctx = new WindowSpecContext(_ctx, getState());
		enterRule(_localctx, 268, RULE_windowSpec);
		int _la;
		try {
			setState(2422);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,310,_ctx) ) {
			case 1:
				_localctx = new WindowRefContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2376);
				((WindowRefContext)_localctx).name = errorCapturingIdentifier();
				}
				break;
			case 2:
				_localctx = new WindowRefContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2377);
				match(LEFT_PAREN);
				setState(2378);
				((WindowRefContext)_localctx).name = errorCapturingIdentifier();
				setState(2379);
				match(RIGHT_PAREN);
				}
				break;
			case 3:
				_localctx = new WindowDefContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2381);
				match(LEFT_PAREN);
				setState(2416);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case CLUSTER:
					{
					setState(2382);
					match(CLUSTER);
					setState(2383);
					match(BY);
					setState(2384);
					((WindowDefContext)_localctx).expression = expression();
					((WindowDefContext)_localctx).partition.add(((WindowDefContext)_localctx).expression);
					setState(2389);
					_errHandler.sync(this);
					_la = _input.LA(1);
					while (_la==COMMA) {
						{
						{
						setState(2385);
						match(COMMA);
						setState(2386);
						((WindowDefContext)_localctx).expression = expression();
						((WindowDefContext)_localctx).partition.add(((WindowDefContext)_localctx).expression);
						}
						}
						setState(2391);
						_errHandler.sync(this);
						_la = _input.LA(1);
					}
					}
					break;
				case DISTRIBUTE:
				case ORDER:
				case PARTITION:
				case RANGE:
				case ROWS:
				case SORT:
				case RIGHT_PAREN:
					{
					setState(2402);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==DISTRIBUTE || _la==PARTITION) {
						{
						setState(2392);
						_la = _input.LA(1);
						if ( !(_la==DISTRIBUTE || _la==PARTITION) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(2393);
						match(BY);
						setState(2394);
						((WindowDefContext)_localctx).expression = expression();
						((WindowDefContext)_localctx).partition.add(((WindowDefContext)_localctx).expression);
						setState(2399);
						_errHandler.sync(this);
						_la = _input.LA(1);
						while (_la==COMMA) {
							{
							{
							setState(2395);
							match(COMMA);
							setState(2396);
							((WindowDefContext)_localctx).expression = expression();
							((WindowDefContext)_localctx).partition.add(((WindowDefContext)_localctx).expression);
							}
							}
							setState(2401);
							_errHandler.sync(this);
							_la = _input.LA(1);
						}
						}
					}

					setState(2414);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==ORDER || _la==SORT) {
						{
						setState(2404);
						_la = _input.LA(1);
						if ( !(_la==ORDER || _la==SORT) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(2405);
						match(BY);
						setState(2406);
						sortItem();
						setState(2411);
						_errHandler.sync(this);
						_la = _input.LA(1);
						while (_la==COMMA) {
							{
							{
							setState(2407);
							match(COMMA);
							setState(2408);
							sortItem();
							}
							}
							setState(2413);
							_errHandler.sync(this);
							_la = _input.LA(1);
						}
						}
					}

					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(2419);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==RANGE || _la==ROWS) {
					{
					setState(2418);
					windowFrame();
					}
				}

				setState(2421);
				match(RIGHT_PAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WindowFrameContext extends ParserRuleContext {
		public Token frameType;
		public FrameBoundContext start;
		public FrameBoundContext end;
		public TerminalNode RANGE() { return getToken(HoodieSqlBaseParser.RANGE, 0); }
		public List frameBound() {
			return getRuleContexts(FrameBoundContext.class);
		}
		public FrameBoundContext frameBound(int i) {
			return getRuleContext(FrameBoundContext.class,i);
		}
		public TerminalNode ROWS() { return getToken(HoodieSqlBaseParser.ROWS, 0); }
		public TerminalNode BETWEEN() { return getToken(HoodieSqlBaseParser.BETWEEN, 0); }
		public TerminalNode AND() { return getToken(HoodieSqlBaseParser.AND, 0); }
		public WindowFrameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_windowFrame; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterWindowFrame(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitWindowFrame(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitWindowFrame(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WindowFrameContext windowFrame() throws RecognitionException {
		WindowFrameContext _localctx = new WindowFrameContext(_ctx, getState());
		enterRule(_localctx, 270, RULE_windowFrame);
		try {
			setState(2440);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,311,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2424);
				((WindowFrameContext)_localctx).frameType = match(RANGE);
				setState(2425);
				((WindowFrameContext)_localctx).start = frameBound();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2426);
				((WindowFrameContext)_localctx).frameType = match(ROWS);
				setState(2427);
				((WindowFrameContext)_localctx).start = frameBound();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(2428);
				((WindowFrameContext)_localctx).frameType = match(RANGE);
				setState(2429);
				match(BETWEEN);
				setState(2430);
				((WindowFrameContext)_localctx).start = frameBound();
				setState(2431);
				match(AND);
				setState(2432);
				((WindowFrameContext)_localctx).end = frameBound();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(2434);
				((WindowFrameContext)_localctx).frameType = match(ROWS);
				setState(2435);
				match(BETWEEN);
				setState(2436);
				((WindowFrameContext)_localctx).start = frameBound();
				setState(2437);
				match(AND);
				setState(2438);
				((WindowFrameContext)_localctx).end = frameBound();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FrameBoundContext extends ParserRuleContext {
		public Token boundType;
		public TerminalNode UNBOUNDED() { return getToken(HoodieSqlBaseParser.UNBOUNDED, 0); }
		public TerminalNode PRECEDING() { return getToken(HoodieSqlBaseParser.PRECEDING, 0); }
		public TerminalNode FOLLOWING() { return getToken(HoodieSqlBaseParser.FOLLOWING, 0); }
		public TerminalNode ROW() { return getToken(HoodieSqlBaseParser.ROW, 0); }
		public TerminalNode CURRENT() { return getToken(HoodieSqlBaseParser.CURRENT, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public FrameBoundContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_frameBound; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFrameBound(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFrameBound(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFrameBound(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FrameBoundContext frameBound() throws RecognitionException {
		FrameBoundContext _localctx = new FrameBoundContext(_ctx, getState());
		enterRule(_localctx, 272, RULE_frameBound);
		int _la;
		try {
			setState(2449);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,312,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2442);
				match(UNBOUNDED);
				setState(2443);
				((FrameBoundContext)_localctx).boundType = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==FOLLOWING || _la==PRECEDING) ) {
					((FrameBoundContext)_localctx).boundType = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2444);
				((FrameBoundContext)_localctx).boundType = match(CURRENT);
				setState(2445);
				match(ROW);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(2446);
				expression();
				setState(2447);
				((FrameBoundContext)_localctx).boundType = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==FOLLOWING || _la==PRECEDING) ) {
					((FrameBoundContext)_localctx).boundType = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QualifiedNameListContext extends ParserRuleContext {
		public List qualifiedName() {
			return getRuleContexts(QualifiedNameContext.class);
		}
		public QualifiedNameContext qualifiedName(int i) {
			return getRuleContext(QualifiedNameContext.class,i);
		}
		public List COMMA() { return getTokens(HoodieSqlBaseParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(HoodieSqlBaseParser.COMMA, i);
		}
		public QualifiedNameListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_qualifiedNameList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQualifiedNameList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQualifiedNameList(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQualifiedNameList(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QualifiedNameListContext qualifiedNameList() throws RecognitionException {
		QualifiedNameListContext _localctx = new QualifiedNameListContext(_ctx, getState());
		enterRule(_localctx, 274, RULE_qualifiedNameList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2451);
			qualifiedName();
			setState(2456);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(2452);
				match(COMMA);
				setState(2453);
				qualifiedName();
				}
				}
				setState(2458);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FunctionNameContext extends ParserRuleContext {
		public QualifiedNameContext qualifiedName() {
			return getRuleContext(QualifiedNameContext.class,0);
		}
		public TerminalNode FILTER() { return getToken(HoodieSqlBaseParser.FILTER, 0); }
		public TerminalNode LEFT() { return getToken(HoodieSqlBaseParser.LEFT, 0); }
		public TerminalNode RIGHT() { return getToken(HoodieSqlBaseParser.RIGHT, 0); }
		public FunctionNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_functionName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFunctionName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFunctionName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFunctionName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final FunctionNameContext functionName() throws RecognitionException {
		FunctionNameContext _localctx = new FunctionNameContext(_ctx, getState());
		enterRule(_localctx, 276, RULE_functionName);
		try {
			setState(2463);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,314,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2459);
				qualifiedName();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2460);
				match(FILTER);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(2461);
				match(LEFT);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(2462);
				match(RIGHT);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QualifiedNameContext extends ParserRuleContext {
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public List DOT() { return getTokens(HoodieSqlBaseParser.DOT); }
		public TerminalNode DOT(int i) {
			return getToken(HoodieSqlBaseParser.DOT, i);
		}
		public QualifiedNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_qualifiedName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQualifiedName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQualifiedName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQualifiedName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QualifiedNameContext qualifiedName() throws RecognitionException {
		QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState());
		enterRule(_localctx, 278, RULE_qualifiedName);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(2465);
			identifier();
			setState(2470);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,315,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(2466);
					match(DOT);
					setState(2467);
					identifier();
					}
					} 
				}
				setState(2472);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,315,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ErrorCapturingIdentifierContext extends ParserRuleContext {
		public IdentifierContext identifier() {
			return getRuleContext(IdentifierContext.class,0);
		}
		public ErrorCapturingIdentifierExtraContext errorCapturingIdentifierExtra() {
			return getRuleContext(ErrorCapturingIdentifierExtraContext.class,0);
		}
		public ErrorCapturingIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_errorCapturingIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterErrorCapturingIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitErrorCapturingIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitErrorCapturingIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ErrorCapturingIdentifierContext errorCapturingIdentifier() throws RecognitionException {
		ErrorCapturingIdentifierContext _localctx = new ErrorCapturingIdentifierContext(_ctx, getState());
		enterRule(_localctx, 280, RULE_errorCapturingIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2473);
			identifier();
			setState(2474);
			errorCapturingIdentifierExtra();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ErrorCapturingIdentifierExtraContext extends ParserRuleContext {
		public ErrorCapturingIdentifierExtraContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_errorCapturingIdentifierExtra; }
	 
		public ErrorCapturingIdentifierExtraContext() { }
		public void copyFrom(ErrorCapturingIdentifierExtraContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ErrorIdentContext extends ErrorCapturingIdentifierExtraContext {
		public List MINUS() { return getTokens(HoodieSqlBaseParser.MINUS); }
		public TerminalNode MINUS(int i) {
			return getToken(HoodieSqlBaseParser.MINUS, i);
		}
		public List identifier() {
			return getRuleContexts(IdentifierContext.class);
		}
		public IdentifierContext identifier(int i) {
			return getRuleContext(IdentifierContext.class,i);
		}
		public ErrorIdentContext(ErrorCapturingIdentifierExtraContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterErrorIdent(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitErrorIdent(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitErrorIdent(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class RealIdentContext extends ErrorCapturingIdentifierExtraContext {
		public RealIdentContext(ErrorCapturingIdentifierExtraContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterRealIdent(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitRealIdent(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitRealIdent(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ErrorCapturingIdentifierExtraContext errorCapturingIdentifierExtra() throws RecognitionException {
		ErrorCapturingIdentifierExtraContext _localctx = new ErrorCapturingIdentifierExtraContext(_ctx, getState());
		enterRule(_localctx, 282, RULE_errorCapturingIdentifierExtra);
		try {
			int _alt;
			setState(2483);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,317,_ctx) ) {
			case 1:
				_localctx = new ErrorIdentContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2478); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(2476);
						match(MINUS);
						setState(2477);
						identifier();
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(2480); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,316,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				}
				break;
			case 2:
				_localctx = new RealIdentContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IdentifierContext extends ParserRuleContext {
		public StrictIdentifierContext strictIdentifier() {
			return getRuleContext(StrictIdentifierContext.class,0);
		}
		public StrictNonReservedContext strictNonReserved() {
			return getRuleContext(StrictNonReservedContext.class,0);
		}
		public IdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_identifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdentifierContext identifier() throws RecognitionException {
		IdentifierContext _localctx = new IdentifierContext(_ctx, getState());
		enterRule(_localctx, 284, RULE_identifier);
		try {
			setState(2488);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,318,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(2485);
				strictIdentifier();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(2486);
				if (!(!SQL_standard_keyword_behavior)) throw new FailedPredicateException(this, "!SQL_standard_keyword_behavior");
				setState(2487);
				strictNonReserved();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StrictIdentifierContext extends ParserRuleContext {
		public StrictIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_strictIdentifier; }
	 
		public StrictIdentifierContext() { }
		public void copyFrom(StrictIdentifierContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class QuotedIdentifierAlternativeContext extends StrictIdentifierContext {
		public QuotedIdentifierContext quotedIdentifier() {
			return getRuleContext(QuotedIdentifierContext.class,0);
		}
		public QuotedIdentifierAlternativeContext(StrictIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQuotedIdentifierAlternative(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQuotedIdentifierAlternative(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQuotedIdentifierAlternative(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class UnquotedIdentifierContext extends StrictIdentifierContext {
		public TerminalNode IDENTIFIER() { return getToken(HoodieSqlBaseParser.IDENTIFIER, 0); }
		public AnsiNonReservedContext ansiNonReserved() {
			return getRuleContext(AnsiNonReservedContext.class,0);
		}
		public NonReservedContext nonReserved() {
			return getRuleContext(NonReservedContext.class,0);
		}
		public UnquotedIdentifierContext(StrictIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterUnquotedIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitUnquotedIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitUnquotedIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StrictIdentifierContext strictIdentifier() throws RecognitionException {
		StrictIdentifierContext _localctx = new StrictIdentifierContext(_ctx, getState());
		enterRule(_localctx, 286, RULE_strictIdentifier);
		try {
			setState(2496);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,319,_ctx) ) {
			case 1:
				_localctx = new UnquotedIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2490);
				match(IDENTIFIER);
				}
				break;
			case 2:
				_localctx = new QuotedIdentifierAlternativeContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2491);
				quotedIdentifier();
				}
				break;
			case 3:
				_localctx = new UnquotedIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2492);
				if (!(SQL_standard_keyword_behavior)) throw new FailedPredicateException(this, "SQL_standard_keyword_behavior");
				setState(2493);
				ansiNonReserved();
				}
				break;
			case 4:
				_localctx = new UnquotedIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(2494);
				if (!(!SQL_standard_keyword_behavior)) throw new FailedPredicateException(this, "!SQL_standard_keyword_behavior");
				setState(2495);
				nonReserved();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QuotedIdentifierContext extends ParserRuleContext {
		public TerminalNode BACKQUOTED_IDENTIFIER() { return getToken(HoodieSqlBaseParser.BACKQUOTED_IDENTIFIER, 0); }
		public QuotedIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_quotedIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterQuotedIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitQuotedIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitQuotedIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QuotedIdentifierContext quotedIdentifier() throws RecognitionException {
		QuotedIdentifierContext _localctx = new QuotedIdentifierContext(_ctx, getState());
		enterRule(_localctx, 288, RULE_quotedIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2498);
			match(BACKQUOTED_IDENTIFIER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NumberContext extends ParserRuleContext {
		public NumberContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_number; }
	 
		public NumberContext() { }
		public void copyFrom(NumberContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class DecimalLiteralContext extends NumberContext {
		public TerminalNode DECIMAL_VALUE() { return getToken(HoodieSqlBaseParser.DECIMAL_VALUE, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public DecimalLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDecimalLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDecimalLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDecimalLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BigIntLiteralContext extends NumberContext {
		public TerminalNode BIGINT_LITERAL() { return getToken(HoodieSqlBaseParser.BIGINT_LITERAL, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public BigIntLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterBigIntLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitBigIntLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitBigIntLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class TinyIntLiteralContext extends NumberContext {
		public TerminalNode TINYINT_LITERAL() { return getToken(HoodieSqlBaseParser.TINYINT_LITERAL, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public TinyIntLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterTinyIntLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitTinyIntLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitTinyIntLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class LegacyDecimalLiteralContext extends NumberContext {
		public TerminalNode EXPONENT_VALUE() { return getToken(HoodieSqlBaseParser.EXPONENT_VALUE, 0); }
		public TerminalNode DECIMAL_VALUE() { return getToken(HoodieSqlBaseParser.DECIMAL_VALUE, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public LegacyDecimalLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterLegacyDecimalLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitLegacyDecimalLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitLegacyDecimalLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BigDecimalLiteralContext extends NumberContext {
		public TerminalNode BIGDECIMAL_LITERAL() { return getToken(HoodieSqlBaseParser.BIGDECIMAL_LITERAL, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public BigDecimalLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterBigDecimalLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitBigDecimalLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitBigDecimalLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExponentLiteralContext extends NumberContext {
		public TerminalNode EXPONENT_VALUE() { return getToken(HoodieSqlBaseParser.EXPONENT_VALUE, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public ExponentLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterExponentLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitExponentLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitExponentLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class DoubleLiteralContext extends NumberContext {
		public TerminalNode DOUBLE_LITERAL() { return getToken(HoodieSqlBaseParser.DOUBLE_LITERAL, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public DoubleLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterDoubleLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitDoubleLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitDoubleLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class IntegerLiteralContext extends NumberContext {
		public TerminalNode INTEGER_VALUE() { return getToken(HoodieSqlBaseParser.INTEGER_VALUE, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public IntegerLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterIntegerLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitIntegerLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitIntegerLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class FloatLiteralContext extends NumberContext {
		public TerminalNode FLOAT_LITERAL() { return getToken(HoodieSqlBaseParser.FLOAT_LITERAL, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public FloatLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterFloatLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitFloatLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitFloatLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SmallIntLiteralContext extends NumberContext {
		public TerminalNode SMALLINT_LITERAL() { return getToken(HoodieSqlBaseParser.SMALLINT_LITERAL, 0); }
		public TerminalNode MINUS() { return getToken(HoodieSqlBaseParser.MINUS, 0); }
		public SmallIntLiteralContext(NumberContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterSmallIntLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitSmallIntLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitSmallIntLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NumberContext number() throws RecognitionException {
		NumberContext _localctx = new NumberContext(_ctx, getState());
		enterRule(_localctx, 290, RULE_number);
		int _la;
		try {
			setState(2543);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,330,_ctx) ) {
			case 1:
				_localctx = new ExponentLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(2500);
				if (!(!legacy_exponent_literal_as_decimal_enabled)) throw new FailedPredicateException(this, "!legacy_exponent_literal_as_decimal_enabled");
				setState(2502);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2501);
					match(MINUS);
					}
				}

				setState(2504);
				match(EXPONENT_VALUE);
				}
				break;
			case 2:
				_localctx = new DecimalLiteralContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(2505);
				if (!(!legacy_exponent_literal_as_decimal_enabled)) throw new FailedPredicateException(this, "!legacy_exponent_literal_as_decimal_enabled");
				setState(2507);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2506);
					match(MINUS);
					}
				}

				setState(2509);
				match(DECIMAL_VALUE);
				}
				break;
			case 3:
				_localctx = new LegacyDecimalLiteralContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(2510);
				if (!(legacy_exponent_literal_as_decimal_enabled)) throw new FailedPredicateException(this, "legacy_exponent_literal_as_decimal_enabled");
				setState(2512);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2511);
					match(MINUS);
					}
				}

				setState(2514);
				_la = _input.LA(1);
				if ( !(_la==EXPONENT_VALUE || _la==DECIMAL_VALUE) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case 4:
				_localctx = new IntegerLiteralContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(2516);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2515);
					match(MINUS);
					}
				}

				setState(2518);
				match(INTEGER_VALUE);
				}
				break;
			case 5:
				_localctx = new BigIntLiteralContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(2520);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2519);
					match(MINUS);
					}
				}

				setState(2522);
				match(BIGINT_LITERAL);
				}
				break;
			case 6:
				_localctx = new SmallIntLiteralContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(2524);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2523);
					match(MINUS);
					}
				}

				setState(2526);
				match(SMALLINT_LITERAL);
				}
				break;
			case 7:
				_localctx = new TinyIntLiteralContext(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(2528);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2527);
					match(MINUS);
					}
				}

				setState(2530);
				match(TINYINT_LITERAL);
				}
				break;
			case 8:
				_localctx = new DoubleLiteralContext(_localctx);
				enterOuterAlt(_localctx, 8);
				{
				setState(2532);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2531);
					match(MINUS);
					}
				}

				setState(2534);
				match(DOUBLE_LITERAL);
				}
				break;
			case 9:
				_localctx = new FloatLiteralContext(_localctx);
				enterOuterAlt(_localctx, 9);
				{
				setState(2536);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2535);
					match(MINUS);
					}
				}

				setState(2538);
				match(FLOAT_LITERAL);
				}
				break;
			case 10:
				_localctx = new BigDecimalLiteralContext(_localctx);
				enterOuterAlt(_localctx, 10);
				{
				setState(2540);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==MINUS) {
					{
					setState(2539);
					match(MINUS);
					}
				}

				setState(2542);
				match(BIGDECIMAL_LITERAL);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AlterColumnActionContext extends ParserRuleContext {
		public Token setOrDrop;
		public TerminalNode TYPE() { return getToken(HoodieSqlBaseParser.TYPE, 0); }
		public DataTypeContext dataType() {
			return getRuleContext(DataTypeContext.class,0);
		}
		public CommentSpecContext commentSpec() {
			return getRuleContext(CommentSpecContext.class,0);
		}
		public ColPositionContext colPosition() {
			return getRuleContext(ColPositionContext.class,0);
		}
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public TerminalNode SET() { return getToken(HoodieSqlBaseParser.SET, 0); }
		public TerminalNode DROP() { return getToken(HoodieSqlBaseParser.DROP, 0); }
		public AlterColumnActionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_alterColumnAction; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterAlterColumnAction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitAlterColumnAction(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitAlterColumnAction(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AlterColumnActionContext alterColumnAction() throws RecognitionException {
		AlterColumnActionContext _localctx = new AlterColumnActionContext(_ctx, getState());
		enterRule(_localctx, 292, RULE_alterColumnAction);
		int _la;
		try {
			setState(2552);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case TYPE:
				enterOuterAlt(_localctx, 1);
				{
				setState(2545);
				match(TYPE);
				setState(2546);
				dataType();
				}
				break;
			case COMMENT:
				enterOuterAlt(_localctx, 2);
				{
				setState(2547);
				commentSpec();
				}
				break;
			case AFTER:
			case FIRST:
				enterOuterAlt(_localctx, 3);
				{
				setState(2548);
				colPosition();
				}
				break;
			case DROP:
			case SET:
				enterOuterAlt(_localctx, 4);
				{
				setState(2549);
				((AlterColumnActionContext)_localctx).setOrDrop = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==DROP || _la==SET) ) {
					((AlterColumnActionContext)_localctx).setOrDrop = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(2550);
				match(NOT);
				setState(2551);
				match(NULL);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AnsiNonReservedContext extends ParserRuleContext {
		public TerminalNode ADD() { return getToken(HoodieSqlBaseParser.ADD, 0); }
		public TerminalNode AFTER() { return getToken(HoodieSqlBaseParser.AFTER, 0); }
		public TerminalNode ALTER() { return getToken(HoodieSqlBaseParser.ALTER, 0); }
		public TerminalNode ANALYZE() { return getToken(HoodieSqlBaseParser.ANALYZE, 0); }
		public TerminalNode ANTI() { return getToken(HoodieSqlBaseParser.ANTI, 0); }
		public TerminalNode ARCHIVE() { return getToken(HoodieSqlBaseParser.ARCHIVE, 0); }
		public TerminalNode ARRAY() { return getToken(HoodieSqlBaseParser.ARRAY, 0); }
		public TerminalNode ASC() { return getToken(HoodieSqlBaseParser.ASC, 0); }
		public TerminalNode AT() { return getToken(HoodieSqlBaseParser.AT, 0); }
		public TerminalNode BETWEEN() { return getToken(HoodieSqlBaseParser.BETWEEN, 0); }
		public TerminalNode BUCKET() { return getToken(HoodieSqlBaseParser.BUCKET, 0); }
		public TerminalNode BUCKETS() { return getToken(HoodieSqlBaseParser.BUCKETS, 0); }
		public TerminalNode BY() { return getToken(HoodieSqlBaseParser.BY, 0); }
		public TerminalNode CACHE() { return getToken(HoodieSqlBaseParser.CACHE, 0); }
		public TerminalNode CASCADE() { return getToken(HoodieSqlBaseParser.CASCADE, 0); }
		public TerminalNode CHANGE() { return getToken(HoodieSqlBaseParser.CHANGE, 0); }
		public TerminalNode CLEAR() { return getToken(HoodieSqlBaseParser.CLEAR, 0); }
		public TerminalNode CLUSTER() { return getToken(HoodieSqlBaseParser.CLUSTER, 0); }
		public TerminalNode CLUSTERED() { return getToken(HoodieSqlBaseParser.CLUSTERED, 0); }
		public TerminalNode CODEGEN() { return getToken(HoodieSqlBaseParser.CODEGEN, 0); }
		public TerminalNode COLLECTION() { return getToken(HoodieSqlBaseParser.COLLECTION, 0); }
		public TerminalNode COLUMNS() { return getToken(HoodieSqlBaseParser.COLUMNS, 0); }
		public TerminalNode COMMENT() { return getToken(HoodieSqlBaseParser.COMMENT, 0); }
		public TerminalNode COMMIT() { return getToken(HoodieSqlBaseParser.COMMIT, 0); }
		public TerminalNode COMPACT() { return getToken(HoodieSqlBaseParser.COMPACT, 0); }
		public TerminalNode COMPACTIONS() { return getToken(HoodieSqlBaseParser.COMPACTIONS, 0); }
		public TerminalNode COMPUTE() { return getToken(HoodieSqlBaseParser.COMPUTE, 0); }
		public TerminalNode CONCATENATE() { return getToken(HoodieSqlBaseParser.CONCATENATE, 0); }
		public TerminalNode COST() { return getToken(HoodieSqlBaseParser.COST, 0); }
		public TerminalNode CUBE() { return getToken(HoodieSqlBaseParser.CUBE, 0); }
		public TerminalNode CURRENT() { return getToken(HoodieSqlBaseParser.CURRENT, 0); }
		public TerminalNode DATA() { return getToken(HoodieSqlBaseParser.DATA, 0); }
		public TerminalNode DATABASE() { return getToken(HoodieSqlBaseParser.DATABASE, 0); }
		public TerminalNode DATABASES() { return getToken(HoodieSqlBaseParser.DATABASES, 0); }
		public TerminalNode DAY() { return getToken(HoodieSqlBaseParser.DAY, 0); }
		public TerminalNode DBPROPERTIES() { return getToken(HoodieSqlBaseParser.DBPROPERTIES, 0); }
		public TerminalNode DEFINED() { return getToken(HoodieSqlBaseParser.DEFINED, 0); }
		public TerminalNode DELETE() { return getToken(HoodieSqlBaseParser.DELETE, 0); }
		public TerminalNode DELIMITED() { return getToken(HoodieSqlBaseParser.DELIMITED, 0); }
		public TerminalNode DESC() { return getToken(HoodieSqlBaseParser.DESC, 0); }
		public TerminalNode DESCRIBE() { return getToken(HoodieSqlBaseParser.DESCRIBE, 0); }
		public TerminalNode DFS() { return getToken(HoodieSqlBaseParser.DFS, 0); }
		public TerminalNode DIRECTORIES() { return getToken(HoodieSqlBaseParser.DIRECTORIES, 0); }
		public TerminalNode DIRECTORY() { return getToken(HoodieSqlBaseParser.DIRECTORY, 0); }
		public TerminalNode DISTRIBUTE() { return getToken(HoodieSqlBaseParser.DISTRIBUTE, 0); }
		public TerminalNode DIV() { return getToken(HoodieSqlBaseParser.DIV, 0); }
		public TerminalNode DROP() { return getToken(HoodieSqlBaseParser.DROP, 0); }
		public TerminalNode ESCAPED() { return getToken(HoodieSqlBaseParser.ESCAPED, 0); }
		public TerminalNode EXCHANGE() { return getToken(HoodieSqlBaseParser.EXCHANGE, 0); }
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public TerminalNode EXPLAIN() { return getToken(HoodieSqlBaseParser.EXPLAIN, 0); }
		public TerminalNode EXPORT() { return getToken(HoodieSqlBaseParser.EXPORT, 0); }
		public TerminalNode EXTENDED() { return getToken(HoodieSqlBaseParser.EXTENDED, 0); }
		public TerminalNode EXTERNAL() { return getToken(HoodieSqlBaseParser.EXTERNAL, 0); }
		public TerminalNode EXTRACT() { return getToken(HoodieSqlBaseParser.EXTRACT, 0); }
		public TerminalNode FIELDS() { return getToken(HoodieSqlBaseParser.FIELDS, 0); }
		public TerminalNode FILEFORMAT() { return getToken(HoodieSqlBaseParser.FILEFORMAT, 0); }
		public TerminalNode FIRST() { return getToken(HoodieSqlBaseParser.FIRST, 0); }
		public TerminalNode FOLLOWING() { return getToken(HoodieSqlBaseParser.FOLLOWING, 0); }
		public TerminalNode FORMAT() { return getToken(HoodieSqlBaseParser.FORMAT, 0); }
		public TerminalNode FORMATTED() { return getToken(HoodieSqlBaseParser.FORMATTED, 0); }
		public TerminalNode FUNCTION() { return getToken(HoodieSqlBaseParser.FUNCTION, 0); }
		public TerminalNode FUNCTIONS() { return getToken(HoodieSqlBaseParser.FUNCTIONS, 0); }
		public TerminalNode GLOBAL() { return getToken(HoodieSqlBaseParser.GLOBAL, 0); }
		public TerminalNode GROUPING() { return getToken(HoodieSqlBaseParser.GROUPING, 0); }
		public TerminalNode HOUR() { return getToken(HoodieSqlBaseParser.HOUR, 0); }
		public TerminalNode IF() { return getToken(HoodieSqlBaseParser.IF, 0); }
		public TerminalNode IGNORE() { return getToken(HoodieSqlBaseParser.IGNORE, 0); }
		public TerminalNode IMPORT() { return getToken(HoodieSqlBaseParser.IMPORT, 0); }
		public TerminalNode INDEX() { return getToken(HoodieSqlBaseParser.INDEX, 0); }
		public TerminalNode INDEXES() { return getToken(HoodieSqlBaseParser.INDEXES, 0); }
		public TerminalNode INPATH() { return getToken(HoodieSqlBaseParser.INPATH, 0); }
		public TerminalNode INPUTFORMAT() { return getToken(HoodieSqlBaseParser.INPUTFORMAT, 0); }
		public TerminalNode INSERT() { return getToken(HoodieSqlBaseParser.INSERT, 0); }
		public TerminalNode INTERVAL() { return getToken(HoodieSqlBaseParser.INTERVAL, 0); }
		public TerminalNode ITEMS() { return getToken(HoodieSqlBaseParser.ITEMS, 0); }
		public TerminalNode KEYS() { return getToken(HoodieSqlBaseParser.KEYS, 0); }
		public TerminalNode LAST() { return getToken(HoodieSqlBaseParser.LAST, 0); }
		public TerminalNode LAZY() { return getToken(HoodieSqlBaseParser.LAZY, 0); }
		public TerminalNode LIKE() { return getToken(HoodieSqlBaseParser.LIKE, 0); }
		public TerminalNode LIMIT() { return getToken(HoodieSqlBaseParser.LIMIT, 0); }
		public TerminalNode LINES() { return getToken(HoodieSqlBaseParser.LINES, 0); }
		public TerminalNode LIST() { return getToken(HoodieSqlBaseParser.LIST, 0); }
		public TerminalNode LOAD() { return getToken(HoodieSqlBaseParser.LOAD, 0); }
		public TerminalNode LOCAL() { return getToken(HoodieSqlBaseParser.LOCAL, 0); }
		public TerminalNode LOCATION() { return getToken(HoodieSqlBaseParser.LOCATION, 0); }
		public TerminalNode LOCK() { return getToken(HoodieSqlBaseParser.LOCK, 0); }
		public TerminalNode LOCKS() { return getToken(HoodieSqlBaseParser.LOCKS, 0); }
		public TerminalNode LOGICAL() { return getToken(HoodieSqlBaseParser.LOGICAL, 0); }
		public TerminalNode MACRO() { return getToken(HoodieSqlBaseParser.MACRO, 0); }
		public TerminalNode MAP() { return getToken(HoodieSqlBaseParser.MAP, 0); }
		public TerminalNode MATCHED() { return getToken(HoodieSqlBaseParser.MATCHED, 0); }
		public TerminalNode MERGE() { return getToken(HoodieSqlBaseParser.MERGE, 0); }
		public TerminalNode MINUTE() { return getToken(HoodieSqlBaseParser.MINUTE, 0); }
		public TerminalNode MONTH() { return getToken(HoodieSqlBaseParser.MONTH, 0); }
		public TerminalNode MSCK() { return getToken(HoodieSqlBaseParser.MSCK, 0); }
		public TerminalNode NAMESPACE() { return getToken(HoodieSqlBaseParser.NAMESPACE, 0); }
		public TerminalNode NAMESPACES() { return getToken(HoodieSqlBaseParser.NAMESPACES, 0); }
		public TerminalNode NO() { return getToken(HoodieSqlBaseParser.NO, 0); }
		public TerminalNode NULLS() { return getToken(HoodieSqlBaseParser.NULLS, 0); }
		public TerminalNode OF() { return getToken(HoodieSqlBaseParser.OF, 0); }
		public TerminalNode OPTION() { return getToken(HoodieSqlBaseParser.OPTION, 0); }
		public TerminalNode OPTIONS() { return getToken(HoodieSqlBaseParser.OPTIONS, 0); }
		public TerminalNode OUT() { return getToken(HoodieSqlBaseParser.OUT, 0); }
		public TerminalNode OUTPUTFORMAT() { return getToken(HoodieSqlBaseParser.OUTPUTFORMAT, 0); }
		public TerminalNode OVER() { return getToken(HoodieSqlBaseParser.OVER, 0); }
		public TerminalNode OVERLAY() { return getToken(HoodieSqlBaseParser.OVERLAY, 0); }
		public TerminalNode OVERWRITE() { return getToken(HoodieSqlBaseParser.OVERWRITE, 0); }
		public TerminalNode PARTITION() { return getToken(HoodieSqlBaseParser.PARTITION, 0); }
		public TerminalNode PARTITIONED() { return getToken(HoodieSqlBaseParser.PARTITIONED, 0); }
		public TerminalNode PARTITIONS() { return getToken(HoodieSqlBaseParser.PARTITIONS, 0); }
		public TerminalNode PERCENTLIT() { return getToken(HoodieSqlBaseParser.PERCENTLIT, 0); }
		public TerminalNode PIVOT() { return getToken(HoodieSqlBaseParser.PIVOT, 0); }
		public TerminalNode PLACING() { return getToken(HoodieSqlBaseParser.PLACING, 0); }
		public TerminalNode POSITION() { return getToken(HoodieSqlBaseParser.POSITION, 0); }
		public TerminalNode PRECEDING() { return getToken(HoodieSqlBaseParser.PRECEDING, 0); }
		public TerminalNode PRINCIPALS() { return getToken(HoodieSqlBaseParser.PRINCIPALS, 0); }
		public TerminalNode PROPERTIES() { return getToken(HoodieSqlBaseParser.PROPERTIES, 0); }
		public TerminalNode PURGE() { return getToken(HoodieSqlBaseParser.PURGE, 0); }
		public TerminalNode QUERY() { return getToken(HoodieSqlBaseParser.QUERY, 0); }
		public TerminalNode RANGE() { return getToken(HoodieSqlBaseParser.RANGE, 0); }
		public TerminalNode RECORDREADER() { return getToken(HoodieSqlBaseParser.RECORDREADER, 0); }
		public TerminalNode RECORDWRITER() { return getToken(HoodieSqlBaseParser.RECORDWRITER, 0); }
		public TerminalNode RECOVER() { return getToken(HoodieSqlBaseParser.RECOVER, 0); }
		public TerminalNode REDUCE() { return getToken(HoodieSqlBaseParser.REDUCE, 0); }
		public TerminalNode REFRESH() { return getToken(HoodieSqlBaseParser.REFRESH, 0); }
		public TerminalNode RENAME() { return getToken(HoodieSqlBaseParser.RENAME, 0); }
		public TerminalNode REPAIR() { return getToken(HoodieSqlBaseParser.REPAIR, 0); }
		public TerminalNode REPLACE() { return getToken(HoodieSqlBaseParser.REPLACE, 0); }
		public TerminalNode RESET() { return getToken(HoodieSqlBaseParser.RESET, 0); }
		public TerminalNode RESPECT() { return getToken(HoodieSqlBaseParser.RESPECT, 0); }
		public TerminalNode RESTRICT() { return getToken(HoodieSqlBaseParser.RESTRICT, 0); }
		public TerminalNode REVOKE() { return getToken(HoodieSqlBaseParser.REVOKE, 0); }
		public TerminalNode RLIKE() { return getToken(HoodieSqlBaseParser.RLIKE, 0); }
		public TerminalNode ROLE() { return getToken(HoodieSqlBaseParser.ROLE, 0); }
		public TerminalNode ROLES() { return getToken(HoodieSqlBaseParser.ROLES, 0); }
		public TerminalNode ROLLBACK() { return getToken(HoodieSqlBaseParser.ROLLBACK, 0); }
		public TerminalNode ROLLUP() { return getToken(HoodieSqlBaseParser.ROLLUP, 0); }
		public TerminalNode ROW() { return getToken(HoodieSqlBaseParser.ROW, 0); }
		public TerminalNode ROWS() { return getToken(HoodieSqlBaseParser.ROWS, 0); }
		public TerminalNode SCHEMA() { return getToken(HoodieSqlBaseParser.SCHEMA, 0); }
		public TerminalNode SECOND() { return getToken(HoodieSqlBaseParser.SECOND, 0); }
		public TerminalNode SEMI() { return getToken(HoodieSqlBaseParser.SEMI, 0); }
		public TerminalNode SEPARATED() { return getToken(HoodieSqlBaseParser.SEPARATED, 0); }
		public TerminalNode SERDE() { return getToken(HoodieSqlBaseParser.SERDE, 0); }
		public TerminalNode SERDEPROPERTIES() { return getToken(HoodieSqlBaseParser.SERDEPROPERTIES, 0); }
		public TerminalNode SET() { return getToken(HoodieSqlBaseParser.SET, 0); }
		public TerminalNode SETMINUS() { return getToken(HoodieSqlBaseParser.SETMINUS, 0); }
		public TerminalNode SETS() { return getToken(HoodieSqlBaseParser.SETS, 0); }
		public TerminalNode SHOW() { return getToken(HoodieSqlBaseParser.SHOW, 0); }
		public TerminalNode SKEWED() { return getToken(HoodieSqlBaseParser.SKEWED, 0); }
		public TerminalNode SORT() { return getToken(HoodieSqlBaseParser.SORT, 0); }
		public TerminalNode SORTED() { return getToken(HoodieSqlBaseParser.SORTED, 0); }
		public TerminalNode START() { return getToken(HoodieSqlBaseParser.START, 0); }
		public TerminalNode STATISTICS() { return getToken(HoodieSqlBaseParser.STATISTICS, 0); }
		public TerminalNode STORED() { return getToken(HoodieSqlBaseParser.STORED, 0); }
		public TerminalNode STRATIFY() { return getToken(HoodieSqlBaseParser.STRATIFY, 0); }
		public TerminalNode STRUCT() { return getToken(HoodieSqlBaseParser.STRUCT, 0); }
		public TerminalNode SUBSTR() { return getToken(HoodieSqlBaseParser.SUBSTR, 0); }
		public TerminalNode SUBSTRING() { return getToken(HoodieSqlBaseParser.SUBSTRING, 0); }
		public TerminalNode SYNC() { return getToken(HoodieSqlBaseParser.SYNC, 0); }
		public TerminalNode TABLES() { return getToken(HoodieSqlBaseParser.TABLES, 0); }
		public TerminalNode TABLESAMPLE() { return getToken(HoodieSqlBaseParser.TABLESAMPLE, 0); }
		public TerminalNode TBLPROPERTIES() { return getToken(HoodieSqlBaseParser.TBLPROPERTIES, 0); }
		public TerminalNode TEMPORARY() { return getToken(HoodieSqlBaseParser.TEMPORARY, 0); }
		public TerminalNode TERMINATED() { return getToken(HoodieSqlBaseParser.TERMINATED, 0); }
		public TerminalNode TOUCH() { return getToken(HoodieSqlBaseParser.TOUCH, 0); }
		public TerminalNode TRANSACTION() { return getToken(HoodieSqlBaseParser.TRANSACTION, 0); }
		public TerminalNode TRANSACTIONS() { return getToken(HoodieSqlBaseParser.TRANSACTIONS, 0); }
		public TerminalNode TRANSFORM() { return getToken(HoodieSqlBaseParser.TRANSFORM, 0); }
		public TerminalNode TRIM() { return getToken(HoodieSqlBaseParser.TRIM, 0); }
		public TerminalNode TRUE() { return getToken(HoodieSqlBaseParser.TRUE, 0); }
		public TerminalNode TRUNCATE() { return getToken(HoodieSqlBaseParser.TRUNCATE, 0); }
		public TerminalNode TRY_CAST() { return getToken(HoodieSqlBaseParser.TRY_CAST, 0); }
		public TerminalNode TYPE() { return getToken(HoodieSqlBaseParser.TYPE, 0); }
		public TerminalNode UNARCHIVE() { return getToken(HoodieSqlBaseParser.UNARCHIVE, 0); }
		public TerminalNode UNBOUNDED() { return getToken(HoodieSqlBaseParser.UNBOUNDED, 0); }
		public TerminalNode UNCACHE() { return getToken(HoodieSqlBaseParser.UNCACHE, 0); }
		public TerminalNode UNLOCK() { return getToken(HoodieSqlBaseParser.UNLOCK, 0); }
		public TerminalNode UNSET() { return getToken(HoodieSqlBaseParser.UNSET, 0); }
		public TerminalNode UPDATE() { return getToken(HoodieSqlBaseParser.UPDATE, 0); }
		public TerminalNode USE() { return getToken(HoodieSqlBaseParser.USE, 0); }
		public TerminalNode VALUES() { return getToken(HoodieSqlBaseParser.VALUES, 0); }
		public TerminalNode VIEW() { return getToken(HoodieSqlBaseParser.VIEW, 0); }
		public TerminalNode VIEWS() { return getToken(HoodieSqlBaseParser.VIEWS, 0); }
		public TerminalNode WINDOW() { return getToken(HoodieSqlBaseParser.WINDOW, 0); }
		public TerminalNode YEAR() { return getToken(HoodieSqlBaseParser.YEAR, 0); }
		public TerminalNode ZONE() { return getToken(HoodieSqlBaseParser.ZONE, 0); }
		public AnsiNonReservedContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ansiNonReserved; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterAnsiNonReserved(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitAnsiNonReserved(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitAnsiNonReserved(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AnsiNonReservedContext ansiNonReserved() throws RecognitionException {
		AnsiNonReservedContext _localctx = new AnsiNonReservedContext(_ctx, getState());
		enterRule(_localctx, 294, RULE_ansiNonReserved);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2554);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ADD) | (1L << AFTER) | (1L << ALTER) | (1L << ANALYZE) | (1L << ANTI) | (1L << ARCHIVE) | (1L << ARRAY) | (1L << ASC) | (1L << AT) | (1L << BETWEEN) | (1L << BUCKET) | (1L << BUCKETS) | (1L << BY) | (1L << CACHE) | (1L << CASCADE) | (1L << CHANGE) | (1L << CLEAR) | (1L << CLUSTER) | (1L << CLUSTERED) | (1L << CODEGEN) | (1L << COLLECTION) | (1L << COLUMNS) | (1L << COMMENT) | (1L << COMMIT) | (1L << COMPACT) | (1L << COMPACTIONS) | (1L << COMPUTE) | (1L << CONCATENATE) | (1L << COST) | (1L << CUBE) | (1L << CURRENT) | (1L << DAY) | (1L << DATA) | (1L << DATABASE) | (1L << DATABASES) | (1L << DBPROPERTIES) | (1L << DEFINED) | (1L << DELETE) | (1L << DELIMITED))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (DESC - 64)) | (1L << (DESCRIBE - 64)) | (1L << (DFS - 64)) | (1L << (DIRECTORIES - 64)) | (1L << (DIRECTORY - 64)) | (1L << (DISTRIBUTE - 64)) | (1L << (DIV - 64)) | (1L << (DROP - 64)) | (1L << (ESCAPED - 64)) | (1L << (EXCHANGE - 64)) | (1L << (EXISTS - 64)) | (1L << (EXPLAIN - 64)) | (1L << (EXPORT - 64)) | (1L << (EXTENDED - 64)) | (1L << (EXTERNAL - 64)) | (1L << (EXTRACT - 64)) | (1L << (FIELDS - 64)) | (1L << (FILEFORMAT - 64)) | (1L << (FIRST - 64)) | (1L << (FOLLOWING - 64)) | (1L << (FORMAT - 64)) | (1L << (FORMATTED - 64)) | (1L << (FUNCTION - 64)) | (1L << (FUNCTIONS - 64)) | (1L << (GLOBAL - 64)) | (1L << (GROUPING - 64)) | (1L << (HOUR - 64)) | (1L << (IF - 64)) | (1L << (IGNORE - 64)) | (1L << (IMPORT - 64)) | (1L << (INDEX - 64)) | (1L << (INDEXES - 64)) | (1L << (INPATH - 64)) | (1L << (INPUTFORMAT - 64)) | (1L << (INSERT - 64)) | (1L << (INTERVAL - 64)) | (1L << (ITEMS - 64)) | (1L << (KEYS - 64)) | (1L << (LAST - 64)) | (1L << (LAZY - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LIKE - 128)) | (1L << (LIMIT - 128)) | (1L << (LINES - 128)) | (1L << (LIST - 128)) | (1L << (LOAD - 128)) | (1L << (LOCAL - 128)) | (1L << (LOCATION - 128)) | (1L << (LOCK - 128)) | (1L << (LOCKS - 128)) | (1L << (LOGICAL - 128)) | (1L << (MACRO - 128)) | (1L << (MAP - 128)) | (1L << (MATCHED - 128)) | (1L << (MERGE - 128)) | (1L << (MINUTE - 128)) | (1L << (MONTH - 128)) | (1L << (MSCK - 128)) | (1L << (NAMESPACE - 128)) | (1L << (NAMESPACES - 128)) | (1L << (NO - 128)) | (1L << (NULLS - 128)) | (1L << (OF - 128)) | (1L << (OPTION - 128)) | (1L << (OPTIONS - 128)) | (1L << (OUT - 128)) | (1L << (OUTPUTFORMAT - 128)) | (1L << (OVER - 128)) | (1L << (OVERLAY - 128)) | (1L << (OVERWRITE - 128)) | (1L << (PARTITION - 128)) | (1L << (PARTITIONED - 128)) | (1L << (PARTITIONS - 128)) | (1L << (PERCENTLIT - 128)) | (1L << (PIVOT - 128)) | (1L << (PLACING - 128)) | (1L << (POSITION - 128)) | (1L << (PRECEDING - 128)) | (1L << (PRINCIPALS - 128)) | (1L << (PROPERTIES - 128)) | (1L << (PURGE - 128)) | (1L << (QUERY - 128)) | (1L << (RANGE - 128)) | (1L << (RECORDREADER - 128)) | (1L << (RECORDWRITER - 128)) | (1L << (RECOVER - 128)) | (1L << (REDUCE - 128)) | (1L << (REFRESH - 128)) | (1L << (RENAME - 128)) | (1L << (REPAIR - 128)) | (1L << (REPLACE - 128)) | (1L << (RESET - 128)) | (1L << (RESPECT - 128)) | (1L << (RESTRICT - 128)))) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & ((1L << (REVOKE - 192)) | (1L << (RLIKE - 192)) | (1L << (ROLE - 192)) | (1L << (ROLES - 192)) | (1L << (ROLLBACK - 192)) | (1L << (ROLLUP - 192)) | (1L << (ROW - 192)) | (1L << (ROWS - 192)) | (1L << (SECOND - 192)) | (1L << (SCHEMA - 192)) | (1L << (SEMI - 192)) | (1L << (SEPARATED - 192)) | (1L << (SERDE - 192)) | (1L << (SERDEPROPERTIES - 192)) | (1L << (SET - 192)) | (1L << (SETMINUS - 192)) | (1L << (SETS - 192)) | (1L << (SHOW - 192)) | (1L << (SKEWED - 192)) | (1L << (SORT - 192)) | (1L << (SORTED - 192)) | (1L << (START - 192)) | (1L << (STATISTICS - 192)) | (1L << (STORED - 192)) | (1L << (STRATIFY - 192)) | (1L << (STRUCT - 192)) | (1L << (SUBSTR - 192)) | (1L << (SUBSTRING - 192)) | (1L << (SYNC - 192)) | (1L << (TABLES - 192)) | (1L << (TABLESAMPLE - 192)) | (1L << (TBLPROPERTIES - 192)) | (1L << (TEMPORARY - 192)) | (1L << (TERMINATED - 192)) | (1L << (TOUCH - 192)) | (1L << (TRANSACTION - 192)) | (1L << (TRANSACTIONS - 192)) | (1L << (TRANSFORM - 192)) | (1L << (TRIM - 192)) | (1L << (TRUE - 192)) | (1L << (TRUNCATE - 192)) | (1L << (TRY_CAST - 192)) | (1L << (TYPE - 192)) | (1L << (UNARCHIVE - 192)) | (1L << (UNBOUNDED - 192)) | (1L << (UNCACHE - 192)) | (1L << (UNLOCK - 192)) | (1L << (UNSET - 192)) | (1L << (UPDATE - 192)) | (1L << (USE - 192)))) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & ((1L << (VALUES - 256)) | (1L << (VIEW - 256)) | (1L << (VIEWS - 256)) | (1L << (WINDOW - 256)) | (1L << (YEAR - 256)) | (1L << (ZONE - 256)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StrictNonReservedContext extends ParserRuleContext {
		public TerminalNode ANTI() { return getToken(HoodieSqlBaseParser.ANTI, 0); }
		public TerminalNode CROSS() { return getToken(HoodieSqlBaseParser.CROSS, 0); }
		public TerminalNode EXCEPT() { return getToken(HoodieSqlBaseParser.EXCEPT, 0); }
		public TerminalNode FULL() { return getToken(HoodieSqlBaseParser.FULL, 0); }
		public TerminalNode INNER() { return getToken(HoodieSqlBaseParser.INNER, 0); }
		public TerminalNode INTERSECT() { return getToken(HoodieSqlBaseParser.INTERSECT, 0); }
		public TerminalNode JOIN() { return getToken(HoodieSqlBaseParser.JOIN, 0); }
		public TerminalNode LATERAL() { return getToken(HoodieSqlBaseParser.LATERAL, 0); }
		public TerminalNode LEFT() { return getToken(HoodieSqlBaseParser.LEFT, 0); }
		public TerminalNode NATURAL() { return getToken(HoodieSqlBaseParser.NATURAL, 0); }
		public TerminalNode ON() { return getToken(HoodieSqlBaseParser.ON, 0); }
		public TerminalNode RIGHT() { return getToken(HoodieSqlBaseParser.RIGHT, 0); }
		public TerminalNode SEMI() { return getToken(HoodieSqlBaseParser.SEMI, 0); }
		public TerminalNode SETMINUS() { return getToken(HoodieSqlBaseParser.SETMINUS, 0); }
		public TerminalNode UNION() { return getToken(HoodieSqlBaseParser.UNION, 0); }
		public TerminalNode USING() { return getToken(HoodieSqlBaseParser.USING, 0); }
		public StrictNonReservedContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_strictNonReserved; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterStrictNonReserved(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitStrictNonReserved(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitStrictNonReserved(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StrictNonReservedContext strictNonReserved() throws RecognitionException {
		StrictNonReservedContext _localctx = new StrictNonReservedContext(_ctx, getState());
		enterRule(_localctx, 296, RULE_strictNonReserved);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2556);
			_la = _input.LA(1);
			if ( !(_la==ANTI || _la==CROSS || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (EXCEPT - 77)) | (1L << (FULL - 77)) | (1L << (INNER - 77)) | (1L << (INTERSECT - 77)) | (1L << (JOIN - 77)) | (1L << (LATERAL - 77)) | (1L << (LEFT - 77)))) != 0) || ((((_la - 147)) & ~0x3f) == 0 && ((1L << (_la - 147)) & ((1L << (NATURAL - 147)) | (1L << (ON - 147)) | (1L << (RIGHT - 147)) | (1L << (SEMI - 147)) | (1L << (SETMINUS - 147)))) != 0) || _la==UNION || _la==USING) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NonReservedContext extends ParserRuleContext {
		public TerminalNode ADD() { return getToken(HoodieSqlBaseParser.ADD, 0); }
		public TerminalNode AFTER() { return getToken(HoodieSqlBaseParser.AFTER, 0); }
		public TerminalNode ALL() { return getToken(HoodieSqlBaseParser.ALL, 0); }
		public TerminalNode ALTER() { return getToken(HoodieSqlBaseParser.ALTER, 0); }
		public TerminalNode ANALYZE() { return getToken(HoodieSqlBaseParser.ANALYZE, 0); }
		public TerminalNode AND() { return getToken(HoodieSqlBaseParser.AND, 0); }
		public TerminalNode ANY() { return getToken(HoodieSqlBaseParser.ANY, 0); }
		public TerminalNode ARCHIVE() { return getToken(HoodieSqlBaseParser.ARCHIVE, 0); }
		public TerminalNode ARRAY() { return getToken(HoodieSqlBaseParser.ARRAY, 0); }
		public TerminalNode AS() { return getToken(HoodieSqlBaseParser.AS, 0); }
		public TerminalNode ASC() { return getToken(HoodieSqlBaseParser.ASC, 0); }
		public TerminalNode AT() { return getToken(HoodieSqlBaseParser.AT, 0); }
		public TerminalNode AUTHORIZATION() { return getToken(HoodieSqlBaseParser.AUTHORIZATION, 0); }
		public TerminalNode BETWEEN() { return getToken(HoodieSqlBaseParser.BETWEEN, 0); }
		public TerminalNode BOTH() { return getToken(HoodieSqlBaseParser.BOTH, 0); }
		public TerminalNode BUCKET() { return getToken(HoodieSqlBaseParser.BUCKET, 0); }
		public TerminalNode BUCKETS() { return getToken(HoodieSqlBaseParser.BUCKETS, 0); }
		public TerminalNode BY() { return getToken(HoodieSqlBaseParser.BY, 0); }
		public TerminalNode CACHE() { return getToken(HoodieSqlBaseParser.CACHE, 0); }
		public TerminalNode CASCADE() { return getToken(HoodieSqlBaseParser.CASCADE, 0); }
		public TerminalNode CASE() { return getToken(HoodieSqlBaseParser.CASE, 0); }
		public TerminalNode CAST() { return getToken(HoodieSqlBaseParser.CAST, 0); }
		public TerminalNode CHANGE() { return getToken(HoodieSqlBaseParser.CHANGE, 0); }
		public TerminalNode CHECK() { return getToken(HoodieSqlBaseParser.CHECK, 0); }
		public TerminalNode CLEAR() { return getToken(HoodieSqlBaseParser.CLEAR, 0); }
		public TerminalNode CLUSTER() { return getToken(HoodieSqlBaseParser.CLUSTER, 0); }
		public TerminalNode CLUSTERED() { return getToken(HoodieSqlBaseParser.CLUSTERED, 0); }
		public TerminalNode CODEGEN() { return getToken(HoodieSqlBaseParser.CODEGEN, 0); }
		public TerminalNode COLLATE() { return getToken(HoodieSqlBaseParser.COLLATE, 0); }
		public TerminalNode COLLECTION() { return getToken(HoodieSqlBaseParser.COLLECTION, 0); }
		public TerminalNode COLUMN() { return getToken(HoodieSqlBaseParser.COLUMN, 0); }
		public TerminalNode COLUMNS() { return getToken(HoodieSqlBaseParser.COLUMNS, 0); }
		public TerminalNode COMMENT() { return getToken(HoodieSqlBaseParser.COMMENT, 0); }
		public TerminalNode COMMIT() { return getToken(HoodieSqlBaseParser.COMMIT, 0); }
		public TerminalNode COMPACT() { return getToken(HoodieSqlBaseParser.COMPACT, 0); }
		public TerminalNode COMPACTIONS() { return getToken(HoodieSqlBaseParser.COMPACTIONS, 0); }
		public TerminalNode COMPUTE() { return getToken(HoodieSqlBaseParser.COMPUTE, 0); }
		public TerminalNode CONCATENATE() { return getToken(HoodieSqlBaseParser.CONCATENATE, 0); }
		public TerminalNode CONSTRAINT() { return getToken(HoodieSqlBaseParser.CONSTRAINT, 0); }
		public TerminalNode COST() { return getToken(HoodieSqlBaseParser.COST, 0); }
		public TerminalNode CREATE() { return getToken(HoodieSqlBaseParser.CREATE, 0); }
		public TerminalNode CUBE() { return getToken(HoodieSqlBaseParser.CUBE, 0); }
		public TerminalNode CURRENT() { return getToken(HoodieSqlBaseParser.CURRENT, 0); }
		public TerminalNode CURRENT_DATE() { return getToken(HoodieSqlBaseParser.CURRENT_DATE, 0); }
		public TerminalNode CURRENT_TIME() { return getToken(HoodieSqlBaseParser.CURRENT_TIME, 0); }
		public TerminalNode CURRENT_TIMESTAMP() { return getToken(HoodieSqlBaseParser.CURRENT_TIMESTAMP, 0); }
		public TerminalNode CURRENT_USER() { return getToken(HoodieSqlBaseParser.CURRENT_USER, 0); }
		public TerminalNode DATA() { return getToken(HoodieSqlBaseParser.DATA, 0); }
		public TerminalNode DATABASE() { return getToken(HoodieSqlBaseParser.DATABASE, 0); }
		public TerminalNode DATABASES() { return getToken(HoodieSqlBaseParser.DATABASES, 0); }
		public TerminalNode DAY() { return getToken(HoodieSqlBaseParser.DAY, 0); }
		public TerminalNode DBPROPERTIES() { return getToken(HoodieSqlBaseParser.DBPROPERTIES, 0); }
		public TerminalNode DEFINED() { return getToken(HoodieSqlBaseParser.DEFINED, 0); }
		public TerminalNode DELETE() { return getToken(HoodieSqlBaseParser.DELETE, 0); }
		public TerminalNode DELIMITED() { return getToken(HoodieSqlBaseParser.DELIMITED, 0); }
		public TerminalNode DESC() { return getToken(HoodieSqlBaseParser.DESC, 0); }
		public TerminalNode DESCRIBE() { return getToken(HoodieSqlBaseParser.DESCRIBE, 0); }
		public TerminalNode DFS() { return getToken(HoodieSqlBaseParser.DFS, 0); }
		public TerminalNode DIRECTORIES() { return getToken(HoodieSqlBaseParser.DIRECTORIES, 0); }
		public TerminalNode DIRECTORY() { return getToken(HoodieSqlBaseParser.DIRECTORY, 0); }
		public TerminalNode DISTINCT() { return getToken(HoodieSqlBaseParser.DISTINCT, 0); }
		public TerminalNode DISTRIBUTE() { return getToken(HoodieSqlBaseParser.DISTRIBUTE, 0); }
		public TerminalNode DIV() { return getToken(HoodieSqlBaseParser.DIV, 0); }
		public TerminalNode DROP() { return getToken(HoodieSqlBaseParser.DROP, 0); }
		public TerminalNode ELSE() { return getToken(HoodieSqlBaseParser.ELSE, 0); }
		public TerminalNode END() { return getToken(HoodieSqlBaseParser.END, 0); }
		public TerminalNode ESCAPE() { return getToken(HoodieSqlBaseParser.ESCAPE, 0); }
		public TerminalNode ESCAPED() { return getToken(HoodieSqlBaseParser.ESCAPED, 0); }
		public TerminalNode EXCHANGE() { return getToken(HoodieSqlBaseParser.EXCHANGE, 0); }
		public TerminalNode EXISTS() { return getToken(HoodieSqlBaseParser.EXISTS, 0); }
		public TerminalNode EXPLAIN() { return getToken(HoodieSqlBaseParser.EXPLAIN, 0); }
		public TerminalNode EXPORT() { return getToken(HoodieSqlBaseParser.EXPORT, 0); }
		public TerminalNode EXTENDED() { return getToken(HoodieSqlBaseParser.EXTENDED, 0); }
		public TerminalNode EXTERNAL() { return getToken(HoodieSqlBaseParser.EXTERNAL, 0); }
		public TerminalNode EXTRACT() { return getToken(HoodieSqlBaseParser.EXTRACT, 0); }
		public TerminalNode FALSE() { return getToken(HoodieSqlBaseParser.FALSE, 0); }
		public TerminalNode FETCH() { return getToken(HoodieSqlBaseParser.FETCH, 0); }
		public TerminalNode FILTER() { return getToken(HoodieSqlBaseParser.FILTER, 0); }
		public TerminalNode FIELDS() { return getToken(HoodieSqlBaseParser.FIELDS, 0); }
		public TerminalNode FILEFORMAT() { return getToken(HoodieSqlBaseParser.FILEFORMAT, 0); }
		public TerminalNode FIRST() { return getToken(HoodieSqlBaseParser.FIRST, 0); }
		public TerminalNode FOLLOWING() { return getToken(HoodieSqlBaseParser.FOLLOWING, 0); }
		public TerminalNode FOR() { return getToken(HoodieSqlBaseParser.FOR, 0); }
		public TerminalNode FOREIGN() { return getToken(HoodieSqlBaseParser.FOREIGN, 0); }
		public TerminalNode FORMAT() { return getToken(HoodieSqlBaseParser.FORMAT, 0); }
		public TerminalNode FORMATTED() { return getToken(HoodieSqlBaseParser.FORMATTED, 0); }
		public TerminalNode FROM() { return getToken(HoodieSqlBaseParser.FROM, 0); }
		public TerminalNode FUNCTION() { return getToken(HoodieSqlBaseParser.FUNCTION, 0); }
		public TerminalNode FUNCTIONS() { return getToken(HoodieSqlBaseParser.FUNCTIONS, 0); }
		public TerminalNode GLOBAL() { return getToken(HoodieSqlBaseParser.GLOBAL, 0); }
		public TerminalNode GRANT() { return getToken(HoodieSqlBaseParser.GRANT, 0); }
		public TerminalNode GROUP() { return getToken(HoodieSqlBaseParser.GROUP, 0); }
		public TerminalNode GROUPING() { return getToken(HoodieSqlBaseParser.GROUPING, 0); }
		public TerminalNode HAVING() { return getToken(HoodieSqlBaseParser.HAVING, 0); }
		public TerminalNode HOUR() { return getToken(HoodieSqlBaseParser.HOUR, 0); }
		public TerminalNode IF() { return getToken(HoodieSqlBaseParser.IF, 0); }
		public TerminalNode IGNORE() { return getToken(HoodieSqlBaseParser.IGNORE, 0); }
		public TerminalNode IMPORT() { return getToken(HoodieSqlBaseParser.IMPORT, 0); }
		public TerminalNode IN() { return getToken(HoodieSqlBaseParser.IN, 0); }
		public TerminalNode INDEX() { return getToken(HoodieSqlBaseParser.INDEX, 0); }
		public TerminalNode INDEXES() { return getToken(HoodieSqlBaseParser.INDEXES, 0); }
		public TerminalNode INPATH() { return getToken(HoodieSqlBaseParser.INPATH, 0); }
		public TerminalNode INPUTFORMAT() { return getToken(HoodieSqlBaseParser.INPUTFORMAT, 0); }
		public TerminalNode INSERT() { return getToken(HoodieSqlBaseParser.INSERT, 0); }
		public TerminalNode INTERVAL() { return getToken(HoodieSqlBaseParser.INTERVAL, 0); }
		public TerminalNode INTO() { return getToken(HoodieSqlBaseParser.INTO, 0); }
		public TerminalNode IS() { return getToken(HoodieSqlBaseParser.IS, 0); }
		public TerminalNode ITEMS() { return getToken(HoodieSqlBaseParser.ITEMS, 0); }
		public TerminalNode KEYS() { return getToken(HoodieSqlBaseParser.KEYS, 0); }
		public TerminalNode LAST() { return getToken(HoodieSqlBaseParser.LAST, 0); }
		public TerminalNode LAZY() { return getToken(HoodieSqlBaseParser.LAZY, 0); }
		public TerminalNode LEADING() { return getToken(HoodieSqlBaseParser.LEADING, 0); }
		public TerminalNode LIKE() { return getToken(HoodieSqlBaseParser.LIKE, 0); }
		public TerminalNode LIMIT() { return getToken(HoodieSqlBaseParser.LIMIT, 0); }
		public TerminalNode LINES() { return getToken(HoodieSqlBaseParser.LINES, 0); }
		public TerminalNode LIST() { return getToken(HoodieSqlBaseParser.LIST, 0); }
		public TerminalNode LOAD() { return getToken(HoodieSqlBaseParser.LOAD, 0); }
		public TerminalNode LOCAL() { return getToken(HoodieSqlBaseParser.LOCAL, 0); }
		public TerminalNode LOCATION() { return getToken(HoodieSqlBaseParser.LOCATION, 0); }
		public TerminalNode LOCK() { return getToken(HoodieSqlBaseParser.LOCK, 0); }
		public TerminalNode LOCKS() { return getToken(HoodieSqlBaseParser.LOCKS, 0); }
		public TerminalNode LOGICAL() { return getToken(HoodieSqlBaseParser.LOGICAL, 0); }
		public TerminalNode MACRO() { return getToken(HoodieSqlBaseParser.MACRO, 0); }
		public TerminalNode MAP() { return getToken(HoodieSqlBaseParser.MAP, 0); }
		public TerminalNode MATCHED() { return getToken(HoodieSqlBaseParser.MATCHED, 0); }
		public TerminalNode MERGE() { return getToken(HoodieSqlBaseParser.MERGE, 0); }
		public TerminalNode MINUTE() { return getToken(HoodieSqlBaseParser.MINUTE, 0); }
		public TerminalNode MONTH() { return getToken(HoodieSqlBaseParser.MONTH, 0); }
		public TerminalNode MSCK() { return getToken(HoodieSqlBaseParser.MSCK, 0); }
		public TerminalNode NAMESPACE() { return getToken(HoodieSqlBaseParser.NAMESPACE, 0); }
		public TerminalNode NAMESPACES() { return getToken(HoodieSqlBaseParser.NAMESPACES, 0); }
		public TerminalNode NO() { return getToken(HoodieSqlBaseParser.NO, 0); }
		public TerminalNode NOT() { return getToken(HoodieSqlBaseParser.NOT, 0); }
		public TerminalNode NULL() { return getToken(HoodieSqlBaseParser.NULL, 0); }
		public TerminalNode NULLS() { return getToken(HoodieSqlBaseParser.NULLS, 0); }
		public TerminalNode OF() { return getToken(HoodieSqlBaseParser.OF, 0); }
		public TerminalNode ONLY() { return getToken(HoodieSqlBaseParser.ONLY, 0); }
		public TerminalNode OPTION() { return getToken(HoodieSqlBaseParser.OPTION, 0); }
		public TerminalNode OPTIONS() { return getToken(HoodieSqlBaseParser.OPTIONS, 0); }
		public TerminalNode OR() { return getToken(HoodieSqlBaseParser.OR, 0); }
		public TerminalNode ORDER() { return getToken(HoodieSqlBaseParser.ORDER, 0); }
		public TerminalNode OUT() { return getToken(HoodieSqlBaseParser.OUT, 0); }
		public TerminalNode OUTER() { return getToken(HoodieSqlBaseParser.OUTER, 0); }
		public TerminalNode OUTPUTFORMAT() { return getToken(HoodieSqlBaseParser.OUTPUTFORMAT, 0); }
		public TerminalNode OVER() { return getToken(HoodieSqlBaseParser.OVER, 0); }
		public TerminalNode OVERLAPS() { return getToken(HoodieSqlBaseParser.OVERLAPS, 0); }
		public TerminalNode OVERLAY() { return getToken(HoodieSqlBaseParser.OVERLAY, 0); }
		public TerminalNode OVERWRITE() { return getToken(HoodieSqlBaseParser.OVERWRITE, 0); }
		public TerminalNode PARTITION() { return getToken(HoodieSqlBaseParser.PARTITION, 0); }
		public TerminalNode PARTITIONED() { return getToken(HoodieSqlBaseParser.PARTITIONED, 0); }
		public TerminalNode PARTITIONS() { return getToken(HoodieSqlBaseParser.PARTITIONS, 0); }
		public TerminalNode PERCENTLIT() { return getToken(HoodieSqlBaseParser.PERCENTLIT, 0); }
		public TerminalNode PIVOT() { return getToken(HoodieSqlBaseParser.PIVOT, 0); }
		public TerminalNode PLACING() { return getToken(HoodieSqlBaseParser.PLACING, 0); }
		public TerminalNode POSITION() { return getToken(HoodieSqlBaseParser.POSITION, 0); }
		public TerminalNode PRECEDING() { return getToken(HoodieSqlBaseParser.PRECEDING, 0); }
		public TerminalNode PRIMARY() { return getToken(HoodieSqlBaseParser.PRIMARY, 0); }
		public TerminalNode PRINCIPALS() { return getToken(HoodieSqlBaseParser.PRINCIPALS, 0); }
		public TerminalNode PROPERTIES() { return getToken(HoodieSqlBaseParser.PROPERTIES, 0); }
		public TerminalNode PURGE() { return getToken(HoodieSqlBaseParser.PURGE, 0); }
		public TerminalNode QUERY() { return getToken(HoodieSqlBaseParser.QUERY, 0); }
		public TerminalNode RANGE() { return getToken(HoodieSqlBaseParser.RANGE, 0); }
		public TerminalNode RECORDREADER() { return getToken(HoodieSqlBaseParser.RECORDREADER, 0); }
		public TerminalNode RECORDWRITER() { return getToken(HoodieSqlBaseParser.RECORDWRITER, 0); }
		public TerminalNode RECOVER() { return getToken(HoodieSqlBaseParser.RECOVER, 0); }
		public TerminalNode REDUCE() { return getToken(HoodieSqlBaseParser.REDUCE, 0); }
		public TerminalNode REFERENCES() { return getToken(HoodieSqlBaseParser.REFERENCES, 0); }
		public TerminalNode REFRESH() { return getToken(HoodieSqlBaseParser.REFRESH, 0); }
		public TerminalNode RENAME() { return getToken(HoodieSqlBaseParser.RENAME, 0); }
		public TerminalNode REPAIR() { return getToken(HoodieSqlBaseParser.REPAIR, 0); }
		public TerminalNode REPLACE() { return getToken(HoodieSqlBaseParser.REPLACE, 0); }
		public TerminalNode RESET() { return getToken(HoodieSqlBaseParser.RESET, 0); }
		public TerminalNode RESPECT() { return getToken(HoodieSqlBaseParser.RESPECT, 0); }
		public TerminalNode RESTRICT() { return getToken(HoodieSqlBaseParser.RESTRICT, 0); }
		public TerminalNode REVOKE() { return getToken(HoodieSqlBaseParser.REVOKE, 0); }
		public TerminalNode RLIKE() { return getToken(HoodieSqlBaseParser.RLIKE, 0); }
		public TerminalNode ROLE() { return getToken(HoodieSqlBaseParser.ROLE, 0); }
		public TerminalNode ROLES() { return getToken(HoodieSqlBaseParser.ROLES, 0); }
		public TerminalNode ROLLBACK() { return getToken(HoodieSqlBaseParser.ROLLBACK, 0); }
		public TerminalNode ROLLUP() { return getToken(HoodieSqlBaseParser.ROLLUP, 0); }
		public TerminalNode ROW() { return getToken(HoodieSqlBaseParser.ROW, 0); }
		public TerminalNode ROWS() { return getToken(HoodieSqlBaseParser.ROWS, 0); }
		public TerminalNode SCHEMA() { return getToken(HoodieSqlBaseParser.SCHEMA, 0); }
		public TerminalNode SECOND() { return getToken(HoodieSqlBaseParser.SECOND, 0); }
		public TerminalNode SELECT() { return getToken(HoodieSqlBaseParser.SELECT, 0); }
		public TerminalNode SEPARATED() { return getToken(HoodieSqlBaseParser.SEPARATED, 0); }
		public TerminalNode SERDE() { return getToken(HoodieSqlBaseParser.SERDE, 0); }
		public TerminalNode SERDEPROPERTIES() { return getToken(HoodieSqlBaseParser.SERDEPROPERTIES, 0); }
		public TerminalNode SESSION_USER() { return getToken(HoodieSqlBaseParser.SESSION_USER, 0); }
		public TerminalNode SET() { return getToken(HoodieSqlBaseParser.SET, 0); }
		public TerminalNode SETS() { return getToken(HoodieSqlBaseParser.SETS, 0); }
		public TerminalNode SHOW() { return getToken(HoodieSqlBaseParser.SHOW, 0); }
		public TerminalNode SKEWED() { return getToken(HoodieSqlBaseParser.SKEWED, 0); }
		public TerminalNode SOME() { return getToken(HoodieSqlBaseParser.SOME, 0); }
		public TerminalNode SORT() { return getToken(HoodieSqlBaseParser.SORT, 0); }
		public TerminalNode SORTED() { return getToken(HoodieSqlBaseParser.SORTED, 0); }
		public TerminalNode START() { return getToken(HoodieSqlBaseParser.START, 0); }
		public TerminalNode STATISTICS() { return getToken(HoodieSqlBaseParser.STATISTICS, 0); }
		public TerminalNode STORED() { return getToken(HoodieSqlBaseParser.STORED, 0); }
		public TerminalNode STRATIFY() { return getToken(HoodieSqlBaseParser.STRATIFY, 0); }
		public TerminalNode STRUCT() { return getToken(HoodieSqlBaseParser.STRUCT, 0); }
		public TerminalNode SUBSTR() { return getToken(HoodieSqlBaseParser.SUBSTR, 0); }
		public TerminalNode SUBSTRING() { return getToken(HoodieSqlBaseParser.SUBSTRING, 0); }
		public TerminalNode SYNC() { return getToken(HoodieSqlBaseParser.SYNC, 0); }
		public TerminalNode TABLE() { return getToken(HoodieSqlBaseParser.TABLE, 0); }
		public TerminalNode TABLES() { return getToken(HoodieSqlBaseParser.TABLES, 0); }
		public TerminalNode TABLESAMPLE() { return getToken(HoodieSqlBaseParser.TABLESAMPLE, 0); }
		public TerminalNode TBLPROPERTIES() { return getToken(HoodieSqlBaseParser.TBLPROPERTIES, 0); }
		public TerminalNode TEMPORARY() { return getToken(HoodieSqlBaseParser.TEMPORARY, 0); }
		public TerminalNode TERMINATED() { return getToken(HoodieSqlBaseParser.TERMINATED, 0); }
		public TerminalNode THEN() { return getToken(HoodieSqlBaseParser.THEN, 0); }
		public TerminalNode TIME() { return getToken(HoodieSqlBaseParser.TIME, 0); }
		public TerminalNode TO() { return getToken(HoodieSqlBaseParser.TO, 0); }
		public TerminalNode TOUCH() { return getToken(HoodieSqlBaseParser.TOUCH, 0); }
		public TerminalNode TRAILING() { return getToken(HoodieSqlBaseParser.TRAILING, 0); }
		public TerminalNode TRANSACTION() { return getToken(HoodieSqlBaseParser.TRANSACTION, 0); }
		public TerminalNode TRANSACTIONS() { return getToken(HoodieSqlBaseParser.TRANSACTIONS, 0); }
		public TerminalNode TRANSFORM() { return getToken(HoodieSqlBaseParser.TRANSFORM, 0); }
		public TerminalNode TRIM() { return getToken(HoodieSqlBaseParser.TRIM, 0); }
		public TerminalNode TRUE() { return getToken(HoodieSqlBaseParser.TRUE, 0); }
		public TerminalNode TRUNCATE() { return getToken(HoodieSqlBaseParser.TRUNCATE, 0); }
		public TerminalNode TRY_CAST() { return getToken(HoodieSqlBaseParser.TRY_CAST, 0); }
		public TerminalNode TYPE() { return getToken(HoodieSqlBaseParser.TYPE, 0); }
		public TerminalNode UNARCHIVE() { return getToken(HoodieSqlBaseParser.UNARCHIVE, 0); }
		public TerminalNode UNBOUNDED() { return getToken(HoodieSqlBaseParser.UNBOUNDED, 0); }
		public TerminalNode UNCACHE() { return getToken(HoodieSqlBaseParser.UNCACHE, 0); }
		public TerminalNode UNIQUE() { return getToken(HoodieSqlBaseParser.UNIQUE, 0); }
		public TerminalNode UNKNOWN() { return getToken(HoodieSqlBaseParser.UNKNOWN, 0); }
		public TerminalNode UNLOCK() { return getToken(HoodieSqlBaseParser.UNLOCK, 0); }
		public TerminalNode UNSET() { return getToken(HoodieSqlBaseParser.UNSET, 0); }
		public TerminalNode UPDATE() { return getToken(HoodieSqlBaseParser.UPDATE, 0); }
		public TerminalNode USE() { return getToken(HoodieSqlBaseParser.USE, 0); }
		public TerminalNode USER() { return getToken(HoodieSqlBaseParser.USER, 0); }
		public TerminalNode VALUES() { return getToken(HoodieSqlBaseParser.VALUES, 0); }
		public TerminalNode VIEW() { return getToken(HoodieSqlBaseParser.VIEW, 0); }
		public TerminalNode VIEWS() { return getToken(HoodieSqlBaseParser.VIEWS, 0); }
		public TerminalNode WHEN() { return getToken(HoodieSqlBaseParser.WHEN, 0); }
		public TerminalNode WHERE() { return getToken(HoodieSqlBaseParser.WHERE, 0); }
		public TerminalNode WINDOW() { return getToken(HoodieSqlBaseParser.WINDOW, 0); }
		public TerminalNode WITH() { return getToken(HoodieSqlBaseParser.WITH, 0); }
		public TerminalNode YEAR() { return getToken(HoodieSqlBaseParser.YEAR, 0); }
		public TerminalNode ZONE() { return getToken(HoodieSqlBaseParser.ZONE, 0); }
		public TerminalNode SYSTEM_VERSION() { return getToken(HoodieSqlBaseParser.SYSTEM_VERSION, 0); }
		public TerminalNode VERSION() { return getToken(HoodieSqlBaseParser.VERSION, 0); }
		public TerminalNode SYSTEM_TIME() { return getToken(HoodieSqlBaseParser.SYSTEM_TIME, 0); }
		public TerminalNode TIMESTAMP() { return getToken(HoodieSqlBaseParser.TIMESTAMP, 0); }
		public NonReservedContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nonReserved; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).enterNonReserved(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof HoodieSqlBaseListener ) ((HoodieSqlBaseListener)listener).exitNonReserved(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof HoodieSqlBaseVisitor ) return ((HoodieSqlBaseVisitor)visitor).visitNonReserved(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NonReservedContext nonReserved() throws RecognitionException {
		NonReservedContext _localctx = new NonReservedContext(_ctx, getState());
		enterRule(_localctx, 298, RULE_nonReserved);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(2558);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ADD) | (1L << AFTER) | (1L << ALL) | (1L << ALTER) | (1L << ANALYZE) | (1L << AND) | (1L << ANY) | (1L << ARCHIVE) | (1L << ARRAY) | (1L << AS) | (1L << ASC) | (1L << AT) | (1L << AUTHORIZATION) | (1L << BETWEEN) | (1L << BOTH) | (1L << BUCKET) | (1L << BUCKETS) | (1L << BY) | (1L << CACHE) | (1L << CASCADE) | (1L << CASE) | (1L << CAST) | (1L << CHANGE) | (1L << CHECK) | (1L << CLEAR) | (1L << CLUSTER) | (1L << CLUSTERED) | (1L << CODEGEN) | (1L << COLLATE) | (1L << COLLECTION) | (1L << COLUMN) | (1L << COLUMNS) | (1L << COMMENT) | (1L << COMMIT) | (1L << COMPACT) | (1L << COMPACTIONS) | (1L << COMPUTE) | (1L << CONCATENATE) | (1L << CONSTRAINT) | (1L << COST) | (1L << CREATE) | (1L << CUBE) | (1L << CURRENT) | (1L << CURRENT_DATE) | (1L << CURRENT_TIME) | (1L << CURRENT_TIMESTAMP) | (1L << CURRENT_USER) | (1L << DAY) | (1L << DATA) | (1L << DATABASE) | (1L << DATABASES) | (1L << DBPROPERTIES) | (1L << DEFINED) | (1L << DELETE) | (1L << DELIMITED))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (DESC - 64)) | (1L << (DESCRIBE - 64)) | (1L << (DFS - 64)) | (1L << (DIRECTORIES - 64)) | (1L << (DIRECTORY - 64)) | (1L << (DISTINCT - 64)) | (1L << (DISTRIBUTE - 64)) | (1L << (DIV - 64)) | (1L << (DROP - 64)) | (1L << (ELSE - 64)) | (1L << (END - 64)) | (1L << (ESCAPE - 64)) | (1L << (ESCAPED - 64)) | (1L << (EXCHANGE - 64)) | (1L << (EXISTS - 64)) | (1L << (EXPLAIN - 64)) | (1L << (EXPORT - 64)) | (1L << (EXTENDED - 64)) | (1L << (EXTERNAL - 64)) | (1L << (EXTRACT - 64)) | (1L << (FALSE - 64)) | (1L << (FETCH - 64)) | (1L << (FIELDS - 64)) | (1L << (FILTER - 64)) | (1L << (FILEFORMAT - 64)) | (1L << (FIRST - 64)) | (1L << (FOLLOWING - 64)) | (1L << (FOR - 64)) | (1L << (FOREIGN - 64)) | (1L << (FORMAT - 64)) | (1L << (FORMATTED - 64)) | (1L << (FROM - 64)) | (1L << (FUNCTION - 64)) | (1L << (FUNCTIONS - 64)) | (1L << (GLOBAL - 64)) | (1L << (GRANT - 64)) | (1L << (GROUP - 64)) | (1L << (GROUPING - 64)) | (1L << (HAVING - 64)) | (1L << (HOUR - 64)) | (1L << (IF - 64)) | (1L << (IGNORE - 64)) | (1L << (IMPORT - 64)) | (1L << (IN - 64)) | (1L << (INDEX - 64)) | (1L << (INDEXES - 64)) | (1L << (INPATH - 64)) | (1L << (INPUTFORMAT - 64)) | (1L << (INSERT - 64)) | (1L << (INTERVAL - 64)) | (1L << (INTO - 64)) | (1L << (IS - 64)) | (1L << (ITEMS - 64)) | (1L << (KEYS - 64)) | (1L << (LAST - 64)) | (1L << (LAZY - 64)) | (1L << (LEADING - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LIKE - 128)) | (1L << (LIMIT - 128)) | (1L << (LINES - 128)) | (1L << (LIST - 128)) | (1L << (LOAD - 128)) | (1L << (LOCAL - 128)) | (1L << (LOCATION - 128)) | (1L << (LOCK - 128)) | (1L << (LOCKS - 128)) | (1L << (LOGICAL - 128)) | (1L << (MACRO - 128)) | (1L << (MAP - 128)) | (1L << (MATCHED - 128)) | (1L << (MERGE - 128)) | (1L << (MINUTE - 128)) | (1L << (MONTH - 128)) | (1L << (MSCK - 128)) | (1L << (NAMESPACE - 128)) | (1L << (NAMESPACES - 128)) | (1L << (NO - 128)) | (1L << (NOT - 128)) | (1L << (NULL - 128)) | (1L << (NULLS - 128)) | (1L << (OF - 128)) | (1L << (ONLY - 128)) | (1L << (OPTION - 128)) | (1L << (OPTIONS - 128)) | (1L << (OR - 128)) | (1L << (ORDER - 128)) | (1L << (OUT - 128)) | (1L << (OUTER - 128)) | (1L << (OUTPUTFORMAT - 128)) | (1L << (OVER - 128)) | (1L << (OVERLAPS - 128)) | (1L << (OVERLAY - 128)) | (1L << (OVERWRITE - 128)) | (1L << (PARTITION - 128)) | (1L << (PARTITIONED - 128)) | (1L << (PARTITIONS - 128)) | (1L << (PERCENTLIT - 128)) | (1L << (PIVOT - 128)) | (1L << (PLACING - 128)) | (1L << (POSITION - 128)) | (1L << (PRECEDING - 128)) | (1L << (PRIMARY - 128)) | (1L << (PRINCIPALS - 128)) | (1L << (PROPERTIES - 128)) | (1L << (PURGE - 128)) | (1L << (QUERY - 128)) | (1L << (RANGE - 128)) | (1L << (RECORDREADER - 128)) | (1L << (RECORDWRITER - 128)) | (1L << (RECOVER - 128)) | (1L << (REDUCE - 128)) | (1L << (REFERENCES - 128)) | (1L << (REFRESH - 128)) | (1L << (RENAME - 128)) | (1L << (REPAIR - 128)) | (1L << (REPLACE - 128)) | (1L << (RESET - 128)) | (1L << (RESPECT - 128)) | (1L << (RESTRICT - 128)))) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & ((1L << (REVOKE - 192)) | (1L << (RLIKE - 192)) | (1L << (ROLE - 192)) | (1L << (ROLES - 192)) | (1L << (ROLLBACK - 192)) | (1L << (ROLLUP - 192)) | (1L << (ROW - 192)) | (1L << (ROWS - 192)) | (1L << (SECOND - 192)) | (1L << (SCHEMA - 192)) | (1L << (SELECT - 192)) | (1L << (SEPARATED - 192)) | (1L << (SERDE - 192)) | (1L << (SERDEPROPERTIES - 192)) | (1L << (SESSION_USER - 192)) | (1L << (SET - 192)) | (1L << (SETS - 192)) | (1L << (SHOW - 192)) | (1L << (SKEWED - 192)) | (1L << (SOME - 192)) | (1L << (SORT - 192)) | (1L << (SORTED - 192)) | (1L << (START - 192)) | (1L << (STATISTICS - 192)) | (1L << (STORED - 192)) | (1L << (STRATIFY - 192)) | (1L << (STRUCT - 192)) | (1L << (SUBSTR - 192)) | (1L << (SUBSTRING - 192)) | (1L << (SYNC - 192)) | (1L << (TABLE - 192)) | (1L << (TABLES - 192)) | (1L << (TABLESAMPLE - 192)) | (1L << (TBLPROPERTIES - 192)) | (1L << (TEMPORARY - 192)) | (1L << (TERMINATED - 192)) | (1L << (THEN - 192)) | (1L << (TIME - 192)) | (1L << (TO - 192)) | (1L << (TOUCH - 192)) | (1L << (TRAILING - 192)) | (1L << (TRANSACTION - 192)) | (1L << (TRANSACTIONS - 192)) | (1L << (TRANSFORM - 192)) | (1L << (TRIM - 192)) | (1L << (TRUE - 192)) | (1L << (TRUNCATE - 192)) | (1L << (TRY_CAST - 192)) | (1L << (TYPE - 192)) | (1L << (UNARCHIVE - 192)) | (1L << (UNBOUNDED - 192)) | (1L << (UNCACHE - 192)) | (1L << (UNIQUE - 192)) | (1L << (UNKNOWN - 192)) | (1L << (UNLOCK - 192)) | (1L << (UNSET - 192)) | (1L << (UPDATE - 192)) | (1L << (USE - 192)) | (1L << (USER - 192)))) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & ((1L << (VALUES - 256)) | (1L << (VIEW - 256)) | (1L << (VIEWS - 256)) | (1L << (WHEN - 256)) | (1L << (WHERE - 256)) | (1L << (WINDOW - 256)) | (1L << (WITH - 256)) | (1L << (YEAR - 256)) | (1L << (ZONE - 256)) | (1L << (SYSTEM_VERSION - 256)) | (1L << (VERSION - 256)) | (1L << (SYSTEM_TIME - 256)) | (1L << (TIMESTAMP - 256)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
		switch (ruleIndex) {
		case 42:
			return queryTerm_sempred((QueryTermContext)_localctx, predIndex);
		case 108:
			return booleanExpression_sempred((BooleanExpressionContext)_localctx, predIndex);
		case 110:
			return valueExpression_sempred((ValueExpressionContext)_localctx, predIndex);
		case 111:
			return primaryExpression_sempred((PrimaryExpressionContext)_localctx, predIndex);
		case 142:
			return identifier_sempred((IdentifierContext)_localctx, predIndex);
		case 143:
			return strictIdentifier_sempred((StrictIdentifierContext)_localctx, predIndex);
		case 145:
			return number_sempred((NumberContext)_localctx, predIndex);
		}
		return true;
	}
	private boolean queryTerm_sempred(QueryTermContext _localctx, int predIndex) {
		switch (predIndex) {
		case 0:
			return precpred(_ctx, 3);
		case 1:
			return legacy_setops_precedence_enabled;
		case 2:
			return precpred(_ctx, 2);
		case 3:
			return !legacy_setops_precedence_enabled;
		case 4:
			return precpred(_ctx, 1);
		case 5:
			return !legacy_setops_precedence_enabled;
		}
		return true;
	}
	private boolean booleanExpression_sempred(BooleanExpressionContext _localctx, int predIndex) {
		switch (predIndex) {
		case 6:
			return precpred(_ctx, 2);
		case 7:
			return precpred(_ctx, 1);
		}
		return true;
	}
	private boolean valueExpression_sempred(ValueExpressionContext _localctx, int predIndex) {
		switch (predIndex) {
		case 8:
			return precpred(_ctx, 6);
		case 9:
			return precpred(_ctx, 5);
		case 10:
			return precpred(_ctx, 4);
		case 11:
			return precpred(_ctx, 3);
		case 12:
			return precpred(_ctx, 2);
		case 13:
			return precpred(_ctx, 1);
		}
		return true;
	}
	private boolean primaryExpression_sempred(PrimaryExpressionContext _localctx, int predIndex) {
		switch (predIndex) {
		case 14:
			return precpred(_ctx, 8);
		case 15:
			return precpred(_ctx, 6);
		}
		return true;
	}
	private boolean identifier_sempred(IdentifierContext _localctx, int predIndex) {
		switch (predIndex) {
		case 16:
			return !SQL_standard_keyword_behavior;
		}
		return true;
	}
	private boolean strictIdentifier_sempred(StrictIdentifierContext _localctx, int predIndex) {
		switch (predIndex) {
		case 17:
			return SQL_standard_keyword_behavior;
		case 18:
			return !SQL_standard_keyword_behavior;
		}
		return true;
	}
	private boolean number_sempred(NumberContext _localctx, int predIndex) {
		switch (predIndex) {
		case 19:
			return !legacy_exponent_literal_as_decimal_enabled;
		case 20:
			return !legacy_exponent_literal_as_decimal_enabled;
		case 21:
			return legacy_exponent_literal_as_decimal_enabled;
		}
		return true;
	}

	private static final int _serializedATNSegments = 2;
	private static final String _serializedATNSegment0 =
		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0134\u0a03\4\2\t"+
		"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
		"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
		"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
		"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
		"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
		",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
		"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
		"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
		"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
		"\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+
		"`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+
		"k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+
		"w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+
		"\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+
		"\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+
		"\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+
		"\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092\t\u0092"+
		"\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096\4\u0097"+
		"\t\u0097\3\2\3\2\3\2\3\3\3\3\5\3\u0134\n\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3"+
		"\u013c\n\3\3\3\5\3\u013f\n\3\3\3\3\3\5\3\u0143\n\3\3\3\5\3\u0146\n\3\3"+
		"\3\3\3\3\3\3\3\3\3\5\3\u014d\n\3\3\3\3\3\3\3\5\3\u0152\n\3\3\3\3\3\3\3"+
		"\5\3\u0157\n\3\3\3\3\3\3\3\3\3\3\3\5\3\u015e\n\3\3\3\3\3\3\3\3\3\5\3\u0164"+
		"\n\3\3\3\3\3\3\3\5\3\u0169\n\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3\u0171\n\3\3"+
		"\3\3\3\3\3\3\3\3\3\3\3\5\3\u0179\n\3\3\3\3\3\3\3\7\3\u017e\n\3\f\3\16"+
		"\3\u0181\13\3\5\3\u0183\n\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\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3"+
		"\f\5\f\u01a1\n\f\3\f\3\f\5\f\u01a5\n\f\3\f\3\f\3\f\3\f\3\f\5\f\u01ac\n"+
		"\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+
		"\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3"+
		"\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+
		"\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3"+
		"\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+
		"\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3"+
		"\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0220\n\f\3\f\3\f\3\f\3\f\3"+
		"\f\3\f\5\f\u0228\n\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0230\n\f\3\f\3\f\3\f"+
		"\3\f\3\f\3\f\3\f\5\f\u0239\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0243"+
		"\n\f\3\r\3\r\5\r\u0247\n\r\3\r\5\r\u024a\n\r\3\r\3\r\3\r\3\r\5\r\u0250"+
		"\n\r\3\r\3\r\3\16\3\16\5\16\u0256\n\16\3\16\3\16\3\16\3\16\3\17\3\17\3"+
		"\17\3\17\3\17\3\17\5\17\u0262\n\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20"+
		"\3\20\3\20\3\20\5\20\u026e\n\20\3\20\3\20\3\20\5\20\u0273\n\20\3\21\3"+
		"\21\3\21\3\22\3\22\3\22\3\23\5\23\u027c\n\23\3\23\3\23\3\23\3\24\3\24"+
		"\3\24\5\24\u0284\n\24\3\24\3\24\3\24\3\24\3\24\5\24\u028b\n\24\5\24\u028d"+
		"\n\24\3\24\5\24\u0290\n\24\3\24\3\24\3\24\5\24\u0295\n\24\3\24\3\24\5"+
		"\24\u0299\n\24\3\24\3\24\3\24\5\24\u029e\n\24\3\24\5\24\u02a1\n\24\3\24"+
		"\3\24\3\24\5\24\u02a6\n\24\3\24\3\24\3\24\5\24\u02ab\n\24\3\24\5\24\u02ae"+
		"\n\24\3\24\3\24\3\24\5\24\u02b3\n\24\3\24\3\24\5\24\u02b7\n\24\3\24\3"+
		"\24\3\24\5\24\u02bc\n\24\5\24\u02be\n\24\3\25\3\25\5\25\u02c2\n\25\3\26"+
		"\3\26\3\26\3\26\3\26\7\26\u02c9\n\26\f\26\16\26\u02cc\13\26\3\26\3\26"+
		"\3\27\3\27\3\27\5\27\u02d3\n\27\3\30\3\30\3\31\3\31\3\31\3\31\3\31\5\31"+
		"\u02dc\n\31\3\32\3\32\3\32\7\32\u02e1\n\32\f\32\16\32\u02e4\13\32\3\33"+
		"\3\33\3\33\3\33\7\33\u02ea\n\33\f\33\16\33\u02ed\13\33\3\34\3\34\5\34"+
		"\u02f1\n\34\3\34\5\34\u02f4\n\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\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\7\36\u030a"+
		"\n\36\f\36\16\36\u030d\13\36\3\37\3\37\3\37\3\37\7\37\u0313\n\37\f\37"+
		"\16\37\u0316\13\37\3\37\3\37\3 \3 \5 \u031c\n \3 \5 \u031f\n \3!\3!\3"+
		"!\7!\u0324\n!\f!\16!\u0327\13!\3!\5!\u032a\n!\3\"\3\"\3\"\3\"\5\"\u0330"+
		"\n\"\3#\3#\3#\3#\7#\u0336\n#\f#\16#\u0339\13#\3#\3#\3$\3$\3$\3$\7$\u0341"+
		"\n$\f$\16$\u0344\13$\3$\3$\3%\3%\3%\3%\3%\3%\5%\u034e\n%\3&\3&\3&\3&\3"+
		"&\5&\u0355\n&\3\'\3\'\3\'\3\'\5\'\u035b\n\'\3(\3(\3(\3)\3)\3)\3)\3)\3"+
		")\6)\u0366\n)\r)\16)\u0367\3)\3)\3)\3)\3)\5)\u036f\n)\3)\3)\3)\3)\3)\5"+
		")\u0376\n)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\5)\u0382\n)\3)\3)\3)\3)\7)\u0388"+
		"\n)\f)\16)\u038b\13)\3)\7)\u038e\n)\f)\16)\u0391\13)\5)\u0393\n)\3*\3"+
		"*\3*\3*\3*\7*\u039a\n*\f*\16*\u039d\13*\5*\u039f\n*\3*\3*\3*\3*\3*\7*"+
		"\u03a6\n*\f*\16*\u03a9\13*\5*\u03ab\n*\3*\3*\3*\3*\3*\7*\u03b2\n*\f*\16"+
		"*\u03b5\13*\5*\u03b7\n*\3*\3*\3*\3*\3*\7*\u03be\n*\f*\16*\u03c1\13*\5"+
		"*\u03c3\n*\3*\5*\u03c6\n*\3*\3*\3*\5*\u03cb\n*\5*\u03cd\n*\3+\3+\3+\3"+
		",\3,\3,\3,\3,\3,\3,\5,\u03d9\n,\3,\3,\3,\3,\3,\5,\u03e0\n,\3,\3,\3,\3"+
		",\3,\5,\u03e7\n,\3,\7,\u03ea\n,\f,\16,\u03ed\13,\3-\3-\3-\3-\3-\3-\3-"+
		"\3-\3-\5-\u03f8\n-\3.\3.\5.\u03fc\n.\3.\3.\5.\u0400\n.\3/\3/\6/\u0404"+
		"\n/\r/\16/\u0405\3\60\3\60\5\60\u040a\n\60\3\60\3\60\3\60\3\60\7\60\u0410"+
		"\n\60\f\60\16\60\u0413\13\60\3\60\5\60\u0416\n\60\3\60\5\60\u0419\n\60"+
		"\3\60\5\60\u041c\n\60\3\60\5\60\u041f\n\60\3\60\3\60\5\60\u0423\n\60\3"+
		"\61\3\61\5\61\u0427\n\61\3\61\7\61\u042a\n\61\f\61\16\61\u042d\13\61\3"+
		"\61\5\61\u0430\n\61\3\61\5\61\u0433\n\61\3\61\5\61\u0436\n\61\3\61\5\61"+
		"\u0439\n\61\3\61\3\61\5\61\u043d\n\61\3\61\7\61\u0440\n\61\f\61\16\61"+
		"\u0443\13\61\3\61\5\61\u0446\n\61\3\61\5\61\u0449\n\61\3\61\5\61\u044c"+
		"\n\61\3\61\5\61\u044f\n\61\5\61\u0451\n\61\3\62\3\62\3\62\3\62\5\62\u0457"+
		"\n\62\3\62\3\62\3\62\3\62\3\62\5\62\u045e\n\62\3\62\3\62\3\62\5\62\u0463"+
		"\n\62\3\62\5\62\u0466\n\62\3\62\5\62\u0469\n\62\3\62\3\62\5\62\u046d\n"+
		"\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\5\62\u0477\n\62\3\62\3\62"+
		"\5\62\u047b\n\62\5\62\u047d\n\62\3\62\5\62\u0480\n\62\3\62\3\62\5\62\u0484"+
		"\n\62\3\63\3\63\7\63\u0488\n\63\f\63\16\63\u048b\13\63\3\63\5\63\u048e"+
		"\n\63\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65\3\65\5\65\u0499\n\65\3\65"+
		"\3\65\3\65\3\66\3\66\3\66\3\66\3\66\5\66\u04a3\n\66\3\66\3\66\3\66\3\67"+
		"\3\67\3\67\3\67\3\67\3\67\3\67\5\67\u04af\n\67\38\38\38\38\38\38\38\3"+
		"8\38\38\38\78\u04bc\n8\f8\168\u04bf\138\38\38\58\u04c3\n8\39\39\39\79"+
		"\u04c8\n9\f9\169\u04cb\139\3:\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3=\5=\u04da"+
		"\n=\3=\7=\u04dd\n=\f=\16=\u04e0\13=\3=\3=\3>\3>\3>\3>\3>\3>\7>\u04ea\n"+
		">\f>\16>\u04ed\13>\3>\3>\5>\u04f1\n>\3?\3?\3?\3?\7?\u04f7\n?\f?\16?\u04fa"+
		"\13?\3?\7?\u04fd\n?\f?\16?\u0500\13?\3?\5?\u0503\n?\3@\5@\u0506\n@\3@"+
		"\3@\3@\3@\3@\5@\u050d\n@\3@\3@\3@\3@\5@\u0513\n@\3A\3A\3A\3A\3A\7A\u051a"+
		"\nA\fA\16A\u051d\13A\3A\3A\3A\3A\3A\7A\u0524\nA\fA\16A\u0527\13A\3A\3"+
		"A\3A\3A\3A\3A\3A\3A\3A\3A\7A\u0533\nA\fA\16A\u0536\13A\3A\3A\5A\u053a"+
		"\nA\5A\u053c\nA\3B\3B\5B\u0540\nB\3C\3C\3C\3C\3C\7C\u0547\nC\fC\16C\u054a"+
		"\13C\3C\3C\3C\3C\3C\3C\3C\3C\7C\u0554\nC\fC\16C\u0557\13C\3C\3C\5C\u055b"+
		"\nC\3D\3D\5D\u055f\nD\3E\3E\3E\3E\7E\u0565\nE\fE\16E\u0568\13E\5E\u056a"+
		"\nE\3E\3E\5E\u056e\nE\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\7F\u057a\nF\fF\16"+
		"F\u057d\13F\3F\3F\3F\3G\3G\3G\3G\3G\7G\u0587\nG\fG\16G\u058a\13G\3G\3"+
		"G\5G\u058e\nG\3H\3H\5H\u0592\nH\3H\5H\u0595\nH\3I\3I\3I\5I\u059a\nI\3"+
		"I\3I\3I\3I\3I\7I\u05a1\nI\fI\16I\u05a4\13I\5I\u05a6\nI\3I\3I\3I\5I\u05ab"+
		"\nI\3I\3I\3I\7I\u05b0\nI\fI\16I\u05b3\13I\5I\u05b5\nI\3J\3J\3K\5K\u05ba"+
		"\nK\3K\3K\7K\u05be\nK\fK\16K\u05c1\13K\3L\3L\3L\5L\u05c6\nL\3L\3L\5L\u05ca"+
		"\nL\3L\3L\3L\3L\5L\u05d0\nL\3L\3L\5L\u05d4\nL\3M\5M\u05d7\nM\3M\3M\3M"+
		"\5M\u05dc\nM\3M\5M\u05df\nM\3M\3M\3M\5M\u05e4\nM\3M\3M\5M\u05e8\nM\3M"+
		"\5M\u05eb\nM\3M\5M\u05ee\nM\3N\3N\3N\3N\5N\u05f4\nN\3O\3O\3O\5O\u05f9"+
		"\nO\3O\3O\3P\5P\u05fe\nP\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P"+
		"\3P\5P\u0610\nP\5P\u0612\nP\3P\5P\u0615\nP\3Q\3Q\3Q\3Q\3R\3R\3R\7R\u061e"+
		"\nR\fR\16R\u0621\13R\3S\3S\3S\3S\7S\u0627\nS\fS\16S\u062a\13S\3S\3S\3"+
		"T\3T\5T\u0630\nT\3U\3U\3U\3U\7U\u0636\nU\fU\16U\u0639\13U\3U\3U\3V\3V"+
		"\5V\u063f\nV\3W\3W\5W\u0643\nW\3W\5W\u0646\nW\3W\3W\3W\3W\3W\3W\5W\u064e"+
		"\nW\3W\3W\3W\3W\3W\3W\5W\u0656\nW\3W\3W\3W\3W\5W\u065c\nW\3X\3X\3X\3X"+
		"\7X\u0662\nX\fX\16X\u0665\13X\3X\3X\3Y\3Y\3Y\3Y\3Y\7Y\u066e\nY\fY\16Y"+
		"\u0671\13Y\5Y\u0673\nY\3Y\3Y\3Y\3Z\5Z\u0679\nZ\3Z\3Z\5Z\u067d\nZ\5Z\u067f"+
		"\nZ\3[\3[\3[\3[\3[\3[\3[\5[\u0688\n[\3[\3[\3[\3[\3[\3[\3[\3[\3[\3[\5["+
		"\u0694\n[\5[\u0696\n[\3[\3[\3[\3[\3[\5[\u069d\n[\3[\3[\3[\3[\3[\5[\u06a4"+
		"\n[\3[\3[\3[\3[\5[\u06aa\n[\3[\3[\3[\3[\5[\u06b0\n[\5[\u06b2\n[\3\\\3"+
		"\\\3\\\7\\\u06b7\n\\\f\\\16\\\u06ba\13\\\3]\3]\3]\7]\u06bf\n]\f]\16]\u06c2"+
		"\13]\3^\3^\3^\5^\u06c7\n^\3^\3^\3_\3_\3_\5_\u06ce\n_\3_\3_\3`\3`\3`\7"+
		"`\u06d5\n`\f`\16`\u06d8\13`\3a\3a\3a\5a\u06dd\na\3b\3b\3b\3b\7b\u06e3"+
		"\nb\fb\16b\u06e6\13b\3b\3b\3c\3c\5c\u06ec\nc\3c\5c\u06ef\nc\3d\3d\3d\7"+
		"d\u06f4\nd\fd\16d\u06f7\13d\3d\5d\u06fa\nd\3e\3e\3e\3e\5e\u0700\ne\3f"+
		"\3f\5f\u0704\nf\3f\3f\5f\u0708\nf\5f\u070a\nf\3g\3g\3g\7g\u070f\ng\fg"+
		"\16g\u0712\13g\3h\3h\3h\3h\7h\u0718\nh\fh\16h\u071b\13h\3h\3h\3i\3i\5"+
		"i\u0721\ni\3j\3j\3j\3j\3j\3j\7j\u0729\nj\fj\16j\u072c\13j\3j\3j\5j\u0730"+
		"\nj\3k\3k\5k\u0734\nk\3l\3l\3m\3m\3m\7m\u073b\nm\fm\16m\u073e\13m\3n\3"+
		"n\3n\3n\3n\3n\3n\3n\3n\3n\5n\u074a\nn\5n\u074c\nn\3n\3n\3n\3n\3n\3n\7"+
		"n\u0754\nn\fn\16n\u0757\13n\3o\5o\u075a\no\3o\3o\3o\3o\3o\3o\5o\u0762"+
		"\no\3o\3o\3o\3o\3o\7o\u0769\no\fo\16o\u076c\13o\3o\3o\3o\5o\u0771\no\3"+
		"o\3o\3o\3o\3o\3o\5o\u0779\no\3o\3o\3o\5o\u077e\no\3o\3o\3o\3o\3o\3o\3"+
		"o\3o\7o\u0788\no\fo\16o\u078b\13o\3o\3o\5o\u078f\no\3o\5o\u0792\no\3o"+
		"\3o\3o\3o\5o\u0798\no\3o\3o\5o\u079c\no\3o\3o\3o\5o\u07a1\no\3o\3o\3o"+
		"\5o\u07a6\no\3o\3o\3o\5o\u07ab\no\3p\3p\3p\3p\5p\u07b1\np\3p\3p\3p\3p"+
		"\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\7p\u07c6\np\fp\16p\u07c9"+
		"\13p\3q\3q\3q\3q\6q\u07cf\nq\rq\16q\u07d0\3q\3q\5q\u07d5\nq\3q\3q\3q\3"+
		"q\3q\6q\u07dc\nq\rq\16q\u07dd\3q\3q\5q\u07e2\nq\3q\3q\3q\3q\3q\3q\3q\3"+
		"q\3q\3q\3q\3q\3q\3q\7q\u07f2\nq\fq\16q\u07f5\13q\5q\u07f7\nq\3q\3q\3q"+
		"\3q\3q\3q\5q\u07ff\nq\3q\3q\3q\3q\3q\3q\3q\5q\u0808\nq\3q\3q\3q\3q\3q"+
		"\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\6q\u081d\nq\rq\16q\u081e\3"+
		"q\3q\3q\3q\3q\3q\3q\3q\3q\5q\u082a\nq\3q\3q\3q\7q\u082f\nq\fq\16q\u0832"+
		"\13q\5q\u0834\nq\3q\3q\3q\3q\3q\3q\3q\5q\u083d\nq\3q\3q\5q\u0841\nq\3"+
		"q\3q\5q\u0845\nq\3q\3q\3q\3q\3q\3q\3q\3q\6q\u084f\nq\rq\16q\u0850\3q\3"+
		"q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\3q\5q\u086a"+
		"\nq\3q\3q\3q\3q\3q\5q\u0871\nq\3q\5q\u0874\nq\3q\3q\3q\3q\3q\3q\3q\3q"+
		"\3q\3q\3q\3q\3q\5q\u0883\nq\3q\3q\5q\u0887\nq\3q\3q\3q\3q\3q\3q\3q\3q"+
		"\7q\u0891\nq\fq\16q\u0894\13q\3r\3r\3r\3r\3r\3r\3r\3r\6r\u089e\nr\rr\16"+
		"r\u089f\5r\u08a2\nr\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w\3w\5w\u08af\nw\3x\3"+
		"x\5x\u08b3\nx\3y\3y\3y\6y\u08b8\ny\ry\16y\u08b9\3z\3z\3z\5z\u08bf\nz\3"+
		"{\3{\3{\3{\3{\3|\5|\u08c7\n|\3|\3|\3}\3}\3}\5}\u08ce\n}\3~\3~\3~\3~\3"+
		"~\3~\3~\3~\3~\3~\3~\3~\3~\3~\3~\5~\u08df\n~\3~\3~\5~\u08e3\n~\3~\3~\3"+
		"~\3~\5~\u08e9\n~\3~\3~\3~\3~\5~\u08ef\n~\3~\3~\3~\3~\3~\7~\u08f6\n~\f"+
		"~\16~\u08f9\13~\3~\5~\u08fc\n~\5~\u08fe\n~\3\177\3\177\3\177\7\177\u0903"+
		"\n\177\f\177\16\177\u0906\13\177\3\u0080\3\u0080\3\u0080\3\u0080\5\u0080"+
		"\u090c\n\u0080\3\u0080\5\u0080\u090f\n\u0080\3\u0080\5\u0080\u0912\n\u0080"+
		"\3\u0081\3\u0081\3\u0081\7\u0081\u0917\n\u0081\f\u0081\16\u0081\u091a"+
		"\13\u0081\3\u0082\3\u0082\3\u0082\3\u0082\5\u0082\u0920\n\u0082\3\u0082"+
		"\5\u0082\u0923\n\u0082\3\u0083\3\u0083\3\u0083\7\u0083\u0928\n\u0083\f"+
		"\u0083\16\u0083\u092b\13\u0083\3\u0084\3\u0084\5\u0084\u092f\n\u0084\3"+
		"\u0084\3\u0084\3\u0084\5\u0084\u0934\n\u0084\3\u0084\5\u0084\u0937\n\u0084"+
		"\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\7\u0086\u0942\n\u0086\f\u0086\16\u0086\u0945\13\u0086\3\u0087\3\u0087"+
		"\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088"+
		"\3\u0088\3\u0088\3\u0088\3\u0088\7\u0088\u0956\n\u0088\f\u0088\16\u0088"+
		"\u0959\13\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\7\u0088\u0960"+
		"\n\u0088\f\u0088\16\u0088\u0963\13\u0088\5\u0088\u0965\n\u0088\3\u0088"+
		"\3\u0088\3\u0088\3\u0088\3\u0088\7\u0088\u096c\n\u0088\f\u0088\16\u0088"+
		"\u096f\13\u0088\5\u0088\u0971\n\u0088\5\u0088\u0973\n\u0088\3\u0088\5"+
		"\u0088\u0976\n\u0088\3\u0088\5\u0088\u0979\n\u0088\3\u0089\3\u0089\3\u0089"+
		"\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089"+
		"\3\u0089\3\u0089\3\u0089\3\u0089\5\u0089\u098b\n\u0089\3\u008a\3\u008a"+
		"\3\u008a\3\u008a\3\u008a\3\u008a\3\u008a\5\u008a\u0994\n\u008a\3\u008b"+
		"\3\u008b\3\u008b\7\u008b\u0999\n\u008b\f\u008b\16\u008b\u099c\13\u008b"+
		"\3\u008c\3\u008c\3\u008c\3\u008c\5\u008c\u09a2\n\u008c\3\u008d\3\u008d"+
		"\3\u008d\7\u008d\u09a7\n\u008d\f\u008d\16\u008d\u09aa\13\u008d\3\u008e"+
		"\3\u008e\3\u008e\3\u008f\3\u008f\6\u008f\u09b1\n\u008f\r\u008f\16\u008f"+
		"\u09b2\3\u008f\5\u008f\u09b6\n\u008f\3\u0090\3\u0090\3\u0090\5\u0090\u09bb"+
		"\n\u0090\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\5\u0091\u09c3"+
		"\n\u0091\3\u0092\3\u0092\3\u0093\3\u0093\5\u0093\u09c9\n\u0093\3\u0093"+
		"\3\u0093\3\u0093\5\u0093\u09ce\n\u0093\3\u0093\3\u0093\3\u0093\5\u0093"+
		"\u09d3\n\u0093\3\u0093\3\u0093\5\u0093\u09d7\n\u0093\3\u0093\3\u0093\5"+
		"\u0093\u09db\n\u0093\3\u0093\3\u0093\5\u0093\u09df\n\u0093\3\u0093\3\u0093"+
		"\5\u0093\u09e3\n\u0093\3\u0093\3\u0093\5\u0093\u09e7\n\u0093\3\u0093\3"+
		"\u0093\5\u0093\u09eb\n\u0093\3\u0093\3\u0093\5\u0093\u09ef\n\u0093\3\u0093"+
		"\5\u0093\u09f2\n\u0093\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094"+
		"\3\u0094\5\u0094\u09fb\n\u0094\3\u0095\3\u0095\3\u0096\3\u0096\3\u0097"+
		"\3\u0097\3\u0097\3\u017f\6V\u00da\u00de\u00e0\u0098\2\4\6\b\n\f\16\20"+
		"\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhj"+
		"lnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092"+
		"\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa"+
		"\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2"+
		"\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da"+
		"\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2"+
		"\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a"+
		"\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122"+
		"\u0124\u0126\u0128\u012a\u012c\2+\4\2bboo\5\2<<\u0093\u0093\u00cc\u00cc"+
		"\6\2OOvv\u00d4\u00d4\u00f9\u00f9\5\2OO\u00d4\u00d4\u00f9\u00f9\4\2\24"+
		"\24BB\4\2\\\\}}\3\2\u010d\u010e\3\2\u010b\u010c\4\2\u0125\u0125\u0129"+
		"\u0129\4\2\64\64\u00c8\u00c8\4\2\13\13GG\4\2\u0129\u0129\u012b\u012b\5"+
		"\2\13\13\20\20\u00d8\u00d8\5\2WW\u00f2\u00f2\u00fb\u00fb\4\2\u011b\u011c"+
		"\u0120\u0120\4\2II\u011d\u011f\4\2\u011b\u011c\u0123\u0123\4\2\66\668"+
		"9\4\2\37\37\u00f4\u00f4\4\2mm\u00c0\u00c0\3\2\u00e0\u00e1\4\2bb\u0111"+
		"\u0111\4\2^^\u0111\u0111\5\2\30\30\u0080\u0080\u00ed\u00ed\3\2\u0113\u011a"+
		"\4\2II\u011b\u0124\6\2\16\16oo\u0097\u0097\u009f\u009f\4\2WW\u00f2\u00f2"+
		"\3\2\u011b\u011c\5\2\u0125\u0125\u0129\u0129\u012b\u012b\4\2\u0091\u0091"+
		"\u0109\u0109\6\2::kk\u0090\u0090\u00cb\u00cb\5\2kk\u0090\u0090\u00cb\u00cb"+
		"\4\2HH\u00a8\u00a8\4\2\u00a0\u00a0\u00d9\u00d9\4\2]]\u00af\u00af\3\2\u012a"+
		"\u012b\4\2JJ\u00d3\u00d3\63\2\t\n\f\r\17\17\21\22\24\25\27\27\31\35  "+
		"\"%\'\')/\61\61\64\65:FHJNNPVYY[]`adfiiknpqsuwwzz|}\177\177\u0082\u0094"+
		"\u0096\u0096\u0099\u009a\u009d\u009e\u00a1\u00a1\u00a3\u00a4\u00a6\u00af"+
		"\u00b1\u00b9\u00bb\u00c2\u00c4\u00cc\u00ce\u00d1\u00d3\u00d7\u00d9\u00e2"+
		"\u00e4\u00e8\u00ec\u00ec\u00ee\u00f8\u00fc\u00ff\u0102\u0104\u0107\u0107"+
		"\u0109\u010a\22\2\17\17\63\63OOccrrvv{{~~\u0081\u0081\u0095\u0095\u009b"+
		"\u009b\u00c3\u00c3\u00ce\u00ce\u00d4\u00d4\u00f9\u00f9\u0101\u0101\23"+
		"\2\t\16\20\62\64NPbdqsuwz|}\177\u0080\u0082\u0094\u0096\u009a\u009c\u00c2"+
		"\u00c4\u00cd\u00cf\u00d3\u00d5\u00f8\u00fa\u0100\u0102\u010e\2\u0b4a\2"+
		"\u012e\3\2\2\2\4\u0182\3\2\2\2\6\u0184\3\2\2\2\b\u0187\3\2\2\2\n\u018a"+
		"\3\2\2\2\f\u018d\3\2\2\2\16\u0190\3\2\2\2\20\u0193\3\2\2\2\22\u0196\3"+
		"\2\2\2\24\u0198\3\2\2\2\26\u0242\3\2\2\2\30\u0244\3\2\2\2\32\u0255\3\2"+
		"\2\2\34\u025b\3\2\2\2\36\u0267\3\2\2\2 \u0274\3\2\2\2\"\u0277\3\2\2\2"+
		"$\u027b\3\2\2\2&\u02bd\3\2\2\2(\u02bf\3\2\2\2*\u02c3\3\2\2\2,\u02cf\3"+
		"\2\2\2.\u02d4\3\2\2\2\60\u02db\3\2\2\2\62\u02dd\3\2\2\2\64\u02e5\3\2\2"+
		"\2\66\u02ee\3\2\2\28\u02f9\3\2\2\2:\u030b\3\2\2\2<\u030e\3\2\2\2>\u0319"+
		"\3\2\2\2@\u0329\3\2\2\2B\u032f\3\2\2\2D\u0331\3\2\2\2F\u033c\3\2\2\2H"+
		"\u034d\3\2\2\2J\u0354\3\2\2\2L\u0356\3\2\2\2N\u035c\3\2\2\2P\u0392\3\2"+
		"\2\2R\u039e\3\2\2\2T\u03ce\3\2\2\2V\u03d1\3\2\2\2X\u03f7\3\2\2\2Z\u03f9"+
		"\3\2\2\2\\\u0401\3\2\2\2^\u0422\3\2\2\2`\u0450\3\2\2\2b\u0465\3\2\2\2"+
		"d\u0485\3\2\2\2f\u0491\3\2\2\2h\u0494\3\2\2\2j\u049d\3\2\2\2l\u04ae\3"+
		"\2\2\2n\u04c2\3\2\2\2p\u04c4\3\2\2\2r\u04cc\3\2\2\2t\u04d0\3\2\2\2v\u04d3"+
		"\3\2\2\2x\u04d6\3\2\2\2z\u04f0\3\2\2\2|\u04f2\3\2\2\2~\u0512\3\2\2\2\u0080"+
		"\u053b\3\2\2\2\u0082\u053f\3\2\2\2\u0084\u055a\3\2\2\2\u0086\u055e\3\2"+
		"\2\2\u0088\u056d\3\2\2\2\u008a\u056f\3\2\2\2\u008c\u058d\3\2\2\2\u008e"+
		"\u058f\3\2\2\2\u0090\u0596\3\2\2\2\u0092\u05b6\3\2\2\2\u0094\u05b9\3\2"+
		"\2\2\u0096\u05d3\3\2\2\2\u0098\u05ed\3\2\2\2\u009a\u05f3\3\2\2\2\u009c"+
		"\u05f5\3\2\2\2\u009e\u0614\3\2\2\2\u00a0\u0616\3\2\2\2\u00a2\u061a\3\2"+
		"\2\2\u00a4\u0622\3\2\2\2\u00a6\u062d\3\2\2\2\u00a8\u0631\3\2\2\2\u00aa"+
		"\u063c\3\2\2\2\u00ac\u065b\3\2\2\2\u00ae\u065d\3\2\2\2\u00b0\u0668\3\2"+
		"\2\2\u00b2\u067e\3\2\2\2\u00b4\u06b1\3\2\2\2\u00b6\u06b3\3\2\2\2\u00b8"+
		"\u06bb\3\2\2\2\u00ba\u06c6\3\2\2\2\u00bc\u06cd\3\2\2\2\u00be\u06d1\3\2"+
		"\2\2\u00c0\u06d9\3\2\2\2\u00c2\u06de\3\2\2\2\u00c4\u06e9\3\2\2\2\u00c6"+
		"\u06f9\3\2\2\2\u00c8\u06ff\3\2\2\2\u00ca\u0701\3\2\2\2\u00cc\u070b\3\2"+
		"\2\2\u00ce\u0713\3\2\2\2\u00d0\u0720\3\2\2\2\u00d2\u072f\3\2\2\2\u00d4"+
		"\u0733\3\2\2\2\u00d6\u0735\3\2\2\2\u00d8\u0737\3\2\2\2\u00da\u074b\3\2"+
		"\2\2\u00dc\u07aa\3\2\2\2\u00de\u07b0\3\2\2\2\u00e0\u0886\3\2\2\2\u00e2"+
		"\u08a1\3\2\2\2\u00e4\u08a3\3\2\2\2\u00e6\u08a5\3\2\2\2\u00e8\u08a7\3\2"+
		"\2\2\u00ea\u08a9\3\2\2\2\u00ec\u08ab\3\2\2\2\u00ee\u08b0\3\2\2\2\u00f0"+
		"\u08b7\3\2\2\2\u00f2\u08bb\3\2\2\2\u00f4\u08c0\3\2\2\2\u00f6\u08c6\3\2"+
		"\2\2\u00f8\u08cd\3\2\2\2\u00fa\u08fd\3\2\2\2\u00fc\u08ff\3\2\2\2\u00fe"+
		"\u0907\3\2\2\2\u0100\u0913\3\2\2\2\u0102\u091b\3\2\2\2\u0104\u0924\3\2"+
		"\2\2\u0106\u092c\3\2\2\2\u0108\u0938\3\2\2\2\u010a\u093d\3\2\2\2\u010c"+
		"\u0946\3\2\2\2\u010e\u0978\3\2\2\2\u0110\u098a\3\2\2\2\u0112\u0993\3\2"+
		"\2\2\u0114\u0995\3\2\2\2\u0116\u09a1\3\2\2\2\u0118\u09a3\3\2\2\2\u011a"+
		"\u09ab\3\2\2\2\u011c\u09b5\3\2\2\2\u011e\u09ba\3\2\2\2\u0120\u09c2\3\2"+
		"\2\2\u0122\u09c4\3\2\2\2\u0124\u09f1\3\2\2\2\u0126\u09fa\3\2\2\2\u0128"+
		"\u09fc\3\2\2\2\u012a\u09fe\3\2\2\2\u012c\u0a00\3\2\2\2\u012e\u012f\5\4"+
		"\3\2\u012f\u0130\7\2\2\3\u0130\3\3\2\2\2\u0131\u0183\5$\23\2\u0132\u0134"+
		"\5\64\33\2\u0133\u0132\3\2\2\2\u0133\u0134\3\2\2\2\u0134\u0135\3\2\2\2"+
		"\u0135\u0183\5P)\2\u0136\u013b\5\30\r\2\u0137\u0138\7\u010f\2\2\u0138"+
		"\u0139\5\u0100\u0081\2\u0139\u013a\7\u0110\2\2\u013a\u013c\3\2\2\2\u013b"+
		"\u0137\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u013e\3\2\2\2\u013d\u013f\58"+
		"\35\2\u013e\u013d\3\2\2\2\u013e\u013f\3\2\2\2\u013f\u0140\3\2\2\2\u0140"+
		"\u0145\5:\36\2\u0141\u0143\7\23\2\2\u0142\u0141\3\2\2\2\u0142\u0143\3"+
		"\2\2\2\u0143\u0144\3\2\2\2\u0144\u0146\5$\23\2\u0145\u0142\3\2\2\2\u0145"+
		"\u0146\3\2\2\2\u0146\u0183\3\2\2\2\u0147\u0148\7\62\2\2\u0148\u014c\7"+
		"p\2\2\u0149\u014a\7l\2\2\u014a\u014b\7\u0097\2\2\u014b\u014d\7Q\2\2\u014c"+
		"\u0149\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u014f\5\u011e"+
		"\u0090\2\u014f\u0151\7\u009b\2\2\u0150\u0152\7\u00e3\2\2\u0151\u0150\3"+
		"\2\2\2\u0151\u0152\3\2\2\2\u0152\u0153\3\2\2\2\u0153\u0156\5\u00ba^\2"+
		"\u0154\u0155\7\u0101\2\2\u0155\u0157\5\u011e\u0090\2\u0156\u0154\3\2\2"+
		"\2\u0156\u0157\3\2\2\2\u0157\u0158\3\2\2\2\u0158\u0159\7\u010f\2\2\u0159"+
		"\u015a\5\u00be`\2\u015a\u015d\7\u0110\2\2\u015b\u015c\7\u009e\2\2\u015c"+
		"\u015e\5\u00c2b\2\u015d\u015b\3\2\2\2\u015d\u015e\3\2\2\2\u015e\u0183"+
		"\3\2\2\2\u015f\u0160\7J\2\2\u0160\u0163\7p\2\2\u0161\u0162\7l\2\2\u0162"+
		"\u0164\7Q\2\2\u0163\u0161\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u0165\3\2"+
		"\2\2\u0165\u0166\5\u011e\u0090\2\u0166\u0168\7\u009b\2\2\u0167\u0169\7"+
		"\u00e3\2\2\u0168\u0167\3\2\2\2\u0168\u0169\3\2\2\2\u0169\u016a\3\2\2\2"+
		"\u016a\u016b\5\u00ba^\2\u016b\u0183\3\2\2\2\u016c\u016d\7\u00d6\2\2\u016d"+
		"\u016e\7q\2\2\u016e\u0170\t\2\2\2\u016f\u0171\7\u00e3\2\2\u0170\u016f"+
		"\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0172\3\2\2\2\u0172\u0183\5\u00ba^"+
		"\2\u0173\u0174\7\u00bb\2\2\u0174\u0175\7p\2\2\u0175\u0176\5\u011e\u0090"+
		"\2\u0176\u0178\7\u009b\2\2\u0177\u0179\7\u00e3\2\2\u0178\u0177\3\2\2\2"+
		"\u0178\u0179\3\2\2\2\u0179\u017a\3\2\2\2\u017a\u017b\5\u00ba^\2\u017b"+
		"\u0183\3\2\2\2\u017c\u017e\13\2\2\2\u017d\u017c\3\2\2\2\u017e\u0181\3"+
		"\2\2\2\u017f\u0180\3\2\2\2\u017f\u017d\3\2\2\2\u0180\u0183\3\2\2\2\u0181"+
		"\u017f\3\2\2\2\u0182\u0131\3\2\2\2\u0182\u0133\3\2\2\2\u0182\u0136\3\2"+
		"\2\2\u0182\u0147\3\2\2\2\u0182\u015f\3\2\2\2\u0182\u016c\3\2\2\2\u0182"+
		"\u0173\3\2\2\2\u0182\u017f\3\2\2\2\u0183\5\3\2\2\2\u0184\u0185\5\u00ca"+
		"f\2\u0185\u0186\7\2\2\3\u0186\7\3\2\2\2\u0187\u0188\5\u00ba^\2\u0188\u0189"+
		"\7\2\2\3\u0189\t\3\2\2\2\u018a\u018b\5\u00b8]\2\u018b\u018c\7\2\2\3\u018c"+
		"\13\3\2\2\2\u018d\u018e\5\u00bc_\2\u018e\u018f\7\2\2\3\u018f\r\3\2\2\2"+
		"\u0190\u0191\5\u00fa~\2\u0191\u0192\7\2\2\3\u0192\17\3\2\2\2\u0193\u0194"+
		"\5\u0100\u0081\2\u0194\u0195\7\2\2\3\u0195\21\3\2\2\2\u0196\u0197\5\u0122"+
		"\u0092\2\u0197\23\3\2\2\2\u0198\u0199\5\u0122\u0092\2\u0199\25\3\2\2\2"+
		"\u019a\u019b\7\62\2\2\u019b\u0243\7\u00c5\2\2\u019c\u019d\7J\2\2\u019d"+
		"\u0243\7\u00c5\2\2\u019e\u01a0\7g\2\2\u019f\u01a1\7\u00c5\2\2\u01a0\u019f"+
		"\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u0243\3\2\2\2\u01a2\u01a4\7\u00c2\2"+
		"\2\u01a3\u01a5\7\u00c5\2\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5"+
		"\u0243\3\2\2\2\u01a6\u01a7\7\u00d6\2\2\u01a7\u0243\7g\2\2\u01a8\u01a9"+
		"\7\u00d6\2\2\u01a9\u01ab\7\u00c5\2\2\u01aa\u01ac\7g\2\2\u01ab\u01aa\3"+
		"\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u0243\3\2\2\2\u01ad\u01ae\7\u00d6\2\2"+
		"\u01ae\u0243\7\u00b1\2\2\u01af\u01b0\7\u00d6\2\2\u01b0\u0243\7\u00c6\2"+
		"\2\u01b1\u01b2\7\u00d6\2\2\u01b2\u01b3\7\65\2\2\u01b3\u0243\7\u00c6\2"+
		"\2\u01b4\u01b5\7S\2\2\u01b5\u0243\7\u00e3\2\2\u01b6\u01b7\7n\2\2\u01b7"+
		"\u0243\7\u00e3\2\2\u01b8\u01b9\7\u00d6\2\2\u01b9\u0243\7-\2\2\u01ba\u01bb"+
		"\7\u00d6\2\2\u01bb\u01bc\7\62\2\2\u01bc\u0243\7\u00e3\2\2\u01bd\u01be"+
		"\7\u00d6\2\2\u01be\u0243\7\u00ef\2\2\u01bf\u01c0\7\u00d6\2\2\u01c0\u0243"+
		"\7q\2\2\u01c1\u01c2\7\u00d6\2\2\u01c2\u0243\7\u008a\2\2\u01c3\u01c4\7"+
		"\62\2\2\u01c4\u0243\7p\2\2\u01c5\u01c6\7J\2\2\u01c6\u0243\7p\2\2\u01c7"+
		"\u01c8\7\f\2\2\u01c8\u0243\7p\2\2\u01c9\u01ca\7\u0089\2\2\u01ca\u0243"+
		"\7\u00e3\2\2\u01cb\u01cc\7\u0089\2\2\u01cc\u0243\7<\2\2\u01cd\u01ce\7"+
		"\u00fc\2\2\u01ce\u0243\7\u00e3\2\2\u01cf\u01d0\7\u00fc\2\2\u01d0\u0243"+
		"\7<\2\2\u01d1\u01d2\7\62\2\2\u01d2\u01d3\7\u00e7\2\2\u01d3\u0243\7\u008c"+
		"\2\2\u01d4\u01d5\7J\2\2\u01d5\u01d6\7\u00e7\2\2\u01d6\u0243\7\u008c\2"+
		"\2\u01d7\u01d8\7\f\2\2\u01d8\u01d9\7\u00e3\2\2\u01d9\u01da\5\u00ba^\2"+
		"\u01da\u01db\7\u0097\2\2\u01db\u01dc\7$\2\2\u01dc\u0243\3\2\2\2\u01dd"+
		"\u01de\7\f\2\2\u01de\u01df\7\u00e3\2\2\u01df\u01e0\5\u00ba^\2\u01e0\u01e1"+
		"\7$\2\2\u01e1\u01e2\7\33\2\2\u01e2\u0243\3\2\2\2\u01e3\u01e4\7\f\2\2\u01e4"+
		"\u01e5\7\u00e3\2\2\u01e5\u01e6\5\u00ba^\2\u01e6\u01e7\7\u0097\2\2\u01e7"+
		"\u01e8\7\u00da\2\2\u01e8\u0243\3\2\2\2\u01e9\u01ea\7\f\2\2\u01ea\u01eb"+
		"\7\u00e3\2\2\u01eb\u01ec\5\u00ba^\2\u01ec\u01ed\7\u00d7\2\2\u01ed\u01ee"+
		"\7\33\2\2\u01ee\u0243\3\2\2\2\u01ef\u01f0\7\f\2\2\u01f0\u01f1\7\u00e3"+
		"\2\2\u01f1\u01f2\5\u00ba^\2\u01f2\u01f3\7\u0097\2\2\u01f3\u01f4\7\u00d7"+
		"\2\2\u01f4\u0243\3\2\2\2\u01f5\u01f6\7\f\2\2\u01f6\u01f7\7\u00e3\2\2\u01f7"+
		"\u01f8\5\u00ba^\2\u01f8\u01f9\7\u0097\2\2\u01f9\u01fa\7\u00dd\2\2\u01fa"+
		"\u01fb\7\23\2\2\u01fb\u01fc\7E\2\2\u01fc\u0243\3\2\2\2\u01fd\u01fe\7\f"+
		"\2\2\u01fe\u01ff\7\u00e3\2\2\u01ff\u0200\5\u00ba^\2\u0200\u0201\7\u00d3"+
		"\2\2\u0201\u0202\7\u00d7\2\2\u0202\u0203\7\u0088\2\2\u0203\u0243\3\2\2"+
		"\2\u0204\u0205\7\f\2\2\u0205\u0206\7\u00e3\2\2\u0206\u0207\5\u00ba^\2"+
		"\u0207\u0208\7P\2\2\u0208\u0209\7\u00a8\2\2\u0209\u0243\3\2\2\2\u020a"+
		"\u020b\7\f\2\2\u020b\u020c\7\u00e3\2\2\u020c\u020d\5\u00ba^\2\u020d\u020e"+
		"\7\21\2\2\u020e\u020f\7\u00a8\2\2\u020f\u0243\3\2\2\2\u0210\u0211\7\f"+
		"\2\2\u0211\u0212\7\u00e3\2\2\u0212\u0213\5\u00ba^\2\u0213\u0214\7\u00f6"+
		"\2\2\u0214\u0215\7\u00a8\2\2\u0215\u0243\3\2\2\2\u0216\u0217\7\f\2\2\u0217"+
		"\u0218\7\u00e3\2\2\u0218\u0219\5\u00ba^\2\u0219\u021a\7\u00ec\2\2\u021a"+
		"\u0243\3\2\2\2\u021b\u021c\7\f\2\2\u021c\u021d\7\u00e3\2\2\u021d\u021f"+
		"\5\u00ba^\2\u021e\u0220\5*\26\2\u021f\u021e\3\2\2\2\u021f\u0220\3\2\2"+
		"\2\u0220\u0221\3\2\2\2\u0221\u0222\7,\2\2\u0222\u0243\3\2\2\2\u0223\u0224"+
		"\7\f\2\2\u0224\u0225\7\u00e3\2\2\u0225\u0227\5\u00ba^\2\u0226\u0228\5"+
		"*\26\2\u0227\u0226\3\2\2\2\u0227\u0228\3\2\2\2\u0228\u0229\3\2\2\2\u0229"+
		"\u022a\7/\2\2\u022a\u0243\3\2\2\2\u022b\u022c\7\f\2\2\u022c\u022d\7\u00e3"+
		"\2\2\u022d\u022f\5\u00ba^\2\u022e\u0230\5*\26\2\u022f\u022e\3\2\2\2\u022f"+
		"\u0230\3\2\2\2\u0230\u0231\3\2\2\2\u0231\u0232\7\u00d3\2\2\u0232\u0233"+
		"\7[\2\2\u0233\u0243\3\2\2\2\u0234\u0235\7\f\2\2\u0235\u0236\7\u00e3\2"+
		"\2\u0236\u0238\5\u00ba^\2\u0237\u0239\5*\26\2\u0238\u0237\3\2\2\2\u0238"+
		"\u0239\3\2\2\2\u0239\u023a\3\2\2\2\u023a\u023b\7\u00be\2\2\u023b\u023c"+
		"\7)\2\2\u023c\u0243\3\2\2\2\u023d\u023e\7\u00db\2\2\u023e\u0243\7\u00ee"+
		"\2\2\u023f\u0243\7+\2\2\u0240\u0243\7\u00c7\2\2\u0241\u0243\7D\2\2\u0242"+
		"\u019a\3\2\2\2\u0242\u019c\3\2\2\2\u0242\u019e\3\2\2\2\u0242\u01a2\3\2"+
		"\2\2\u0242\u01a6\3\2\2\2\u0242\u01a8\3\2\2\2\u0242\u01ad\3\2\2\2\u0242"+
		"\u01af\3\2\2\2\u0242\u01b1\3\2\2\2\u0242\u01b4\3\2\2\2\u0242\u01b6\3\2"+
		"\2\2\u0242\u01b8\3\2\2\2\u0242\u01ba\3\2\2\2\u0242\u01bd\3\2\2\2\u0242"+
		"\u01bf\3\2\2\2\u0242\u01c1\3\2\2\2\u0242\u01c3\3\2\2\2\u0242\u01c5\3\2"+
		"\2\2\u0242\u01c7\3\2\2\2\u0242\u01c9\3\2\2\2\u0242\u01cb\3\2\2\2\u0242"+
		"\u01cd\3\2\2\2\u0242\u01cf\3\2\2\2\u0242\u01d1\3\2\2\2\u0242\u01d4\3\2"+
		"\2\2\u0242\u01d7\3\2\2\2\u0242\u01dd\3\2\2\2\u0242\u01e3\3\2\2\2\u0242"+
		"\u01e9\3\2\2\2\u0242\u01ef\3\2\2\2\u0242\u01f5\3\2\2\2\u0242\u01fd\3\2"+
		"\2\2\u0242\u0204\3\2\2\2\u0242\u020a\3\2\2\2\u0242\u0210\3\2\2\2\u0242"+
		"\u0216\3\2\2\2\u0242\u021b\3\2\2\2\u0242\u0223\3\2\2\2\u0242\u022b\3\2"+
		"\2\2\u0242\u0234\3\2\2\2\u0242\u023d\3\2\2\2\u0242\u023f\3\2\2\2\u0242"+
		"\u0240\3\2\2\2\u0242\u0241\3\2\2\2\u0243\27\3\2\2\2\u0244\u0246\7\62\2"+
		"\2\u0245\u0247\7\u00e7\2\2\u0246\u0245\3\2\2\2\u0246\u0247\3\2\2\2\u0247"+
		"\u0249\3\2\2\2\u0248\u024a\7U\2\2\u0249\u0248\3\2\2\2\u0249\u024a\3\2"+
		"\2\2\u024a\u024b\3\2\2\2\u024b\u024f\7\u00e3\2\2\u024c\u024d\7l\2\2\u024d"+
		"\u024e\7\u0097\2\2\u024e\u0250\7Q\2\2\u024f\u024c\3\2\2\2\u024f\u0250"+
		"\3\2\2\2\u0250\u0251\3\2\2\2\u0251\u0252\5\u00b8]\2\u0252\31\3\2\2\2\u0253"+
		"\u0254\7\62\2\2\u0254\u0256\7\u009f\2\2\u0255\u0253\3\2\2\2\u0255\u0256"+
		"\3\2\2\2\u0256\u0257\3\2\2\2\u0257\u0258\7\u00be\2\2\u0258\u0259\7\u00e3"+
		"\2\2\u0259\u025a\5\u00b8]\2\u025a\33\3\2\2\2\u025b\u025c\7$\2\2\u025c"+
		"\u025d\7\33\2\2\u025d\u0261\5\u00a0Q\2\u025e\u025f\7\u00da\2\2\u025f\u0260"+
		"\7\33\2\2\u0260\u0262\5\u00a4S\2\u0261\u025e\3\2\2\2\u0261\u0262\3\2\2"+
		"\2\u0262\u0263\3\2\2\2\u0263\u0264\7x\2\2\u0264\u0265\7\u0129\2\2\u0265"+
		"\u0266\7\32\2\2\u0266\35\3\2\2\2\u0267\u0268\7\u00d7\2\2\u0268\u0269\7"+
		"\33\2\2\u0269\u026a\5\u00a0Q\2\u026a\u026d\7\u009b\2\2\u026b\u026e\5D"+
		"#\2\u026c\u026e\5F$\2\u026d\u026b\3\2\2\2\u026d\u026c\3\2\2\2\u026e\u0272"+
		"\3\2\2\2\u026f\u0270\7\u00dd\2\2\u0270\u0271\7\23\2\2\u0271\u0273\7E\2"+
		"\2\u0272\u026f\3\2\2\2\u0272\u0273\3\2\2\2\u0273\37\3\2\2\2\u0274\u0275"+
		"\7\u0088\2\2\u0275\u0276\7\u0125\2\2\u0276!\3\2\2\2\u0277\u0278\7*\2\2"+
		"\u0278\u0279\7\u0125\2\2\u0279#\3\2\2\2\u027a\u027c\5\64\33\2\u027b\u027a"+
		"\3\2\2\2\u027b\u027c\3\2\2\2\u027c\u027d\3\2\2\2\u027d\u027e\5V,\2\u027e"+
		"\u027f\5R*\2\u027f%\3\2\2\2\u0280\u0281\7u\2\2\u0281\u0283\7\u00a7\2\2"+
		"\u0282\u0284\7\u00e3\2\2\u0283\u0282\3\2\2\2\u0283\u0284\3\2\2\2\u0284"+
		"\u0285\3\2\2\2\u0285\u028c\5\u00b8]\2\u0286\u028a\5*\26\2\u0287\u0288"+
		"\7l\2\2\u0288\u0289\7\u0097\2\2\u0289\u028b\7Q\2\2\u028a\u0287\3\2\2\2"+
		"\u028a\u028b\3\2\2\2\u028b\u028d\3\2\2\2\u028c\u0286\3\2\2\2\u028c\u028d"+
		"\3\2\2\2\u028d\u028f\3\2\2\2\u028e\u0290\5\u00a0Q\2\u028f\u028e\3\2\2"+
		"\2\u028f\u0290\3\2\2\2\u0290\u02be\3\2\2\2\u0291\u0292\7u\2\2\u0292\u0294"+
		"\7x\2\2\u0293\u0295\7\u00e3\2\2\u0294\u0293\3\2\2\2\u0294\u0295\3\2\2"+
		"\2\u0295\u0296\3\2\2\2\u0296\u0298\5\u00b8]\2\u0297\u0299\5*\26\2\u0298"+
		"\u0297\3\2\2\2\u0298\u0299\3\2\2\2\u0299\u029d\3\2\2\2\u029a\u029b\7l"+
		"\2\2\u029b\u029c\7\u0097\2\2\u029c\u029e\7Q\2\2\u029d\u029a\3\2\2\2\u029d"+
		"\u029e\3\2\2\2\u029e\u02a0\3\2\2\2\u029f\u02a1\5\u00a0Q\2\u02a0\u029f"+
		"\3\2\2\2\u02a0\u02a1\3\2\2\2\u02a1\u02be\3\2\2\2\u02a2\u02a3\7u\2\2\u02a3"+
		"\u02a5\7\u00a7\2\2\u02a4\u02a6\7\u0087\2\2\u02a5\u02a4\3\2\2\2\u02a5\u02a6"+
		"\3\2\2\2\u02a6\u02a7\3\2\2\2\u02a7\u02a8\7F\2\2\u02a8\u02aa\7\u0125\2"+
		"\2\u02a9\u02ab\5\u00b4[\2\u02aa\u02a9\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab"+
		"\u02ad\3\2\2\2\u02ac\u02ae\5H%\2\u02ad\u02ac\3\2\2\2\u02ad\u02ae\3\2\2"+
		"\2\u02ae\u02be\3\2\2\2\u02af\u02b0\7u\2\2\u02b0\u02b2\7\u00a7\2\2\u02b1"+
		"\u02b3\7\u0087\2\2\u02b2\u02b1\3\2\2\2\u02b2\u02b3\3\2\2\2\u02b3\u02b4"+
		"\3\2\2\2\u02b4\u02b6\7F\2\2\u02b5\u02b7\7\u0125\2\2\u02b6\u02b5\3\2\2"+
		"\2\u02b6\u02b7\3\2\2\2\u02b7\u02b8\3\2\2\2\u02b8\u02bb\58\35\2\u02b9\u02ba"+
		"\7\u009e\2\2\u02ba\u02bc\5<\37\2\u02bb\u02b9\3\2\2\2\u02bb\u02bc\3\2\2"+
		"\2\u02bc\u02be\3\2\2\2\u02bd\u0280\3\2\2\2\u02bd\u0291\3\2\2\2\u02bd\u02a2"+
		"\3\2\2\2\u02bd\u02af\3\2\2\2\u02be\'\3\2\2\2\u02bf\u02c1\5*\26\2\u02c0"+
		"\u02c2\5 \21\2\u02c1\u02c0\3\2\2\2\u02c1\u02c2\3\2\2\2\u02c2)\3\2\2\2"+
		"\u02c3\u02c4\7\u00a8\2\2\u02c4\u02c5\7\u010f\2\2\u02c5\u02ca\5,\27\2\u02c6"+
		"\u02c7\7\u0111\2\2\u02c7\u02c9\5,\27\2\u02c8\u02c6\3\2\2\2\u02c9\u02cc"+
		"\3\2\2\2\u02ca\u02c8\3\2\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02cd\3\2\2\2\u02cc"+
		"\u02ca\3\2\2\2\u02cd\u02ce\7\u0110\2\2\u02ce+\3\2\2\2\u02cf\u02d2\5\u011e"+
		"\u0090\2\u02d0\u02d1\7\u0113\2\2\u02d1\u02d3\5\u00e2r\2\u02d2\u02d0\3"+
		"\2\2\2\u02d2\u02d3\3\2\2\2\u02d3-\3\2\2\2\u02d4\u02d5\t\3\2\2\u02d5/\3"+
		"\2\2\2\u02d6\u02dc\5\u0118\u008d\2\u02d7\u02dc\7\u0125\2\2\u02d8\u02dc"+
		"\5\u00e4s\2\u02d9\u02dc\5\u00e6t\2\u02da\u02dc\5\u00e8u\2\u02db\u02d6"+
		"\3\2\2\2\u02db\u02d7\3\2\2\2\u02db\u02d8\3\2\2\2\u02db\u02d9\3\2\2\2\u02db"+
		"\u02da\3\2\2\2\u02dc\61\3\2\2\2\u02dd\u02e2\5\u011e\u0090\2\u02de\u02df"+
		"\7\u0112\2\2\u02df\u02e1\5\u011e\u0090\2\u02e0\u02de\3\2\2\2\u02e1\u02e4"+
		"\3\2\2\2\u02e2\u02e0\3\2\2\2\u02e2\u02e3\3\2\2\2\u02e3\63\3\2\2\2\u02e4"+
		"\u02e2\3\2\2\2\u02e5\u02e6\7\u0108\2\2\u02e6\u02eb\5\66\34\2\u02e7\u02e8"+
		"\7\u0111\2\2\u02e8\u02ea\5\66\34\2\u02e9\u02e7\3\2\2\2\u02ea\u02ed\3\2"+
		"\2\2\u02eb\u02e9\3\2\2\2\u02eb\u02ec\3\2\2\2\u02ec\65\3\2\2\2\u02ed\u02eb"+
		"\3\2\2\2\u02ee\u02f0\5\u011a\u008e\2\u02ef\u02f1\5\u00a0Q\2\u02f0\u02ef"+
		"\3\2\2\2\u02f0\u02f1\3\2\2\2\u02f1\u02f3\3\2\2\2\u02f2\u02f4\7\23\2\2"+
		"\u02f3\u02f2\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5\u02f6"+
		"\7\u010f\2\2\u02f6\u02f7\5$\23\2\u02f7\u02f8\7\u0110\2\2\u02f8\67\3\2"+
		"\2\2\u02f9\u02fa\7\u0101\2\2\u02fa\u02fb\5\u00b8]\2\u02fb9\3\2\2\2\u02fc"+
		"\u02fd\7\u009e\2\2\u02fd\u030a\5<\37\2\u02fe\u02ff\7\u00a9\2\2\u02ff\u0300"+
		"\7\33\2\2\u0300\u030a\5\u00ceh\2\u0301\u030a\5\36\20\2\u0302\u030a\5\34"+
		"\17\2\u0303\u030a\5\u00b4[\2\u0304\u030a\5H%\2\u0305\u030a\5 \21\2\u0306"+
		"\u030a\5\"\22\2\u0307\u0308\7\u00e6\2\2\u0308\u030a\5<\37\2\u0309\u02fc"+
		"\3\2\2\2\u0309\u02fe\3\2\2\2\u0309\u0301\3\2\2\2\u0309\u0302\3\2\2\2\u0309"+
		"\u0303\3\2\2\2\u0309\u0304\3\2\2\2\u0309\u0305\3\2\2\2\u0309\u0306\3\2"+
		"\2\2\u0309\u0307\3\2\2\2\u030a\u030d\3\2\2\2\u030b\u0309\3\2\2\2\u030b"+
		"\u030c\3\2\2\2\u030c;\3\2\2\2\u030d\u030b\3\2\2\2\u030e\u030f\7\u010f"+
		"\2\2\u030f\u0314\5> \2\u0310\u0311\7\u0111\2\2\u0311\u0313\5> \2\u0312"+
		"\u0310\3\2\2\2\u0313\u0316\3\2\2\2\u0314\u0312\3\2\2\2\u0314\u0315\3\2"+
		"\2\2\u0315\u0317\3\2\2\2\u0316\u0314\3\2\2\2\u0317\u0318\7\u0110\2\2\u0318"+
		"=\3\2\2\2\u0319\u031e\5@!\2\u031a\u031c\7\u0113\2\2\u031b\u031a\3\2\2"+
		"\2\u031b\u031c\3\2\2\2\u031c\u031d\3\2\2\2\u031d\u031f\5B\"\2\u031e\u031b"+
		"\3\2\2\2\u031e\u031f\3\2\2\2\u031f?\3\2\2\2\u0320\u0325\5\u011e\u0090"+
		"\2\u0321\u0322\7\u0112\2\2\u0322\u0324\5\u011e\u0090\2\u0323\u0321\3\2"+
		"\2\2\u0324\u0327\3\2\2\2\u0325\u0323\3\2\2\2\u0325\u0326\3\2\2\2\u0326"+
		"\u032a\3\2\2\2\u0327\u0325\3\2\2\2\u0328\u032a\7\u0125\2\2\u0329\u0320"+
		"\3\2\2\2\u0329\u0328\3\2\2\2\u032aA\3\2\2\2\u032b\u0330\7\u0129\2\2\u032c"+
		"\u0330\7\u012b\2\2\u032d\u0330\5\u00eav\2\u032e\u0330\7\u0125\2\2\u032f"+
		"\u032b\3\2\2\2\u032f\u032c\3\2\2\2\u032f\u032d\3\2\2\2\u032f\u032e\3\2"+
		"\2\2\u0330C\3\2\2\2\u0331\u0332\7\u010f\2\2\u0332\u0337\5\u00e2r\2\u0333"+
		"\u0334\7\u0111\2\2\u0334\u0336\5\u00e2r\2\u0335\u0333\3\2\2\2\u0336\u0339"+
		"\3\2\2\2\u0337\u0335\3\2\2\2\u0337\u0338\3\2\2\2\u0338\u033a\3\2\2\2\u0339"+
		"\u0337\3\2\2\2\u033a\u033b\7\u0110\2\2\u033bE\3\2\2\2\u033c\u033d\7\u010f"+
		"\2\2\u033d\u0342\5D#\2\u033e\u033f\7\u0111\2\2\u033f\u0341\5D#\2\u0340"+
		"\u033e\3\2\2\2\u0341\u0344\3\2\2\2\u0342\u0340\3\2\2\2\u0342\u0343\3\2"+
		"\2\2\u0343\u0345\3\2\2\2\u0344\u0342\3\2\2\2\u0345\u0346\7\u0110\2\2\u0346"+
		"G\3\2\2\2\u0347\u0348\7\u00dd\2\2\u0348\u0349\7\23\2\2\u0349\u034e\5J"+
		"&\2\u034a\u034b\7\u00dd\2\2\u034b\u034c\7\33\2\2\u034c\u034e\5L\'\2\u034d"+
		"\u0347\3\2\2\2\u034d\u034a\3\2\2\2\u034eI\3\2\2\2\u034f\u0350\7t\2\2\u0350"+
		"\u0351\7\u0125\2\2\u0351\u0352\7\u00a3\2\2\u0352\u0355\7\u0125\2\2\u0353"+
		"\u0355\5\u011e\u0090\2\u0354\u034f\3\2\2\2\u0354\u0353\3\2\2\2\u0355K"+
		"\3\2\2\2\u0356\u035a\7\u0125\2\2\u0357\u0358\7\u0108\2\2\u0358\u0359\7"+
		"\u00d1\2\2\u0359\u035b\5<\37\2\u035a\u0357\3\2\2\2\u035a\u035b\3\2\2\2"+
		"\u035bM\3\2\2\2\u035c\u035d\5\u011e\u0090\2\u035d\u035e\7\u0125\2\2\u035e"+
		"O\3\2\2\2\u035f\u0360\5&\24\2\u0360\u0361\5V,\2\u0361\u0362\5R*\2\u0362"+
		"\u0393\3\2\2\2\u0363\u0365\5|?\2\u0364\u0366\5T+\2\u0365\u0364\3\2\2\2"+
		"\u0366\u0367\3\2\2\2\u0367\u0365\3\2\2\2\u0367\u0368\3\2\2\2\u0368\u0393"+
		"\3\2\2\2\u0369\u036a\7@\2\2\u036a\u036b\7b\2\2\u036b\u036c\5\u00b8]\2"+
		"\u036c\u036e\5\u00b2Z\2\u036d\u036f\5t;\2\u036e\u036d\3\2\2\2\u036e\u036f"+
		"\3\2\2\2\u036f\u0393\3\2\2\2\u0370\u0371\7\u00fe\2\2\u0371\u0372\5\u00b8"+
		"]\2\u0372\u0373\5\u00b2Z\2\u0373\u0375\5f\64\2\u0374\u0376\5t;\2\u0375"+
		"\u0374\3\2\2\2\u0375\u0376\3\2\2\2\u0376\u0393\3\2\2\2\u0377\u0378\7\u008f"+
		"\2\2\u0378\u0379\7x\2\2\u0379\u037a\5\u00b8]\2\u037a\u037b\5\u00b2Z\2"+
		"\u037b\u0381\7\u0101\2\2\u037c\u0382\5\u00b8]\2\u037d\u037e\7\u010f\2"+
		"\2\u037e\u037f\5$\23\2\u037f\u0380\7\u0110\2\2\u0380\u0382\3\2\2\2\u0381"+
		"\u037c\3\2\2\2\u0381\u037d\3\2\2\2\u0382\u0383\3\2\2\2\u0383\u0384\5\u00b2"+
		"Z\2\u0384\u0385\7\u009b\2\2\u0385\u0389\5\u00dan\2\u0386\u0388\5h\65\2"+
		"\u0387\u0386\3\2\2\2\u0388\u038b\3\2\2\2\u0389\u0387\3\2\2\2\u0389\u038a"+
		"\3\2\2\2\u038a\u038f\3\2\2\2\u038b\u0389\3\2\2\2\u038c\u038e\5j\66\2\u038d"+
		"\u038c\3\2\2\2\u038e\u0391\3\2\2\2\u038f\u038d\3\2\2\2\u038f\u0390\3\2"+
		"\2\2\u0390\u0393\3\2\2\2\u0391\u038f\3\2\2\2\u0392\u035f\3\2\2\2\u0392"+
		"\u0363\3\2\2\2\u0392\u0369\3\2\2\2\u0392\u0370\3\2\2\2\u0392\u0377\3\2"+
		"\2\2\u0393Q\3\2\2\2\u0394\u0395\7\u00a0\2\2\u0395\u0396\7\33\2\2\u0396"+
		"\u039b\5Z.\2\u0397\u0398\7\u0111\2\2\u0398\u039a\5Z.\2\u0399\u0397\3\2"+
		"\2\2\u039a\u039d\3\2\2\2\u039b\u0399\3\2\2\2\u039b\u039c\3\2\2\2\u039c"+
		"\u039f\3\2\2\2\u039d\u039b\3\2\2\2\u039e\u0394\3\2\2\2\u039e\u039f\3\2"+
		"\2\2\u039f\u03aa\3\2\2\2\u03a0\u03a1\7#\2\2\u03a1\u03a2\7\33\2\2\u03a2"+
		"\u03a7\5\u00d6l\2\u03a3\u03a4\7\u0111\2\2\u03a4\u03a6\5\u00d6l\2\u03a5"+
		"\u03a3\3\2\2\2\u03a6\u03a9\3\2\2\2\u03a7\u03a5\3\2\2\2\u03a7\u03a8\3\2"+
		"\2\2\u03a8\u03ab\3\2\2\2\u03a9\u03a7\3\2\2\2\u03aa\u03a0\3\2\2\2\u03aa"+
		"\u03ab\3\2\2\2\u03ab\u03b6\3\2\2\2\u03ac\u03ad\7H\2\2\u03ad\u03ae\7\33"+
		"\2\2\u03ae\u03b3\5\u00d6l\2\u03af\u03b0\7\u0111\2\2\u03b0\u03b2\5\u00d6"+
		"l\2\u03b1\u03af\3\2\2\2\u03b2\u03b5\3\2\2\2\u03b3\u03b1\3\2\2\2\u03b3"+
		"\u03b4\3\2\2\2\u03b4\u03b7\3\2\2\2\u03b5\u03b3\3\2\2\2\u03b6\u03ac\3\2"+
		"\2\2\u03b6\u03b7\3\2\2\2\u03b7\u03c2\3\2\2\2\u03b8\u03b9\7\u00d9\2\2\u03b9"+
		"\u03ba\7\33\2\2\u03ba\u03bf\5Z.\2\u03bb\u03bc\7\u0111\2\2\u03bc\u03be"+
		"\5Z.\2\u03bd\u03bb\3\2\2\2\u03be\u03c1\3\2\2\2\u03bf\u03bd\3\2\2\2\u03bf"+
		"\u03c0\3\2\2\2\u03c0\u03c3\3\2\2\2\u03c1\u03bf\3\2\2\2\u03c2\u03b8\3\2"+
		"\2\2\u03c2\u03c3\3\2\2\2\u03c3\u03c5\3\2\2\2\u03c4\u03c6\5\u010a\u0086"+
		"\2\u03c5\u03c4\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03cc\3\2\2\2\u03c7\u03ca"+
		"\7\u0083\2\2\u03c8\u03cb\7\13\2\2\u03c9\u03cb\5\u00d6l\2\u03ca\u03c8\3"+
		"\2\2\2\u03ca\u03c9\3\2\2\2\u03cb\u03cd\3\2\2\2\u03cc\u03c7\3\2\2\2\u03cc"+
		"\u03cd\3\2\2\2\u03cdS\3\2\2\2\u03ce\u03cf\5&\24\2\u03cf\u03d0\5^\60\2"+
		"\u03d0U\3\2\2\2\u03d1\u03d2\b,\1\2\u03d2\u03d3\5X-\2\u03d3\u03eb\3\2\2"+
		"\2\u03d4\u03d5\f\5\2\2\u03d5\u03d6\6,\3\2\u03d6\u03d8\t\4\2\2\u03d7\u03d9"+
		"\5\u0092J\2\u03d8\u03d7\3\2\2\2\u03d8\u03d9\3\2\2\2\u03d9\u03da\3\2\2"+
		"\2\u03da\u03ea\5V,\6\u03db\u03dc\f\4\2\2\u03dc\u03dd\6,\5\2\u03dd\u03df"+
		"\7v\2\2\u03de\u03e0\5\u0092J\2\u03df\u03de\3\2\2\2\u03df\u03e0\3\2\2\2"+
		"\u03e0\u03e1\3\2\2\2\u03e1\u03ea\5V,\5\u03e2\u03e3\f\3\2\2\u03e3\u03e4"+
		"\6,\7\2\u03e4\u03e6\t\5\2\2\u03e5\u03e7\5\u0092J\2\u03e6\u03e5\3\2\2\2"+
		"\u03e6\u03e7\3\2\2\2\u03e7\u03e8\3\2\2\2\u03e8\u03ea\5V,\4\u03e9\u03d4"+
		"\3\2\2\2\u03e9\u03db\3\2\2\2\u03e9\u03e2\3\2\2\2\u03ea\u03ed\3\2\2\2\u03eb"+
		"\u03e9\3\2\2\2\u03eb\u03ec\3\2\2\2\u03ecW\3\2\2\2\u03ed\u03eb\3\2\2\2"+
		"\u03ee\u03f8\5`\61\2\u03ef\u03f8\5\\/\2\u03f0\u03f1\7\u00e3\2\2\u03f1"+
		"\u03f8\5\u00b8]\2\u03f2\u03f8\5\u00aeX\2\u03f3\u03f4\7\u010f\2\2\u03f4"+
		"\u03f5\5$\23\2\u03f5\u03f6\7\u0110\2\2\u03f6\u03f8\3\2\2\2\u03f7\u03ee"+
		"\3\2\2\2\u03f7\u03ef\3\2\2\2\u03f7\u03f0\3\2\2\2\u03f7\u03f2\3\2\2\2\u03f7"+
		"\u03f3\3\2\2\2\u03f8Y\3\2\2\2\u03f9\u03fb\5\u00d6l\2\u03fa\u03fc\t\6\2"+
		"\2\u03fb\u03fa\3\2\2\2\u03fb\u03fc\3\2\2\2\u03fc\u03ff\3\2\2\2\u03fd\u03fe"+
		"\7\u0099\2\2\u03fe\u0400\t\7\2\2\u03ff\u03fd\3\2\2\2\u03ff\u0400\3\2\2"+
		"\2\u0400[\3\2\2\2\u0401\u0403\5|?\2\u0402\u0404\5^\60\2\u0403\u0402\3"+
		"\2\2\2\u0404\u0405\3\2\2\2\u0405\u0403\3\2\2\2\u0405\u0406\3\2\2\2\u0406"+
		"]\3\2\2\2\u0407\u0409\5b\62\2\u0408\u040a\5t;\2\u0409\u0408\3\2\2\2\u0409"+
		"\u040a\3\2\2\2\u040a\u040b\3\2\2\2\u040b\u040c\5R*\2\u040c\u0423\3\2\2"+
		"\2\u040d\u0411\5d\63\2\u040e\u0410\5\u0090I\2\u040f\u040e\3\2\2\2\u0410"+
		"\u0413\3\2\2\2\u0411\u040f\3\2\2\2\u0411\u0412\3\2\2\2\u0412\u0415\3\2"+
		"\2\2\u0413\u0411\3\2\2\2\u0414\u0416\5t;\2\u0415\u0414\3\2\2\2\u0415\u0416"+
		"\3\2\2\2\u0416\u0418\3\2\2\2\u0417\u0419\5\u0080A\2\u0418\u0417\3\2\2"+
		"\2\u0418\u0419\3\2\2\2\u0419\u041b\3\2\2\2\u041a\u041c\5v<\2\u041b\u041a"+
		"\3\2\2\2\u041b\u041c\3\2\2\2\u041c\u041e\3\2\2\2\u041d\u041f\5\u010a\u0086"+
		"\2\u041e\u041d\3\2\2\2\u041e\u041f\3\2\2\2\u041f\u0420\3\2\2\2\u0420\u0421"+
		"\5R*\2\u0421\u0423\3\2\2\2\u0422\u0407\3\2\2\2\u0422\u040d\3\2\2\2\u0423"+
		"_\3\2\2\2\u0424\u0426\5b\62\2\u0425\u0427\5|?\2\u0426\u0425\3\2\2\2\u0426"+
		"\u0427\3\2\2\2\u0427\u042b\3\2\2\2\u0428\u042a\5\u0090I\2\u0429\u0428"+
		"\3\2\2\2\u042a\u042d\3\2\2\2\u042b\u0429\3\2\2\2\u042b\u042c\3\2\2\2\u042c"+
		"\u042f\3\2\2\2\u042d\u042b\3\2\2\2\u042e\u0430\5t;\2\u042f\u042e\3\2\2"+
		"\2\u042f\u0430\3\2\2\2\u0430\u0432\3\2\2\2\u0431\u0433\5\u0080A\2\u0432"+
		"\u0431\3\2\2\2\u0432\u0433\3\2\2\2\u0433\u0435\3\2\2\2\u0434\u0436\5v"+
		"<\2\u0435\u0434\3\2\2\2\u0435\u0436\3\2\2\2\u0436\u0438\3\2\2\2\u0437"+
		"\u0439\5\u010a\u0086\2\u0438\u0437\3\2\2\2\u0438\u0439\3\2\2\2\u0439\u0451"+
		"\3\2\2\2\u043a\u043c\5d\63\2\u043b\u043d\5|?\2\u043c\u043b\3\2\2\2\u043c"+
		"\u043d\3\2\2\2\u043d\u0441\3\2\2\2\u043e\u0440\5\u0090I\2\u043f\u043e"+
		"\3\2\2\2\u0440\u0443\3\2\2\2\u0441\u043f\3\2\2\2\u0441\u0442\3\2\2\2\u0442"+
		"\u0445\3\2\2\2\u0443\u0441\3\2\2\2\u0444\u0446\5t;\2\u0445\u0444\3\2\2"+
		"\2\u0445\u0446\3\2\2\2\u0446\u0448\3\2\2\2\u0447\u0449\5\u0080A\2\u0448"+
		"\u0447\3\2\2\2\u0448\u0449\3\2\2\2\u0449\u044b\3\2\2\2\u044a\u044c\5v"+
		"<\2\u044b\u044a\3\2\2\2\u044b\u044c\3\2\2\2\u044c\u044e\3\2\2\2\u044d"+
		"\u044f\5\u010a\u0086\2\u044e\u044d\3\2\2\2\u044e\u044f\3\2\2\2\u044f\u0451"+
		"\3\2\2\2\u0450\u0424\3\2\2\2\u0450\u043a\3\2\2\2\u0451a\3\2\2\2\u0452"+
		"\u0453\7\u00cd\2\2\u0453\u0454\7\u00f0\2\2\u0454\u0456\7\u010f\2\2\u0455"+
		"\u0457\5\u0092J\2\u0456\u0455\3\2\2\2\u0456\u0457\3\2\2\2\u0457\u0458"+
		"\3\2\2\2\u0458\u0459\5\u00d8m\2\u0459\u045a\7\u0110\2\2\u045a\u0466\3"+
		"\2\2\2\u045b\u045d\7\u008d\2\2\u045c\u045e\5\u0092J\2\u045d\u045c\3\2"+
		"\2\2\u045d\u045e\3\2\2\2\u045e\u045f\3\2\2\2\u045f\u0466\5\u00d8m\2\u0460"+
		"\u0462\7\u00b9\2\2\u0461\u0463\5\u0092J\2\u0462\u0461\3\2\2\2\u0462\u0463"+
		"\3\2\2\2\u0463\u0464\3\2\2\2\u0464\u0466\5\u00d8m\2\u0465\u0452\3\2\2"+
		"\2\u0465\u045b\3\2\2\2\u0465\u0460\3\2\2\2\u0466\u0468\3\2\2\2\u0467\u0469"+
		"\5\u00b4[\2\u0468\u0467\3\2\2\2\u0468\u0469\3\2\2\2\u0469\u046c\3\2\2"+
		"\2\u046a\u046b\7\u00b7\2\2\u046b\u046d\7\u0125\2\2\u046c\u046a\3\2\2\2"+
		"\u046c\u046d\3\2\2\2\u046d\u046e\3\2\2\2\u046e\u046f\7\u0101\2\2\u046f"+
		"\u047c\7\u0125\2\2\u0470\u047a\7\23\2\2\u0471\u047b\5\u00a2R\2\u0472\u047b"+
		"\5\u0100\u0081\2\u0473\u0476\7\u010f\2\2\u0474\u0477\5\u00a2R\2\u0475"+
		"\u0477\5\u0100\u0081\2\u0476\u0474\3\2\2\2\u0476\u0475\3\2\2\2\u0477\u0478"+
		"\3\2\2\2\u0478\u0479\7\u0110\2\2\u0479\u047b\3\2\2\2\u047a\u0471\3\2\2"+
		"\2\u047a\u0472\3\2\2\2\u047a\u0473\3\2\2\2\u047b\u047d\3\2\2\2\u047c\u0470"+
		"\3\2\2\2\u047c\u047d\3\2\2\2\u047d\u047f\3\2\2\2\u047e\u0480\5\u00b4["+
		"\2\u047f\u047e\3\2\2\2\u047f\u0480\3\2\2\2\u0480\u0483\3\2\2\2\u0481\u0482"+
		"\7\u00b6\2\2\u0482\u0484\7\u0125\2\2\u0483\u0481\3\2\2\2\u0483\u0484\3"+
		"\2\2\2\u0484c\3\2\2\2\u0485\u0489\7\u00cd\2\2\u0486\u0488\5x=\2\u0487"+
		"\u0486\3\2\2\2\u0488\u048b\3\2\2\2\u0489\u0487\3\2\2\2\u0489\u048a\3\2"+
		"\2\2\u048a\u048d\3\2\2\2\u048b\u0489\3\2\2\2\u048c\u048e\5\u0092J\2\u048d"+
		"\u048c\3\2\2\2\u048d\u048e\3\2\2\2\u048e\u048f\3\2\2\2\u048f\u0490\5\u00cc"+
		"g\2\u0490e\3\2\2\2\u0491\u0492\7\u00d3\2\2\u0492\u0493\5p9\2\u0493g\3"+
		"\2\2\2\u0494\u0495\7\u0105\2\2\u0495\u0498\7\u008e\2\2\u0496\u0497\7\16"+
		"\2\2\u0497\u0499\5\u00dan\2\u0498\u0496\3\2\2\2\u0498\u0499\3\2\2\2\u0499"+
		"\u049a\3\2\2\2\u049a\u049b\7\u00e9\2\2\u049b\u049c\5l\67\2\u049ci\3\2"+
		"\2\2\u049d\u049e\7\u0105\2\2\u049e\u049f\7\u0097\2\2\u049f\u04a2\7\u008e"+
		"\2\2\u04a0\u04a1\7\16\2\2\u04a1\u04a3\5\u00dan\2\u04a2\u04a0\3\2\2\2\u04a2"+
		"\u04a3\3\2\2\2\u04a3\u04a4\3\2\2\2\u04a4\u04a5\7\u00e9\2\2\u04a5\u04a6"+
		"\5n8\2\u04a6k\3\2\2\2\u04a7\u04af\7@\2\2\u04a8\u04a9\7\u00fe\2\2\u04a9"+
		"\u04aa\7\u00d3\2\2\u04aa\u04af\7\u011d\2\2\u04ab\u04ac\7\u00fe\2\2\u04ac"+
		"\u04ad\7\u00d3\2\2\u04ad\u04af\5p9\2\u04ae\u04a7\3\2\2\2\u04ae\u04a8\3"+
		"\2\2\2\u04ae\u04ab\3\2\2\2\u04afm\3\2\2\2\u04b0\u04b1\7u\2\2\u04b1\u04c3"+
		"\7\u011d\2\2\u04b2\u04b3\7u\2\2\u04b3\u04b4\7\u010f\2\2\u04b4\u04b5\5"+
		"\u00b6\\\2\u04b5\u04b6\7\u0110\2\2\u04b6\u04b7\7\u0102\2\2\u04b7\u04b8"+
		"\7\u010f\2\2\u04b8\u04bd\5\u00d6l\2\u04b9\u04ba\7\u0111\2\2\u04ba\u04bc"+
		"\5\u00d6l\2\u04bb\u04b9\3\2\2\2\u04bc\u04bf\3\2\2\2\u04bd\u04bb\3\2\2"+
		"\2\u04bd\u04be\3\2\2\2\u04be\u04c0\3\2\2\2\u04bf\u04bd\3\2\2\2\u04c0\u04c1"+
		"\7\u0110\2\2\u04c1\u04c3\3\2\2\2\u04c2\u04b0\3\2\2\2\u04c2\u04b2\3\2\2"+
		"\2\u04c3o\3\2\2\2\u04c4\u04c9\5r:\2\u04c5\u04c6\7\u0111\2\2\u04c6\u04c8"+
		"\5r:\2\u04c7\u04c5\3\2\2\2\u04c8\u04cb\3\2\2\2\u04c9\u04c7\3\2\2\2\u04c9"+
		"\u04ca\3\2\2\2\u04caq\3\2\2\2\u04cb\u04c9\3\2\2\2\u04cc\u04cd\5\u00b8"+
		"]\2\u04cd\u04ce\7\u0113\2\2\u04ce\u04cf\5\u00d6l\2\u04cfs\3\2\2\2\u04d0"+
		"\u04d1\7\u0106\2\2\u04d1\u04d2\5\u00dan\2\u04d2u\3\2\2\2\u04d3\u04d4\7"+
		"j\2\2\u04d4\u04d5\5\u00dan\2\u04d5w\3\2\2\2\u04d6\u04d7\7\3\2\2\u04d7"+
		"\u04de\5z>\2\u04d8\u04da\7\u0111\2\2\u04d9\u04d8\3\2\2\2\u04d9\u04da\3"+
		"\2\2\2\u04da\u04db\3\2\2\2\u04db\u04dd\5z>\2\u04dc\u04d9\3\2\2\2\u04dd"+
		"\u04e0\3\2\2\2\u04de\u04dc\3\2\2\2\u04de\u04df\3\2\2\2\u04df\u04e1\3\2"+
		"\2\2\u04e0\u04de\3\2\2\2\u04e1\u04e2\7\4\2\2\u04e2y\3\2\2\2\u04e3\u04f1"+
		"\5\u011e\u0090\2\u04e4\u04e5\5\u011e\u0090\2\u04e5\u04e6\7\u010f\2\2\u04e6"+
		"\u04eb\5\u00e0q\2\u04e7\u04e8\7\u0111\2\2\u04e8\u04ea\5\u00e0q\2\u04e9"+
		"\u04e7\3\2\2\2\u04ea\u04ed\3\2\2\2\u04eb\u04e9\3\2\2\2\u04eb\u04ec\3\2"+
		"\2\2\u04ec\u04ee\3\2\2\2\u04ed\u04eb\3\2\2\2\u04ee\u04ef\7\u0110\2\2\u04ef"+
		"\u04f1\3\2\2\2\u04f0\u04e3\3\2\2\2\u04f0\u04e4\3\2\2\2\u04f1{\3\2\2\2"+
		"\u04f2\u04f3\7b\2\2\u04f3\u04f8\5\u0094K\2\u04f4\u04f5\7\u0111\2\2\u04f5"+
		"\u04f7\5\u0094K\2\u04f6\u04f4\3\2\2\2\u04f7\u04fa\3\2\2\2\u04f8\u04f6"+
		"\3\2\2\2\u04f8\u04f9\3\2\2\2\u04f9\u04fe\3\2\2\2\u04fa\u04f8\3\2\2\2\u04fb"+
		"\u04fd\5\u0090I\2\u04fc\u04fb\3\2\2\2\u04fd\u0500\3\2\2\2\u04fe\u04fc"+
		"\3\2\2\2\u04fe\u04ff\3\2\2\2\u04ff\u0502\3\2\2\2\u0500\u04fe\3\2\2\2\u0501"+
		"\u0503\5\u008aF\2\u0502\u0501\3\2\2\2\u0502\u0503\3\2\2\2\u0503}\3\2\2"+
		"\2\u0504\u0506\7^\2\2\u0505\u0504\3\2\2\2\u0505\u0506\3\2\2\2\u0506\u0507"+
		"\3\2\2\2\u0507\u0508\t\b\2\2\u0508\u0509\7\23\2\2\u0509\u050a\7\u009a"+
		"\2\2\u050a\u0513\5\u00dep\2\u050b\u050d\7^\2\2\u050c\u050b\3\2\2\2\u050c"+
		"\u050d\3\2\2\2\u050d\u050e\3\2\2\2\u050e\u050f\t\t\2\2\u050f\u0510\7\23"+
		"\2\2\u0510\u0511\7\u009a\2\2\u0511\u0513\t\n\2\2\u0512\u0505\3\2\2\2\u0512"+
		"\u050c\3\2\2\2\u0513\177\3\2\2\2\u0514\u0515\7h\2\2\u0515\u0516\7\33\2"+
		"\2\u0516\u051b\5\u0082B\2\u0517\u0518\7\u0111\2\2\u0518\u051a\5\u0082"+
		"B\2\u0519\u0517\3\2\2\2\u051a\u051d\3\2\2\2\u051b\u0519\3\2\2\2\u051b"+
		"\u051c\3\2\2\2\u051c\u053c\3\2\2\2\u051d\u051b\3\2\2\2\u051e\u051f\7h"+
		"\2\2\u051f\u0520\7\33\2\2\u0520\u0525\5\u00d6l\2\u0521\u0522\7\u0111\2"+
		"\2\u0522\u0524\5\u00d6l\2\u0523\u0521\3\2\2\2\u0524\u0527\3\2\2\2\u0525"+
		"\u0523\3\2\2\2\u0525\u0526\3\2\2\2\u0526\u0539\3\2\2\2\u0527\u0525\3\2"+
		"\2\2\u0528\u0529\7\u0108\2\2\u0529\u053a\7\u00c8\2\2\u052a\u052b\7\u0108"+
		"\2\2\u052b\u053a\7\64\2\2\u052c\u052d\7i\2\2\u052d\u052e\7\u00d5\2\2\u052e"+
		"\u052f\7\u010f\2\2\u052f\u0534\5\u0088E\2\u0530\u0531\7\u0111\2\2\u0531"+
		"\u0533\5\u0088E\2\u0532\u0530\3\2\2\2\u0533\u0536\3\2\2\2\u0534\u0532"+
		"\3\2\2\2\u0534\u0535\3\2\2\2\u0535\u0537\3\2\2\2\u0536\u0534\3\2\2\2\u0537"+
		"\u0538\7\u0110\2\2\u0538\u053a\3\2\2\2\u0539\u0528\3\2\2\2\u0539\u052a"+
		"\3\2\2\2\u0539\u052c\3\2\2\2\u0539\u053a\3\2\2\2\u053a\u053c\3\2\2\2\u053b"+
		"\u0514\3\2\2\2\u053b\u051e\3\2\2\2\u053c\u0081\3\2\2\2\u053d\u0540\5\u0084"+
		"C\2\u053e\u0540\5\u00d6l\2\u053f\u053d\3\2\2\2\u053f\u053e\3\2\2\2\u0540"+
		"\u0083\3\2\2\2\u0541\u0542\t\13\2\2\u0542\u0543\7\u010f\2\2\u0543\u0548"+
		"\5\u0088E\2\u0544\u0545\7\u0111\2\2\u0545\u0547\5\u0088E\2\u0546\u0544"+
		"\3\2\2\2\u0547\u054a\3\2\2\2\u0548\u0546\3\2\2\2\u0548\u0549\3\2\2\2\u0549"+
		"\u054b\3\2\2\2\u054a\u0548\3\2\2\2\u054b\u054c\7\u0110\2\2\u054c\u055b"+
		"\3\2\2\2\u054d\u054e\7i\2\2\u054e\u054f\7\u00d5\2\2\u054f\u0550\7\u010f"+
		"\2\2\u0550\u0555\5\u0086D\2\u0551\u0552\7\u0111\2\2\u0552\u0554\5\u0086"+
		"D\2\u0553\u0551\3\2\2\2\u0554\u0557\3\2\2\2\u0555\u0553\3\2\2\2\u0555"+
		"\u0556\3\2\2\2\u0556\u0558\3\2\2\2\u0557\u0555\3\2\2\2\u0558\u0559\7\u0110"+
		"\2\2\u0559\u055b\3\2\2\2\u055a\u0541\3\2\2\2\u055a\u054d\3\2\2\2\u055b"+
		"\u0085\3\2\2\2\u055c\u055f\5\u0084C\2\u055d\u055f\5\u0088E\2\u055e\u055c"+
		"\3\2\2\2\u055e\u055d\3\2\2\2\u055f\u0087\3\2\2\2\u0560\u0569\7\u010f\2"+
		"\2\u0561\u0566\5\u00d6l\2\u0562\u0563\7\u0111\2\2\u0563\u0565\5\u00d6"+
		"l\2\u0564\u0562\3\2\2\2\u0565\u0568\3\2\2\2\u0566\u0564\3\2\2\2\u0566"+
		"\u0567\3\2\2\2\u0567\u056a\3\2\2\2\u0568\u0566\3\2\2\2\u0569\u0561\3\2"+
		"\2\2\u0569\u056a\3\2\2\2\u056a\u056b\3\2\2\2\u056b\u056e\7\u0110\2\2\u056c"+
		"\u056e\5\u00d6l\2\u056d\u0560\3\2\2\2\u056d\u056c\3\2\2\2\u056e\u0089"+
		"\3\2\2\2\u056f\u0570\7\u00ac\2\2\u0570\u0571\7\u010f\2\2\u0571\u0572\5"+
		"\u00ccg\2\u0572\u0573\7^\2\2\u0573\u0574\5\u008cG\2\u0574\u0575\7o\2\2"+
		"\u0575\u0576\7\u010f\2\2\u0576\u057b\5\u008eH\2\u0577\u0578\7\u0111\2"+
		"\2\u0578\u057a\5\u008eH\2\u0579\u0577\3\2\2\2\u057a\u057d\3\2\2\2\u057b"+
		"\u0579\3\2\2\2\u057b\u057c\3\2\2\2\u057c\u057e\3\2\2\2\u057d\u057b\3\2"+
		"\2\2\u057e\u057f\7\u0110\2\2\u057f\u0580\7\u0110\2\2\u0580\u008b\3\2\2"+
		"\2\u0581\u058e\5\u011e\u0090\2\u0582\u0583\7\u010f\2\2\u0583\u0588\5\u011e"+
		"\u0090\2\u0584\u0585\7\u0111\2\2\u0585\u0587\5\u011e\u0090\2\u0586\u0584"+
		"\3\2\2\2\u0587\u058a\3\2\2\2\u0588\u0586\3\2\2\2\u0588\u0589\3\2\2\2\u0589"+
		"\u058b\3\2\2\2\u058a\u0588\3\2\2\2\u058b\u058c\7\u0110\2\2\u058c\u058e"+
		"\3\2\2\2\u058d\u0581\3\2\2\2\u058d\u0582\3\2\2\2\u058e\u008d\3\2\2\2\u058f"+
		"\u0594\5\u00d6l\2\u0590\u0592\7\23\2\2\u0591\u0590\3\2\2\2\u0591\u0592"+
		"\3\2\2\2\u0592\u0593\3\2\2\2\u0593\u0595\5\u011e\u0090\2\u0594\u0591\3"+
		"\2\2\2\u0594\u0595\3\2\2\2\u0595\u008f\3\2\2\2\u0596\u0597\7~\2\2\u0597"+
		"\u0599\7\u0103\2\2\u0598\u059a\7\u00a2\2\2\u0599\u0598\3\2\2\2\u0599\u059a"+
		"\3\2\2\2\u059a\u059b\3\2\2\2\u059b\u059c\5\u0118\u008d\2\u059c\u05a5\7"+
		"\u010f\2\2\u059d\u05a2\5\u00d6l\2\u059e\u059f\7\u0111\2\2\u059f\u05a1"+
		"\5\u00d6l\2\u05a0\u059e\3\2\2\2\u05a1\u05a4\3\2\2\2\u05a2\u05a0\3\2\2"+
		"\2\u05a2\u05a3\3\2\2\2\u05a3\u05a6\3\2\2\2\u05a4\u05a2\3\2\2\2\u05a5\u059d"+
		"\3\2\2\2\u05a5\u05a6\3\2\2\2\u05a6\u05a7\3\2\2\2\u05a7\u05a8\7\u0110\2"+
		"\2\u05a8\u05b4\5\u011e\u0090\2\u05a9\u05ab\7\23\2\2\u05aa\u05a9\3\2\2"+
		"\2\u05aa\u05ab\3\2\2\2\u05ab\u05ac\3\2\2\2\u05ac\u05b1\5\u011e\u0090\2"+
		"\u05ad\u05ae\7\u0111\2\2\u05ae\u05b0\5\u011e\u0090\2\u05af\u05ad\3\2\2"+
		"\2\u05b0\u05b3\3\2\2\2\u05b1\u05af\3\2\2\2\u05b1\u05b2\3\2\2\2\u05b2\u05b5"+
		"\3\2\2\2\u05b3\u05b1\3\2\2\2\u05b4\u05aa\3\2\2\2\u05b4\u05b5\3\2\2\2\u05b5"+
		"\u0091\3\2\2\2\u05b6\u05b7\t\f\2\2\u05b7\u0093\3\2\2\2\u05b8\u05ba\7~"+
		"\2\2\u05b9\u05b8\3\2\2\2\u05b9\u05ba\3\2\2\2\u05ba\u05bb\3\2\2\2\u05bb"+
		"\u05bf\5\u00acW\2\u05bc\u05be\5\u0096L\2\u05bd\u05bc\3\2\2\2\u05be\u05c1"+
		"\3\2\2\2\u05bf\u05bd\3\2\2\2\u05bf\u05c0\3\2\2\2\u05c0\u0095\3\2\2\2\u05c1"+
		"\u05bf\3\2\2\2\u05c2\u05c3\5\u0098M\2\u05c3\u05c5\7{\2\2\u05c4\u05c6\7"+
		"~\2\2\u05c5\u05c4\3\2\2\2\u05c5\u05c6\3\2\2\2\u05c6\u05c7\3\2\2\2\u05c7"+
		"\u05c9\5\u00acW\2\u05c8\u05ca\5\u009aN\2\u05c9\u05c8\3\2\2\2\u05c9\u05ca"+
		"\3\2\2\2\u05ca\u05d4\3\2\2\2\u05cb\u05cc\7\u0095\2\2\u05cc\u05cd\5\u0098"+
		"M\2\u05cd\u05cf\7{\2\2\u05ce\u05d0\7~\2\2\u05cf\u05ce\3\2\2\2\u05cf\u05d0"+
		"\3\2\2\2\u05d0\u05d1\3\2\2\2\u05d1\u05d2\5\u00acW\2\u05d2\u05d4\3\2\2"+
		"\2\u05d3\u05c2\3\2\2\2\u05d3\u05cb\3\2\2\2\u05d4\u0097\3\2\2\2\u05d5\u05d7"+
		"\7r\2\2\u05d6\u05d5\3\2\2\2\u05d6\u05d7\3\2\2\2\u05d7\u05ee\3\2\2\2\u05d8"+
		"\u05ee\7\63\2\2\u05d9\u05db\7\u0081\2\2\u05da\u05dc\7\u00a2\2\2\u05db"+
		"\u05da\3\2\2\2\u05db\u05dc\3\2\2\2\u05dc\u05ee\3\2\2\2\u05dd\u05df\7\u0081"+
		"\2\2\u05de\u05dd\3\2\2\2\u05de\u05df\3\2\2\2\u05df\u05e0\3\2\2\2\u05e0"+
		"\u05ee\7\u00ce\2\2\u05e1\u05e3\7\u00c3\2\2\u05e2\u05e4\7\u00a2\2\2\u05e3"+
		"\u05e2\3\2\2\2\u05e3\u05e4\3\2\2\2\u05e4\u05ee\3\2\2\2\u05e5\u05e7\7c"+
		"\2\2\u05e6\u05e8\7\u00a2\2\2\u05e7\u05e6\3\2\2\2\u05e7\u05e8\3\2\2\2\u05e8"+
		"\u05ee\3\2\2\2\u05e9\u05eb\7\u0081\2\2\u05ea\u05e9\3\2\2\2\u05ea\u05eb"+
		"\3\2\2\2\u05eb\u05ec\3\2\2\2\u05ec\u05ee\7\17\2\2\u05ed\u05d6\3\2\2\2"+
		"\u05ed\u05d8\3\2\2\2\u05ed\u05d9\3\2\2\2\u05ed\u05de\3\2\2\2\u05ed\u05e1"+
		"\3\2\2\2\u05ed\u05e5\3\2\2\2\u05ed\u05ea\3\2\2\2\u05ee\u0099\3\2\2\2\u05ef"+
		"\u05f0\7\u009b\2\2\u05f0\u05f4\5\u00dan\2\u05f1\u05f2\7\u0101\2\2\u05f2"+
		"\u05f4\5\u00a0Q\2\u05f3\u05ef\3\2\2\2\u05f3\u05f1\3\2\2\2\u05f4\u009b"+
		"\3\2\2\2\u05f5\u05f6\7\u00e5\2\2\u05f6\u05f8\7\u010f\2\2\u05f7\u05f9\5"+
		"\u009eP\2\u05f8\u05f7\3\2\2\2\u05f8\u05f9\3\2\2\2\u05f9\u05fa\3\2\2\2"+
		"\u05fa\u05fb\7\u0110\2\2\u05fb\u009d\3\2\2\2\u05fc\u05fe\7\u011c\2\2\u05fd"+
		"\u05fc\3\2\2\2\u05fd\u05fe\3\2\2\2\u05fe\u05ff\3\2\2\2\u05ff\u0600\t\r"+
		"\2\2\u0600\u0615\7\u00ab\2\2\u0601\u0602\5\u00d6l\2\u0602\u0603\7\u00ca"+
		"\2\2\u0603\u0615\3\2\2\2\u0604\u0605\7\31\2\2\u0605\u0606\7\u0129\2\2"+
		"\u0606\u0607\7\u00a1\2\2\u0607\u0608\7\u009a\2\2\u0608\u0611\7\u0129\2"+
		"\2\u0609\u060f\7\u009b\2\2\u060a\u0610\5\u011e\u0090\2\u060b\u060c\5\u0118"+
		"\u008d\2\u060c\u060d\7\u010f\2\2\u060d\u060e\7\u0110\2\2\u060e\u0610\3"+
		"\2\2\2\u060f\u060a\3\2\2\2\u060f\u060b\3\2\2\2\u0610\u0612\3\2\2\2\u0611"+
		"\u0609\3\2\2\2\u0611\u0612\3\2\2\2\u0612\u0615\3\2\2\2\u0613\u0615\5\u00d6"+
		"l\2\u0614\u05fd\3\2\2\2\u0614\u0601\3\2\2\2\u0614\u0604\3\2\2\2\u0614"+
		"\u0613\3\2\2\2\u0615\u009f\3\2\2\2\u0616\u0617\7\u010f\2\2\u0617\u0618"+
		"\5\u00a2R\2\u0618\u0619\7\u0110\2\2\u0619\u00a1\3\2\2\2\u061a\u061f\5"+
		"\u011a\u008e\2\u061b\u061c\7\u0111\2\2\u061c\u061e\5\u011a\u008e\2\u061d"+
		"\u061b\3\2\2\2\u061e\u0621\3\2\2\2\u061f\u061d\3\2\2\2\u061f\u0620\3\2"+
		"\2\2\u0620\u00a3\3\2\2\2\u0621\u061f\3\2\2\2\u0622\u0623\7\u010f\2\2\u0623"+
		"\u0628\5\u00a6T\2\u0624\u0625\7\u0111\2\2\u0625\u0627\5\u00a6T\2\u0626"+
		"\u0624\3\2\2\2\u0627\u062a\3\2\2\2\u0628\u0626\3\2\2\2\u0628\u0629\3\2"+
		"\2\2\u0629\u062b\3\2\2\2\u062a\u0628\3\2\2\2\u062b\u062c\7\u0110\2\2\u062c"+
		"\u00a5\3\2\2\2\u062d\u062f\5\u011a\u008e\2\u062e\u0630\t\6\2\2\u062f\u062e"+
		"\3\2\2\2\u062f\u0630\3\2\2\2\u0630\u00a7\3\2\2\2\u0631\u0632\7\u010f\2"+
		"\2\u0632\u0637\5\u00aaV\2\u0633\u0634\7\u0111\2\2\u0634\u0636\5\u00aa"+
		"V\2\u0635\u0633\3\2\2\2\u0636\u0639\3\2\2\2\u0637\u0635\3\2\2\2\u0637"+
		"\u0638\3\2\2\2\u0638\u063a\3\2\2\2\u0639\u0637\3\2\2\2\u063a\u063b\7\u0110"+
		"\2\2\u063b\u00a9\3\2\2\2\u063c\u063e\5\u011e\u0090\2\u063d\u063f\5\"\22"+
		"\2\u063e\u063d\3\2\2\2\u063e\u063f\3\2\2\2\u063f\u00ab\3\2\2\2\u0640\u0642"+
		"\5\u00b8]\2\u0641\u0643\5~@\2\u0642\u0641\3\2\2\2\u0642\u0643\3\2\2\2"+
		"\u0643\u0645\3\2\2\2\u0644\u0646\5\u009cO\2\u0645\u0644\3\2\2\2\u0645"+
		"\u0646\3\2\2\2\u0646\u0647\3\2\2\2\u0647\u0648\5\u00b2Z\2\u0648\u065c"+
		"\3\2\2\2\u0649\u064a\7\u010f\2\2\u064a\u064b\5$\23\2\u064b\u064d\7\u0110"+
		"\2\2\u064c\u064e\5\u009cO\2\u064d\u064c\3\2\2\2\u064d\u064e\3\2\2\2\u064e"+
		"\u064f\3\2\2\2\u064f\u0650\5\u00b2Z\2\u0650\u065c\3\2\2\2\u0651\u0652"+
		"\7\u010f\2\2\u0652\u0653\5\u0094K\2\u0653\u0655\7\u0110\2\2\u0654\u0656"+
		"\5\u009cO\2\u0655\u0654\3\2\2\2\u0655\u0656\3\2\2\2\u0656\u0657\3\2\2"+
		"\2\u0657\u0658\5\u00b2Z\2\u0658\u065c\3\2\2\2\u0659\u065c\5\u00aeX\2\u065a"+
		"\u065c\5\u00b0Y\2\u065b\u0640\3\2\2\2\u065b\u0649\3\2\2\2\u065b\u0651"+
		"\3\2\2\2\u065b\u0659\3\2\2\2\u065b\u065a\3\2\2\2\u065c\u00ad\3\2\2\2\u065d"+
		"\u065e\7\u0102\2\2\u065e\u0663\5\u00d6l\2\u065f\u0660\7\u0111\2\2\u0660"+
		"\u0662\5\u00d6l\2\u0661\u065f\3\2\2\2\u0662\u0665\3\2\2\2\u0663\u0661"+
		"\3\2\2\2\u0663\u0664\3\2\2\2\u0664\u0666\3\2\2\2\u0665\u0663\3\2\2\2\u0666"+
		"\u0667\5\u00b2Z\2\u0667\u00af\3\2\2\2\u0668\u0669\5\u0116\u008c\2\u0669"+
		"\u0672\7\u010f\2\2\u066a\u066f\5\u00d6l\2\u066b\u066c\7\u0111\2\2\u066c"+
		"\u066e\5\u00d6l\2\u066d\u066b\3\2\2\2\u066e\u0671\3\2\2\2\u066f\u066d"+
		"\3\2\2\2\u066f\u0670\3\2\2\2\u0670\u0673\3\2\2\2\u0671\u066f\3\2\2\2\u0672"+
		"\u066a\3\2\2\2\u0672\u0673\3\2\2\2\u0673\u0674\3\2\2\2\u0674\u0675\7\u0110"+
		"\2\2\u0675\u0676\5\u00b2Z\2\u0676\u00b1\3\2\2\2\u0677\u0679\7\23\2\2\u0678"+
		"\u0677\3\2\2\2\u0678\u0679\3\2\2\2\u0679\u067a\3\2\2\2\u067a\u067c\5\u0120"+
		"\u0091\2\u067b\u067d\5\u00a0Q\2\u067c\u067b\3\2\2\2\u067c\u067d\3\2\2"+
		"\2\u067d\u067f\3\2\2\2\u067e\u0678\3\2\2\2\u067e\u067f\3\2\2\2\u067f\u00b3"+
		"\3\2\2\2\u0680\u0681\7\u00c9\2\2\u0681\u0682\7`\2\2\u0682\u0683\7\u00d0"+
		"\2\2\u0683\u0687\7\u0125\2\2\u0684\u0685\7\u0108\2\2\u0685\u0686\7\u00d1"+
		"\2\2\u0686\u0688\5<\37\2\u0687\u0684\3\2\2\2\u0687\u0688\3\2\2\2\u0688"+
		"\u06b2\3\2\2\2\u0689\u068a\7\u00c9\2\2\u068a\u068b\7`\2\2\u068b\u0695"+
		"\7A\2\2\u068c\u068d\7Y\2\2\u068d\u068e\7\u00e8\2\2\u068e\u068f\7\33\2"+
		"\2\u068f\u0693\7\u0125\2\2\u0690\u0691\7N\2\2\u0691\u0692\7\33\2\2\u0692"+
		"\u0694\7\u0125\2\2\u0693\u0690\3\2\2\2\u0693\u0694\3\2\2\2\u0694\u0696"+
		"\3\2\2\2\u0695\u068c\3\2\2\2\u0695\u0696\3\2\2\2\u0696\u069c\3\2\2\2\u0697"+
		"\u0698\7\'\2\2\u0698\u0699\7z\2\2\u0699\u069a\7\u00e8\2\2\u069a\u069b"+
		"\7\33\2\2\u069b\u069d\7\u0125\2\2\u069c\u0697\3\2\2\2\u069c\u069d\3\2"+
		"\2\2\u069d\u06a3\3\2\2\2\u069e\u069f\7\u008d\2\2\u069f\u06a0\7|\2\2\u06a0"+
		"\u06a1\7\u00e8\2\2\u06a1\u06a2\7\33\2\2\u06a2\u06a4\7\u0125\2\2\u06a3"+
		"\u069e\3\2\2\2\u06a3\u06a4\3\2\2\2\u06a4\u06a9\3\2\2\2\u06a5\u06a6\7\u0084"+
		"\2\2\u06a6\u06a7\7\u00e8\2\2\u06a7\u06a8\7\33\2\2\u06a8\u06aa\7\u0125"+
		"\2\2\u06a9\u06a5\3\2\2\2\u06a9\u06aa\3\2\2\2\u06aa\u06af\3\2\2\2\u06ab"+
		"\u06ac\7\u0098\2\2\u06ac\u06ad\7?\2\2\u06ad\u06ae\7\23\2\2\u06ae\u06b0"+
		"\7\u0125\2\2\u06af\u06ab\3\2\2\2\u06af\u06b0\3\2\2\2\u06b0\u06b2\3\2\2"+
		"\2\u06b1\u0680\3\2\2\2\u06b1\u0689\3\2\2\2\u06b2\u00b5\3\2\2\2\u06b3\u06b8"+
		"\5\u00b8]\2\u06b4\u06b5\7\u0111\2\2\u06b5\u06b7\5\u00b8]\2\u06b6\u06b4"+
		"\3\2\2\2\u06b7\u06ba\3\2\2\2\u06b8\u06b6\3\2\2\2\u06b8\u06b9\3\2\2\2\u06b9"+
		"\u00b7\3\2\2\2\u06ba\u06b8\3\2\2\2\u06bb\u06c0\5\u011a\u008e\2\u06bc\u06bd"+
		"\7\u0112\2\2\u06bd\u06bf\5\u011a\u008e\2\u06be\u06bc\3\2\2\2\u06bf\u06c2"+
		"\3\2\2\2\u06c0\u06be\3\2\2\2\u06c0\u06c1\3\2\2\2\u06c1\u00b9\3\2\2\2\u06c2"+
		"\u06c0\3\2\2\2\u06c3\u06c4\5\u011a\u008e\2\u06c4\u06c5\7\u0112\2\2\u06c5"+
		"\u06c7\3\2\2\2\u06c6\u06c3\3\2\2\2\u06c6\u06c7\3\2\2\2\u06c7\u06c8\3\2"+
		"\2\2\u06c8\u06c9\5\u011a\u008e\2\u06c9\u00bb\3\2\2\2\u06ca\u06cb\5\u011a"+
		"\u008e\2\u06cb\u06cc\7\u0112\2\2\u06cc\u06ce\3\2\2\2\u06cd\u06ca\3\2\2"+
		"\2\u06cd\u06ce\3\2\2\2\u06ce\u06cf\3\2\2\2\u06cf\u06d0\5\u011a\u008e\2"+
		"\u06d0\u00bd\3\2\2\2\u06d1\u06d6\5\u00c0a\2\u06d2\u06d3\7\u0111\2\2\u06d3"+
		"\u06d5\5\u00c0a\2\u06d4\u06d2\3\2\2\2\u06d5\u06d8\3\2\2\2\u06d6\u06d4"+
		"\3\2\2\2\u06d6\u06d7\3\2\2\2\u06d7\u00bf\3\2\2\2\u06d8\u06d6\3\2\2\2\u06d9"+
		"\u06dc\5\u00b8]\2\u06da\u06db\7\u009e\2\2\u06db\u06dd\5\u00c2b\2\u06dc"+
		"\u06da\3\2\2\2\u06dc\u06dd\3\2\2\2\u06dd\u00c1\3\2\2\2\u06de\u06df\7\u010f"+
		"\2\2\u06df\u06e4\5\u00c4c\2\u06e0\u06e1\7\u0111\2\2\u06e1\u06e3\5\u00c4"+
		"c\2\u06e2\u06e0\3\2\2\2\u06e3\u06e6\3\2\2\2\u06e4\u06e2\3\2\2\2\u06e4"+
		"\u06e5\3\2\2\2\u06e5\u06e7\3\2\2\2\u06e6\u06e4\3\2\2\2\u06e7\u06e8\7\u0110"+
		"\2\2\u06e8\u00c3\3\2\2\2\u06e9\u06ee\5\u00c6d\2\u06ea\u06ec\7\u0113\2"+
		"\2\u06eb\u06ea\3\2\2\2\u06eb\u06ec\3\2\2\2\u06ec\u06ed\3\2\2\2\u06ed\u06ef"+
		"\5\u00c8e\2\u06ee\u06eb\3\2\2\2\u06ee\u06ef\3\2\2\2\u06ef\u00c5\3\2\2"+
		"\2\u06f0\u06f5\5\u011e\u0090\2\u06f1\u06f2\7\u0112\2\2\u06f2\u06f4\5\u011e"+
		"\u0090\2\u06f3\u06f1\3\2\2\2\u06f4\u06f7\3\2\2\2\u06f5\u06f3\3\2\2\2\u06f5"+
		"\u06f6\3\2\2\2\u06f6\u06fa\3\2\2\2\u06f7\u06f5\3\2\2\2\u06f8\u06fa\7\u0125"+
		"\2\2\u06f9\u06f0\3\2\2\2\u06f9\u06f8\3\2\2\2\u06fa\u00c7\3\2\2\2\u06fb"+
		"\u0700\7\u0129\2\2\u06fc\u0700\7\u012b\2\2\u06fd\u0700\5\u00eav\2\u06fe"+
		"\u0700\7\u0125\2\2\u06ff\u06fb\3\2\2\2\u06ff\u06fc\3\2\2\2\u06ff\u06fd"+
		"\3\2\2\2\u06ff\u06fe\3\2\2\2\u0700\u00c9\3\2\2\2\u0701\u0709\5\u00d6l"+
		"\2\u0702\u0704\7\23\2\2\u0703\u0702\3\2\2\2\u0703\u0704\3\2\2\2\u0704"+
		"\u0707\3\2\2\2\u0705\u0708\5\u011a\u008e\2\u0706\u0708\5\u00a0Q\2\u0707"+
		"\u0705\3\2\2\2\u0707\u0706\3\2\2\2\u0708\u070a\3\2\2\2\u0709\u0703\3\2"+
		"\2\2\u0709\u070a\3\2\2\2\u070a\u00cb\3\2\2\2\u070b\u0710\5\u00caf\2\u070c"+
		"\u070d\7\u0111\2\2\u070d\u070f\5\u00caf\2\u070e\u070c\3\2\2\2\u070f\u0712"+
		"\3\2\2\2\u0710\u070e\3\2\2\2\u0710\u0711\3\2\2\2\u0711\u00cd\3\2\2\2\u0712"+
		"\u0710\3\2\2\2\u0713\u0714\7\u010f\2\2\u0714\u0719\5\u00d0i\2\u0715\u0716"+
		"\7\u0111\2\2\u0716\u0718\5\u00d0i\2\u0717\u0715\3\2\2\2\u0718\u071b\3"+
		"\2\2\2\u0719\u0717\3\2\2\2\u0719\u071a\3\2\2\2\u071a\u071c\3\2\2\2\u071b"+
		"\u0719\3\2\2\2\u071c\u071d\7\u0110\2\2\u071d\u00cf\3\2\2\2\u071e\u0721"+
		"\5\u00d2j\2\u071f\u0721\5\u0102\u0082\2\u0720\u071e\3\2\2\2\u0720\u071f"+
		"\3\2\2\2\u0721\u00d1\3\2\2\2\u0722\u0730\5\u0118\u008d\2\u0723\u0724\5"+
		"\u011e\u0090\2\u0724\u0725\7\u010f\2\2\u0725\u072a\5\u00d4k\2\u0726\u0727"+
		"\7\u0111\2\2\u0727\u0729\5\u00d4k\2\u0728\u0726\3\2\2\2\u0729\u072c\3"+
		"\2\2\2\u072a\u0728\3\2\2\2\u072a\u072b\3\2\2\2\u072b\u072d\3\2\2\2\u072c"+
		"\u072a\3\2\2\2\u072d\u072e\7\u0110\2\2\u072e\u0730\3\2\2\2\u072f\u0722"+
		"\3\2\2\2\u072f\u0723\3\2\2\2\u0730\u00d3\3\2\2\2\u0731\u0734\5\u0118\u008d"+
		"\2\u0732\u0734\5\u00e2r\2\u0733\u0731\3\2\2\2\u0733\u0732\3\2\2\2\u0734"+
		"\u00d5\3\2\2\2\u0735\u0736\5\u00dan\2\u0736\u00d7\3\2\2\2\u0737\u073c"+
		"\5\u00d6l\2\u0738\u0739\7\u0111\2\2\u0739\u073b\5\u00d6l\2\u073a\u0738"+
		"\3\2\2\2\u073b\u073e\3\2\2\2\u073c\u073a\3\2\2\2\u073c\u073d\3\2\2\2\u073d"+
		"\u00d9\3\2\2\2\u073e\u073c\3\2\2\2\u073f\u0740\bn\1\2\u0740\u0741\7\u0097"+
		"\2\2\u0741\u074c\5\u00dan\7\u0742\u0743\7Q\2\2\u0743\u0744\7\u010f\2\2"+
		"\u0744\u0745\5$\23\2\u0745\u0746\7\u0110\2\2\u0746\u074c\3\2\2\2\u0747"+
		"\u0749\5\u00dep\2\u0748\u074a\5\u00dco\2\u0749\u0748\3\2\2\2\u0749\u074a"+
		"\3\2\2\2\u074a\u074c\3\2\2\2\u074b\u073f\3\2\2\2\u074b\u0742\3\2\2\2\u074b"+
		"\u0747\3\2\2\2\u074c\u0755\3\2\2\2\u074d\u074e\f\4\2\2\u074e\u074f\7\16"+
		"\2\2\u074f\u0754\5\u00dan\5\u0750\u0751\f\3\2\2\u0751\u0752\7\u009f\2"+
		"\2\u0752\u0754\5\u00dan\4\u0753\u074d\3\2\2\2\u0753\u0750\3\2\2\2\u0754"+
		"\u0757\3\2\2\2\u0755\u0753\3\2\2\2\u0755\u0756\3\2\2\2\u0756\u00db\3\2"+
		"\2\2\u0757\u0755\3\2\2\2\u0758\u075a\7\u0097\2\2\u0759\u0758\3\2\2\2\u0759"+
		"\u075a\3\2\2\2\u075a\u075b\3\2\2\2\u075b\u075c\7\27\2\2\u075c\u075d\5"+
		"\u00dep\2\u075d\u075e\7\16\2\2\u075e\u075f\5\u00dep\2\u075f\u07ab\3\2"+
		"\2\2\u0760\u0762\7\u0097\2\2\u0761\u0760\3\2\2\2\u0761\u0762\3\2\2\2\u0762"+
		"\u0763\3\2\2\2\u0763\u0764\7o\2\2\u0764\u0765\7\u010f\2\2\u0765\u076a"+
		"\5\u00d6l\2\u0766\u0767\7\u0111\2\2\u0767\u0769\5\u00d6l\2\u0768\u0766"+
		"\3\2\2\2\u0769\u076c\3\2\2\2\u076a\u0768\3\2\2\2\u076a\u076b\3\2\2\2\u076b"+
		"\u076d\3\2\2\2\u076c\u076a\3\2\2\2\u076d\u076e\7\u0110\2\2\u076e\u07ab"+
		"\3\2\2\2\u076f\u0771\7\u0097\2\2\u0770\u076f\3\2\2\2\u0770\u0771\3\2\2"+
		"\2\u0771\u0772\3\2\2\2\u0772\u0773\7o\2\2\u0773\u0774\7\u010f\2\2\u0774"+
		"\u0775\5$\23\2\u0775\u0776\7\u0110\2\2\u0776\u07ab\3\2\2\2\u0777\u0779"+
		"\7\u0097\2\2\u0778\u0777\3\2\2\2\u0778\u0779\3\2\2\2\u0779\u077a\3\2\2"+
		"\2\u077a\u077b\7\u00c4\2\2\u077b\u07ab\5\u00dep\2\u077c\u077e\7\u0097"+
		"\2\2\u077d\u077c\3\2\2\2\u077d\u077e\3\2\2\2\u077e\u077f\3\2\2\2\u077f"+
		"\u0780\7\u0082\2\2\u0780\u078e\t\16\2\2\u0781\u0782\7\u010f\2\2\u0782"+
		"\u078f\7\u0110\2\2\u0783\u0784\7\u010f\2\2\u0784\u0789\5\u00d6l\2\u0785"+
		"\u0786\7\u0111\2\2\u0786\u0788\5\u00d6l\2\u0787\u0785\3\2\2\2\u0788\u078b"+
		"\3\2\2\2\u0789\u0787\3\2\2\2\u0789\u078a\3\2\2\2\u078a\u078c\3\2\2\2\u078b"+
		"\u0789\3\2\2\2\u078c\u078d\7\u0110\2\2\u078d\u078f\3\2\2\2\u078e\u0781"+
		"\3\2\2\2\u078e\u0783\3\2\2\2\u078f\u07ab\3\2\2\2\u0790\u0792\7\u0097\2"+
		"\2\u0791\u0790\3\2\2\2\u0791\u0792\3\2\2\2\u0792\u0793\3\2\2\2\u0793\u0794"+
		"\7\u0082\2\2\u0794\u0797\5\u00dep\2\u0795\u0796\7M\2\2\u0796\u0798\7\u0125"+
		"\2\2\u0797\u0795\3\2\2\2\u0797\u0798\3\2\2\2\u0798\u07ab\3\2\2\2\u0799"+
		"\u079b\7y\2\2\u079a\u079c\7\u0097\2\2\u079b\u079a\3\2\2\2\u079b\u079c"+
		"\3\2\2\2\u079c\u079d\3\2\2\2\u079d\u07ab\7\u0098\2\2\u079e\u07a0\7y\2"+
		"\2\u079f\u07a1\7\u0097\2\2\u07a0\u079f\3\2\2\2\u07a0\u07a1\3\2\2\2\u07a1"+
		"\u07a2\3\2\2\2\u07a2\u07ab\t\17\2\2\u07a3\u07a5\7y\2\2\u07a4\u07a6\7\u0097"+
		"\2\2\u07a5\u07a4\3\2\2\2\u07a5\u07a6\3\2\2\2\u07a6\u07a7\3\2\2\2\u07a7"+
		"\u07a8\7G\2\2\u07a8\u07a9\7b\2\2\u07a9\u07ab\5\u00dep\2\u07aa\u0759\3"+
		"\2\2\2\u07aa\u0761\3\2\2\2\u07aa\u0770\3\2\2\2\u07aa\u0778\3\2\2\2\u07aa"+
		"\u077d\3\2\2\2\u07aa\u0791\3\2\2\2\u07aa\u0799\3\2\2\2\u07aa\u079e\3\2"+
		"\2\2\u07aa\u07a3\3\2\2\2\u07ab\u00dd\3\2\2\2\u07ac\u07ad\bp\1\2\u07ad"+
		"\u07b1\5\u00e0q\2\u07ae\u07af\t\20\2\2\u07af\u07b1\5\u00dep\t\u07b0\u07ac"+
		"\3\2\2\2\u07b0\u07ae\3\2\2\2\u07b1\u07c7\3\2\2\2\u07b2\u07b3\f\b\2\2\u07b3"+
		"\u07b4\t\21\2\2\u07b4\u07c6\5\u00dep\t\u07b5\u07b6\f\7\2\2\u07b6\u07b7"+
		"\t\22\2\2\u07b7\u07c6\5\u00dep\b\u07b8\u07b9\f\6\2\2\u07b9\u07ba\7\u0121"+
		"\2\2\u07ba\u07c6\5\u00dep\7\u07bb\u07bc\f\5\2\2\u07bc\u07bd\7\u0124\2"+
		"\2\u07bd\u07c6\5\u00dep\6\u07be\u07bf\f\4\2\2\u07bf\u07c0\7\u0122\2\2"+
		"\u07c0\u07c6\5\u00dep\5\u07c1\u07c2\f\3\2\2\u07c2\u07c3\5\u00e4s\2\u07c3"+
		"\u07c4\5\u00dep\4\u07c4\u07c6\3\2\2\2\u07c5\u07b2\3\2\2\2\u07c5\u07b5"+
		"\3\2\2\2\u07c5\u07b8\3\2\2\2\u07c5\u07bb\3\2\2\2\u07c5\u07be\3\2\2\2\u07c5"+
		"\u07c1\3\2\2\2\u07c6\u07c9\3\2\2\2\u07c7\u07c5\3\2\2\2\u07c7\u07c8\3\2"+
		"\2\2\u07c8\u00df\3\2\2\2\u07c9\u07c7\3\2\2\2\u07ca\u07cb\bq\1\2\u07cb"+
		"\u0887\t\23\2\2\u07cc\u07ce\7\36\2\2\u07cd\u07cf\5\u0108\u0085\2\u07ce"+
		"\u07cd\3\2\2\2\u07cf\u07d0\3\2\2\2\u07d0\u07ce\3\2\2\2\u07d0\u07d1\3\2"+
		"\2\2\u07d1\u07d4\3\2\2\2\u07d2\u07d3\7K\2\2\u07d3\u07d5\5\u00d6l\2\u07d4"+
		"\u07d2\3\2\2\2\u07d4\u07d5\3\2\2\2\u07d5\u07d6\3\2\2\2\u07d6\u07d7\7L"+
		"\2\2\u07d7\u0887\3\2\2\2\u07d8\u07d9\7\36\2\2\u07d9\u07db\5\u00d6l\2\u07da"+
		"\u07dc\5\u0108\u0085\2\u07db\u07da\3\2\2\2\u07dc\u07dd\3\2\2\2\u07dd\u07db"+
		"\3\2\2\2\u07dd\u07de\3\2\2\2\u07de\u07e1\3\2\2\2\u07df\u07e0\7K\2\2\u07e0"+
		"\u07e2\5\u00d6l\2\u07e1\u07df\3\2\2\2\u07e1\u07e2\3\2\2\2\u07e2\u07e3"+
		"\3\2\2\2\u07e3\u07e4\7L\2\2\u07e4\u0887\3\2\2\2\u07e5\u07e6\t\24\2\2\u07e6"+
		"\u07e7\7\u010f\2\2\u07e7\u07e8\5\u00d6l\2\u07e8\u07e9\7\23\2\2\u07e9\u07ea"+
		"\5\u00fa~\2\u07ea\u07eb\7\u0110\2\2\u07eb\u0887\3\2\2\2\u07ec\u07ed\7"+
		"\u00df\2\2\u07ed\u07f6\7\u010f\2\2\u07ee\u07f3\5\u00caf\2\u07ef\u07f0"+
		"\7\u0111\2\2\u07f0\u07f2\5\u00caf\2\u07f1\u07ef\3\2\2\2\u07f2\u07f5\3"+
		"\2\2\2\u07f3\u07f1\3\2\2\2\u07f3\u07f4\3\2\2\2\u07f4\u07f7\3\2\2\2\u07f5"+
		"\u07f3\3\2\2\2\u07f6\u07ee\3\2\2\2\u07f6\u07f7\3\2\2\2\u07f7\u07f8\3\2"+
		"\2\2\u07f8\u0887\7\u0110\2\2\u07f9\u07fa\7\\\2\2\u07fa\u07fb\7\u010f\2"+
		"\2\u07fb\u07fe\5\u00d6l\2\u07fc\u07fd\7m\2\2\u07fd\u07ff\7\u0099\2\2\u07fe"+
		"\u07fc\3\2\2\2\u07fe\u07ff\3\2\2\2\u07ff\u0800\3\2\2\2\u0800\u0801\7\u0110"+
		"\2\2\u0801\u0887\3\2\2\2\u0802\u0803\7}\2\2\u0803\u0804\7\u010f\2\2\u0804"+
		"\u0807\5\u00d6l\2\u0805\u0806\7m\2\2\u0806\u0808\7\u0099\2\2\u0807\u0805"+
		"\3\2\2\2\u0807\u0808\3\2\2\2\u0808\u0809\3\2\2\2\u0809\u080a\7\u0110\2"+
		"\2\u080a\u0887\3\2\2\2\u080b\u080c\7\u00ae\2\2\u080c\u080d\7\u010f\2\2"+
		"\u080d\u080e\5\u00dep\2\u080e\u080f\7o\2\2\u080f\u0810\5\u00dep\2\u0810"+
		"\u0811\7\u0110\2\2\u0811\u0887\3\2\2\2\u0812\u0887\5\u00e2r\2\u0813\u0887"+
		"\7\u011d\2\2\u0814\u0815\5\u0118\u008d\2\u0815\u0816\7\u0112\2\2\u0816"+
		"\u0817\7\u011d\2\2\u0817\u0887\3\2\2\2\u0818\u0819\7\u010f\2\2\u0819\u081c"+
		"\5\u00caf\2\u081a\u081b\7\u0111\2\2\u081b\u081d\5\u00caf\2\u081c\u081a"+
		"\3\2\2\2\u081d\u081e\3\2\2\2\u081e\u081c\3\2\2\2\u081e\u081f\3\2\2\2\u081f"+
		"\u0820\3\2\2\2\u0820\u0821\7\u0110\2\2\u0821\u0887\3\2\2\2\u0822\u0823"+
		"\7\u010f\2\2\u0823\u0824\5$\23\2\u0824\u0825\7\u0110\2\2\u0825\u0887\3"+
		"\2\2\2\u0826\u0827\5\u0116\u008c\2\u0827\u0833\7\u010f\2\2\u0828\u082a"+
		"\5\u0092J\2\u0829\u0828\3\2\2\2\u0829\u082a\3\2\2\2\u082a\u082b\3\2\2"+
		"\2\u082b\u0830\5\u00d6l\2\u082c\u082d\7\u0111\2\2\u082d\u082f\5\u00d6"+
		"l\2\u082e\u082c\3\2\2\2\u082f\u0832\3\2\2\2\u0830\u082e\3\2\2\2\u0830"+
		"\u0831\3\2\2\2\u0831\u0834\3\2\2\2\u0832\u0830\3\2\2\2\u0833\u0829\3\2"+
		"\2\2\u0833\u0834\3\2\2\2\u0834\u0835\3\2\2\2\u0835\u083c\7\u0110\2\2\u0836"+
		"\u0837\7Z\2\2\u0837\u0838\7\u010f\2\2\u0838\u0839\7\u0106\2\2\u0839\u083a"+
		"\5\u00dan\2\u083a\u083b\7\u0110\2\2\u083b\u083d\3\2\2\2\u083c\u0836\3"+
		"\2\2\2\u083c\u083d\3\2\2\2\u083d\u0840\3\2\2\2\u083e\u083f\t\25\2\2\u083f"+
		"\u0841\7\u0099\2\2\u0840\u083e\3\2\2\2\u0840\u0841\3\2\2\2\u0841\u0844"+
		"\3\2\2\2\u0842\u0843\7\u00a4\2\2\u0843\u0845\5\u010e\u0088\2\u0844\u0842"+
		"\3\2\2\2\u0844\u0845\3\2\2\2\u0845\u0887\3\2\2\2\u0846\u0847\5\u011e\u0090"+
		"\2\u0847\u0848\7\5\2\2\u0848\u0849\5\u00d6l\2\u0849\u0887\3\2\2\2\u084a"+
		"\u084b\7\u010f\2\2\u084b\u084e\5\u011e\u0090\2\u084c\u084d\7\u0111\2\2"+
		"\u084d\u084f\5\u011e\u0090\2\u084e\u084c\3\2\2\2\u084f\u0850\3\2\2\2\u0850"+
		"\u084e\3\2\2\2\u0850\u0851\3\2\2\2\u0851\u0852\3\2\2\2\u0852\u0853\7\u0110"+
		"\2\2\u0853\u0854\7\5\2\2\u0854\u0855\5\u00d6l\2\u0855\u0887\3\2\2\2\u0856"+
		"\u0887\5\u011e\u0090\2\u0857\u0858\7\u010f\2\2\u0858\u0859\5\u00d6l\2"+
		"\u0859\u085a\7\u0110\2\2\u085a\u0887\3\2\2\2\u085b\u085c\7V\2\2\u085c"+
		"\u085d\7\u010f\2\2\u085d\u085e\5\u011e\u0090\2\u085e\u085f\7b\2\2\u085f"+
		"\u0860\5\u00dep\2\u0860\u0861\7\u0110\2\2\u0861\u0887\3\2\2\2\u0862\u0863"+
		"\t\26\2\2\u0863\u0864\7\u010f\2\2\u0864\u0865\5\u00dep\2\u0865\u0866\t"+
		"\27\2\2\u0866\u0869\5\u00dep\2\u0867\u0868\t\30\2\2\u0868\u086a\5\u00de"+
		"p\2\u0869\u0867\3\2\2\2\u0869\u086a\3\2\2\2\u086a\u086b\3\2\2\2\u086b"+
		"\u086c\7\u0110\2\2\u086c\u0887\3\2\2\2\u086d\u086e\7\u00f1\2\2\u086e\u0870"+
		"\7\u010f\2\2\u086f\u0871\t\31\2\2\u0870\u086f\3\2\2\2\u0870\u0871\3\2"+
		"\2\2\u0871\u0873\3\2\2\2\u0872\u0874\5\u00dep\2\u0873\u0872\3\2\2\2\u0873"+
		"\u0874\3\2\2\2\u0874\u0875\3\2\2\2\u0875\u0876\7b\2\2\u0876\u0877\5\u00de"+
		"p\2\u0877\u0878\7\u0110\2\2\u0878\u0887\3\2\2\2\u0879\u087a\7\u00a6\2"+
		"\2\u087a\u087b\7\u010f\2\2\u087b\u087c\5\u00dep\2\u087c\u087d\7\u00ad"+
		"\2\2\u087d\u087e\5\u00dep\2\u087e\u087f\7b\2\2\u087f\u0882\5\u00dep\2"+
		"\u0880\u0881\7^\2\2\u0881\u0883\5\u00dep\2\u0882\u0880\3\2\2\2\u0882\u0883"+
		"\3\2\2\2\u0883\u0884\3\2\2\2\u0884\u0885\7\u0110\2\2\u0885\u0887\3\2\2"+
		"\2\u0886\u07ca\3\2\2\2\u0886\u07cc\3\2\2\2\u0886\u07d8\3\2\2\2\u0886\u07e5"+
		"\3\2\2\2\u0886\u07ec\3\2\2\2\u0886\u07f9\3\2\2\2\u0886\u0802\3\2\2\2\u0886"+
		"\u080b\3\2\2\2\u0886\u0812\3\2\2\2\u0886\u0813\3\2\2\2\u0886\u0814\3\2"+
		"\2\2\u0886\u0818\3\2\2\2\u0886\u0822\3\2\2\2\u0886\u0826\3\2\2\2\u0886"+
		"\u0846\3\2\2\2\u0886\u084a\3\2\2\2\u0886\u0856\3\2\2\2\u0886\u0857\3\2"+
		"\2\2\u0886\u085b\3\2\2\2\u0886\u0862\3\2\2\2\u0886\u086d\3\2\2\2\u0886"+
		"\u0879\3\2\2\2\u0887\u0892\3\2\2\2\u0888\u0889\f\n\2\2\u0889\u088a\7\6"+
		"\2\2\u088a\u088b\5\u00dep\2\u088b\u088c\7\7\2\2\u088c\u0891\3\2\2\2\u088d"+
		"\u088e\f\b\2\2\u088e\u088f\7\u0112\2\2\u088f\u0891\5\u011e\u0090\2\u0890"+
		"\u0888\3\2\2\2\u0890\u088d\3\2\2\2\u0891\u0894\3\2\2\2\u0892\u0890\3\2"+
		"\2\2\u0892\u0893\3\2\2\2\u0893\u00e1\3\2\2\2\u0894\u0892\3\2\2\2\u0895"+
		"\u08a2\7\u0098\2\2\u0896\u08a2\5\u00ecw\2\u0897\u0898\5\u011e\u0090\2"+
		"\u0898\u0899\7\u0125\2\2\u0899\u08a2\3\2\2\2\u089a\u08a2\5\u0124\u0093"+
		"\2\u089b\u08a2\5\u00eav\2\u089c\u089e\7\u0125\2\2\u089d\u089c\3\2\2\2"+
		"\u089e\u089f\3\2\2\2\u089f\u089d\3\2\2\2\u089f\u08a0\3\2\2\2\u08a0\u08a2"+
		"\3\2\2\2\u08a1\u0895\3\2\2\2\u08a1\u0896\3\2\2\2\u08a1\u0897\3\2\2\2\u08a1"+
		"\u089a\3\2\2\2\u08a1\u089b\3\2\2\2\u08a1\u089d\3\2\2\2\u08a2\u00e3\3\2"+
		"\2\2\u08a3\u08a4\t\32\2\2\u08a4\u00e5\3\2\2\2\u08a5\u08a6\t\33\2\2\u08a6"+
		"\u00e7\3\2\2\2\u08a7\u08a8\t\34\2\2\u08a8\u00e9\3\2\2\2\u08a9\u08aa\t"+
		"\35\2\2\u08aa\u00eb\3\2\2\2\u08ab\u08ae\7w\2\2\u08ac\u08af\5\u00eex\2"+
		"\u08ad\u08af\5\u00f2z\2\u08ae\u08ac\3\2\2\2\u08ae\u08ad\3\2\2\2\u08ae"+
		"\u08af\3\2\2\2\u08af\u00ed\3\2\2\2\u08b0\u08b2\5\u00f0y\2\u08b1\u08b3"+
		"\5\u00f4{\2\u08b2\u08b1\3\2\2\2\u08b2\u08b3\3\2\2\2\u08b3\u00ef\3\2\2"+
		"\2\u08b4\u08b5\5\u00f6|\2\u08b5\u08b6\5\u011e\u0090\2\u08b6\u08b8\3\2"+
		"\2\2\u08b7\u08b4\3\2\2\2\u08b8\u08b9\3\2\2\2\u08b9\u08b7\3\2\2\2\u08b9"+
		"\u08ba\3\2\2\2\u08ba\u00f1\3\2\2\2\u08bb\u08be\5\u00f4{\2\u08bc\u08bf"+
		"\5\u00f0y\2\u08bd\u08bf\5\u00f4{\2\u08be\u08bc\3\2\2\2\u08be\u08bd\3\2"+
		"\2\2\u08be\u08bf\3\2\2\2\u08bf\u00f3\3\2\2\2\u08c0\u08c1\5\u00f6|\2\u08c1"+
		"\u08c2\5\u011e\u0090\2\u08c2\u08c3\7\u00eb\2\2\u08c3\u08c4\5\u011e\u0090"+
		"\2\u08c4\u00f5\3\2\2\2\u08c5\u08c7\t\36\2\2\u08c6\u08c5\3\2\2\2\u08c6"+
		"\u08c7\3\2\2\2\u08c7\u08c8\3\2\2\2\u08c8\u08c9\t\37\2\2\u08c9\u00f7\3"+
		"\2\2\2\u08ca\u08ce\7\\\2\2\u08cb\u08cc\7\n\2\2\u08cc\u08ce\5\u011a\u008e"+
		"\2\u08cd\u08ca\3\2\2\2\u08cd\u08cb\3\2\2\2\u08ce\u00f9\3\2\2\2\u08cf\u08d0"+
		"\7\22\2\2\u08d0\u08d1\7\u0117\2\2\u08d1\u08d2\5\u00fa~\2\u08d2\u08d3\7"+
		"\u0119\2\2\u08d3\u08fe\3\2\2\2\u08d4\u08d5\7\u008d\2\2\u08d5\u08d6\7\u0117"+
		"\2\2\u08d6\u08d7\5\u00fa~\2\u08d7\u08d8\7\u0111\2\2\u08d8\u08d9\5\u00fa"+
		"~\2\u08d9\u08da\7\u0119\2\2\u08da\u08fe\3\2\2\2\u08db\u08e2\7\u00df\2"+
		"\2\u08dc\u08de\7\u0117\2\2\u08dd\u08df\5\u0104\u0083\2\u08de\u08dd\3\2"+
		"\2\2\u08de\u08df\3\2\2\2\u08df\u08e0\3\2\2\2\u08e0\u08e3\7\u0119\2\2\u08e1"+
		"\u08e3\7\u0115\2\2\u08e2\u08dc\3\2\2\2\u08e2\u08e1\3\2\2\2\u08e3\u08fe"+
		"\3\2\2\2\u08e4\u08e5\7w\2\2\u08e5\u08e8\t \2\2\u08e6\u08e7\7\u00eb\2\2"+
		"\u08e7\u08e9\7\u0091\2\2\u08e8\u08e6\3\2\2\2\u08e8\u08e9\3\2\2\2\u08e9"+
		"\u08fe\3\2\2\2\u08ea\u08eb\7w\2\2\u08eb\u08ee\t!\2\2\u08ec\u08ed\7\u00eb"+
		"\2\2\u08ed\u08ef\t\"\2\2\u08ee\u08ec\3\2\2\2\u08ee\u08ef\3\2\2\2\u08ef"+
		"\u08fe\3\2\2\2\u08f0\u08fb\5\u011e\u0090\2\u08f1\u08f2\7\u010f\2\2\u08f2"+
		"\u08f7\7\u0129\2\2\u08f3\u08f4\7\u0111\2\2\u08f4\u08f6\7\u0129\2\2\u08f5"+
		"\u08f3\3\2\2\2\u08f6\u08f9\3\2\2\2\u08f7\u08f5\3\2\2\2\u08f7\u08f8\3\2"+
		"\2\2\u08f8\u08fa\3\2\2\2\u08f9\u08f7\3\2\2\2\u08fa\u08fc\7\u0110\2\2\u08fb"+
		"\u08f1\3\2\2\2\u08fb\u08fc\3\2\2\2\u08fc\u08fe\3\2\2\2\u08fd\u08cf\3\2"+
		"\2\2\u08fd\u08d4\3\2\2\2\u08fd\u08db\3\2\2\2\u08fd\u08e4\3\2\2\2\u08fd"+
		"\u08ea\3\2\2\2\u08fd\u08f0\3\2\2\2\u08fe\u00fb\3\2\2\2\u08ff\u0904\5\u00fe"+
		"\u0080\2\u0900\u0901\7\u0111\2\2\u0901\u0903\5\u00fe\u0080\2\u0902\u0900"+
		"\3\2\2\2\u0903\u0906\3\2\2\2\u0904\u0902\3\2\2\2\u0904\u0905\3\2\2\2\u0905"+
		"\u00fd\3\2\2\2\u0906\u0904\3\2\2\2\u0907\u0908\5\u00b8]\2\u0908\u090b"+
		"\5\u00fa~\2\u0909\u090a\7\u0097\2\2\u090a\u090c\7\u0098\2\2\u090b\u0909"+
		"\3\2\2\2\u090b\u090c\3\2\2\2\u090c\u090e\3\2\2\2\u090d\u090f\5\"\22\2"+
		"\u090e\u090d\3\2\2\2\u090e\u090f\3\2\2\2\u090f\u0911\3\2\2\2\u0910\u0912"+
		"\5\u00f8}\2\u0911\u0910\3\2\2\2\u0911\u0912\3\2\2\2\u0912\u00ff\3\2\2"+
		"\2\u0913\u0918\5\u0102\u0082\2\u0914\u0915\7\u0111\2\2\u0915\u0917\5\u0102"+
		"\u0082\2\u0916\u0914\3\2\2\2\u0917\u091a\3\2\2\2\u0918\u0916\3\2\2\2\u0918"+
		"\u0919\3\2\2\2\u0919\u0101\3\2\2\2\u091a\u0918\3\2\2\2\u091b\u091c\5\u011a"+
		"\u008e\2\u091c\u091f\5\u00fa~\2\u091d\u091e\7\u0097\2\2\u091e\u0920\7"+
		"\u0098\2\2\u091f\u091d\3\2\2\2\u091f\u0920\3\2\2\2\u0920\u0922\3\2\2\2"+
		"\u0921\u0923\5\"\22\2\u0922\u0921\3\2\2\2\u0922\u0923\3\2\2\2\u0923\u0103"+
		"\3\2\2\2\u0924\u0929\5\u0106\u0084\2\u0925\u0926\7\u0111\2\2\u0926\u0928"+
		"\5\u0106\u0084\2\u0927\u0925\3\2\2\2\u0928\u092b\3\2\2\2\u0929\u0927\3"+
		"\2\2\2\u0929\u092a\3\2\2\2\u092a\u0105\3\2\2\2\u092b";
	private static final String _serializedATNSegment1 =
		"\u0929\3\2\2\2\u092c\u092e\5\u011e\u0090\2\u092d\u092f\7\b\2\2\u092e\u092d"+
		"\3\2\2\2\u092e\u092f\3\2\2\2\u092f\u0930\3\2\2\2\u0930\u0933\5\u00fa~"+
		"\2\u0931\u0932\7\u0097\2\2\u0932\u0934\7\u0098\2\2\u0933\u0931\3\2\2\2"+
		"\u0933\u0934\3\2\2\2\u0934\u0936\3\2\2\2\u0935\u0937\5\"\22\2\u0936\u0935"+
		"\3\2\2\2\u0936\u0937\3\2\2\2\u0937\u0107\3\2\2\2\u0938\u0939\7\u0105\2"+
		"\2\u0939\u093a\5\u00d6l\2\u093a\u093b\7\u00e9\2\2\u093b\u093c\5\u00d6"+
		"l\2\u093c\u0109\3\2\2\2\u093d\u093e\7\u0107\2\2\u093e\u0943\5\u010c\u0087"+
		"\2\u093f\u0940\7\u0111\2\2\u0940\u0942\5\u010c\u0087\2\u0941\u093f\3\2"+
		"\2\2\u0942\u0945\3\2\2\2\u0943\u0941\3\2\2\2\u0943\u0944\3\2\2\2\u0944"+
		"\u010b\3\2\2\2\u0945\u0943\3\2\2\2\u0946\u0947\5\u011a\u008e\2\u0947\u0948"+
		"\7\23\2\2\u0948\u0949\5\u010e\u0088\2\u0949\u010d\3\2\2\2\u094a\u0979"+
		"\5\u011a\u008e\2\u094b\u094c\7\u010f\2\2\u094c\u094d\5\u011a\u008e\2\u094d"+
		"\u094e\7\u0110\2\2\u094e\u0979\3\2\2\2\u094f\u0972\7\u010f\2\2\u0950\u0951"+
		"\7#\2\2\u0951\u0952\7\33\2\2\u0952\u0957\5\u00d6l\2\u0953\u0954\7\u0111"+
		"\2\2\u0954\u0956\5\u00d6l\2\u0955\u0953\3\2\2\2\u0956\u0959\3\2\2\2\u0957"+
		"\u0955\3\2\2\2\u0957\u0958\3\2\2\2\u0958\u0973\3\2\2\2\u0959\u0957\3\2"+
		"\2\2\u095a\u095b\t#\2\2\u095b\u095c\7\33\2\2\u095c\u0961\5\u00d6l\2\u095d"+
		"\u095e\7\u0111\2\2\u095e\u0960\5\u00d6l\2\u095f\u095d\3\2\2\2\u0960\u0963"+
		"\3\2\2\2\u0961\u095f\3\2\2\2\u0961\u0962\3\2\2\2\u0962\u0965\3\2\2\2\u0963"+
		"\u0961\3\2\2\2\u0964\u095a\3\2\2\2\u0964\u0965\3\2\2\2\u0965\u0970\3\2"+
		"\2\2\u0966\u0967\t$\2\2\u0967\u0968\7\33\2\2\u0968\u096d\5Z.\2\u0969\u096a"+
		"\7\u0111\2\2\u096a\u096c\5Z.\2\u096b\u0969\3\2\2\2\u096c\u096f\3\2\2\2"+
		"\u096d\u096b\3\2\2\2\u096d\u096e\3\2\2\2\u096e\u0971\3\2\2\2\u096f\u096d"+
		"\3\2\2\2\u0970\u0966\3\2\2\2\u0970\u0971\3\2\2\2\u0971\u0973\3\2\2\2\u0972"+
		"\u0950\3\2\2\2\u0972\u0964\3\2\2\2\u0973\u0975\3\2\2\2\u0974\u0976\5\u0110"+
		"\u0089\2\u0975\u0974\3\2\2\2\u0975\u0976\3\2\2\2\u0976\u0977\3\2\2\2\u0977"+
		"\u0979\7\u0110\2\2\u0978\u094a\3\2\2\2\u0978\u094b\3\2\2\2\u0978\u094f"+
		"\3\2\2\2\u0979\u010f\3\2\2\2\u097a\u097b\7\u00b5\2\2\u097b\u098b\5\u0112"+
		"\u008a\2\u097c\u097d\7\u00ca\2\2\u097d\u098b\5\u0112\u008a\2\u097e\u097f"+
		"\7\u00b5\2\2\u097f\u0980\7\27\2\2\u0980\u0981\5\u0112\u008a\2\u0981\u0982"+
		"\7\16\2\2\u0982\u0983\5\u0112\u008a\2\u0983\u098b\3\2\2\2\u0984\u0985"+
		"\7\u00ca\2\2\u0985\u0986\7\27\2\2\u0986\u0987\5\u0112\u008a\2\u0987\u0988"+
		"\7\16\2\2\u0988\u0989\5\u0112\u008a\2\u0989\u098b\3\2\2\2\u098a\u097a"+
		"\3\2\2\2\u098a\u097c\3\2\2\2\u098a\u097e\3\2\2\2\u098a\u0984\3\2\2\2\u098b"+
		"\u0111\3\2\2\2\u098c\u098d\7\u00f7\2\2\u098d\u0994\t%\2\2\u098e\u098f"+
		"\7\65\2\2\u098f\u0994\7\u00c9\2\2\u0990\u0991\5\u00d6l\2\u0991\u0992\t"+
		"%\2\2\u0992\u0994\3\2\2\2\u0993\u098c\3\2\2\2\u0993\u098e\3\2\2\2\u0993"+
		"\u0990\3\2\2\2\u0994\u0113\3\2\2\2\u0995\u099a\5\u0118\u008d\2\u0996\u0997"+
		"\7\u0111\2\2\u0997\u0999\5\u0118\u008d\2\u0998\u0996\3\2\2\2\u0999\u099c"+
		"\3\2\2\2\u099a\u0998\3\2\2\2\u099a\u099b\3\2\2\2\u099b\u0115\3\2\2\2\u099c"+
		"\u099a\3\2\2\2\u099d\u09a2\5\u0118\u008d\2\u099e\u09a2\7Z\2\2\u099f\u09a2"+
		"\7\u0081\2\2\u09a0\u09a2\7\u00c3\2\2\u09a1\u099d\3\2\2\2\u09a1\u099e\3"+
		"\2\2\2\u09a1\u099f\3\2\2\2\u09a1\u09a0\3\2\2\2\u09a2\u0117\3\2\2\2\u09a3"+
		"\u09a8\5\u011e\u0090\2\u09a4\u09a5\7\u0112\2\2\u09a5\u09a7\5\u011e\u0090"+
		"\2\u09a6\u09a4\3\2\2\2\u09a7\u09aa\3\2\2\2\u09a8\u09a6\3\2\2\2\u09a8\u09a9"+
		"\3\2\2\2\u09a9\u0119\3\2\2\2\u09aa\u09a8\3\2\2\2\u09ab\u09ac\5\u011e\u0090"+
		"\2\u09ac\u09ad\5\u011c\u008f\2\u09ad\u011b\3\2\2\2\u09ae\u09af\7\u011c"+
		"\2\2\u09af\u09b1\5\u011e\u0090\2\u09b0\u09ae\3\2\2\2\u09b1\u09b2\3\2\2"+
		"\2\u09b2\u09b0\3\2\2\2\u09b2\u09b3\3\2\2\2\u09b3\u09b6\3\2\2\2\u09b4\u09b6"+
		"\3\2\2\2\u09b5\u09b0\3\2\2\2\u09b5\u09b4\3\2\2\2\u09b6\u011d\3\2\2\2\u09b7"+
		"\u09bb\5\u0120\u0091\2\u09b8\u09b9\6\u0090\22\2\u09b9\u09bb\5\u012a\u0096"+
		"\2\u09ba\u09b7\3\2\2\2\u09ba\u09b8\3\2\2\2\u09bb\u011f\3\2\2\2\u09bc\u09c3"+
		"\7\u012f\2\2\u09bd\u09c3\5\u0122\u0092\2\u09be\u09bf\6\u0091\23\2\u09bf"+
		"\u09c3\5\u0128\u0095\2\u09c0\u09c1\6\u0091\24\2\u09c1\u09c3\5\u012c\u0097"+
		"\2\u09c2\u09bc\3\2\2\2\u09c2\u09bd\3\2\2\2\u09c2\u09be\3\2\2\2\u09c2\u09c0"+
		"\3\2\2\2\u09c3\u0121\3\2\2\2\u09c4\u09c5\7\u0130\2\2\u09c5\u0123\3\2\2"+
		"\2\u09c6\u09c8\6\u0093\25\2\u09c7\u09c9\7\u011c\2\2\u09c8\u09c7\3\2\2"+
		"\2\u09c8\u09c9\3\2\2\2\u09c9\u09ca\3\2\2\2\u09ca\u09f2\7\u012a\2\2\u09cb"+
		"\u09cd\6\u0093\26\2\u09cc\u09ce\7\u011c\2\2\u09cd\u09cc\3\2\2\2\u09cd"+
		"\u09ce\3\2\2\2\u09ce\u09cf\3\2\2\2\u09cf\u09f2\7\u012b\2\2\u09d0\u09d2"+
		"\6\u0093\27\2\u09d1\u09d3\7\u011c\2\2\u09d2\u09d1\3\2\2\2\u09d2\u09d3"+
		"\3\2\2\2\u09d3\u09d4\3\2\2\2\u09d4\u09f2\t&\2\2\u09d5\u09d7\7\u011c\2"+
		"\2\u09d6\u09d5\3\2\2\2\u09d6\u09d7\3\2\2\2\u09d7\u09d8\3\2\2\2\u09d8\u09f2"+
		"\7\u0129\2\2\u09d9\u09db\7\u011c\2\2\u09da\u09d9\3\2\2\2\u09da\u09db\3"+
		"\2\2\2\u09db\u09dc\3\2\2\2\u09dc\u09f2\7\u0126\2\2\u09dd\u09df\7\u011c"+
		"\2\2\u09de\u09dd\3\2\2\2\u09de\u09df\3\2\2\2\u09df\u09e0\3\2\2\2\u09e0"+
		"\u09f2\7\u0127\2\2\u09e1\u09e3\7\u011c\2\2\u09e2\u09e1\3\2\2\2\u09e2\u09e3"+
		"\3\2\2\2\u09e3\u09e4\3\2\2\2\u09e4\u09f2\7\u0128\2\2\u09e5\u09e7\7\u011c"+
		"\2\2\u09e6\u09e5\3\2\2\2\u09e6\u09e7\3\2\2\2\u09e7\u09e8\3\2\2\2\u09e8"+
		"\u09f2\7\u012d\2\2\u09e9\u09eb\7\u011c\2\2\u09ea\u09e9\3\2\2\2\u09ea\u09eb"+
		"\3\2\2\2\u09eb\u09ec\3\2\2\2\u09ec\u09f2\7\u012c\2\2\u09ed\u09ef\7\u011c"+
		"\2\2\u09ee\u09ed\3\2\2\2\u09ee\u09ef\3\2\2\2\u09ef\u09f0\3\2\2\2\u09f0"+
		"\u09f2\7\u012e\2\2\u09f1\u09c6\3\2\2\2\u09f1\u09cb\3\2\2\2\u09f1\u09d0"+
		"\3\2\2\2\u09f1\u09d6\3\2\2\2\u09f1\u09da\3\2\2\2\u09f1\u09de\3\2\2\2\u09f1"+
		"\u09e2\3\2\2\2\u09f1\u09e6\3\2\2\2\u09f1\u09ea\3\2\2\2\u09f1\u09ee\3\2"+
		"\2\2\u09f2\u0125\3\2\2\2\u09f3\u09f4\7\u00f5\2\2\u09f4\u09fb\5\u00fa~"+
		"\2\u09f5\u09fb\5\"\22\2\u09f6\u09fb\5\u00f8}\2\u09f7\u09f8\t\'\2\2\u09f8"+
		"\u09f9\7\u0097\2\2\u09f9\u09fb\7\u0098\2\2\u09fa\u09f3\3\2\2\2\u09fa\u09f5"+
		"\3\2\2\2\u09fa\u09f6\3\2\2\2\u09fa\u09f7\3\2\2\2\u09fb\u0127\3\2\2\2\u09fc"+
		"\u09fd\t(\2\2\u09fd\u0129\3\2\2\2\u09fe\u09ff\t)\2\2\u09ff\u012b\3\2\2"+
		"\2\u0a00\u0a01\t*\2\2\u0a01\u012d\3\2\2\2\u014e\u0133\u013b\u013e\u0142"+
		"\u0145\u014c\u0151\u0156\u015d\u0163\u0168\u0170\u0178\u017f\u0182\u01a0"+
		"\u01a4\u01ab\u021f\u0227\u022f\u0238\u0242\u0246\u0249\u024f\u0255\u0261"+
		"\u026d\u0272\u027b\u0283\u028a\u028c\u028f\u0294\u0298\u029d\u02a0\u02a5"+
		"\u02aa\u02ad\u02b2\u02b6\u02bb\u02bd\u02c1\u02ca\u02d2\u02db\u02e2\u02eb"+
		"\u02f0\u02f3\u0309\u030b\u0314\u031b\u031e\u0325\u0329\u032f\u0337\u0342"+
		"\u034d\u0354\u035a\u0367\u036e\u0375\u0381\u0389\u038f\u0392\u039b\u039e"+
		"\u03a7\u03aa\u03b3\u03b6\u03bf\u03c2\u03c5\u03ca\u03cc\u03d8\u03df\u03e6"+
		"\u03e9\u03eb\u03f7\u03fb\u03ff\u0405\u0409\u0411\u0415\u0418\u041b\u041e"+
		"\u0422\u0426\u042b\u042f\u0432\u0435\u0438\u043c\u0441\u0445\u0448\u044b"+
		"\u044e\u0450\u0456\u045d\u0462\u0465\u0468\u046c\u0476\u047a\u047c\u047f"+
		"\u0483\u0489\u048d\u0498\u04a2\u04ae\u04bd\u04c2\u04c9\u04d9\u04de\u04eb"+
		"\u04f0\u04f8\u04fe\u0502\u0505\u050c\u0512\u051b\u0525\u0534\u0539\u053b"+
		"\u053f\u0548\u0555\u055a\u055e\u0566\u0569\u056d\u057b\u0588\u058d\u0591"+
		"\u0594\u0599\u05a2\u05a5\u05aa\u05b1\u05b4\u05b9\u05bf\u05c5\u05c9\u05cf"+
		"\u05d3\u05d6\u05db\u05de\u05e3\u05e7\u05ea\u05ed\u05f3\u05f8\u05fd\u060f"+
		"\u0611\u0614\u061f\u0628\u062f\u0637\u063e\u0642\u0645\u064d\u0655\u065b"+
		"\u0663\u066f\u0672\u0678\u067c\u067e\u0687\u0693\u0695\u069c\u06a3\u06a9"+
		"\u06af\u06b1\u06b8\u06c0\u06c6\u06cd\u06d6\u06dc\u06e4\u06eb\u06ee\u06f5"+
		"\u06f9\u06ff\u0703\u0707\u0709\u0710\u0719\u0720\u072a\u072f\u0733\u073c"+
		"\u0749\u074b\u0753\u0755\u0759\u0761\u076a\u0770\u0778\u077d\u0789\u078e"+
		"\u0791\u0797\u079b\u07a0\u07a5\u07aa\u07b0\u07c5\u07c7\u07d0\u07d4\u07dd"+
		"\u07e1\u07f3\u07f6\u07fe\u0807\u081e\u0829\u0830\u0833\u083c\u0840\u0844"+
		"\u0850\u0869\u0870\u0873\u0882\u0886\u0890\u0892\u089f\u08a1\u08ae\u08b2"+
		"\u08b9\u08be\u08c6\u08cd\u08de\u08e2\u08e8\u08ee\u08f7\u08fb\u08fd\u0904"+
		"\u090b\u090e\u0911\u0918\u091f\u0922\u0929\u092e\u0933\u0936\u0943\u0957"+
		"\u0961\u0964\u096d\u0970\u0972\u0975\u0978\u098a\u0993\u099a\u09a1\u09a8"+
		"\u09b2\u09b5\u09ba\u09c2\u09c8\u09cd\u09d2\u09d6\u09da\u09de\u09e2\u09e6"+
		"\u09ea\u09ee\u09f1\u09fa";
	public static final String _serializedATN = Utils.join(
		new String[] {
			_serializedATNSegment0,
			_serializedATNSegment1
		},
		""
	);
	public static final ATN _ATN =
		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
	static {
		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy