diff --git a/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/jdbc/JdbcDatabaseMetaData.java b/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/jdbc/JdbcDatabaseMetaData.java index 6b582a8f271..5487fb42ab4 100644 --- a/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/jdbc/JdbcDatabaseMetaData.java +++ b/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/jdbc/JdbcDatabaseMetaData.java @@ -728,16 +728,12 @@ class JdbcDatabaseMetaData implements DatabaseMetaData, JdbcWrapper { @Override public ResultSet getCatalogs() throws SQLException { - Object[][] data = { { defaultCatalog() } }; - return memorySet(con.cfg, columnInfo("CATALOGS", - "TABLE_CAT"), data); + return con.createStatement().executeQuery("SYS CATALOGS"); } @Override public ResultSet getTableTypes() throws SQLException { - Object[][] data = { { "TABLE" } }; - return memorySet(con.cfg, columnInfo("TABLE_TYPES", - "TABLE_TYPE"), data); + return con.createStatement().executeQuery("SYS TABLE TYPES"); } @Override diff --git a/plugin/sql/src/main/antlr/SqlBase.g4 b/plugin/sql/src/main/antlr/SqlBase.g4 index bce094c530e..26422339b7b 100644 --- a/plugin/sql/src/main/antlr/SqlBase.g4 +++ b/plugin/sql/src/main/antlr/SqlBase.g4 @@ -55,9 +55,11 @@ statement | (DESCRIBE | DESC) tableIdentifier #showColumns | SHOW FUNCTIONS (LIKE? pattern)? #showFunctions | SHOW SCHEMAS #showSchemas + | SYS CATALOGS #sysCatalogs | SYS TABLES (LIKE? pattern)? #sysTables | SYS COLUMNS (TABLES LIKE? indexPattern=pattern)? (LIKE? columnPattern=pattern)? #sysColumns - | SYS TYPES #sysTypes + | SYS TYPES #sysTypes + | SYS TABLE TYPES #sysTableTypes ; query @@ -256,7 +258,7 @@ number // http://developer.mimer.se/validator/sql-reserved-words.tml nonReserved : ANALYZE | ANALYZED - | COLUMNS + | CATALOGS | COLUMNS | DEBUG | EXECUTABLE | EXPLAIN | FORMAT | FUNCTIONS @@ -281,6 +283,7 @@ ASC: 'ASC'; BETWEEN: 'BETWEEN'; BY: 'BY'; CAST: 'CAST'; +CATALOGS: 'CATALOGS'; COLUMNS: 'COLUMNS'; DEBUG: 'DEBUG'; DESC: 'DESC'; @@ -326,6 +329,7 @@ SCHEMAS: 'SCHEMAS'; SELECT: 'SELECT'; SHOW: 'SHOW'; SYS: 'SYS'; +TABLE: 'TABLE'; TABLES: 'TABLES'; TEXT: 'TEXT'; TRUE: 'TRUE'; diff --git a/plugin/sql/src/main/antlr/SqlBase.tokens b/plugin/sql/src/main/antlr/SqlBase.tokens index 6ebe6e43c28..48529a61417 100644 --- a/plugin/sql/src/main/antlr/SqlBase.tokens +++ b/plugin/sql/src/main/antlr/SqlBase.tokens @@ -12,85 +12,87 @@ ASC=11 BETWEEN=12 BY=13 CAST=14 -COLUMNS=15 -DEBUG=16 -DESC=17 -DESCRIBE=18 -DISTINCT=19 -ESCAPE=20 -EXECUTABLE=21 -EXISTS=22 -EXPLAIN=23 -EXTRACT=24 -FALSE=25 -FORMAT=26 -FROM=27 -FULL=28 -FUNCTIONS=29 -GRAPHVIZ=30 -GROUP=31 -HAVING=32 -IN=33 -INNER=34 -IS=35 -JOIN=36 -LEFT=37 -LIKE=38 -LIMIT=39 -MAPPED=40 -MATCH=41 -NATURAL=42 -NOT=43 -NULL=44 -ON=45 -OPTIMIZED=46 -OR=47 -ORDER=48 -OUTER=49 -PARSED=50 -PHYSICAL=51 -PLAN=52 -RIGHT=53 -RLIKE=54 -QUERY=55 -SCHEMAS=56 -SELECT=57 -SHOW=58 -SYS=59 -TABLES=60 -TEXT=61 -TRUE=62 -TYPES=63 -USING=64 -VERIFY=65 -WHERE=66 -WITH=67 -EQ=68 -NEQ=69 -LT=70 -LTE=71 -GT=72 -GTE=73 -PLUS=74 -MINUS=75 -ASTERISK=76 -SLASH=77 -PERCENT=78 -CONCAT=79 -DOT=80 -STRING=81 -INTEGER_VALUE=82 -DECIMAL_VALUE=83 -IDENTIFIER=84 -DIGIT_IDENTIFIER=85 -TABLE_IDENTIFIER=86 -QUOTED_IDENTIFIER=87 -BACKQUOTED_IDENTIFIER=88 -SIMPLE_COMMENT=89 -BRACKETED_COMMENT=90 -WS=91 -UNRECOGNIZED=92 -DELIMITER=93 +CATALOGS=15 +COLUMNS=16 +DEBUG=17 +DESC=18 +DESCRIBE=19 +DISTINCT=20 +ESCAPE=21 +EXECUTABLE=22 +EXISTS=23 +EXPLAIN=24 +EXTRACT=25 +FALSE=26 +FORMAT=27 +FROM=28 +FULL=29 +FUNCTIONS=30 +GRAPHVIZ=31 +GROUP=32 +HAVING=33 +IN=34 +INNER=35 +IS=36 +JOIN=37 +LEFT=38 +LIKE=39 +LIMIT=40 +MAPPED=41 +MATCH=42 +NATURAL=43 +NOT=44 +NULL=45 +ON=46 +OPTIMIZED=47 +OR=48 +ORDER=49 +OUTER=50 +PARSED=51 +PHYSICAL=52 +PLAN=53 +RIGHT=54 +RLIKE=55 +QUERY=56 +SCHEMAS=57 +SELECT=58 +SHOW=59 +SYS=60 +TABLE=61 +TABLES=62 +TEXT=63 +TRUE=64 +TYPES=65 +USING=66 +VERIFY=67 +WHERE=68 +WITH=69 +EQ=70 +NEQ=71 +LT=72 +LTE=73 +GT=74 +GTE=75 +PLUS=76 +MINUS=77 +ASTERISK=78 +SLASH=79 +PERCENT=80 +CONCAT=81 +DOT=82 +STRING=83 +INTEGER_VALUE=84 +DECIMAL_VALUE=85 +IDENTIFIER=86 +DIGIT_IDENTIFIER=87 +TABLE_IDENTIFIER=88 +QUOTED_IDENTIFIER=89 +BACKQUOTED_IDENTIFIER=90 +SIMPLE_COMMENT=91 +BRACKETED_COMMENT=92 +WS=93 +UNRECOGNIZED=94 +DELIMITER=95 '('=1 ')'=2 ','=3 @@ -105,68 +107,70 @@ DELIMITER=93 'BETWEEN'=12 'BY'=13 'CAST'=14 -'COLUMNS'=15 -'DEBUG'=16 -'DESC'=17 -'DESCRIBE'=18 -'DISTINCT'=19 -'ESCAPE'=20 -'EXECUTABLE'=21 -'EXISTS'=22 -'EXPLAIN'=23 -'EXTRACT'=24 -'FALSE'=25 -'FORMAT'=26 -'FROM'=27 -'FULL'=28 -'FUNCTIONS'=29 -'GRAPHVIZ'=30 -'GROUP'=31 -'HAVING'=32 -'IN'=33 -'INNER'=34 -'IS'=35 -'JOIN'=36 -'LEFT'=37 -'LIKE'=38 -'LIMIT'=39 -'MAPPED'=40 -'MATCH'=41 -'NATURAL'=42 -'NOT'=43 -'NULL'=44 -'ON'=45 -'OPTIMIZED'=46 -'OR'=47 -'ORDER'=48 -'OUTER'=49 -'PARSED'=50 -'PHYSICAL'=51 -'PLAN'=52 -'RIGHT'=53 -'RLIKE'=54 -'QUERY'=55 -'SCHEMAS'=56 -'SELECT'=57 -'SHOW'=58 -'SYS'=59 -'TABLES'=60 -'TEXT'=61 -'TRUE'=62 -'TYPES'=63 -'USING'=64 -'VERIFY'=65 -'WHERE'=66 -'WITH'=67 -'='=68 -'<'=70 -'<='=71 -'>'=72 -'>='=73 -'+'=74 -'-'=75 -'*'=76 -'/'=77 -'%'=78 -'||'=79 -'.'=80 +'CATALOGS'=15 +'COLUMNS'=16 +'DEBUG'=17 +'DESC'=18 +'DESCRIBE'=19 +'DISTINCT'=20 +'ESCAPE'=21 +'EXECUTABLE'=22 +'EXISTS'=23 +'EXPLAIN'=24 +'EXTRACT'=25 +'FALSE'=26 +'FORMAT'=27 +'FROM'=28 +'FULL'=29 +'FUNCTIONS'=30 +'GRAPHVIZ'=31 +'GROUP'=32 +'HAVING'=33 +'IN'=34 +'INNER'=35 +'IS'=36 +'JOIN'=37 +'LEFT'=38 +'LIKE'=39 +'LIMIT'=40 +'MAPPED'=41 +'MATCH'=42 +'NATURAL'=43 +'NOT'=44 +'NULL'=45 +'ON'=46 +'OPTIMIZED'=47 +'OR'=48 +'ORDER'=49 +'OUTER'=50 +'PARSED'=51 +'PHYSICAL'=52 +'PLAN'=53 +'RIGHT'=54 +'RLIKE'=55 +'QUERY'=56 +'SCHEMAS'=57 +'SELECT'=58 +'SHOW'=59 +'SYS'=60 +'TABLE'=61 +'TABLES'=62 +'TEXT'=63 +'TRUE'=64 +'TYPES'=65 +'USING'=66 +'VERIFY'=67 +'WHERE'=68 +'WITH'=69 +'='=70 +'<'=72 +'<='=73 +'>'=74 +'>='=75 +'+'=76 +'-'=77 +'*'=78 +'/'=79 +'%'=80 +'||'=81 +'.'=82 diff --git a/plugin/sql/src/main/antlr/SqlBaseLexer.tokens b/plugin/sql/src/main/antlr/SqlBaseLexer.tokens index c05b8b7f045..bf4585d1f28 100644 --- a/plugin/sql/src/main/antlr/SqlBaseLexer.tokens +++ b/plugin/sql/src/main/antlr/SqlBaseLexer.tokens @@ -12,84 +12,86 @@ ASC=11 BETWEEN=12 BY=13 CAST=14 -COLUMNS=15 -DEBUG=16 -DESC=17 -DESCRIBE=18 -DISTINCT=19 -ESCAPE=20 -EXECUTABLE=21 -EXISTS=22 -EXPLAIN=23 -EXTRACT=24 -FALSE=25 -FORMAT=26 -FROM=27 -FULL=28 -FUNCTIONS=29 -GRAPHVIZ=30 -GROUP=31 -HAVING=32 -IN=33 -INNER=34 -IS=35 -JOIN=36 -LEFT=37 -LIKE=38 -LIMIT=39 -MAPPED=40 -MATCH=41 -NATURAL=42 -NOT=43 -NULL=44 -ON=45 -OPTIMIZED=46 -OR=47 -ORDER=48 -OUTER=49 -PARSED=50 -PHYSICAL=51 -PLAN=52 -RIGHT=53 -RLIKE=54 -QUERY=55 -SCHEMAS=56 -SELECT=57 -SHOW=58 -SYS=59 -TABLES=60 -TEXT=61 -TRUE=62 -TYPES=63 -USING=64 -VERIFY=65 -WHERE=66 -WITH=67 -EQ=68 -NEQ=69 -LT=70 -LTE=71 -GT=72 -GTE=73 -PLUS=74 -MINUS=75 -ASTERISK=76 -SLASH=77 -PERCENT=78 -CONCAT=79 -DOT=80 -STRING=81 -INTEGER_VALUE=82 -DECIMAL_VALUE=83 -IDENTIFIER=84 -DIGIT_IDENTIFIER=85 -TABLE_IDENTIFIER=86 -QUOTED_IDENTIFIER=87 -BACKQUOTED_IDENTIFIER=88 -SIMPLE_COMMENT=89 -BRACKETED_COMMENT=90 -WS=91 -UNRECOGNIZED=92 +CATALOGS=15 +COLUMNS=16 +DEBUG=17 +DESC=18 +DESCRIBE=19 +DISTINCT=20 +ESCAPE=21 +EXECUTABLE=22 +EXISTS=23 +EXPLAIN=24 +EXTRACT=25 +FALSE=26 +FORMAT=27 +FROM=28 +FULL=29 +FUNCTIONS=30 +GRAPHVIZ=31 +GROUP=32 +HAVING=33 +IN=34 +INNER=35 +IS=36 +JOIN=37 +LEFT=38 +LIKE=39 +LIMIT=40 +MAPPED=41 +MATCH=42 +NATURAL=43 +NOT=44 +NULL=45 +ON=46 +OPTIMIZED=47 +OR=48 +ORDER=49 +OUTER=50 +PARSED=51 +PHYSICAL=52 +PLAN=53 +RIGHT=54 +RLIKE=55 +QUERY=56 +SCHEMAS=57 +SELECT=58 +SHOW=59 +SYS=60 +TABLE=61 +TABLES=62 +TEXT=63 +TRUE=64 +TYPES=65 +USING=66 +VERIFY=67 +WHERE=68 +WITH=69 +EQ=70 +NEQ=71 +LT=72 +LTE=73 +GT=74 +GTE=75 +PLUS=76 +MINUS=77 +ASTERISK=78 +SLASH=79 +PERCENT=80 +CONCAT=81 +DOT=82 +STRING=83 +INTEGER_VALUE=84 +DECIMAL_VALUE=85 +IDENTIFIER=86 +DIGIT_IDENTIFIER=87 +TABLE_IDENTIFIER=88 +QUOTED_IDENTIFIER=89 +BACKQUOTED_IDENTIFIER=90 +SIMPLE_COMMENT=91 +BRACKETED_COMMENT=92 +WS=93 +UNRECOGNIZED=94 '('=1 ')'=2 ','=3 @@ -104,68 +106,70 @@ UNRECOGNIZED=92 'BETWEEN'=12 'BY'=13 'CAST'=14 -'COLUMNS'=15 -'DEBUG'=16 -'DESC'=17 -'DESCRIBE'=18 -'DISTINCT'=19 -'ESCAPE'=20 -'EXECUTABLE'=21 -'EXISTS'=22 -'EXPLAIN'=23 -'EXTRACT'=24 -'FALSE'=25 -'FORMAT'=26 -'FROM'=27 -'FULL'=28 -'FUNCTIONS'=29 -'GRAPHVIZ'=30 -'GROUP'=31 -'HAVING'=32 -'IN'=33 -'INNER'=34 -'IS'=35 -'JOIN'=36 -'LEFT'=37 -'LIKE'=38 -'LIMIT'=39 -'MAPPED'=40 -'MATCH'=41 -'NATURAL'=42 -'NOT'=43 -'NULL'=44 -'ON'=45 -'OPTIMIZED'=46 -'OR'=47 -'ORDER'=48 -'OUTER'=49 -'PARSED'=50 -'PHYSICAL'=51 -'PLAN'=52 -'RIGHT'=53 -'RLIKE'=54 -'QUERY'=55 -'SCHEMAS'=56 -'SELECT'=57 -'SHOW'=58 -'SYS'=59 -'TABLES'=60 -'TEXT'=61 -'TRUE'=62 -'TYPES'=63 -'USING'=64 -'VERIFY'=65 -'WHERE'=66 -'WITH'=67 -'='=68 -'<'=70 -'<='=71 -'>'=72 -'>='=73 -'+'=74 -'-'=75 -'*'=76 -'/'=77 -'%'=78 -'||'=79 -'.'=80 +'CATALOGS'=15 +'COLUMNS'=16 +'DEBUG'=17 +'DESC'=18 +'DESCRIBE'=19 +'DISTINCT'=20 +'ESCAPE'=21 +'EXECUTABLE'=22 +'EXISTS'=23 +'EXPLAIN'=24 +'EXTRACT'=25 +'FALSE'=26 +'FORMAT'=27 +'FROM'=28 +'FULL'=29 +'FUNCTIONS'=30 +'GRAPHVIZ'=31 +'GROUP'=32 +'HAVING'=33 +'IN'=34 +'INNER'=35 +'IS'=36 +'JOIN'=37 +'LEFT'=38 +'LIKE'=39 +'LIMIT'=40 +'MAPPED'=41 +'MATCH'=42 +'NATURAL'=43 +'NOT'=44 +'NULL'=45 +'ON'=46 +'OPTIMIZED'=47 +'OR'=48 +'ORDER'=49 +'OUTER'=50 +'PARSED'=51 +'PHYSICAL'=52 +'PLAN'=53 +'RIGHT'=54 +'RLIKE'=55 +'QUERY'=56 +'SCHEMAS'=57 +'SELECT'=58 +'SHOW'=59 +'SYS'=60 +'TABLE'=61 +'TABLES'=62 +'TEXT'=63 +'TRUE'=64 +'TYPES'=65 +'USING'=66 +'VERIFY'=67 +'WHERE'=68 +'WITH'=69 +'='=70 +'<'=72 +'<='=73 +'>'=74 +'>='=75 +'+'=76 +'-'=77 +'*'=78 +'/'=79 +'%'=80 +'||'=81 +'.'=82 diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/CommandBuilder.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/CommandBuilder.java index b7eec686eff..a0eb412ca49 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/CommandBuilder.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/CommandBuilder.java @@ -12,7 +12,9 @@ import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ShowColumnsContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ShowFunctionsContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ShowSchemasContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ShowTablesContext; +import org.elasticsearch.xpack.sql.parser.SqlBaseParser.SysCatalogsContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.SysColumnsContext; +import org.elasticsearch.xpack.sql.parser.SqlBaseParser.SysTableTypesContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.SysTablesContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.SysTypesContext; import org.elasticsearch.xpack.sql.plan.TableIdentifier; @@ -23,7 +25,9 @@ import org.elasticsearch.xpack.sql.plan.logical.command.ShowColumns; import org.elasticsearch.xpack.sql.plan.logical.command.ShowFunctions; import org.elasticsearch.xpack.sql.plan.logical.command.ShowSchemas; import org.elasticsearch.xpack.sql.plan.logical.command.ShowTables; +import org.elasticsearch.xpack.sql.plan.logical.command.sys.SysCatalogs; import org.elasticsearch.xpack.sql.plan.logical.command.sys.SysColumns; +import org.elasticsearch.xpack.sql.plan.logical.command.sys.SysTableTypes; import org.elasticsearch.xpack.sql.plan.logical.command.sys.SysTables; import org.elasticsearch.xpack.sql.plan.logical.command.sys.SysTypes; import org.elasticsearch.xpack.sql.tree.Location; @@ -127,19 +131,28 @@ abstract class CommandBuilder extends LogicalPlanBuilder { return new ShowColumns(source(ctx), identifier.index()); } + @Override + public Object visitSysCatalogs(SysCatalogsContext ctx) { + return new SysCatalogs(source(ctx)); + } @Override public SysTables visitSysTables(SysTablesContext ctx) { return new SysTables(source(ctx), visitPattern(ctx.pattern())); } + @Override + public Object visitSysColumns(SysColumnsContext ctx) { + return new SysColumns(source(ctx), visitPattern(ctx.indexPattern), visitPattern(ctx.columnPattern)); + } + @Override public SysTypes visitSysTypes(SysTypesContext ctx) { return new SysTypes(source(ctx)); } @Override - public Object visitSysColumns(SysColumnsContext ctx) { - return new SysColumns(source(ctx), visitPattern(ctx.indexPattern), visitPattern(ctx.columnPattern)); + public Object visitSysTableTypes(SysTableTypesContext ctx) { + return new SysTableTypes(source(ctx)); } } \ No newline at end of file diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java index 26a32501c96..4733d68970c 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java @@ -124,6 +124,18 @@ class SqlBaseBaseListener implements SqlBaseListener { *

The default implementation does nothing.

*/ @Override public void exitShowSchemas(SqlBaseParser.ShowSchemasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSysCatalogs(SqlBaseParser.SysCatalogsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSysCatalogs(SqlBaseParser.SysCatalogsContext ctx) { } /** * {@inheritDoc} * @@ -160,6 +172,18 @@ class SqlBaseBaseListener implements SqlBaseListener { *

The default implementation does nothing.

*/ @Override public void exitSysTypes(SqlBaseParser.SysTypesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSysTableTypes(SqlBaseParser.SysTableTypesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSysTableTypes(SqlBaseParser.SysTableTypesContext ctx) { } /** * {@inheritDoc} * diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java index 01c6f054876..47d989deea0 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java @@ -79,6 +79,13 @@ class SqlBaseBaseVisitor extends AbstractParseTreeVisitor implements SqlBa * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitShowSchemas(SqlBaseParser.ShowSchemasContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSysCatalogs(SqlBaseParser.SysCatalogsContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -100,6 +107,13 @@ class SqlBaseBaseVisitor extends AbstractParseTreeVisitor implements SqlBa * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitSysTypes(SqlBaseParser.SysTypesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSysTableTypes(SqlBaseParser.SysTableTypesContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java index 1811f3588b6..890e97029f7 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java @@ -23,67 +23,67 @@ class SqlBaseLexer extends Lexer { new PredictionContextCache(); public static final int T__0=1, T__1=2, T__2=3, T__3=4, ALL=5, ANALYZE=6, ANALYZED=7, AND=8, ANY=9, - AS=10, ASC=11, BETWEEN=12, BY=13, CAST=14, COLUMNS=15, DEBUG=16, DESC=17, - DESCRIBE=18, DISTINCT=19, ESCAPE=20, EXECUTABLE=21, EXISTS=22, EXPLAIN=23, - EXTRACT=24, FALSE=25, FORMAT=26, FROM=27, FULL=28, FUNCTIONS=29, GRAPHVIZ=30, - GROUP=31, HAVING=32, IN=33, INNER=34, IS=35, JOIN=36, LEFT=37, LIKE=38, - LIMIT=39, MAPPED=40, MATCH=41, NATURAL=42, NOT=43, NULL=44, ON=45, OPTIMIZED=46, - OR=47, ORDER=48, OUTER=49, PARSED=50, PHYSICAL=51, PLAN=52, RIGHT=53, - RLIKE=54, QUERY=55, SCHEMAS=56, SELECT=57, SHOW=58, SYS=59, TABLES=60, - TEXT=61, TRUE=62, TYPES=63, USING=64, VERIFY=65, WHERE=66, WITH=67, EQ=68, - NEQ=69, LT=70, LTE=71, GT=72, GTE=73, PLUS=74, MINUS=75, ASTERISK=76, - SLASH=77, PERCENT=78, CONCAT=79, DOT=80, STRING=81, INTEGER_VALUE=82, - DECIMAL_VALUE=83, IDENTIFIER=84, DIGIT_IDENTIFIER=85, TABLE_IDENTIFIER=86, - QUOTED_IDENTIFIER=87, BACKQUOTED_IDENTIFIER=88, SIMPLE_COMMENT=89, BRACKETED_COMMENT=90, - WS=91, UNRECOGNIZED=92; + AS=10, ASC=11, BETWEEN=12, BY=13, CAST=14, CATALOGS=15, COLUMNS=16, DEBUG=17, + DESC=18, DESCRIBE=19, DISTINCT=20, ESCAPE=21, EXECUTABLE=22, EXISTS=23, + EXPLAIN=24, EXTRACT=25, FALSE=26, FORMAT=27, FROM=28, FULL=29, FUNCTIONS=30, + GRAPHVIZ=31, GROUP=32, HAVING=33, IN=34, INNER=35, IS=36, JOIN=37, LEFT=38, + LIKE=39, LIMIT=40, MAPPED=41, MATCH=42, NATURAL=43, NOT=44, NULL=45, ON=46, + OPTIMIZED=47, OR=48, ORDER=49, OUTER=50, PARSED=51, PHYSICAL=52, PLAN=53, + RIGHT=54, RLIKE=55, QUERY=56, SCHEMAS=57, SELECT=58, SHOW=59, SYS=60, + TABLE=61, TABLES=62, TEXT=63, TRUE=64, TYPES=65, USING=66, VERIFY=67, + WHERE=68, WITH=69, EQ=70, NEQ=71, LT=72, LTE=73, GT=74, GTE=75, PLUS=76, + MINUS=77, ASTERISK=78, SLASH=79, PERCENT=80, CONCAT=81, DOT=82, STRING=83, + INTEGER_VALUE=84, DECIMAL_VALUE=85, IDENTIFIER=86, DIGIT_IDENTIFIER=87, + TABLE_IDENTIFIER=88, QUOTED_IDENTIFIER=89, BACKQUOTED_IDENTIFIER=90, SIMPLE_COMMENT=91, + BRACKETED_COMMENT=92, WS=93, UNRECOGNIZED=94; public static String[] modeNames = { "DEFAULT_MODE" }; public static final String[] ruleNames = { "T__0", "T__1", "T__2", "T__3", "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", - "AS", "ASC", "BETWEEN", "BY", "CAST", "COLUMNS", "DEBUG", "DESC", "DESCRIBE", - "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", "EXTRACT", "FALSE", - "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", "GROUP", "HAVING", - "IN", "INNER", "IS", "JOIN", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", - "NATURAL", "NOT", "NULL", "ON", "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", - "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", "SCHEMAS", "SELECT", "SHOW", - "SYS", "TABLES", "TEXT", "TRUE", "TYPES", "USING", "VERIFY", "WHERE", - "WITH", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", - "SLASH", "PERCENT", "CONCAT", "DOT", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", - "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "EXPONENT", "DIGIT", "LETTER", "SIMPLE_COMMENT", - "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" + "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOGS", "COLUMNS", "DEBUG", + "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", + "EXTRACT", "FALSE", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", + "GROUP", "HAVING", "IN", "INNER", "IS", "JOIN", "LEFT", "LIKE", "LIMIT", + "MAPPED", "MATCH", "NATURAL", "NOT", "NULL", "ON", "OPTIMIZED", "OR", + "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", + "SCHEMAS", "SELECT", "SHOW", "SYS", "TABLE", "TABLES", "TEXT", "TRUE", + "TYPES", "USING", "VERIFY", "WHERE", "WITH", "EQ", "NEQ", "LT", "LTE", + "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", "CONCAT", + "DOT", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", + "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", "EXPONENT", + "DIGIT", "LETTER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" }; private static final String[] _LITERAL_NAMES = { null, "'('", "')'", "','", "':'", "'ALL'", "'ANALYZE'", "'ANALYZED'", - "'AND'", "'ANY'", "'AS'", "'ASC'", "'BETWEEN'", "'BY'", "'CAST'", "'COLUMNS'", - "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", "'EXECUTABLE'", - "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FORMAT'", "'FROM'", - "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", "'HAVING'", "'IN'", - "'INNER'", "'IS'", "'JOIN'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", + "'AND'", "'ANY'", "'AS'", "'ASC'", "'BETWEEN'", "'BY'", "'CAST'", "'CATALOGS'", + "'COLUMNS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", + "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FORMAT'", + "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", "'HAVING'", + "'IN'", "'INNER'", "'IS'", "'JOIN'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", "'MATCH'", "'NATURAL'", "'NOT'", "'NULL'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", "'OUTER'", "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", - "'QUERY'", "'SCHEMAS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLES'", "'TEXT'", - "'TRUE'", "'TYPES'", "'USING'", "'VERIFY'", "'WHERE'", "'WITH'", "'='", - null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", - "'||'", "'.'" + "'QUERY'", "'SCHEMAS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", "'TABLES'", + "'TEXT'", "'TRUE'", "'TYPES'", "'USING'", "'VERIFY'", "'WHERE'", "'WITH'", + "'='", null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", + "'%'", "'||'", "'.'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", - "AS", "ASC", "BETWEEN", "BY", "CAST", "COLUMNS", "DEBUG", "DESC", "DESCRIBE", - "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", "EXTRACT", "FALSE", - "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", "GROUP", "HAVING", - "IN", "INNER", "IS", "JOIN", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", - "NATURAL", "NOT", "NULL", "ON", "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", - "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", "SCHEMAS", "SELECT", "SHOW", - "SYS", "TABLES", "TEXT", "TRUE", "TYPES", "USING", "VERIFY", "WHERE", - "WITH", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", - "SLASH", "PERCENT", "CONCAT", "DOT", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", - "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", - "UNRECOGNIZED" + "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOGS", "COLUMNS", "DEBUG", + "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", + "EXTRACT", "FALSE", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", + "GROUP", "HAVING", "IN", "INNER", "IS", "JOIN", "LEFT", "LIKE", "LIMIT", + "MAPPED", "MATCH", "NATURAL", "NOT", "NULL", "ON", "OPTIMIZED", "OR", + "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", + "SCHEMAS", "SELECT", "SHOW", "SYS", "TABLE", "TABLES", "TEXT", "TRUE", + "TYPES", "USING", "VERIFY", "WHERE", "WITH", "EQ", "NEQ", "LT", "LTE", + "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", "CONCAT", + "DOT", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", + "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", + "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -140,7 +140,7 @@ class SqlBaseLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2^\u0313\b\1\4\2\t"+ + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2`\u0326\b\1\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"+ @@ -151,263 +151,269 @@ class SqlBaseLexer extends Lexer { "\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`\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3"+ - "\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\n"+ - "\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3"+ - "\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20"+ - "\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22"+ - "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24"+ - "\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26"+ - "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27"+ - "\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31"+ - "\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33"+ - "\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36"+ - "\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37"+ - "\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3#"+ - "\3#\3#\3#\3#\3#\3$\3$\3$\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'"+ - "\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3+\3+\3"+ - "+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3-\3-\3-\3-\3-\3.\3.\3.\3/\3/\3/\3/\3/\3"+ - "/\3/\3/\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3"+ - "\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3"+ - "\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3"+ - "\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\39\39\3"+ - "9\39\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3=\3"+ - "=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3A\3"+ - "A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3"+ - "E\3E\3F\3F\3F\3F\3F\3F\3F\5F\u0255\nF\3G\3G\3H\3H\3H\3I\3I\3J\3J\3J\3"+ - "K\3K\3L\3L\3M\3M\3N\3N\3O\3O\3P\3P\3P\3Q\3Q\3R\3R\3R\3R\7R\u0274\nR\f"+ - "R\16R\u0277\13R\3R\3R\3S\6S\u027c\nS\rS\16S\u027d\3T\6T\u0281\nT\rT\16"+ - "T\u0282\3T\3T\7T\u0287\nT\fT\16T\u028a\13T\3T\3T\6T\u028e\nT\rT\16T\u028f"+ - "\3T\6T\u0293\nT\rT\16T\u0294\3T\3T\7T\u0299\nT\fT\16T\u029c\13T\5T\u029e"+ - "\nT\3T\3T\3T\3T\6T\u02a4\nT\rT\16T\u02a5\3T\3T\5T\u02aa\nT\3U\3U\5U\u02ae"+ - "\nU\3U\3U\3U\7U\u02b3\nU\fU\16U\u02b6\13U\3V\3V\3V\3V\6V\u02bc\nV\rV\16"+ - "V\u02bd\3W\3W\3W\3W\6W\u02c4\nW\rW\16W\u02c5\3X\3X\3X\3X\7X\u02cc\nX\f"+ - "X\16X\u02cf\13X\3X\3X\3Y\3Y\3Y\3Y\7Y\u02d7\nY\fY\16Y\u02da\13Y\3Y\3Y\3"+ - "Z\3Z\5Z\u02e0\nZ\3Z\6Z\u02e3\nZ\rZ\16Z\u02e4\3[\3[\3\\\3\\\3]\3]\3]\3"+ - "]\7]\u02ef\n]\f]\16]\u02f2\13]\3]\5]\u02f5\n]\3]\5]\u02f8\n]\3]\3]\3^"+ - "\3^\3^\3^\3^\7^\u0301\n^\f^\16^\u0304\13^\3^\3^\3^\3^\3^\3_\6_\u030c\n"+ - "_\r_\16_\u030d\3_\3_\3`\3`\3\u0302\2a\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21"+ - "\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30"+ - "/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.["+ - "/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083"+ + "`\t`\4a\ta\4b\tb\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\7\3"+ + "\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t"+ + "\3\t\3\t\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3"+ + "\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3"+ + "\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3"+ + "\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3"+ + "\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3"+ + "\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3"+ + "\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3"+ + "\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3"+ + "\32\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3"+ + "\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3"+ + "\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3"+ + "!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3$\3$\3$\3$\3$\3$\3%\3%\3%\3"+ + "&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3*"+ + "\3*\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,\3-\3-\3-"+ + "\3-\3.\3.\3.\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3"+ + "\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3"+ + "\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3"+ + "\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3"+ + "\67\3\67\38\38\38\38\38\38\39\39\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3"+ + ";\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3?\3"+ + "?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3"+ + "C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3"+ + "G\3G\3H\3H\3H\3H\3H\3H\3H\5H\u0268\nH\3I\3I\3J\3J\3J\3K\3K\3L\3L\3L\3"+ + "M\3M\3N\3N\3O\3O\3P\3P\3Q\3Q\3R\3R\3R\3S\3S\3T\3T\3T\3T\7T\u0287\nT\f"+ + "T\16T\u028a\13T\3T\3T\3U\6U\u028f\nU\rU\16U\u0290\3V\6V\u0294\nV\rV\16"+ + "V\u0295\3V\3V\7V\u029a\nV\fV\16V\u029d\13V\3V\3V\6V\u02a1\nV\rV\16V\u02a2"+ + "\3V\6V\u02a6\nV\rV\16V\u02a7\3V\3V\7V\u02ac\nV\fV\16V\u02af\13V\5V\u02b1"+ + "\nV\3V\3V\3V\3V\6V\u02b7\nV\rV\16V\u02b8\3V\3V\5V\u02bd\nV\3W\3W\5W\u02c1"+ + "\nW\3W\3W\3W\7W\u02c6\nW\fW\16W\u02c9\13W\3X\3X\3X\3X\6X\u02cf\nX\rX\16"+ + "X\u02d0\3Y\3Y\3Y\3Y\6Y\u02d7\nY\rY\16Y\u02d8\3Z\3Z\3Z\3Z\7Z\u02df\nZ\f"+ + "Z\16Z\u02e2\13Z\3Z\3Z\3[\3[\3[\3[\7[\u02ea\n[\f[\16[\u02ed\13[\3[\3[\3"+ + "\\\3\\\5\\\u02f3\n\\\3\\\6\\\u02f6\n\\\r\\\16\\\u02f7\3]\3]\3^\3^\3_\3"+ + "_\3_\3_\7_\u0302\n_\f_\16_\u0305\13_\3_\5_\u0308\n_\3_\5_\u030b\n_\3_"+ + "\3_\3`\3`\3`\3`\3`\7`\u0314\n`\f`\16`\u0317\13`\3`\3`\3`\3`\3`\3a\6a\u031f"+ + "\na\ra\16a\u0320\3a\3a\3b\3b\3\u0315\2c\3\3\5\4\7\5\t\6\13\7\r\b\17\t"+ + "\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27"+ + "-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W"+ + "-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083"+ "C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097"+ "M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00ab"+ - "W\u00adX\u00afY\u00b1Z\u00b3\2\u00b5\2\u00b7\2\u00b9[\u00bb\\\u00bd]\u00bf"+ - "^\3\2\f\3\2))\4\2BBaa\5\2<\3\2\2\2\u0175\u0176\7I\2\2\u0176\u0177\7T"+ - "\2\2\u0177\u0178\7Q\2\2\u0178\u0179\7W\2\2\u0179\u017a\7R\2\2\u017a@\3"+ - "\2\2\2\u017b\u017c\7J\2\2\u017c\u017d\7C\2\2\u017d\u017e\7X\2\2\u017e"+ - "\u017f\7K\2\2\u017f\u0180\7P\2\2\u0180\u0181\7I\2\2\u0181B\3\2\2\2\u0182"+ - "\u0183\7K\2\2\u0183\u0184\7P\2\2\u0184D\3\2\2\2\u0185\u0186\7K\2\2\u0186"+ - "\u0187\7P\2\2\u0187\u0188\7P\2\2\u0188\u0189\7G\2\2\u0189\u018a\7T\2\2"+ - "\u018aF\3\2\2\2\u018b\u018c\7K\2\2\u018c\u018d\7U\2\2\u018dH\3\2\2\2\u018e"+ - "\u018f\7L\2\2\u018f\u0190\7Q\2\2\u0190\u0191\7K\2\2\u0191\u0192\7P\2\2"+ - "\u0192J\3\2\2\2\u0193\u0194\7N\2\2\u0194\u0195\7G\2\2\u0195\u0196\7H\2"+ - "\2\u0196\u0197\7V\2\2\u0197L\3\2\2\2\u0198\u0199\7N\2\2\u0199\u019a\7"+ - "K\2\2\u019a\u019b\7M\2\2\u019b\u019c\7G\2\2\u019cN\3\2\2\2\u019d\u019e"+ - "\7N\2\2\u019e\u019f\7K\2\2\u019f\u01a0\7O\2\2\u01a0\u01a1\7K\2\2\u01a1"+ - "\u01a2\7V\2\2\u01a2P\3\2\2\2\u01a3\u01a4\7O\2\2\u01a4\u01a5\7C\2\2\u01a5"+ - "\u01a6\7R\2\2\u01a6\u01a7\7R\2\2\u01a7\u01a8\7G\2\2\u01a8\u01a9\7F\2\2"+ - "\u01a9R\3\2\2\2\u01aa\u01ab\7O\2\2\u01ab\u01ac\7C\2\2\u01ac\u01ad\7V\2"+ - "\2\u01ad\u01ae\7E\2\2\u01ae\u01af\7J\2\2\u01afT\3\2\2\2\u01b0\u01b1\7"+ - "P\2\2\u01b1\u01b2\7C\2\2\u01b2\u01b3\7V\2\2\u01b3\u01b4\7W\2\2\u01b4\u01b5"+ - "\7T\2\2\u01b5\u01b6\7C\2\2\u01b6\u01b7\7N\2\2\u01b7V\3\2\2\2\u01b8\u01b9"+ - "\7P\2\2\u01b9\u01ba\7Q\2\2\u01ba\u01bb\7V\2\2\u01bbX\3\2\2\2\u01bc\u01bd"+ - "\7P\2\2\u01bd\u01be\7W\2\2\u01be\u01bf\7N\2\2\u01bf\u01c0\7N\2\2\u01c0"+ - "Z\3\2\2\2\u01c1\u01c2\7Q\2\2\u01c2\u01c3\7P\2\2\u01c3\\\3\2\2\2\u01c4"+ - "\u01c5\7Q\2\2\u01c5\u01c6\7R\2\2\u01c6\u01c7\7V\2\2\u01c7\u01c8\7K\2\2"+ - "\u01c8\u01c9\7O\2\2\u01c9\u01ca\7K\2\2\u01ca\u01cb\7\\\2\2\u01cb\u01cc"+ - "\7G\2\2\u01cc\u01cd\7F\2\2\u01cd^\3\2\2\2\u01ce\u01cf\7Q\2\2\u01cf\u01d0"+ - "\7T\2\2\u01d0`\3\2\2\2\u01d1\u01d2\7Q\2\2\u01d2\u01d3\7T\2\2\u01d3\u01d4"+ - "\7F\2\2\u01d4\u01d5\7G\2\2\u01d5\u01d6\7T\2\2\u01d6b\3\2\2\2\u01d7\u01d8"+ - "\7Q\2\2\u01d8\u01d9\7W\2\2\u01d9\u01da\7V\2\2\u01da\u01db\7G\2\2\u01db"+ - "\u01dc\7T\2\2\u01dcd\3\2\2\2\u01dd\u01de\7R\2\2\u01de\u01df\7C\2\2\u01df"+ - "\u01e0\7T\2\2\u01e0\u01e1\7U\2\2\u01e1\u01e2\7G\2\2\u01e2\u01e3\7F\2\2"+ - "\u01e3f\3\2\2\2\u01e4\u01e5\7R\2\2\u01e5\u01e6\7J\2\2\u01e6\u01e7\7[\2"+ - "\2\u01e7\u01e8\7U\2\2\u01e8\u01e9\7K\2\2\u01e9\u01ea\7E\2\2\u01ea\u01eb"+ - "\7C\2\2\u01eb\u01ec\7N\2\2\u01ech\3\2\2\2\u01ed\u01ee\7R\2\2\u01ee\u01ef"+ - "\7N\2\2\u01ef\u01f0\7C\2\2\u01f0\u01f1\7P\2\2\u01f1j\3\2\2\2\u01f2\u01f3"+ - "\7T\2\2\u01f3\u01f4\7K\2\2\u01f4\u01f5\7I\2\2\u01f5\u01f6\7J\2\2\u01f6"+ - "\u01f7\7V\2\2\u01f7l\3\2\2\2\u01f8\u01f9\7T\2\2\u01f9\u01fa\7N\2\2\u01fa"+ - "\u01fb\7K\2\2\u01fb\u01fc\7M\2\2\u01fc\u01fd\7G\2\2\u01fdn\3\2\2\2\u01fe"+ - "\u01ff\7S\2\2\u01ff\u0200\7W\2\2\u0200\u0201\7G\2\2\u0201\u0202\7T\2\2"+ - "\u0202\u0203\7[\2\2\u0203p\3\2\2\2\u0204\u0205\7U\2\2\u0205\u0206\7E\2"+ - "\2\u0206\u0207\7J\2\2\u0207\u0208\7G\2\2\u0208\u0209\7O\2\2\u0209\u020a"+ - "\7C\2\2\u020a\u020b\7U\2\2\u020br\3\2\2\2\u020c\u020d\7U\2\2\u020d\u020e"+ - "\7G\2\2\u020e\u020f\7N\2\2\u020f\u0210\7G\2\2\u0210\u0211\7E\2\2\u0211"+ - "\u0212\7V\2\2\u0212t\3\2\2\2\u0213\u0214\7U\2\2\u0214\u0215\7J\2\2\u0215"+ - "\u0216\7Q\2\2\u0216\u0217\7Y\2\2\u0217v\3\2\2\2\u0218\u0219\7U\2\2\u0219"+ - "\u021a\7[\2\2\u021a\u021b\7U\2\2\u021bx\3\2\2\2\u021c\u021d\7V\2\2\u021d"+ - "\u021e\7C\2\2\u021e\u021f\7D\2\2\u021f\u0220\7N\2\2\u0220\u0221\7G\2\2"+ - "\u0221\u0222\7U\2\2\u0222z\3\2\2\2\u0223\u0224\7V\2\2\u0224\u0225\7G\2"+ - "\2\u0225\u0226\7Z\2\2\u0226\u0227\7V\2\2\u0227|\3\2\2\2\u0228\u0229\7"+ - "V\2\2\u0229\u022a\7T\2\2\u022a\u022b\7W\2\2\u022b\u022c\7G\2\2\u022c~"+ - "\3\2\2\2\u022d\u022e\7V\2\2\u022e\u022f\7[\2\2\u022f\u0230\7R\2\2\u0230"+ - "\u0231\7G\2\2\u0231\u0232\7U\2\2\u0232\u0080\3\2\2\2\u0233\u0234\7W\2"+ - "\2\u0234\u0235\7U\2\2\u0235\u0236\7K\2\2\u0236\u0237\7P\2\2\u0237\u0238"+ - "\7I\2\2\u0238\u0082\3\2\2\2\u0239\u023a\7X\2\2\u023a\u023b\7G\2\2\u023b"+ - "\u023c\7T\2\2\u023c\u023d\7K\2\2\u023d\u023e\7H\2\2\u023e\u023f\7[\2\2"+ - "\u023f\u0084\3\2\2\2\u0240\u0241\7Y\2\2\u0241\u0242\7J\2\2\u0242\u0243"+ - "\7G\2\2\u0243\u0244\7T\2\2\u0244\u0245\7G\2\2\u0245\u0086\3\2\2\2\u0246"+ - "\u0247\7Y\2\2\u0247\u0248\7K\2\2\u0248\u0249\7V\2\2\u0249\u024a\7J\2\2"+ - "\u024a\u0088\3\2\2\2\u024b\u024c\7?\2\2\u024c\u008a\3\2\2\2\u024d\u024e"+ - "\7>\2\2\u024e\u0255\7@\2\2\u024f\u0250\7#\2\2\u0250\u0255\7?\2\2\u0251"+ - "\u0252\7>\2\2\u0252\u0253\7?\2\2\u0253\u0255\7@\2\2\u0254\u024d\3\2\2"+ - "\2\u0254\u024f\3\2\2\2\u0254\u0251\3\2\2\2\u0255\u008c\3\2\2\2\u0256\u0257"+ - "\7>\2\2\u0257\u008e\3\2\2\2\u0258\u0259\7>\2\2\u0259\u025a\7?\2\2\u025a"+ - "\u0090\3\2\2\2\u025b\u025c\7@\2\2\u025c\u0092\3\2\2\2\u025d\u025e\7@\2"+ - "\2\u025e\u025f\7?\2\2\u025f\u0094\3\2\2\2\u0260\u0261\7-\2\2\u0261\u0096"+ - "\3\2\2\2\u0262\u0263\7/\2\2\u0263\u0098\3\2\2\2\u0264\u0265\7,\2\2\u0265"+ - "\u009a\3\2\2\2\u0266\u0267\7\61\2\2\u0267\u009c\3\2\2\2\u0268\u0269\7"+ - "\'\2\2\u0269\u009e\3\2\2\2\u026a\u026b\7~\2\2\u026b\u026c\7~\2\2\u026c"+ - "\u00a0\3\2\2\2\u026d\u026e\7\60\2\2\u026e\u00a2\3\2\2\2\u026f\u0275\7"+ - ")\2\2\u0270\u0274\n\2\2\2\u0271\u0272\7)\2\2\u0272\u0274\7)\2\2\u0273"+ - "\u0270\3\2\2\2\u0273\u0271\3\2\2\2\u0274\u0277\3\2\2\2\u0275\u0273\3\2"+ - "\2\2\u0275\u0276\3\2\2\2\u0276\u0278\3\2\2\2\u0277\u0275\3\2\2\2\u0278"+ - "\u0279\7)\2\2\u0279\u00a4\3\2\2\2\u027a\u027c\5\u00b5[\2\u027b\u027a\3"+ - "\2\2\2\u027c\u027d\3\2\2\2\u027d\u027b\3\2\2\2\u027d\u027e\3\2\2\2\u027e"+ - "\u00a6\3\2\2\2\u027f\u0281\5\u00b5[\2\u0280\u027f\3\2\2\2\u0281\u0282"+ - "\3\2\2\2\u0282\u0280\3\2\2\2\u0282\u0283\3\2\2\2\u0283\u0284\3\2\2\2\u0284"+ - "\u0288\5\u00a1Q\2\u0285\u0287\5\u00b5[\2\u0286\u0285\3\2\2\2\u0287\u028a"+ - "\3\2\2\2\u0288\u0286\3\2\2\2\u0288\u0289\3\2\2\2\u0289\u02aa\3\2\2\2\u028a"+ - "\u0288\3\2\2\2\u028b\u028d\5\u00a1Q\2\u028c\u028e\5\u00b5[\2\u028d\u028c"+ - "\3\2\2\2\u028e\u028f\3\2\2\2\u028f\u028d\3\2\2\2\u028f\u0290\3\2\2\2\u0290"+ - "\u02aa\3\2\2\2\u0291\u0293\5\u00b5[\2\u0292\u0291\3\2\2\2\u0293\u0294"+ - "\3\2\2\2\u0294\u0292\3\2\2\2\u0294\u0295\3\2\2\2\u0295\u029d\3\2\2\2\u0296"+ - "\u029a\5\u00a1Q\2\u0297\u0299\5\u00b5[\2\u0298\u0297\3\2\2\2\u0299\u029c"+ - "\3\2\2\2\u029a\u0298\3\2\2\2\u029a\u029b\3\2\2\2\u029b\u029e\3\2\2\2\u029c"+ - "\u029a\3\2\2\2\u029d\u0296\3\2\2\2\u029d\u029e\3\2\2\2\u029e\u029f\3\2"+ - "\2\2\u029f\u02a0\5\u00b3Z\2\u02a0\u02aa\3\2\2\2\u02a1\u02a3\5\u00a1Q\2"+ - "\u02a2\u02a4\5\u00b5[\2\u02a3\u02a2\3\2\2\2\u02a4\u02a5\3\2\2\2\u02a5"+ - "\u02a3\3\2\2\2\u02a5\u02a6\3\2\2\2\u02a6\u02a7\3\2\2\2\u02a7\u02a8\5\u00b3"+ - "Z\2\u02a8\u02aa\3\2\2\2\u02a9\u0280\3\2\2\2\u02a9\u028b\3\2\2\2\u02a9"+ - "\u0292\3\2\2\2\u02a9\u02a1\3\2\2\2\u02aa\u00a8\3\2\2\2\u02ab\u02ae\5\u00b7"+ - "\\\2\u02ac\u02ae\7a\2\2\u02ad\u02ab\3\2\2\2\u02ad\u02ac\3\2\2\2\u02ae"+ - "\u02b4\3\2\2\2\u02af\u02b3\5\u00b7\\\2\u02b0\u02b3\5\u00b5[\2\u02b1\u02b3"+ - "\t\3\2\2\u02b2\u02af\3\2\2\2\u02b2\u02b0\3\2\2\2\u02b2\u02b1\3\2\2\2\u02b3"+ - "\u02b6\3\2\2\2\u02b4\u02b2\3\2\2\2\u02b4\u02b5\3\2\2\2\u02b5\u00aa\3\2"+ - "\2\2\u02b6\u02b4\3\2\2\2\u02b7\u02bb\5\u00b5[\2\u02b8\u02bc\5\u00b7\\"+ - "\2\u02b9\u02bc\5\u00b5[\2\u02ba\u02bc\t\4\2\2\u02bb\u02b8\3\2\2\2\u02bb"+ - "\u02b9\3\2\2\2\u02bb\u02ba\3\2\2\2\u02bc\u02bd\3\2\2\2\u02bd\u02bb\3\2"+ - "\2\2\u02bd\u02be\3\2\2\2\u02be\u00ac\3\2\2\2\u02bf\u02c4\5\u00b7\\\2\u02c0"+ - "\u02c4\5\u00b5[\2\u02c1\u02c4\t\3\2\2\u02c2\u02c4\5\u0099M\2\u02c3\u02bf"+ - "\3\2\2\2\u02c3\u02c0\3\2\2\2\u02c3\u02c1\3\2\2\2\u02c3\u02c2\3\2\2\2\u02c4"+ - "\u02c5\3\2\2\2\u02c5\u02c3\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6\u00ae\3\2"+ - "\2\2\u02c7\u02cd\7$\2\2\u02c8\u02cc\n\5\2\2\u02c9\u02ca\7$\2\2\u02ca\u02cc"+ - "\7$\2\2\u02cb\u02c8\3\2\2\2\u02cb\u02c9\3\2\2\2\u02cc\u02cf\3\2\2\2\u02cd"+ - "\u02cb\3\2\2\2\u02cd\u02ce\3\2\2\2\u02ce\u02d0\3\2\2\2\u02cf\u02cd\3\2"+ - "\2\2\u02d0\u02d1\7$\2\2\u02d1\u00b0\3\2\2\2\u02d2\u02d8\7b\2\2\u02d3\u02d7"+ - "\n\6\2\2\u02d4\u02d5\7b\2\2\u02d5\u02d7\7b\2\2\u02d6\u02d3\3\2\2\2\u02d6"+ - "\u02d4\3\2\2\2\u02d7\u02da\3\2\2\2\u02d8\u02d6\3\2\2\2\u02d8\u02d9\3\2"+ - "\2\2\u02d9\u02db\3\2\2\2\u02da\u02d8\3\2\2\2\u02db\u02dc\7b\2\2\u02dc"+ - "\u00b2\3\2\2\2\u02dd\u02df\7G\2\2\u02de\u02e0\t\7\2\2\u02df\u02de\3\2"+ - "\2\2\u02df\u02e0\3\2\2\2\u02e0\u02e2\3\2\2\2\u02e1\u02e3\5\u00b5[\2\u02e2"+ - "\u02e1\3\2\2\2\u02e3\u02e4\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e4\u02e5\3\2"+ - "\2\2\u02e5\u00b4\3\2\2\2\u02e6\u02e7\t\b\2\2\u02e7\u00b6\3\2\2\2\u02e8"+ - "\u02e9\t\t\2\2\u02e9\u00b8\3\2\2\2\u02ea\u02eb\7/\2\2\u02eb\u02ec\7/\2"+ - "\2\u02ec\u02f0\3\2\2\2\u02ed\u02ef\n\n\2\2\u02ee\u02ed\3\2\2\2\u02ef\u02f2"+ - "\3\2\2\2\u02f0\u02ee\3\2\2\2\u02f0\u02f1\3\2\2\2\u02f1\u02f4\3\2\2\2\u02f2"+ - "\u02f0\3\2\2\2\u02f3\u02f5\7\17\2\2\u02f4\u02f3\3\2\2\2\u02f4\u02f5\3"+ - "\2\2\2\u02f5\u02f7\3\2\2\2\u02f6\u02f8\7\f\2\2\u02f7\u02f6\3\2\2\2\u02f7"+ - "\u02f8\3\2\2\2\u02f8\u02f9\3\2\2\2\u02f9\u02fa\b]\2\2\u02fa\u00ba\3\2"+ - "\2\2\u02fb\u02fc\7\61\2\2\u02fc\u02fd\7,\2\2\u02fd\u0302\3\2\2\2\u02fe"+ - "\u0301\5\u00bb^\2\u02ff\u0301\13\2\2\2\u0300\u02fe\3\2\2\2\u0300\u02ff"+ - "\3\2\2\2\u0301\u0304\3\2\2\2\u0302\u0303\3\2\2\2\u0302\u0300\3\2\2\2\u0303"+ - "\u0305\3\2\2\2\u0304\u0302\3\2\2\2\u0305\u0306\7,\2\2\u0306\u0307\7\61"+ - "\2\2\u0307\u0308\3\2\2\2\u0308\u0309\b^\2\2\u0309\u00bc\3\2\2\2\u030a"+ - "\u030c\t\13\2\2\u030b\u030a\3\2\2\2\u030c\u030d\3\2\2\2\u030d\u030b\3"+ - "\2\2\2\u030d\u030e\3\2\2\2\u030e\u030f\3\2\2\2\u030f\u0310\b_\2\2\u0310"+ - "\u00be\3\2\2\2\u0311\u0312\13\2\2\2\u0312\u00c0\3\2\2\2\"\2\u0254\u0273"+ - "\u0275\u027d\u0282\u0288\u028f\u0294\u029a\u029d\u02a5\u02a9\u02ad\u02b2"+ - "\u02b4\u02bb\u02bd\u02c3\u02c5\u02cb\u02cd\u02d6\u02d8\u02df\u02e4\u02f0"+ - "\u02f4\u02f7\u0300\u0302\u030d\3\2\3\2"; + "W\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7\2\u00b9\2\u00bb\2\u00bd]\u00bf"+ + "^\u00c1_\u00c3`\3\2\f\3\2))\4\2BBaa\5\2<\3\2\2\2\u0179\u017a\7I\2\2\u017a\u017b"+ + "\7T\2\2\u017b\u017c\7C\2\2\u017c\u017d\7R\2\2\u017d\u017e\7J\2\2\u017e"+ + "\u017f\7X\2\2\u017f\u0180\7K\2\2\u0180\u0181\7\\\2\2\u0181@\3\2\2\2\u0182"+ + "\u0183\7I\2\2\u0183\u0184\7T\2\2\u0184\u0185\7Q\2\2\u0185\u0186\7W\2\2"+ + "\u0186\u0187\7R\2\2\u0187B\3\2\2\2\u0188\u0189\7J\2\2\u0189\u018a\7C\2"+ + "\2\u018a\u018b\7X\2\2\u018b\u018c\7K\2\2\u018c\u018d\7P\2\2\u018d\u018e"+ + "\7I\2\2\u018eD\3\2\2\2\u018f\u0190\7K\2\2\u0190\u0191\7P\2\2\u0191F\3"+ + "\2\2\2\u0192\u0193\7K\2\2\u0193\u0194\7P\2\2\u0194\u0195\7P\2\2\u0195"+ + "\u0196\7G\2\2\u0196\u0197\7T\2\2\u0197H\3\2\2\2\u0198\u0199\7K\2\2\u0199"+ + "\u019a\7U\2\2\u019aJ\3\2\2\2\u019b\u019c\7L\2\2\u019c\u019d\7Q\2\2\u019d"+ + "\u019e\7K\2\2\u019e\u019f\7P\2\2\u019fL\3\2\2\2\u01a0\u01a1\7N\2\2\u01a1"+ + "\u01a2\7G\2\2\u01a2\u01a3\7H\2\2\u01a3\u01a4\7V\2\2\u01a4N\3\2\2\2\u01a5"+ + "\u01a6\7N\2\2\u01a6\u01a7\7K\2\2\u01a7\u01a8\7M\2\2\u01a8\u01a9\7G\2\2"+ + "\u01a9P\3\2\2\2\u01aa\u01ab\7N\2\2\u01ab\u01ac\7K\2\2\u01ac\u01ad\7O\2"+ + "\2\u01ad\u01ae\7K\2\2\u01ae\u01af\7V\2\2\u01afR\3\2\2\2\u01b0\u01b1\7"+ + "O\2\2\u01b1\u01b2\7C\2\2\u01b2\u01b3\7R\2\2\u01b3\u01b4\7R\2\2\u01b4\u01b5"+ + "\7G\2\2\u01b5\u01b6\7F\2\2\u01b6T\3\2\2\2\u01b7\u01b8\7O\2\2\u01b8\u01b9"+ + "\7C\2\2\u01b9\u01ba\7V\2\2\u01ba\u01bb\7E\2\2\u01bb\u01bc\7J\2\2\u01bc"+ + "V\3\2\2\2\u01bd\u01be\7P\2\2\u01be\u01bf\7C\2\2\u01bf\u01c0\7V\2\2\u01c0"+ + "\u01c1\7W\2\2\u01c1\u01c2\7T\2\2\u01c2\u01c3\7C\2\2\u01c3\u01c4\7N\2\2"+ + "\u01c4X\3\2\2\2\u01c5\u01c6\7P\2\2\u01c6\u01c7\7Q\2\2\u01c7\u01c8\7V\2"+ + "\2\u01c8Z\3\2\2\2\u01c9\u01ca\7P\2\2\u01ca\u01cb\7W\2\2\u01cb\u01cc\7"+ + "N\2\2\u01cc\u01cd\7N\2\2\u01cd\\\3\2\2\2\u01ce\u01cf\7Q\2\2\u01cf\u01d0"+ + "\7P\2\2\u01d0^\3\2\2\2\u01d1\u01d2\7Q\2\2\u01d2\u01d3\7R\2\2\u01d3\u01d4"+ + "\7V\2\2\u01d4\u01d5\7K\2\2\u01d5\u01d6\7O\2\2\u01d6\u01d7\7K\2\2\u01d7"+ + "\u01d8\7\\\2\2\u01d8\u01d9\7G\2\2\u01d9\u01da\7F\2\2\u01da`\3\2\2\2\u01db"+ + "\u01dc\7Q\2\2\u01dc\u01dd\7T\2\2\u01ddb\3\2\2\2\u01de\u01df\7Q\2\2\u01df"+ + "\u01e0\7T\2\2\u01e0\u01e1\7F\2\2\u01e1\u01e2\7G\2\2\u01e2\u01e3\7T\2\2"+ + "\u01e3d\3\2\2\2\u01e4\u01e5\7Q\2\2\u01e5\u01e6\7W\2\2\u01e6\u01e7\7V\2"+ + "\2\u01e7\u01e8\7G\2\2\u01e8\u01e9\7T\2\2\u01e9f\3\2\2\2\u01ea\u01eb\7"+ + "R\2\2\u01eb\u01ec\7C\2\2\u01ec\u01ed\7T\2\2\u01ed\u01ee\7U\2\2\u01ee\u01ef"+ + "\7G\2\2\u01ef\u01f0\7F\2\2\u01f0h\3\2\2\2\u01f1\u01f2\7R\2\2\u01f2\u01f3"+ + "\7J\2\2\u01f3\u01f4\7[\2\2\u01f4\u01f5\7U\2\2\u01f5\u01f6\7K\2\2\u01f6"+ + "\u01f7\7E\2\2\u01f7\u01f8\7C\2\2\u01f8\u01f9\7N\2\2\u01f9j\3\2\2\2\u01fa"+ + "\u01fb\7R\2\2\u01fb\u01fc\7N\2\2\u01fc\u01fd\7C\2\2\u01fd\u01fe\7P\2\2"+ + "\u01fel\3\2\2\2\u01ff\u0200\7T\2\2\u0200\u0201\7K\2\2\u0201\u0202\7I\2"+ + "\2\u0202\u0203\7J\2\2\u0203\u0204\7V\2\2\u0204n\3\2\2\2\u0205\u0206\7"+ + "T\2\2\u0206\u0207\7N\2\2\u0207\u0208\7K\2\2\u0208\u0209\7M\2\2\u0209\u020a"+ + "\7G\2\2\u020ap\3\2\2\2\u020b\u020c\7S\2\2\u020c\u020d\7W\2\2\u020d\u020e"+ + "\7G\2\2\u020e\u020f\7T\2\2\u020f\u0210\7[\2\2\u0210r\3\2\2\2\u0211\u0212"+ + "\7U\2\2\u0212\u0213\7E\2\2\u0213\u0214\7J\2\2\u0214\u0215\7G\2\2\u0215"+ + "\u0216\7O\2\2\u0216\u0217\7C\2\2\u0217\u0218\7U\2\2\u0218t\3\2\2\2\u0219"+ + "\u021a\7U\2\2\u021a\u021b\7G\2\2\u021b\u021c\7N\2\2\u021c\u021d\7G\2\2"+ + "\u021d\u021e\7E\2\2\u021e\u021f\7V\2\2\u021fv\3\2\2\2\u0220\u0221\7U\2"+ + "\2\u0221\u0222\7J\2\2\u0222\u0223\7Q\2\2\u0223\u0224\7Y\2\2\u0224x\3\2"+ + "\2\2\u0225\u0226\7U\2\2\u0226\u0227\7[\2\2\u0227\u0228\7U\2\2\u0228z\3"+ + "\2\2\2\u0229\u022a\7V\2\2\u022a\u022b\7C\2\2\u022b\u022c\7D\2\2\u022c"+ + "\u022d\7N\2\2\u022d\u022e\7G\2\2\u022e|\3\2\2\2\u022f\u0230\7V\2\2\u0230"+ + "\u0231\7C\2\2\u0231\u0232\7D\2\2\u0232\u0233\7N\2\2\u0233\u0234\7G\2\2"+ + "\u0234\u0235\7U\2\2\u0235~\3\2\2\2\u0236\u0237\7V\2\2\u0237\u0238\7G\2"+ + "\2\u0238\u0239\7Z\2\2\u0239\u023a\7V\2\2\u023a\u0080\3\2\2\2\u023b\u023c"+ + "\7V\2\2\u023c\u023d\7T\2\2\u023d\u023e\7W\2\2\u023e\u023f\7G\2\2\u023f"+ + "\u0082\3\2\2\2\u0240\u0241\7V\2\2\u0241\u0242\7[\2\2\u0242\u0243\7R\2"+ + "\2\u0243\u0244\7G\2\2\u0244\u0245\7U\2\2\u0245\u0084\3\2\2\2\u0246\u0247"+ + "\7W\2\2\u0247\u0248\7U\2\2\u0248\u0249\7K\2\2\u0249\u024a\7P\2\2\u024a"+ + "\u024b\7I\2\2\u024b\u0086\3\2\2\2\u024c\u024d\7X\2\2\u024d\u024e\7G\2"+ + "\2\u024e\u024f\7T\2\2\u024f\u0250\7K\2\2\u0250\u0251\7H\2\2\u0251\u0252"+ + "\7[\2\2\u0252\u0088\3\2\2\2\u0253\u0254\7Y\2\2\u0254\u0255\7J\2\2\u0255"+ + "\u0256\7G\2\2\u0256\u0257\7T\2\2\u0257\u0258\7G\2\2\u0258\u008a\3\2\2"+ + "\2\u0259\u025a\7Y\2\2\u025a\u025b\7K\2\2\u025b\u025c\7V\2\2\u025c\u025d"+ + "\7J\2\2\u025d\u008c\3\2\2\2\u025e\u025f\7?\2\2\u025f\u008e\3\2\2\2\u0260"+ + "\u0261\7>\2\2\u0261\u0268\7@\2\2\u0262\u0263\7#\2\2\u0263\u0268\7?\2\2"+ + "\u0264\u0265\7>\2\2\u0265\u0266\7?\2\2\u0266\u0268\7@\2\2\u0267\u0260"+ + "\3\2\2\2\u0267\u0262\3\2\2\2\u0267\u0264\3\2\2\2\u0268\u0090\3\2\2\2\u0269"+ + "\u026a\7>\2\2\u026a\u0092\3\2\2\2\u026b\u026c\7>\2\2\u026c\u026d\7?\2"+ + "\2\u026d\u0094\3\2\2\2\u026e\u026f\7@\2\2\u026f\u0096\3\2\2\2\u0270\u0271"+ + "\7@\2\2\u0271\u0272\7?\2\2\u0272\u0098\3\2\2\2\u0273\u0274\7-\2\2\u0274"+ + "\u009a\3\2\2\2\u0275\u0276\7/\2\2\u0276\u009c\3\2\2\2\u0277\u0278\7,\2"+ + "\2\u0278\u009e\3\2\2\2\u0279\u027a\7\61\2\2\u027a\u00a0\3\2\2\2\u027b"+ + "\u027c\7\'\2\2\u027c\u00a2\3\2\2\2\u027d\u027e\7~\2\2\u027e\u027f\7~\2"+ + "\2\u027f\u00a4\3\2\2\2\u0280\u0281\7\60\2\2\u0281\u00a6\3\2\2\2\u0282"+ + "\u0288\7)\2\2\u0283\u0287\n\2\2\2\u0284\u0285\7)\2\2\u0285\u0287\7)\2"+ + "\2\u0286\u0283\3\2\2\2\u0286\u0284\3\2\2\2\u0287\u028a\3\2\2\2\u0288\u0286"+ + "\3\2\2\2\u0288\u0289\3\2\2\2\u0289\u028b\3\2\2\2\u028a\u0288\3\2\2\2\u028b"+ + "\u028c\7)\2\2\u028c\u00a8\3\2\2\2\u028d\u028f\5\u00b9]\2\u028e\u028d\3"+ + "\2\2\2\u028f\u0290\3\2\2\2\u0290\u028e\3\2\2\2\u0290\u0291\3\2\2\2\u0291"+ + "\u00aa\3\2\2\2\u0292\u0294\5\u00b9]\2\u0293\u0292\3\2\2\2\u0294\u0295"+ + "\3\2\2\2\u0295\u0293\3\2\2\2\u0295\u0296\3\2\2\2\u0296\u0297\3\2\2\2\u0297"+ + "\u029b\5\u00a5S\2\u0298\u029a\5\u00b9]\2\u0299\u0298\3\2\2\2\u029a\u029d"+ + "\3\2\2\2\u029b\u0299\3\2\2\2\u029b\u029c\3\2\2\2\u029c\u02bd\3\2\2\2\u029d"+ + "\u029b\3\2\2\2\u029e\u02a0\5\u00a5S\2\u029f\u02a1\5\u00b9]\2\u02a0\u029f"+ + "\3\2\2\2\u02a1\u02a2\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a2\u02a3\3\2\2\2\u02a3"+ + "\u02bd\3\2\2\2\u02a4\u02a6\5\u00b9]\2\u02a5\u02a4\3\2\2\2\u02a6\u02a7"+ + "\3\2\2\2\u02a7\u02a5\3\2\2\2\u02a7\u02a8\3\2\2\2\u02a8\u02b0\3\2\2\2\u02a9"+ + "\u02ad\5\u00a5S\2\u02aa\u02ac\5\u00b9]\2\u02ab\u02aa\3\2\2\2\u02ac\u02af"+ + "\3\2\2\2\u02ad\u02ab\3\2\2\2\u02ad\u02ae\3\2\2\2\u02ae\u02b1\3\2\2\2\u02af"+ + "\u02ad\3\2\2\2\u02b0\u02a9\3\2\2\2\u02b0\u02b1\3\2\2\2\u02b1\u02b2\3\2"+ + "\2\2\u02b2\u02b3\5\u00b7\\\2\u02b3\u02bd\3\2\2\2\u02b4\u02b6\5\u00a5S"+ + "\2\u02b5\u02b7\5\u00b9]\2\u02b6\u02b5\3\2\2\2\u02b7\u02b8\3\2\2\2\u02b8"+ + "\u02b6\3\2\2\2\u02b8\u02b9\3\2\2\2\u02b9\u02ba\3\2\2\2\u02ba\u02bb\5\u00b7"+ + "\\\2\u02bb\u02bd\3\2\2\2\u02bc\u0293\3\2\2\2\u02bc\u029e\3\2\2\2\u02bc"+ + "\u02a5\3\2\2\2\u02bc\u02b4\3\2\2\2\u02bd\u00ac\3\2\2\2\u02be\u02c1\5\u00bb"+ + "^\2\u02bf\u02c1\7a\2\2\u02c0\u02be\3\2\2\2\u02c0\u02bf\3\2\2\2\u02c1\u02c7"+ + "\3\2\2\2\u02c2\u02c6\5\u00bb^\2\u02c3\u02c6\5\u00b9]\2\u02c4\u02c6\t\3"+ + "\2\2\u02c5\u02c2\3\2\2\2\u02c5\u02c3\3\2\2\2\u02c5\u02c4\3\2\2\2\u02c6"+ + "\u02c9\3\2\2\2\u02c7\u02c5\3\2\2\2\u02c7\u02c8\3\2\2\2\u02c8\u00ae\3\2"+ + "\2\2\u02c9\u02c7\3\2\2\2\u02ca\u02ce\5\u00b9]\2\u02cb\u02cf\5\u00bb^\2"+ + "\u02cc\u02cf\5\u00b9]\2\u02cd\u02cf\t\4\2\2\u02ce\u02cb\3\2\2\2\u02ce"+ + "\u02cc\3\2\2\2\u02ce\u02cd\3\2\2\2\u02cf\u02d0\3\2\2\2\u02d0\u02ce\3\2"+ + "\2\2\u02d0\u02d1\3\2\2\2\u02d1\u00b0\3\2\2\2\u02d2\u02d7\5\u00bb^\2\u02d3"+ + "\u02d7\5\u00b9]\2\u02d4\u02d7\t\3\2\2\u02d5\u02d7\5\u009dO\2\u02d6\u02d2"+ + "\3\2\2\2\u02d6\u02d3\3\2\2\2\u02d6\u02d4\3\2\2\2\u02d6\u02d5\3\2\2\2\u02d7"+ + "\u02d8\3\2\2\2\u02d8\u02d6\3\2\2\2\u02d8\u02d9\3\2\2\2\u02d9\u00b2\3\2"+ + "\2\2\u02da\u02e0\7$\2\2\u02db\u02df\n\5\2\2\u02dc\u02dd\7$\2\2\u02dd\u02df"+ + "\7$\2\2\u02de\u02db\3\2\2\2\u02de\u02dc\3\2\2\2\u02df\u02e2\3\2\2\2\u02e0"+ + "\u02de\3\2\2\2\u02e0\u02e1\3\2\2\2\u02e1\u02e3\3\2\2\2\u02e2\u02e0\3\2"+ + "\2\2\u02e3\u02e4\7$\2\2\u02e4\u00b4\3\2\2\2\u02e5\u02eb\7b\2\2\u02e6\u02ea"+ + "\n\6\2\2\u02e7\u02e8\7b\2\2\u02e8\u02ea\7b\2\2\u02e9\u02e6\3\2\2\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\u02ee\3\2\2\2\u02ed\u02eb\3\2\2\2\u02ee\u02ef\7b\2\2\u02ef"+ + "\u00b6\3\2\2\2\u02f0\u02f2\7G\2\2\u02f1\u02f3\t\7\2\2\u02f2\u02f1\3\2"+ + "\2\2\u02f2\u02f3\3\2\2\2\u02f3\u02f5\3\2\2\2\u02f4\u02f6\5\u00b9]\2\u02f5"+ + "\u02f4\3\2\2\2\u02f6\u02f7\3\2\2\2\u02f7\u02f5\3\2\2\2\u02f7\u02f8\3\2"+ + "\2\2\u02f8\u00b8\3\2\2\2\u02f9\u02fa\t\b\2\2\u02fa\u00ba\3\2\2\2\u02fb"+ + "\u02fc\t\t\2\2\u02fc\u00bc\3\2\2\2\u02fd\u02fe\7/\2\2\u02fe\u02ff\7/\2"+ + "\2\u02ff\u0303\3\2\2\2\u0300\u0302\n\n\2\2\u0301\u0300\3\2\2\2\u0302\u0305"+ + "\3\2\2\2\u0303\u0301\3\2\2\2\u0303\u0304\3\2\2\2\u0304\u0307\3\2\2\2\u0305"+ + "\u0303\3\2\2\2\u0306\u0308\7\17\2\2\u0307\u0306\3\2\2\2\u0307\u0308\3"+ + "\2\2\2\u0308\u030a\3\2\2\2\u0309\u030b\7\f\2\2\u030a\u0309\3\2\2\2\u030a"+ + "\u030b\3\2\2\2\u030b\u030c\3\2\2\2\u030c\u030d\b_\2\2\u030d\u00be\3\2"+ + "\2\2\u030e\u030f\7\61\2\2\u030f\u0310\7,\2\2\u0310\u0315\3\2\2\2\u0311"+ + "\u0314\5\u00bf`\2\u0312\u0314\13\2\2\2\u0313\u0311\3\2\2\2\u0313\u0312"+ + "\3\2\2\2\u0314\u0317\3\2\2\2\u0315\u0316\3\2\2\2\u0315\u0313\3\2\2\2\u0316"+ + "\u0318\3\2\2\2\u0317\u0315\3\2\2\2\u0318\u0319\7,\2\2\u0319\u031a\7\61"+ + "\2\2\u031a\u031b\3\2\2\2\u031b\u031c\b`\2\2\u031c\u00c0\3\2\2\2\u031d"+ + "\u031f\t\13\2\2\u031e\u031d\3\2\2\2\u031f\u0320\3\2\2\2\u0320\u031e\3"+ + "\2\2\2\u0320\u0321\3\2\2\2\u0321\u0322\3\2\2\2\u0322\u0323\ba\2\2\u0323"+ + "\u00c2\3\2\2\2\u0324\u0325\13\2\2\2\u0325\u00c4\3\2\2\2\"\2\u0267\u0286"+ + "\u0288\u0290\u0295\u029b\u02a2\u02a7\u02ad\u02b0\u02b8\u02bc\u02c0\u02c5"+ + "\u02c7\u02ce\u02d0\u02d6\u02d8\u02de\u02e0\u02e9\u02eb\u02f2\u02f7\u0303"+ + "\u0307\u030a\u0313\u0315\u0320\3\2\3\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java index 904733e27cc..bee88386394 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java @@ -116,6 +116,18 @@ interface SqlBaseListener extends ParseTreeListener { * @param ctx the parse tree */ void exitShowSchemas(SqlBaseParser.ShowSchemasContext ctx); + /** + * Enter a parse tree produced by the {@code sysCatalogs} + * labeled alternative in {@link SqlBaseParser#statement}. + * @param ctx the parse tree + */ + void enterSysCatalogs(SqlBaseParser.SysCatalogsContext ctx); + /** + * Exit a parse tree produced by the {@code sysCatalogs} + * labeled alternative in {@link SqlBaseParser#statement}. + * @param ctx the parse tree + */ + void exitSysCatalogs(SqlBaseParser.SysCatalogsContext ctx); /** * Enter a parse tree produced by the {@code sysTables} * labeled alternative in {@link SqlBaseParser#statement}. @@ -152,6 +164,18 @@ interface SqlBaseListener extends ParseTreeListener { * @param ctx the parse tree */ void exitSysTypes(SqlBaseParser.SysTypesContext ctx); + /** + * Enter a parse tree produced by the {@code sysTableTypes} + * labeled alternative in {@link SqlBaseParser#statement}. + * @param ctx the parse tree + */ + void enterSysTableTypes(SqlBaseParser.SysTableTypesContext ctx); + /** + * Exit a parse tree produced by the {@code sysTableTypes} + * labeled alternative in {@link SqlBaseParser#statement}. + * @param ctx the parse tree + */ + void exitSysTableTypes(SqlBaseParser.SysTableTypesContext ctx); /** * Enter a parse tree produced by {@link SqlBaseParser#query}. * @param ctx the parse tree diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java index 41879967f91..577c6c8c334 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java @@ -23,19 +23,19 @@ class SqlBaseParser extends Parser { new PredictionContextCache(); public static final int T__0=1, T__1=2, T__2=3, T__3=4, ALL=5, ANALYZE=6, ANALYZED=7, AND=8, ANY=9, - AS=10, ASC=11, BETWEEN=12, BY=13, CAST=14, COLUMNS=15, DEBUG=16, DESC=17, - DESCRIBE=18, DISTINCT=19, ESCAPE=20, EXECUTABLE=21, EXISTS=22, EXPLAIN=23, - EXTRACT=24, FALSE=25, FORMAT=26, FROM=27, FULL=28, FUNCTIONS=29, GRAPHVIZ=30, - GROUP=31, HAVING=32, IN=33, INNER=34, IS=35, JOIN=36, LEFT=37, LIKE=38, - LIMIT=39, MAPPED=40, MATCH=41, NATURAL=42, NOT=43, NULL=44, ON=45, OPTIMIZED=46, - OR=47, ORDER=48, OUTER=49, PARSED=50, PHYSICAL=51, PLAN=52, RIGHT=53, - RLIKE=54, QUERY=55, SCHEMAS=56, SELECT=57, SHOW=58, SYS=59, TABLES=60, - TEXT=61, TRUE=62, TYPES=63, USING=64, VERIFY=65, WHERE=66, WITH=67, EQ=68, - NEQ=69, LT=70, LTE=71, GT=72, GTE=73, PLUS=74, MINUS=75, ASTERISK=76, - SLASH=77, PERCENT=78, CONCAT=79, DOT=80, STRING=81, INTEGER_VALUE=82, - DECIMAL_VALUE=83, IDENTIFIER=84, DIGIT_IDENTIFIER=85, TABLE_IDENTIFIER=86, - QUOTED_IDENTIFIER=87, BACKQUOTED_IDENTIFIER=88, SIMPLE_COMMENT=89, BRACKETED_COMMENT=90, - WS=91, UNRECOGNIZED=92, DELIMITER=93; + AS=10, ASC=11, BETWEEN=12, BY=13, CAST=14, CATALOGS=15, COLUMNS=16, DEBUG=17, + DESC=18, DESCRIBE=19, DISTINCT=20, ESCAPE=21, EXECUTABLE=22, EXISTS=23, + EXPLAIN=24, EXTRACT=25, FALSE=26, FORMAT=27, FROM=28, FULL=29, FUNCTIONS=30, + GRAPHVIZ=31, GROUP=32, HAVING=33, IN=34, INNER=35, IS=36, JOIN=37, LEFT=38, + LIKE=39, LIMIT=40, MAPPED=41, MATCH=42, NATURAL=43, NOT=44, NULL=45, ON=46, + OPTIMIZED=47, OR=48, ORDER=49, OUTER=50, PARSED=51, PHYSICAL=52, PLAN=53, + RIGHT=54, RLIKE=55, QUERY=56, SCHEMAS=57, SELECT=58, SHOW=59, SYS=60, + TABLE=61, TABLES=62, TEXT=63, TRUE=64, TYPES=65, USING=66, VERIFY=67, + WHERE=68, WITH=69, EQ=70, NEQ=71, LT=72, LTE=73, GT=74, GTE=75, PLUS=76, + MINUS=77, ASTERISK=78, SLASH=79, PERCENT=80, CONCAT=81, DOT=82, STRING=83, + INTEGER_VALUE=84, DECIMAL_VALUE=85, IDENTIFIER=86, DIGIT_IDENTIFIER=87, + TABLE_IDENTIFIER=88, QUOTED_IDENTIFIER=89, BACKQUOTED_IDENTIFIER=90, SIMPLE_COMMENT=91, + BRACKETED_COMMENT=92, WS=93, UNRECOGNIZED=94, DELIMITER=95; public static final int RULE_singleStatement = 0, RULE_singleExpression = 1, RULE_statement = 2, RULE_query = 3, RULE_queryNoWith = 4, RULE_queryTerm = 5, RULE_orderBy = 6, @@ -62,32 +62,32 @@ class SqlBaseParser extends Parser { private static final String[] _LITERAL_NAMES = { null, "'('", "')'", "','", "':'", "'ALL'", "'ANALYZE'", "'ANALYZED'", - "'AND'", "'ANY'", "'AS'", "'ASC'", "'BETWEEN'", "'BY'", "'CAST'", "'COLUMNS'", - "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", "'EXECUTABLE'", - "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FORMAT'", "'FROM'", - "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", "'HAVING'", "'IN'", - "'INNER'", "'IS'", "'JOIN'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", + "'AND'", "'ANY'", "'AS'", "'ASC'", "'BETWEEN'", "'BY'", "'CAST'", "'CATALOGS'", + "'COLUMNS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", + "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FORMAT'", + "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", "'HAVING'", + "'IN'", "'INNER'", "'IS'", "'JOIN'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", "'MATCH'", "'NATURAL'", "'NOT'", "'NULL'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", "'OUTER'", "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", - "'QUERY'", "'SCHEMAS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLES'", "'TEXT'", - "'TRUE'", "'TYPES'", "'USING'", "'VERIFY'", "'WHERE'", "'WITH'", "'='", - null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", - "'||'", "'.'" + "'QUERY'", "'SCHEMAS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", "'TABLES'", + "'TEXT'", "'TRUE'", "'TYPES'", "'USING'", "'VERIFY'", "'WHERE'", "'WITH'", + "'='", null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", + "'%'", "'||'", "'.'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", - "AS", "ASC", "BETWEEN", "BY", "CAST", "COLUMNS", "DEBUG", "DESC", "DESCRIBE", - "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", "EXTRACT", "FALSE", - "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", "GROUP", "HAVING", - "IN", "INNER", "IS", "JOIN", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", - "NATURAL", "NOT", "NULL", "ON", "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", - "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", "SCHEMAS", "SELECT", "SHOW", - "SYS", "TABLES", "TEXT", "TRUE", "TYPES", "USING", "VERIFY", "WHERE", - "WITH", "EQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", - "SLASH", "PERCENT", "CONCAT", "DOT", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", - "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", - "UNRECOGNIZED", "DELIMITER" + "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOGS", "COLUMNS", "DEBUG", + "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", + "EXTRACT", "FALSE", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", + "GROUP", "HAVING", "IN", "INNER", "IS", "JOIN", "LEFT", "LIKE", "LIMIT", + "MAPPED", "MATCH", "NATURAL", "NOT", "NULL", "ON", "OPTIMIZED", "OR", + "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", + "SCHEMAS", "SELECT", "SHOW", "SYS", "TABLE", "TABLES", "TEXT", "TRUE", + "TYPES", "USING", "VERIFY", "WHERE", "WITH", "EQ", "NEQ", "LT", "LTE", + "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", "CONCAT", + "DOT", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", + "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", + "BRACKETED_COMMENT", "WS", "UNRECOGNIZED", "DELIMITER" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -316,6 +316,24 @@ class SqlBaseParser extends Parser { else return visitor.visitChildren(this); } } + public static class SysCatalogsContext extends StatementContext { + public TerminalNode SYS() { return getToken(SqlBaseParser.SYS, 0); } + public TerminalNode CATALOGS() { return getToken(SqlBaseParser.CATALOGS, 0); } + public SysCatalogsContext(StatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).enterSysCatalogs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).exitSysCatalogs(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof SqlBaseVisitor ) return ((SqlBaseVisitor)visitor).visitSysCatalogs(this); + else return visitor.visitChildren(this); + } + } public static class SysColumnsContext extends StatementContext { public PatternContext indexPattern; public PatternContext columnPattern; @@ -411,6 +429,25 @@ class SqlBaseParser extends Parser { else return visitor.visitChildren(this); } } + public static class SysTableTypesContext extends StatementContext { + public TerminalNode SYS() { return getToken(SqlBaseParser.SYS, 0); } + public TerminalNode TABLE() { return getToken(SqlBaseParser.TABLE, 0); } + public TerminalNode TYPES() { return getToken(SqlBaseParser.TYPES, 0); } + public SysTableTypesContext(StatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).enterSysTableTypes(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).exitSysTableTypes(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof SqlBaseVisitor ) return ((SqlBaseVisitor)visitor).visitSysTableTypes(this); + else return visitor.visitChildren(this); + } + } public static class StatementDefaultContext extends StatementContext { public QueryContext query() { return getRuleContext(QueryContext.class,0); @@ -545,7 +582,7 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 4, RULE_statement); int _la; try { - setState(164); + setState(169); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { case 1: @@ -572,7 +609,7 @@ class SqlBaseParser extends Parser { setState(93); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 26)) & ~0x3f) == 0 && ((1L << (_la - 26)) & ((1L << (FORMAT - 26)) | (1L << (PLAN - 26)) | (1L << (VERIFY - 26)))) != 0)) { + while (((((_la - 27)) & ~0x3f) == 0 && ((1L << (_la - 27)) & ((1L << (FORMAT - 27)) | (1L << (PLAN - 27)) | (1L << (VERIFY - 27)))) != 0)) { { setState(91); switch (_input.LA(1)) { @@ -795,88 +832,110 @@ class SqlBaseParser extends Parser { } break; case 9: - _localctx = new SysTablesContext(_localctx); + _localctx = new SysCatalogsContext(_localctx); enterOuterAlt(_localctx, 9); { setState(139); match(SYS); setState(140); + match(CATALOGS); + } + break; + case 10: + _localctx = new SysTablesContext(_localctx); + enterOuterAlt(_localctx, 10); + { + setState(141); + match(SYS); + setState(142); match(TABLES); - setState(145); + setState(147); _la = _input.LA(1); if (_la==LIKE || _la==STRING) { { - setState(142); + setState(144); _la = _input.LA(1); if (_la==LIKE) { { - setState(141); + setState(143); match(LIKE); } } - setState(144); + setState(146); pattern(); } } } break; - case 10: + case 11: _localctx = new SysColumnsContext(_localctx); - enterOuterAlt(_localctx, 10); + enterOuterAlt(_localctx, 11); { - setState(147); + setState(149); match(SYS); - setState(148); + setState(150); match(COLUMNS); - setState(154); + setState(156); _la = _input.LA(1); if (_la==TABLES) { { - setState(149); - match(TABLES); setState(151); + match(TABLES); + setState(153); _la = _input.LA(1); if (_la==LIKE) { { - setState(150); + setState(152); match(LIKE); } } - setState(153); + setState(155); ((SysColumnsContext)_localctx).indexPattern = pattern(); } } - setState(160); + setState(162); _la = _input.LA(1); if (_la==LIKE || _la==STRING) { { - setState(157); + setState(159); _la = _input.LA(1); if (_la==LIKE) { { - setState(156); + setState(158); match(LIKE); } } - setState(159); + setState(161); ((SysColumnsContext)_localctx).columnPattern = pattern(); } } } break; - case 11: + case 12: _localctx = new SysTypesContext(_localctx); - enterOuterAlt(_localctx, 11); + enterOuterAlt(_localctx, 12); { - setState(162); + setState(164); match(SYS); - setState(163); + setState(165); + match(TYPES); + } + break; + case 13: + _localctx = new SysTableTypesContext(_localctx); + enterOuterAlt(_localctx, 13); + { + setState(166); + match(SYS); + setState(167); + match(TABLE); + setState(168); match(TYPES); } break; @@ -930,34 +989,34 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(175); + setState(180); _la = _input.LA(1); if (_la==WITH) { { - setState(166); + setState(171); match(WITH); - setState(167); - namedQuery(); setState(172); + namedQuery(); + setState(177); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(168); + setState(173); match(T__2); - setState(169); + setState(174); namedQuery(); } } - setState(174); + setState(179); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(177); + setState(182); queryNoWith(); } } @@ -1014,44 +1073,44 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(179); + setState(184); queryTerm(); - setState(190); + setState(195); _la = _input.LA(1); if (_la==ORDER) { { - setState(180); + setState(185); match(ORDER); - setState(181); + setState(186); match(BY); - setState(182); - orderBy(); setState(187); + orderBy(); + setState(192); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(183); + setState(188); match(T__2); - setState(184); + setState(189); orderBy(); } } - setState(189); + setState(194); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(194); + setState(199); _la = _input.LA(1); if (_la==LIMIT) { { - setState(192); + setState(197); match(LIMIT); - setState(193); + setState(198); ((QueryNoWithContext)_localctx).limit = _input.LT(1); _la = _input.LA(1); if ( !(_la==ALL || _la==INTEGER_VALUE) ) { @@ -1129,13 +1188,13 @@ class SqlBaseParser extends Parser { QueryTermContext _localctx = new QueryTermContext(_ctx, getState()); enterRule(_localctx, 10, RULE_queryTerm); try { - setState(201); + setState(206); switch (_input.LA(1)) { case SELECT: _localctx = new QueryPrimaryDefaultContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(196); + setState(201); querySpecification(); } break; @@ -1143,11 +1202,11 @@ class SqlBaseParser extends Parser { _localctx = new SubqueryContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(197); + setState(202); match(T__0); - setState(198); + setState(203); queryNoWith(); - setState(199); + setState(204); match(T__1); } break; @@ -1199,13 +1258,13 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(203); + setState(208); expression(); - setState(205); + setState(210); _la = _input.LA(1); if (_la==ASC || _la==DESC) { { - setState(204); + setState(209); ((OrderByContext)_localctx).ordering = _input.LT(1); _la = _input.LA(1); if ( !(_la==ASC || _la==DESC) ) { @@ -1284,75 +1343,75 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(207); + setState(212); match(SELECT); - setState(209); + setState(214); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(208); + setState(213); setQuantifier(); } } - setState(211); - selectItem(); setState(216); + selectItem(); + setState(221); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(212); + setState(217); match(T__2); - setState(213); + setState(218); selectItem(); } } - setState(218); + setState(223); _errHandler.sync(this); _la = _input.LA(1); } - setState(220); + setState(225); _la = _input.LA(1); if (_la==FROM) { { - setState(219); + setState(224); fromClause(); } } - setState(224); - _la = _input.LA(1); - if (_la==WHERE) { - { - setState(222); - match(WHERE); - setState(223); - ((QuerySpecificationContext)_localctx).where = booleanExpression(0); - } - } - setState(229); _la = _input.LA(1); + if (_la==WHERE) { + { + setState(227); + match(WHERE); + setState(228); + ((QuerySpecificationContext)_localctx).where = booleanExpression(0); + } + } + + setState(234); + _la = _input.LA(1); if (_la==GROUP) { { - setState(226); + setState(231); match(GROUP); - setState(227); + setState(232); match(BY); - setState(228); + setState(233); groupBy(); } } - setState(233); + setState(238); _la = _input.LA(1); if (_la==HAVING) { { - setState(231); + setState(236); match(HAVING); - setState(232); + setState(237); ((QuerySpecificationContext)_localctx).having = booleanExpression(0); } } @@ -1404,23 +1463,23 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(235); + setState(240); match(FROM); - setState(236); - relation(); setState(241); + relation(); + setState(246); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(237); + setState(242); match(T__2); - setState(238); + setState(243); relation(); } } - setState(243); + setState(248); _errHandler.sync(this); _la = _input.LA(1); } @@ -1473,30 +1532,30 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(245); + setState(250); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(244); + setState(249); setQuantifier(); } } - setState(247); - groupingElement(); setState(252); + groupingElement(); + setState(257); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(248); + setState(253); match(T__2); - setState(249); + setState(254); groupingElement(); } } - setState(254); + setState(259); _errHandler.sync(this); _la = _input.LA(1); } @@ -1551,7 +1610,7 @@ class SqlBaseParser extends Parser { _localctx = new SingleGroupingSetContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(255); + setState(260); groupingExpressions(); } } @@ -1597,47 +1656,47 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 22, RULE_groupingExpressions); int _la; try { - setState(270); + setState(275); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(257); + setState(262); match(T__0); - setState(266); + setState(271); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << MATCH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TRUE) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (PLUS - 65)) | (1L << (MINUS - 65)) | (1L << (ASTERISK - 65)) | (1L << (STRING - 65)) | (1L << (INTEGER_VALUE - 65)) | (1L << (DECIMAL_VALUE - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << MATCH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TRUE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (PLUS - 64)) | (1L << (MINUS - 64)) | (1L << (ASTERISK - 64)) | (1L << (STRING - 64)) | (1L << (INTEGER_VALUE - 64)) | (1L << (DECIMAL_VALUE - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) { { - setState(258); - expression(); setState(263); + expression(); + setState(268); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(259); + setState(264); match(T__2); - setState(260); + setState(265); expression(); } } - setState(265); + setState(270); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(268); + setState(273); match(T__1); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(269); + setState(274); expression(); } break; @@ -1688,15 +1747,15 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(272); + setState(277); ((NamedQueryContext)_localctx).name = identifier(); - setState(273); + setState(278); match(AS); - setState(274); + setState(279); match(T__0); - setState(275); + setState(280); queryNoWith(); - setState(276); + setState(281); match(T__1); } } @@ -1740,7 +1799,7 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(278); + setState(283); _la = _input.LA(1); if ( !(_la==ALL || _la==DISTINCT) ) { _errHandler.recoverInline(this); @@ -1803,22 +1862,22 @@ class SqlBaseParser extends Parser { _localctx = new SelectExpressionContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(280); - expression(); setState(285); + expression(); + setState(290); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (TYPES - 65)) | (1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { { - setState(282); + setState(287); _la = _input.LA(1); if (_la==AS) { { - setState(281); + setState(286); match(AS); } } - setState(284); + setState(289); identifier(); } } @@ -1872,19 +1931,19 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(287); + setState(292); relationPrimary(); - setState(291); + setState(296); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FULL) | (1L << INNER) | (1L << JOIN) | (1L << LEFT) | (1L << NATURAL) | (1L << RIGHT))) != 0)) { { { - setState(288); + setState(293); joinRelation(); } } - setState(293); + setState(298); _errHandler.sync(this); _la = _input.LA(1); } @@ -1938,7 +1997,7 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 32, RULE_joinRelation); int _la; try { - setState(305); + setState(310); switch (_input.LA(1)) { case FULL: case INNER: @@ -1948,18 +2007,18 @@ class SqlBaseParser extends Parser { enterOuterAlt(_localctx, 1); { { - setState(294); + setState(299); joinType(); } - setState(295); + setState(300); match(JOIN); - setState(296); + setState(301); ((JoinRelationContext)_localctx).right = relationPrimary(); - setState(298); + setState(303); _la = _input.LA(1); if (_la==ON || _la==USING) { { - setState(297); + setState(302); joinCriteria(); } } @@ -1969,13 +2028,13 @@ class SqlBaseParser extends Parser { case NATURAL: enterOuterAlt(_localctx, 2); { - setState(300); + setState(305); match(NATURAL); - setState(301); + setState(306); joinType(); - setState(302); + setState(307); match(JOIN); - setState(303); + setState(308); ((JoinRelationContext)_localctx).right = relationPrimary(); } break; @@ -2024,17 +2083,17 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 34, RULE_joinType); int _la; try { - setState(322); + setState(327); switch (_input.LA(1)) { case INNER: case JOIN: enterOuterAlt(_localctx, 1); { - setState(308); + setState(313); _la = _input.LA(1); if (_la==INNER) { { - setState(307); + setState(312); match(INNER); } } @@ -2044,13 +2103,13 @@ class SqlBaseParser extends Parser { case LEFT: enterOuterAlt(_localctx, 2); { - setState(310); + setState(315); match(LEFT); - setState(312); + setState(317); _la = _input.LA(1); if (_la==OUTER) { { - setState(311); + setState(316); match(OUTER); } } @@ -2060,13 +2119,13 @@ class SqlBaseParser extends Parser { case RIGHT: enterOuterAlt(_localctx, 3); { - setState(314); + setState(319); match(RIGHT); - setState(316); + setState(321); _la = _input.LA(1); if (_la==OUTER) { { - setState(315); + setState(320); match(OUTER); } } @@ -2076,13 +2135,13 @@ class SqlBaseParser extends Parser { case FULL: enterOuterAlt(_localctx, 4); { - setState(318); + setState(323); match(FULL); - setState(320); + setState(325); _la = _input.LA(1); if (_la==OUTER) { { - setState(319); + setState(324); match(OUTER); } } @@ -2140,43 +2199,43 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 36, RULE_joinCriteria); int _la; try { - setState(338); + setState(343); switch (_input.LA(1)) { case ON: enterOuterAlt(_localctx, 1); { - setState(324); + setState(329); match(ON); - setState(325); + setState(330); booleanExpression(0); } break; case USING: enterOuterAlt(_localctx, 2); { - setState(326); + setState(331); match(USING); - setState(327); + setState(332); match(T__0); - setState(328); - identifier(); setState(333); + identifier(); + setState(338); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(329); + setState(334); match(T__2); - setState(330); + setState(335); identifier(); } } - setState(335); + setState(340); _errHandler.sync(this); _la = _input.LA(1); } - setState(336); + setState(341); match(T__1); } break; @@ -2281,29 +2340,29 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 38, RULE_relationPrimary); int _la; try { - setState(365); + setState(370); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { case 1: _localctx = new TableNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(340); - tableIdentifier(); setState(345); + tableIdentifier(); + setState(350); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (TYPES - 65)) | (1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { { - setState(342); + setState(347); _la = _input.LA(1); if (_la==AS) { { - setState(341); + setState(346); match(AS); } } - setState(344); + setState(349); qualifiedName(); } } @@ -2314,26 +2373,26 @@ class SqlBaseParser extends Parser { _localctx = new AliasedQueryContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(347); + setState(352); match(T__0); - setState(348); + setState(353); queryNoWith(); - setState(349); - match(T__1); setState(354); + match(T__1); + setState(359); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (TYPES - 65)) | (1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { { - setState(351); + setState(356); _la = _input.LA(1); if (_la==AS) { { - setState(350); + setState(355); match(AS); } } - setState(353); + setState(358); qualifiedName(); } } @@ -2344,26 +2403,26 @@ class SqlBaseParser extends Parser { _localctx = new AliasedRelationContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(356); + setState(361); match(T__0); - setState(357); + setState(362); relation(); - setState(358); - match(T__1); setState(363); + match(T__1); + setState(368); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (TYPES - 65)) | (1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { { - setState(360); + setState(365); _la = _input.LA(1); if (_la==AS) { { - setState(359); + setState(364); match(AS); } } - setState(362); + setState(367); qualifiedName(); } } @@ -2412,7 +2471,7 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(367); + setState(372); booleanExpression(0); } } @@ -2615,7 +2674,7 @@ class SqlBaseParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(416); + setState(421); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { case 1: @@ -2624,9 +2683,9 @@ class SqlBaseParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(370); + setState(375); match(NOT); - setState(371); + setState(376); booleanExpression(8); } break; @@ -2635,13 +2694,13 @@ class SqlBaseParser extends Parser { _localctx = new ExistsContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(372); + setState(377); match(EXISTS); - setState(373); + setState(378); match(T__0); - setState(374); + setState(379); query(); - setState(375); + setState(380); match(T__1); } break; @@ -2650,29 +2709,29 @@ class SqlBaseParser extends Parser { _localctx = new StringQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(377); + setState(382); match(QUERY); - setState(378); + setState(383); match(T__0); - setState(379); - ((StringQueryContext)_localctx).queryString = match(STRING); setState(384); + ((StringQueryContext)_localctx).queryString = match(STRING); + setState(389); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(380); + setState(385); match(T__2); - setState(381); + setState(386); ((StringQueryContext)_localctx).options = match(STRING); } } - setState(386); + setState(391); _errHandler.sync(this); _la = _input.LA(1); } - setState(387); + setState(392); match(T__1); } break; @@ -2681,33 +2740,33 @@ class SqlBaseParser extends Parser { _localctx = new MatchQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(388); + setState(393); match(MATCH); - setState(389); + setState(394); match(T__0); - setState(390); + setState(395); ((MatchQueryContext)_localctx).singleField = qualifiedName(); - setState(391); + setState(396); match(T__2); - setState(392); - ((MatchQueryContext)_localctx).queryString = match(STRING); setState(397); + ((MatchQueryContext)_localctx).queryString = match(STRING); + setState(402); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(393); + setState(398); match(T__2); - setState(394); + setState(399); ((MatchQueryContext)_localctx).options = match(STRING); } } - setState(399); + setState(404); _errHandler.sync(this); _la = _input.LA(1); } - setState(400); + setState(405); match(T__1); } break; @@ -2716,33 +2775,33 @@ class SqlBaseParser extends Parser { _localctx = new MultiMatchQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(402); + setState(407); match(MATCH); - setState(403); + setState(408); match(T__0); - setState(404); + setState(409); ((MultiMatchQueryContext)_localctx).multiFields = match(STRING); - setState(405); + setState(410); match(T__2); - setState(406); - ((MultiMatchQueryContext)_localctx).queryString = match(STRING); setState(411); + ((MultiMatchQueryContext)_localctx).queryString = match(STRING); + setState(416); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(407); + setState(412); match(T__2); - setState(408); + setState(413); ((MultiMatchQueryContext)_localctx).options = match(STRING); } } - setState(413); + setState(418); _errHandler.sync(this); _la = _input.LA(1); } - setState(414); + setState(419); match(T__1); } break; @@ -2751,13 +2810,13 @@ class SqlBaseParser extends Parser { _localctx = new BooleanDefaultContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(415); + setState(420); predicated(); } break; } _ctx.stop = _input.LT(-1); - setState(426); + setState(431); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,60,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2765,7 +2824,7 @@ class SqlBaseParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(424); + setState(429); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) { case 1: @@ -2773,11 +2832,11 @@ class SqlBaseParser extends Parser { _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); ((LogicalBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); - setState(418); + setState(423); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(419); + setState(424); ((LogicalBinaryContext)_localctx).operator = match(AND); - setState(420); + setState(425); ((LogicalBinaryContext)_localctx).right = booleanExpression(3); } break; @@ -2786,18 +2845,18 @@ class SqlBaseParser extends Parser { _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); ((LogicalBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); - setState(421); + setState(426); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(422); + setState(427); ((LogicalBinaryContext)_localctx).operator = match(OR); - setState(423); + setState(428); ((LogicalBinaryContext)_localctx).right = booleanExpression(2); } break; } } } - setState(428); + setState(433); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,60,_ctx); } @@ -2846,14 +2905,14 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(429); + setState(434); valueExpression(0); - setState(431); + setState(436); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) { case 1: { - setState(430); + setState(435); predicate(); } break; @@ -2927,112 +2986,94 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 46, RULE_predicate); int _la; try { - setState(479); + setState(484); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,69,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(434); + setState(439); _la = _input.LA(1); if (_la==NOT) { { - setState(433); + setState(438); match(NOT); } } - setState(436); + setState(441); ((PredicateContext)_localctx).kind = match(BETWEEN); - setState(437); + setState(442); ((PredicateContext)_localctx).lower = valueExpression(0); - setState(438); + setState(443); match(AND); - setState(439); + setState(444); ((PredicateContext)_localctx).upper = valueExpression(0); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(442); + setState(447); _la = _input.LA(1); if (_la==NOT) { { - setState(441); + setState(446); match(NOT); } } - setState(444); + setState(449); ((PredicateContext)_localctx).kind = match(IN); - setState(445); + setState(450); match(T__0); - setState(446); - expression(); setState(451); + expression(); + setState(456); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(447); + setState(452); match(T__2); - setState(448); + setState(453); expression(); } } - setState(453); + setState(458); _errHandler.sync(this); _la = _input.LA(1); } - setState(454); + setState(459); match(T__1); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(457); + setState(462); _la = _input.LA(1); if (_la==NOT) { { - setState(456); + setState(461); match(NOT); } } - setState(459); + setState(464); ((PredicateContext)_localctx).kind = match(IN); - setState(460); + setState(465); match(T__0); - setState(461); + setState(466); query(); - setState(462); + setState(467); match(T__1); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(465); - _la = _input.LA(1); - if (_la==NOT) { - { - setState(464); - match(NOT); - } - } - - setState(467); - ((PredicateContext)_localctx).kind = match(LIKE); - setState(468); - pattern(); - } - break; - case 5: - enterOuterAlt(_localctx, 5); - { setState(470); _la = _input.LA(1); if (_la==NOT) { @@ -3043,26 +3084,44 @@ class SqlBaseParser extends Parser { } setState(472); - ((PredicateContext)_localctx).kind = match(RLIKE); + ((PredicateContext)_localctx).kind = match(LIKE); setState(473); + pattern(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(475); + _la = _input.LA(1); + if (_la==NOT) { + { + setState(474); + match(NOT); + } + } + + setState(477); + ((PredicateContext)_localctx).kind = match(RLIKE); + setState(478); ((PredicateContext)_localctx).regex = match(STRING); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(474); + setState(479); match(IS); - setState(476); + setState(481); _la = _input.LA(1); if (_la==NOT) { { - setState(475); + setState(480); match(NOT); } } - setState(478); + setState(483); ((PredicateContext)_localctx).kind = match(NULL); } break; @@ -3112,16 +3171,16 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(481); + setState(486); ((PatternContext)_localctx).value = match(STRING); - setState(484); + setState(489); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { case 1: { - setState(482); + setState(487); match(ESCAPE); - setState(483); + setState(488); ((PatternContext)_localctx).escape = match(STRING); } break; @@ -3265,12 +3324,13 @@ class SqlBaseParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(490); + setState(495); switch (_input.LA(1)) { case T__0: case ANALYZE: case ANALYZED: case CAST: + case CATALOGS: case COLUMNS: case DEBUG: case EXECUTABLE: @@ -3309,7 +3369,7 @@ class SqlBaseParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(487); + setState(492); primaryExpression(); } break; @@ -3319,7 +3379,7 @@ class SqlBaseParser extends Parser { _localctx = new ArithmeticUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(488); + setState(493); ((ArithmeticUnaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -3327,7 +3387,7 @@ class SqlBaseParser extends Parser { } else { consume(); } - setState(489); + setState(494); valueExpression(4); } break; @@ -3335,7 +3395,7 @@ class SqlBaseParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(504); + setState(509); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,73,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3343,7 +3403,7 @@ class SqlBaseParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(502); + setState(507); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) { case 1: @@ -3351,17 +3411,17 @@ class SqlBaseParser extends Parser { _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); ((ArithmeticBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(492); + setState(497); if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(493); + setState(498); ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); - if ( !(((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & ((1L << (ASTERISK - 76)) | (1L << (SLASH - 76)) | (1L << (PERCENT - 76)))) != 0)) ) { + if ( !(((((_la - 78)) & ~0x3f) == 0 && ((1L << (_la - 78)) & ((1L << (ASTERISK - 78)) | (1L << (SLASH - 78)) | (1L << (PERCENT - 78)))) != 0)) ) { ((ArithmeticBinaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this); } else { consume(); } - setState(494); + setState(499); ((ArithmeticBinaryContext)_localctx).right = valueExpression(4); } break; @@ -3370,9 +3430,9 @@ class SqlBaseParser extends Parser { _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); ((ArithmeticBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(495); + setState(500); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(496); + setState(501); ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -3380,7 +3440,7 @@ class SqlBaseParser extends Parser { } else { consume(); } - setState(497); + setState(502); ((ArithmeticBinaryContext)_localctx).right = valueExpression(3); } break; @@ -3389,18 +3449,18 @@ class SqlBaseParser extends Parser { _localctx = new ComparisonContext(new ValueExpressionContext(_parentctx, _parentState)); ((ComparisonContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(498); + setState(503); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(499); + setState(504); comparisonOperator(); - setState(500); + setState(505); ((ComparisonContext)_localctx).right = valueExpression(2); } break; } } } - setState(506); + setState(511); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,73,_ctx); } @@ -3627,24 +3687,24 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 52, RULE_primaryExpression); int _la; try { - setState(556); + setState(561); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { case 1: _localctx = new CastContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(507); - match(CAST); - setState(508); - match(T__0); - setState(509); - expression(); - setState(510); - match(AS); - setState(511); - dataType(); setState(512); + match(CAST); + setState(513); + match(T__0); + setState(514); + expression(); + setState(515); + match(AS); + setState(516); + dataType(); + setState(517); match(T__1); } break; @@ -3652,17 +3712,17 @@ class SqlBaseParser extends Parser { _localctx = new ExtractContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(514); - match(EXTRACT); - setState(515); - match(T__0); - setState(516); - ((ExtractContext)_localctx).field = identifier(); - setState(517); - match(FROM); - setState(518); - valueExpression(0); setState(519); + match(EXTRACT); + setState(520); + match(T__0); + setState(521); + ((ExtractContext)_localctx).field = identifier(); + setState(522); + match(FROM); + setState(523); + valueExpression(0); + setState(524); match(T__1); } break; @@ -3670,7 +3730,7 @@ class SqlBaseParser extends Parser { _localctx = new ConstantDefaultContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(521); + setState(526); constant(); } break; @@ -3678,7 +3738,7 @@ class SqlBaseParser extends Parser { _localctx = new StarContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(522); + setState(527); match(ASTERISK); } break; @@ -3686,18 +3746,18 @@ class SqlBaseParser extends Parser { _localctx = new StarContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(526); + setState(531); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (TYPES - 65)) | (1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { { - setState(523); + setState(528); qualifiedName(); - setState(524); + setState(529); match(DOT); } } - setState(528); + setState(533); match(ASTERISK); } break; @@ -3705,45 +3765,45 @@ class SqlBaseParser extends Parser { _localctx = new FunctionCallContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(529); + setState(534); identifier(); - setState(530); + setState(535); match(T__0); - setState(542); + setState(547); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ALL) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << COLUMNS) | (1L << DEBUG) | (1L << DISTINCT) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << MATCH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TRUE) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (PLUS - 65)) | (1L << (MINUS - 65)) | (1L << (ASTERISK - 65)) | (1L << (STRING - 65)) | (1L << (INTEGER_VALUE - 65)) | (1L << (DECIMAL_VALUE - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ALL) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << DISTINCT) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << MATCH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TRUE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (PLUS - 64)) | (1L << (MINUS - 64)) | (1L << (ASTERISK - 64)) | (1L << (STRING - 64)) | (1L << (INTEGER_VALUE - 64)) | (1L << (DECIMAL_VALUE - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) { { - setState(532); + setState(537); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(531); + setState(536); setQuantifier(); } } - setState(534); - expression(); setState(539); + expression(); + setState(544); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(535); + setState(540); match(T__2); - setState(536); + setState(541); expression(); } } - setState(541); + setState(546); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(544); + setState(549); match(T__1); } break; @@ -3751,11 +3811,11 @@ class SqlBaseParser extends Parser { _localctx = new SubqueryExpressionContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(546); + setState(551); match(T__0); - setState(547); + setState(552); query(); - setState(548); + setState(553); match(T__1); } break; @@ -3763,7 +3823,7 @@ class SqlBaseParser extends Parser { _localctx = new ColumnReferenceContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(550); + setState(555); identifier(); } break; @@ -3771,7 +3831,7 @@ class SqlBaseParser extends Parser { _localctx = new DereferenceContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(551); + setState(556); qualifiedName(); } break; @@ -3779,11 +3839,11 @@ class SqlBaseParser extends Parser { _localctx = new ParenthesizedExpressionContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(552); + setState(557); match(T__0); - setState(553); + setState(558); expression(); - setState(554); + setState(559); match(T__1); } break; @@ -3892,13 +3952,13 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 54, RULE_constant); try { int _alt; - setState(566); + setState(571); switch (_input.LA(1)) { case NULL: _localctx = new NullLiteralContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(558); + setState(563); match(NULL); } break; @@ -3907,7 +3967,7 @@ class SqlBaseParser extends Parser { _localctx = new NumericLiteralContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(559); + setState(564); number(); } break; @@ -3916,7 +3976,7 @@ class SqlBaseParser extends Parser { _localctx = new BooleanLiteralContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(560); + setState(565); booleanValue(); } break; @@ -3924,7 +3984,7 @@ class SqlBaseParser extends Parser { _localctx = new StringLiteralContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(562); + setState(567); _errHandler.sync(this); _alt = 1; do { @@ -3932,7 +3992,7 @@ class SqlBaseParser extends Parser { case 1: { { - setState(561); + setState(566); match(STRING); } } @@ -3940,7 +4000,7 @@ class SqlBaseParser extends Parser { default: throw new NoViableAltException(this); } - setState(564); + setState(569); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,79,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); @@ -3994,9 +4054,9 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(568); + setState(573); _la = _input.LA(1); - if ( !(((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (EQ - 68)) | (1L << (NEQ - 68)) | (1L << (LT - 68)) | (1L << (LTE - 68)) | (1L << (GT - 68)) | (1L << (GTE - 68)))) != 0)) ) { + if ( !(((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (EQ - 70)) | (1L << (NEQ - 70)) | (1L << (LT - 70)) | (1L << (LTE - 70)) | (1L << (GT - 70)) | (1L << (GTE - 70)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -4043,7 +4103,7 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(570); + setState(575); _la = _input.LA(1); if ( !(_la==FALSE || _la==TRUE) ) { _errHandler.recoverInline(this); @@ -4101,7 +4161,7 @@ class SqlBaseParser extends Parser { _localctx = new PrimitiveDataTypeContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(572); + setState(577); identifier(); } } @@ -4153,25 +4213,25 @@ class SqlBaseParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(579); + setState(584); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,81,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(574); + setState(579); identifier(); - setState(575); + setState(580); match(DOT); } } } - setState(581); + setState(586); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,81,_ctx); } - setState(582); + setState(587); identifier(); } } @@ -4216,18 +4276,19 @@ class SqlBaseParser extends Parser { IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); enterRule(_localctx, 64, RULE_identifier); try { - setState(586); + setState(591); switch (_input.LA(1)) { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: enterOuterAlt(_localctx, 1); { - setState(584); + setState(589); quoteIdentifier(); } break; case ANALYZE: case ANALYZED: + case CATALOGS: case COLUMNS: case DEBUG: case EXECUTABLE: @@ -4253,7 +4314,7 @@ class SqlBaseParser extends Parser { case DIGIT_IDENTIFIER: enterOuterAlt(_localctx, 2); { - setState(585); + setState(590); unquoteIdentifier(); } break; @@ -4306,43 +4367,43 @@ class SqlBaseParser extends Parser { enterRule(_localctx, 66, RULE_tableIdentifier); int _la; try { - setState(600); + setState(605); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,85,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(591); + setState(596); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT) | (1L << TYPES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES) | (1L << TEXT))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (TYPES - 65)) | (1L << (VERIFY - 65)) | (1L << (IDENTIFIER - 65)) | (1L << (DIGIT_IDENTIFIER - 65)) | (1L << (QUOTED_IDENTIFIER - 65)) | (1L << (BACKQUOTED_IDENTIFIER - 65)))) != 0)) { { - setState(588); + setState(593); ((TableIdentifierContext)_localctx).catalog = identifier(); - setState(589); + setState(594); match(T__3); } } - setState(593); + setState(598); match(TABLE_IDENTIFIER); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(597); + setState(602); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,84,_ctx) ) { case 1: { - setState(594); + setState(599); ((TableIdentifierContext)_localctx).catalog = identifier(); - setState(595); + setState(600); match(T__3); } break; } - setState(599); + setState(604); ((TableIdentifierContext)_localctx).name = identifier(); } break; @@ -4409,13 +4470,13 @@ class SqlBaseParser extends Parser { QuoteIdentifierContext _localctx = new QuoteIdentifierContext(_ctx, getState()); enterRule(_localctx, 68, RULE_quoteIdentifier); try { - setState(604); + setState(609); switch (_input.LA(1)) { case QUOTED_IDENTIFIER: _localctx = new QuotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(602); + setState(607); match(QUOTED_IDENTIFIER); } break; @@ -4423,7 +4484,7 @@ class SqlBaseParser extends Parser { _localctx = new BackQuotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(603); + setState(608); match(BACKQUOTED_IDENTIFIER); } break; @@ -4495,18 +4556,19 @@ class SqlBaseParser extends Parser { UnquoteIdentifierContext _localctx = new UnquoteIdentifierContext(_ctx, getState()); enterRule(_localctx, 70, RULE_unquoteIdentifier); try { - setState(609); + setState(614); switch (_input.LA(1)) { case IDENTIFIER: _localctx = new UnquotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(606); + setState(611); match(IDENTIFIER); } break; case ANALYZE: case ANALYZED: + case CATALOGS: case COLUMNS: case DEBUG: case EXECUTABLE: @@ -4531,7 +4593,7 @@ class SqlBaseParser extends Parser { _localctx = new UnquotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(607); + setState(612); nonReserved(); } break; @@ -4539,7 +4601,7 @@ class SqlBaseParser extends Parser { _localctx = new DigitIdentifierContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(608); + setState(613); match(DIGIT_IDENTIFIER); } break; @@ -4608,13 +4670,13 @@ class SqlBaseParser extends Parser { NumberContext _localctx = new NumberContext(_ctx, getState()); enterRule(_localctx, 72, RULE_number); try { - setState(613); + setState(618); switch (_input.LA(1)) { case DECIMAL_VALUE: _localctx = new DecimalLiteralContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(611); + setState(616); match(DECIMAL_VALUE); } break; @@ -4622,7 +4684,7 @@ class SqlBaseParser extends Parser { _localctx = new IntegerLiteralContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(612); + setState(617); match(INTEGER_VALUE); } break; @@ -4644,6 +4706,7 @@ class SqlBaseParser extends Parser { public static class NonReservedContext extends ParserRuleContext { public TerminalNode ANALYZE() { return getToken(SqlBaseParser.ANALYZE, 0); } public TerminalNode ANALYZED() { return getToken(SqlBaseParser.ANALYZED, 0); } + public TerminalNode CATALOGS() { return getToken(SqlBaseParser.CATALOGS, 0); } public TerminalNode COLUMNS() { return getToken(SqlBaseParser.COLUMNS, 0); } public TerminalNode DEBUG() { return getToken(SqlBaseParser.DEBUG, 0); } public TerminalNode EXECUTABLE() { return getToken(SqlBaseParser.EXECUTABLE, 0); } @@ -4691,9 +4754,9 @@ class SqlBaseParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(615); + setState(620); _la = _input.LA(1); - if ( !(((((_la - 6)) & ~0x3f) == 0 && ((1L << (_la - 6)) & ((1L << (ANALYZE - 6)) | (1L << (ANALYZED - 6)) | (1L << (COLUMNS - 6)) | (1L << (DEBUG - 6)) | (1L << (EXECUTABLE - 6)) | (1L << (EXPLAIN - 6)) | (1L << (FORMAT - 6)) | (1L << (FUNCTIONS - 6)) | (1L << (GRAPHVIZ - 6)) | (1L << (MAPPED - 6)) | (1L << (OPTIMIZED - 6)) | (1L << (PARSED - 6)) | (1L << (PHYSICAL - 6)) | (1L << (PLAN - 6)) | (1L << (RLIKE - 6)) | (1L << (QUERY - 6)) | (1L << (SCHEMAS - 6)) | (1L << (SHOW - 6)) | (1L << (SYS - 6)) | (1L << (TABLES - 6)) | (1L << (TEXT - 6)) | (1L << (TYPES - 6)) | (1L << (VERIFY - 6)))) != 0)) ) { + if ( !(((((_la - 6)) & ~0x3f) == 0 && ((1L << (_la - 6)) & ((1L << (ANALYZE - 6)) | (1L << (ANALYZED - 6)) | (1L << (CATALOGS - 6)) | (1L << (COLUMNS - 6)) | (1L << (DEBUG - 6)) | (1L << (EXECUTABLE - 6)) | (1L << (EXPLAIN - 6)) | (1L << (FORMAT - 6)) | (1L << (FUNCTIONS - 6)) | (1L << (GRAPHVIZ - 6)) | (1L << (MAPPED - 6)) | (1L << (OPTIMIZED - 6)) | (1L << (PARSED - 6)) | (1L << (PHYSICAL - 6)) | (1L << (PLAN - 6)) | (1L << (RLIKE - 6)) | (1L << (QUERY - 6)) | (1L << (SCHEMAS - 6)) | (1L << (SHOW - 6)) | (1L << (SYS - 6)) | (1L << (TABLES - 6)) | (1L << (TEXT - 6)) | (1L << (TYPES - 6)) | (1L << (VERIFY - 6)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -4742,7 +4805,7 @@ class SqlBaseParser extends Parser { } public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3_\u026c\4\2\t\2\4"+ + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3a\u0271\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"+ @@ -4751,242 +4814,244 @@ class SqlBaseParser extends Parser { "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4^\n\4\f\4\16\4a\13\4\3\4\5\4d\n"+ "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4m\n\4\f\4\16\4p\13\4\3\4\5\4s\n\4\3"+ "\4\3\4\3\4\3\4\5\4y\n\4\3\4\5\4|\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3"+ - "\4\5\4\u0087\n\4\3\4\5\4\u008a\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u0091\n\4\3"+ - "\4\5\4\u0094\n\4\3\4\3\4\3\4\3\4\5\4\u009a\n\4\3\4\5\4\u009d\n\4\3\4\5"+ - "\4\u00a0\n\4\3\4\5\4\u00a3\n\4\3\4\3\4\5\4\u00a7\n\4\3\5\3\5\3\5\3\5\7"+ - "\5\u00ad\n\5\f\5\16\5\u00b0\13\5\5\5\u00b2\n\5\3\5\3\5\3\6\3\6\3\6\3\6"+ - "\3\6\3\6\7\6\u00bc\n\6\f\6\16\6\u00bf\13\6\5\6\u00c1\n\6\3\6\3\6\5\6\u00c5"+ - "\n\6\3\7\3\7\3\7\3\7\3\7\5\7\u00cc\n\7\3\b\3\b\5\b\u00d0\n\b\3\t\3\t\5"+ - "\t\u00d4\n\t\3\t\3\t\3\t\7\t\u00d9\n\t\f\t\16\t\u00dc\13\t\3\t\5\t\u00df"+ - "\n\t\3\t\3\t\5\t\u00e3\n\t\3\t\3\t\3\t\5\t\u00e8\n\t\3\t\3\t\5\t\u00ec"+ - "\n\t\3\n\3\n\3\n\3\n\7\n\u00f2\n\n\f\n\16\n\u00f5\13\n\3\13\5\13\u00f8"+ - "\n\13\3\13\3\13\3\13\7\13\u00fd\n\13\f\13\16\13\u0100\13\13\3\f\3\f\3"+ - "\r\3\r\3\r\3\r\7\r\u0108\n\r\f\r\16\r\u010b\13\r\5\r\u010d\n\r\3\r\3\r"+ - "\5\r\u0111\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\20\3\20\5\20"+ - "\u011d\n\20\3\20\5\20\u0120\n\20\3\21\3\21\7\21\u0124\n\21\f\21\16\21"+ - "\u0127\13\21\3\22\3\22\3\22\3\22\5\22\u012d\n\22\3\22\3\22\3\22\3\22\3"+ - "\22\5\22\u0134\n\22\3\23\5\23\u0137\n\23\3\23\3\23\5\23\u013b\n\23\3\23"+ - "\3\23\5\23\u013f\n\23\3\23\3\23\5\23\u0143\n\23\5\23\u0145\n\23\3\24\3"+ - "\24\3\24\3\24\3\24\3\24\3\24\7\24\u014e\n\24\f\24\16\24\u0151\13\24\3"+ - "\24\3\24\5\24\u0155\n\24\3\25\3\25\5\25\u0159\n\25\3\25\5\25\u015c\n\25"+ - "\3\25\3\25\3\25\3\25\5\25\u0162\n\25\3\25\5\25\u0165\n\25\3\25\3\25\3"+ - "\25\3\25\5\25\u016b\n\25\3\25\5\25\u016e\n\25\5\25\u0170\n\25\3\26\3\26"+ - "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\7\27"+ - "\u0181\n\27\f\27\16\27\u0184\13\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ - "\3\27\7\27\u018e\n\27\f\27\16\27\u0191\13\27\3\27\3\27\3\27\3\27\3\27"+ - "\3\27\3\27\3\27\3\27\7\27\u019c\n\27\f\27\16\27\u019f\13\27\3\27\3\27"+ - "\5\27\u01a3\n\27\3\27\3\27\3\27\3\27\3\27\3\27\7\27\u01ab\n\27\f\27\16"+ - "\27\u01ae\13\27\3\30\3\30\5\30\u01b2\n\30\3\31\5\31\u01b5\n\31\3\31\3"+ - "\31\3\31\3\31\3\31\3\31\5\31\u01bd\n\31\3\31\3\31\3\31\3\31\3\31\7\31"+ - "\u01c4\n\31\f\31\16\31\u01c7\13\31\3\31\3\31\3\31\5\31\u01cc\n\31\3\31"+ - "\3\31\3\31\3\31\3\31\3\31\5\31\u01d4\n\31\3\31\3\31\3\31\5\31\u01d9\n"+ - "\31\3\31\3\31\3\31\3\31\5\31\u01df\n\31\3\31\5\31\u01e2\n\31\3\32\3\32"+ - "\3\32\5\32\u01e7\n\32\3\33\3\33\3\33\3\33\5\33\u01ed\n\33\3\33\3\33\3"+ - "\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\7\33\u01f9\n\33\f\33\16\33\u01fc"+ + "\4\5\4\u0087\n\4\3\4\5\4\u008a\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u0093"+ + "\n\4\3\4\5\4\u0096\n\4\3\4\3\4\3\4\3\4\5\4\u009c\n\4\3\4\5\4\u009f\n\4"+ + "\3\4\5\4\u00a2\n\4\3\4\5\4\u00a5\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u00ac\n\4"+ + "\3\5\3\5\3\5\3\5\7\5\u00b2\n\5\f\5\16\5\u00b5\13\5\5\5\u00b7\n\5\3\5\3"+ + "\5\3\6\3\6\3\6\3\6\3\6\3\6\7\6\u00c1\n\6\f\6\16\6\u00c4\13\6\5\6\u00c6"+ + "\n\6\3\6\3\6\5\6\u00ca\n\6\3\7\3\7\3\7\3\7\3\7\5\7\u00d1\n\7\3\b\3\b\5"+ + "\b\u00d5\n\b\3\t\3\t\5\t\u00d9\n\t\3\t\3\t\3\t\7\t\u00de\n\t\f\t\16\t"+ + "\u00e1\13\t\3\t\5\t\u00e4\n\t\3\t\3\t\5\t\u00e8\n\t\3\t\3\t\3\t\5\t\u00ed"+ + "\n\t\3\t\3\t\5\t\u00f1\n\t\3\n\3\n\3\n\3\n\7\n\u00f7\n\n\f\n\16\n\u00fa"+ + "\13\n\3\13\5\13\u00fd\n\13\3\13\3\13\3\13\7\13\u0102\n\13\f\13\16\13\u0105"+ + "\13\13\3\f\3\f\3\r\3\r\3\r\3\r\7\r\u010d\n\r\f\r\16\r\u0110\13\r\5\r\u0112"+ + "\n\r\3\r\3\r\5\r\u0116\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\20"+ + "\3\20\5\20\u0122\n\20\3\20\5\20\u0125\n\20\3\21\3\21\7\21\u0129\n\21\f"+ + "\21\16\21\u012c\13\21\3\22\3\22\3\22\3\22\5\22\u0132\n\22\3\22\3\22\3"+ + "\22\3\22\3\22\5\22\u0139\n\22\3\23\5\23\u013c\n\23\3\23\3\23\5\23\u0140"+ + "\n\23\3\23\3\23\5\23\u0144\n\23\3\23\3\23\5\23\u0148\n\23\5\23\u014a\n"+ + "\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\7\24\u0153\n\24\f\24\16\24\u0156"+ + "\13\24\3\24\3\24\5\24\u015a\n\24\3\25\3\25\5\25\u015e\n\25\3\25\5\25\u0161"+ + "\n\25\3\25\3\25\3\25\3\25\5\25\u0167\n\25\3\25\5\25\u016a\n\25\3\25\3"+ + "\25\3\25\3\25\5\25\u0170\n\25\3\25\5\25\u0173\n\25\5\25\u0175\n\25\3\26"+ + "\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ + "\7\27\u0186\n\27\f\27\16\27\u0189\13\27\3\27\3\27\3\27\3\27\3\27\3\27"+ + "\3\27\3\27\7\27\u0193\n\27\f\27\16\27\u0196\13\27\3\27\3\27\3\27\3\27"+ + "\3\27\3\27\3\27\3\27\3\27\7\27\u01a1\n\27\f\27\16\27\u01a4\13\27\3\27"+ + "\3\27\5\27\u01a8\n\27\3\27\3\27\3\27\3\27\3\27\3\27\7\27\u01b0\n\27\f"+ + "\27\16\27\u01b3\13\27\3\30\3\30\5\30\u01b7\n\30\3\31\5\31\u01ba\n\31\3"+ + "\31\3\31\3\31\3\31\3\31\3\31\5\31\u01c2\n\31\3\31\3\31\3\31\3\31\3\31"+ + "\7\31\u01c9\n\31\f\31\16\31\u01cc\13\31\3\31\3\31\3\31\5\31\u01d1\n\31"+ + "\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u01d9\n\31\3\31\3\31\3\31\5\31\u01de"+ + "\n\31\3\31\3\31\3\31\3\31\5\31\u01e4\n\31\3\31\5\31\u01e7\n\31\3\32\3"+ + "\32\3\32\5\32\u01ec\n\32\3\33\3\33\3\33\3\33\5\33\u01f2\n\33\3\33\3\33"+ + "\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\7\33\u01fe\n\33\f\33\16\33\u0201"+ "\13\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34"+ - "\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u0211\n\34\3\34\3\34\3\34\3\34\5\34"+ - "\u0217\n\34\3\34\3\34\3\34\7\34\u021c\n\34\f\34\16\34\u021f\13\34\5\34"+ - "\u0221\n\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34"+ - "\5\34\u022f\n\34\3\35\3\35\3\35\3\35\6\35\u0235\n\35\r\35\16\35\u0236"+ - "\5\35\u0239\n\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3!\7!\u0244\n!\f!\16"+ - "!\u0247\13!\3!\3!\3\"\3\"\5\"\u024d\n\"\3#\3#\3#\5#\u0252\n#\3#\3#\3#"+ - "\3#\5#\u0258\n#\3#\5#\u025b\n#\3$\3$\5$\u025f\n$\3%\3%\3%\5%\u0264\n%"+ - "\3&\3&\5&\u0268\n&\3\'\3\'\3\'\2\4,\64(\2\4\6\b\n\f\16\20\22\24\26\30"+ - "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJL\2\17\b\2\7\7\t\t\27\27**\60"+ - "\60\64\64\4\2 ??\4\2\t\t\60\60\4\2\35\35##\3\2\23\24\4\2\7\7TT\4\2\r"+ - "\r\23\23\4\2\7\7\25\25\3\2LM\3\2NP\3\2FK\4\2\33\33@@\17\2\b\t\21\22\27"+ - "\27\31\31\34\34\37 **\60\60\64\668:\u023e\3\2\2\2@\u0245\3\2\2\2B\u024c\3\2\2\2D"+ - "\u025a\3\2\2\2F\u025e\3\2\2\2H\u0263\3\2\2\2J\u0267\3\2\2\2L\u0269\3\2"+ - "\2\2NO\5\6\4\2OP\7\2\2\3P\3\3\2\2\2QR\5*\26\2RS\7\2\2\3S\5\3\2\2\2T\u00a7"+ - "\5\b\5\2Uc\7\31\2\2V_\7\3\2\2WX\7\66\2\2X^\t\2\2\2YZ\7\34\2\2Z^\t\3\2"+ - "\2[\\\7C\2\2\\^\5<\37\2]W\3\2\2\2]Y\3\2\2\2][\3\2\2\2^a\3\2\2\2_]\3\2"+ + "\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u0216\n\34\3\34\3\34\3\34\3\34\5\34"+ + "\u021c\n\34\3\34\3\34\3\34\7\34\u0221\n\34\f\34\16\34\u0224\13\34\5\34"+ + "\u0226\n\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34"+ + "\5\34\u0234\n\34\3\35\3\35\3\35\3\35\6\35\u023a\n\35\r\35\16\35\u023b"+ + "\5\35\u023e\n\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3!\7!\u0249\n!\f!\16"+ + "!\u024c\13!\3!\3!\3\"\3\"\5\"\u0252\n\"\3#\3#\3#\5#\u0257\n#\3#\3#\3#"+ + "\3#\5#\u025d\n#\3#\5#\u0260\n#\3$\3$\5$\u0264\n$\3%\3%\3%\5%\u0269\n%"+ + "\3&\3&\5&\u026d\n&\3\'\3\'\3\'\2\4,\64(\2\4\6\b\n\f\16\20\22\24\26\30"+ + "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJL\2\17\b\2\7\7\t\t\30\30++\61"+ + "\61\65\65\4\2!!AA\4\2\t\t\61\61\4\2\36\36$$\3\2\24\25\4\2\7\7VV\4\2\r"+ + "\r\24\24\4\2\7\7\26\26\3\2NO\3\2PR\3\2HM\4\2\34\34BB\20\2\b\t\21\23\30"+ + "\30\32\32\35\35 !++\61\61\65\679;=>@ACCEE\u02c6\2N\3\2\2\2\4Q\3\2\2\2"+ + "\6\u00ab\3\2\2\2\b\u00b6\3\2\2\2\n\u00ba\3\2\2\2\f\u00d0\3\2\2\2\16\u00d2"+ + "\3\2\2\2\20\u00d6\3\2\2\2\22\u00f2\3\2\2\2\24\u00fc\3\2\2\2\26\u0106\3"+ + "\2\2\2\30\u0115\3\2\2\2\32\u0117\3\2\2\2\34\u011d\3\2\2\2\36\u011f\3\2"+ + "\2\2 \u0126\3\2\2\2\"\u0138\3\2\2\2$\u0149\3\2\2\2&\u0159\3\2\2\2(\u0174"+ + "\3\2\2\2*\u0176\3\2\2\2,\u01a7\3\2\2\2.\u01b4\3\2\2\2\60\u01e6\3\2\2\2"+ + "\62\u01e8\3\2\2\2\64\u01f1\3\2\2\2\66\u0233\3\2\2\28\u023d\3\2\2\2:\u023f"+ + "\3\2\2\2<\u0241\3\2\2\2>\u0243\3\2\2\2@\u024a\3\2\2\2B\u0251\3\2\2\2D"+ + "\u025f\3\2\2\2F\u0263\3\2\2\2H\u0268\3\2\2\2J\u026c\3\2\2\2L\u026e\3\2"+ + "\2\2NO\5\6\4\2OP\7\2\2\3P\3\3\2\2\2QR\5*\26\2RS\7\2\2\3S\5\3\2\2\2T\u00ac"+ + "\5\b\5\2Uc\7\32\2\2V_\7\3\2\2WX\7\67\2\2X^\t\2\2\2YZ\7\35\2\2Z^\t\3\2"+ + "\2[\\\7E\2\2\\^\5<\37\2]W\3\2\2\2]Y\3\2\2\2][\3\2\2\2^a\3\2\2\2_]\3\2"+ "\2\2_`\3\2\2\2`b\3\2\2\2a_\3\2\2\2bd\7\4\2\2cV\3\2\2\2cd\3\2\2\2de\3\2"+ - "\2\2e\u00a7\5\6\4\2fr\7\22\2\2gn\7\3\2\2hi\7\66\2\2im\t\4\2\2jk\7\34\2"+ + "\2\2e\u00ac\5\6\4\2fr\7\23\2\2gn\7\3\2\2hi\7\67\2\2im\t\4\2\2jk\7\35\2"+ "\2km\t\3\2\2lh\3\2\2\2lj\3\2\2\2mp\3\2\2\2nl\3\2\2\2no\3\2\2\2oq\3\2\2"+ - "\2pn\3\2\2\2qs\7\4\2\2rg\3\2\2\2rs\3\2\2\2st\3\2\2\2t\u00a7\5\6\4\2uv"+ - "\7<\2\2v{\7>\2\2wy\7(\2\2xw\3\2\2\2xy\3\2\2\2yz\3\2\2\2z|\5\62\32\2{x"+ - "\3\2\2\2{|\3\2\2\2|\u00a7\3\2\2\2}~\7<\2\2~\177\7\21\2\2\177\u0080\t\5"+ - "\2\2\u0080\u00a7\5D#\2\u0081\u0082\t\6\2\2\u0082\u00a7\5D#\2\u0083\u0084"+ - "\7<\2\2\u0084\u0089\7\37\2\2\u0085\u0087\7(\2\2\u0086\u0085\3\2\2\2\u0086"+ + "\2pn\3\2\2\2qs\7\4\2\2rg\3\2\2\2rs\3\2\2\2st\3\2\2\2t\u00ac\5\6\4\2uv"+ + "\7=\2\2v{\7@\2\2wy\7)\2\2xw\3\2\2\2xy\3\2\2\2yz\3\2\2\2z|\5\62\32\2{x"+ + "\3\2\2\2{|\3\2\2\2|\u00ac\3\2\2\2}~\7=\2\2~\177\7\22\2\2\177\u0080\t\5"+ + "\2\2\u0080\u00ac\5D#\2\u0081\u0082\t\6\2\2\u0082\u00ac\5D#\2\u0083\u0084"+ + "\7=\2\2\u0084\u0089\7 \2\2\u0085\u0087\7)\2\2\u0086\u0085\3\2\2\2\u0086"+ "\u0087\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u008a\5\62\32\2\u0089\u0086\3"+ - "\2\2\2\u0089\u008a\3\2\2\2\u008a\u00a7\3\2\2\2\u008b\u008c\7<\2\2\u008c"+ - "\u00a7\7:\2\2\u008d\u008e\7=\2\2\u008e\u0093\7>\2\2\u008f\u0091\7(\2\2"+ - "\u0090\u008f\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0092\3\2\2\2\u0092\u0094"+ - "\5\62\32\2\u0093\u0090\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u00a7\3\2\2\2"+ - "\u0095\u0096\7=\2\2\u0096\u009c\7\21\2\2\u0097\u0099\7>\2\2\u0098\u009a"+ - "\7(\2\2\u0099\u0098\3\2\2\2\u0099\u009a\3\2\2\2\u009a\u009b\3\2\2\2\u009b"+ - "\u009d\5\62\32\2\u009c\u0097\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u00a2\3"+ - "\2\2\2\u009e\u00a0\7(\2\2\u009f\u009e\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0"+ - "\u00a1\3\2\2\2\u00a1\u00a3\5\62\32\2\u00a2\u009f\3\2\2\2\u00a2\u00a3\3"+ - "\2\2\2\u00a3\u00a7\3\2\2\2\u00a4\u00a5\7=\2\2\u00a5\u00a7\7A\2\2\u00a6"+ - "T\3\2\2\2\u00a6U\3\2\2\2\u00a6f\3\2\2\2\u00a6u\3\2\2\2\u00a6}\3\2\2\2"+ - "\u00a6\u0081\3\2\2\2\u00a6\u0083\3\2\2\2\u00a6\u008b\3\2\2\2\u00a6\u008d"+ - "\3\2\2\2\u00a6\u0095\3\2\2\2\u00a6\u00a4\3\2\2\2\u00a7\7\3\2\2\2\u00a8"+ - "\u00a9\7E\2\2\u00a9\u00ae\5\32\16\2\u00aa\u00ab\7\5\2\2\u00ab\u00ad\5"+ - "\32\16\2\u00ac\u00aa\3\2\2\2\u00ad\u00b0\3\2\2\2\u00ae\u00ac\3\2\2\2\u00ae"+ - "\u00af\3\2\2\2\u00af\u00b2\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00a8\3\2"+ - "\2\2\u00b1\u00b2\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\u00b4\5\n\6\2\u00b4"+ - "\t\3\2\2\2\u00b5\u00c0\5\f\7\2\u00b6\u00b7\7\62\2\2\u00b7\u00b8\7\17\2"+ - "\2\u00b8\u00bd\5\16\b\2\u00b9\u00ba\7\5\2\2\u00ba\u00bc\5\16\b\2\u00bb"+ - "\u00b9\3\2\2\2\u00bc\u00bf\3\2\2\2\u00bd\u00bb\3\2\2\2\u00bd\u00be\3\2"+ - "\2\2\u00be\u00c1\3\2\2\2\u00bf\u00bd\3\2\2\2\u00c0\u00b6\3\2\2\2\u00c0"+ - "\u00c1\3\2\2\2\u00c1\u00c4\3\2\2\2\u00c2\u00c3\7)\2\2\u00c3\u00c5\t\7"+ - "\2\2\u00c4\u00c2\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\13\3\2\2\2\u00c6\u00cc"+ - "\5\20\t\2\u00c7\u00c8\7\3\2\2\u00c8\u00c9\5\n\6\2\u00c9\u00ca\7\4\2\2"+ - "\u00ca\u00cc\3\2\2\2\u00cb\u00c6\3\2\2\2\u00cb\u00c7\3\2\2\2\u00cc\r\3"+ - "\2\2\2\u00cd\u00cf\5*\26\2\u00ce\u00d0\t\b\2\2\u00cf\u00ce\3\2\2\2\u00cf"+ - "\u00d0\3\2\2\2\u00d0\17\3\2\2\2\u00d1\u00d3\7;\2\2\u00d2\u00d4\5\34\17"+ - "\2\u00d3\u00d2\3\2\2\2\u00d3\u00d4\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00da"+ - "\5\36\20\2\u00d6\u00d7\7\5\2\2\u00d7\u00d9\5\36\20\2\u00d8\u00d6\3\2\2"+ - "\2\u00d9\u00dc\3\2\2\2\u00da\u00d8\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00de"+ - "\3\2\2\2\u00dc\u00da\3\2\2\2\u00dd\u00df\5\22\n\2\u00de\u00dd\3\2\2\2"+ - "\u00de\u00df\3\2\2\2\u00df\u00e2\3\2\2\2\u00e0\u00e1\7D\2\2\u00e1\u00e3"+ - "\5,\27\2\u00e2\u00e0\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e7\3\2\2\2\u00e4"+ - "\u00e5\7!\2\2\u00e5\u00e6\7\17\2\2\u00e6\u00e8\5\24\13\2\u00e7\u00e4\3"+ - "\2\2\2\u00e7\u00e8\3\2\2\2\u00e8\u00eb\3\2\2\2\u00e9\u00ea\7\"\2\2\u00ea"+ - "\u00ec\5,\27\2\u00eb\u00e9\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\21\3\2\2"+ - "\2\u00ed\u00ee\7\35\2\2\u00ee\u00f3\5 \21\2\u00ef\u00f0\7\5\2\2\u00f0"+ - "\u00f2\5 \21\2\u00f1\u00ef\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3\u00f1\3\2"+ - "\2\2\u00f3\u00f4\3\2\2\2\u00f4\23\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f6\u00f8"+ - "\5\34\17\2\u00f7\u00f6\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8\u00f9\3\2\2\2"+ - "\u00f9\u00fe\5\26\f\2\u00fa\u00fb\7\5\2\2\u00fb\u00fd\5\26\f\2\u00fc\u00fa"+ - "\3\2\2\2\u00fd\u0100\3\2\2\2\u00fe\u00fc\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff"+ - "\25\3\2\2\2\u0100\u00fe\3\2\2\2\u0101\u0102\5\30\r\2\u0102\27\3\2\2\2"+ - "\u0103\u010c\7\3\2\2\u0104\u0109\5*\26\2\u0105\u0106\7\5\2\2\u0106\u0108"+ - "\5*\26\2\u0107\u0105\3\2\2\2\u0108\u010b\3\2\2\2\u0109\u0107\3\2\2\2\u0109"+ - "\u010a\3\2\2\2\u010a\u010d\3\2\2\2\u010b\u0109\3\2\2\2\u010c\u0104\3\2"+ - "\2\2\u010c\u010d\3\2\2\2\u010d\u010e\3\2\2\2\u010e\u0111\7\4\2\2\u010f"+ - "\u0111\5*\26\2\u0110\u0103\3\2\2\2\u0110\u010f\3\2\2\2\u0111\31\3\2\2"+ - "\2\u0112\u0113\5B\"\2\u0113\u0114\7\f\2\2\u0114\u0115\7\3\2\2\u0115\u0116"+ - "\5\n\6\2\u0116\u0117\7\4\2\2\u0117\33\3\2\2\2\u0118\u0119\t\t\2\2\u0119"+ - "\35\3\2\2\2\u011a\u011f\5*\26\2\u011b\u011d\7\f\2\2\u011c\u011b\3\2\2"+ - "\2\u011c\u011d\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u0120\5B\"\2\u011f\u011c"+ - "\3\2\2\2\u011f\u0120\3\2\2\2\u0120\37\3\2\2\2\u0121\u0125\5(\25\2\u0122"+ - "\u0124\5\"\22\2\u0123\u0122\3\2\2\2\u0124\u0127\3\2\2\2\u0125\u0123\3"+ - "\2\2\2\u0125\u0126\3\2\2\2\u0126!\3\2\2\2\u0127\u0125\3\2\2\2\u0128\u0129"+ - "\5$\23\2\u0129\u012a\7&\2\2\u012a\u012c\5(\25\2\u012b\u012d\5&\24\2\u012c"+ - "\u012b\3\2\2\2\u012c\u012d\3\2\2\2\u012d\u0134\3\2\2\2\u012e\u012f\7,"+ - "\2\2\u012f\u0130\5$\23\2\u0130\u0131\7&\2\2\u0131\u0132\5(\25\2\u0132"+ - "\u0134\3\2\2\2\u0133\u0128\3\2\2\2\u0133\u012e\3\2\2\2\u0134#\3\2\2\2"+ - "\u0135\u0137\7$\2\2\u0136\u0135\3\2\2\2\u0136\u0137\3\2\2\2\u0137\u0145"+ - "\3\2\2\2\u0138\u013a\7\'\2\2\u0139\u013b\7\63\2\2\u013a\u0139\3\2\2\2"+ - "\u013a\u013b\3\2\2\2\u013b\u0145\3\2\2\2\u013c\u013e\7\67\2\2\u013d\u013f"+ - "\7\63\2\2\u013e\u013d\3\2\2\2\u013e\u013f\3\2\2\2\u013f\u0145\3\2\2\2"+ - "\u0140\u0142\7\36\2\2\u0141\u0143\7\63\2\2\u0142\u0141\3\2\2\2\u0142\u0143"+ - "\3\2\2\2\u0143\u0145\3\2\2\2\u0144\u0136\3\2\2\2\u0144\u0138\3\2\2\2\u0144"+ - "\u013c\3\2\2\2\u0144\u0140\3\2\2\2\u0145%\3\2\2\2\u0146\u0147\7/\2\2\u0147"+ - "\u0155\5,\27\2\u0148\u0149\7B\2\2\u0149\u014a\7\3\2\2\u014a\u014f\5B\""+ - "\2\u014b\u014c\7\5\2\2\u014c\u014e\5B\"\2\u014d\u014b\3\2\2\2\u014e\u0151"+ - "\3\2\2\2\u014f\u014d\3\2\2\2\u014f\u0150\3\2\2\2\u0150\u0152\3\2\2\2\u0151"+ - "\u014f\3\2\2\2\u0152\u0153\7\4\2\2\u0153\u0155\3\2\2\2\u0154\u0146\3\2"+ - "\2\2\u0154\u0148\3\2\2\2\u0155\'\3\2\2\2\u0156\u015b\5D#\2\u0157\u0159"+ - "\7\f\2\2\u0158\u0157\3\2\2\2\u0158\u0159\3\2\2\2\u0159\u015a\3\2\2\2\u015a"+ - "\u015c\5@!\2\u015b\u0158\3\2\2\2\u015b\u015c\3\2\2\2\u015c\u0170\3\2\2"+ - "\2\u015d\u015e\7\3\2\2\u015e\u015f\5\n\6\2\u015f\u0164\7\4\2\2\u0160\u0162"+ - "\7\f\2\2\u0161\u0160\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0163\3\2\2\2\u0163"+ - "\u0165\5@!\2\u0164\u0161\3\2\2\2\u0164\u0165\3\2\2\2\u0165\u0170\3\2\2"+ - "\2\u0166\u0167\7\3\2\2\u0167\u0168\5 \21\2\u0168\u016d\7\4\2\2\u0169\u016b"+ - "\7\f\2\2\u016a\u0169\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u016c\3\2\2\2\u016c"+ - "\u016e\5@!\2\u016d\u016a\3\2\2\2\u016d\u016e\3\2\2\2\u016e\u0170\3\2\2"+ - "\2\u016f\u0156\3\2\2\2\u016f\u015d\3\2\2\2\u016f\u0166\3\2\2\2\u0170)"+ - "\3\2\2\2\u0171\u0172\5,\27\2\u0172+\3\2\2\2\u0173\u0174\b\27\1\2\u0174"+ - "\u0175\7-\2\2\u0175\u01a3\5,\27\n\u0176\u0177\7\30\2\2\u0177\u0178\7\3"+ - "\2\2\u0178\u0179\5\b\5\2\u0179\u017a\7\4\2\2\u017a\u01a3\3\2\2\2\u017b"+ - "\u017c\79\2\2\u017c\u017d\7\3\2\2\u017d\u0182\7S\2\2\u017e\u017f\7\5\2"+ - "\2\u017f\u0181\7S\2\2\u0180\u017e\3\2\2\2\u0181\u0184\3\2\2\2\u0182\u0180"+ - "\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0185\3\2\2\2\u0184\u0182\3\2\2\2\u0185"+ - "\u01a3\7\4\2\2\u0186\u0187\7+\2\2\u0187\u0188\7\3\2\2\u0188\u0189\5@!"+ - "\2\u0189\u018a\7\5\2\2\u018a\u018f\7S\2\2\u018b\u018c\7\5\2\2\u018c\u018e"+ - "\7S\2\2\u018d\u018b\3\2\2\2\u018e\u0191\3\2\2\2\u018f\u018d\3\2\2\2\u018f"+ - "\u0190\3\2\2\2\u0190\u0192\3\2\2\2\u0191\u018f\3\2\2\2\u0192\u0193\7\4"+ - "\2\2\u0193\u01a3\3\2\2\2\u0194\u0195\7+\2\2\u0195\u0196\7\3\2\2\u0196"+ - "\u0197\7S\2\2\u0197\u0198\7\5\2\2\u0198\u019d\7S\2\2\u0199\u019a\7\5\2"+ - "\2\u019a\u019c\7S\2\2\u019b\u0199\3\2\2\2\u019c\u019f\3\2\2\2\u019d\u019b"+ - "\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u01a0\3\2\2\2\u019f\u019d\3\2\2\2\u01a0"+ - "\u01a3\7\4\2\2\u01a1\u01a3\5.\30\2\u01a2\u0173\3\2\2\2\u01a2\u0176\3\2"+ - "\2\2\u01a2\u017b\3\2\2\2\u01a2\u0186\3\2\2\2\u01a2\u0194\3\2\2\2\u01a2"+ - "\u01a1\3\2\2\2\u01a3\u01ac\3\2\2\2\u01a4\u01a5\f\4\2\2\u01a5\u01a6\7\n"+ - "\2\2\u01a6\u01ab\5,\27\5\u01a7\u01a8\f\3\2\2\u01a8\u01a9\7\61\2\2\u01a9"+ - "\u01ab\5,\27\4\u01aa\u01a4\3\2\2\2\u01aa\u01a7\3\2\2\2\u01ab\u01ae\3\2"+ - "\2\2\u01ac\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad-\3\2\2\2\u01ae\u01ac"+ - "\3\2\2\2\u01af\u01b1\5\64\33\2\u01b0\u01b2\5\60\31\2\u01b1\u01b0\3\2\2"+ - "\2\u01b1\u01b2\3\2\2\2\u01b2/\3\2\2\2\u01b3\u01b5\7-\2\2\u01b4\u01b3\3"+ - "\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\u01b7\7\16\2\2\u01b7"+ - "\u01b8\5\64\33\2\u01b8\u01b9\7\n\2\2\u01b9\u01ba\5\64\33\2\u01ba\u01e2"+ - "\3\2\2\2\u01bb\u01bd\7-\2\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd"+ - "\u01be\3\2\2\2\u01be\u01bf\7#\2\2\u01bf\u01c0\7\3\2\2\u01c0\u01c5\5*\26"+ - "\2\u01c1\u01c2\7\5\2\2\u01c2\u01c4\5*\26\2\u01c3\u01c1\3\2\2\2\u01c4\u01c7"+ - "\3\2\2\2\u01c5\u01c3\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c8\3\2\2\2\u01c7"+ - "\u01c5\3\2\2\2\u01c8\u01c9\7\4\2\2\u01c9\u01e2\3\2\2\2\u01ca\u01cc\7-"+ - "\2\2\u01cb\u01ca\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd"+ - "\u01ce\7#\2\2\u01ce\u01cf\7\3\2\2\u01cf\u01d0\5\b\5\2\u01d0\u01d1\7\4"+ - "\2\2\u01d1\u01e2\3\2\2\2\u01d2\u01d4\7-\2\2\u01d3\u01d2\3\2\2\2\u01d3"+ - "\u01d4\3\2\2\2\u01d4\u01d5\3\2\2\2\u01d5\u01d6\7(\2\2\u01d6\u01e2\5\62"+ - "\32\2\u01d7\u01d9\7-\2\2\u01d8\u01d7\3\2\2\2\u01d8\u01d9\3\2\2\2\u01d9"+ - "\u01da\3\2\2\2\u01da\u01db\78\2\2\u01db\u01e2\7S\2\2\u01dc\u01de\7%\2"+ - "\2\u01dd\u01df\7-\2\2\u01de\u01dd\3\2\2\2\u01de\u01df\3\2\2\2\u01df\u01e0"+ - "\3\2\2\2\u01e0\u01e2\7.\2\2\u01e1\u01b4\3\2\2\2\u01e1\u01bc\3\2\2\2\u01e1"+ - "\u01cb\3\2\2\2\u01e1\u01d3\3\2\2\2\u01e1\u01d8\3\2\2\2\u01e1\u01dc\3\2"+ - "\2\2\u01e2\61\3\2\2\2\u01e3\u01e6\7S\2\2\u01e4\u01e5\7\26\2\2\u01e5\u01e7"+ - "\7S\2\2\u01e6\u01e4\3\2\2\2\u01e6\u01e7\3\2\2\2\u01e7\63\3\2\2\2\u01e8"+ - "\u01e9\b\33\1\2\u01e9\u01ed\5\66\34\2\u01ea\u01eb\t\n\2\2\u01eb\u01ed"+ - "\5\64\33\6\u01ec\u01e8\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ed\u01fa\3\2\2\2"+ - "\u01ee\u01ef\f\5\2\2\u01ef\u01f0\t\13\2\2\u01f0\u01f9\5\64\33\6\u01f1"+ - "\u01f2\f\4\2\2\u01f2\u01f3\t\n\2\2\u01f3\u01f9\5\64\33\5\u01f4\u01f5\f"+ - "\3\2\2\u01f5\u01f6\5:\36\2\u01f6\u01f7\5\64\33\4\u01f7\u01f9\3\2\2\2\u01f8"+ - "\u01ee\3\2\2\2\u01f8\u01f1\3\2\2\2\u01f8\u01f4\3\2\2\2\u01f9\u01fc\3\2"+ - "\2\2\u01fa\u01f8\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\65\3\2\2\2\u01fc\u01fa"+ - "\3\2\2\2\u01fd\u01fe\7\20\2\2\u01fe\u01ff\7\3\2\2\u01ff\u0200\5*\26\2"+ - "\u0200\u0201\7\f\2\2\u0201\u0202\5> \2\u0202\u0203\7\4\2\2\u0203\u022f"+ - "\3\2\2\2\u0204\u0205\7\32\2\2\u0205\u0206\7\3\2\2\u0206\u0207\5B\"\2\u0207"+ - "\u0208\7\35\2\2\u0208\u0209\5\64\33\2\u0209\u020a\7\4\2\2\u020a\u022f"+ - "\3\2\2\2\u020b\u022f\58\35\2\u020c\u022f\7N\2\2\u020d\u020e\5@!\2\u020e"+ - "\u020f\7R\2\2\u020f\u0211\3\2\2\2\u0210\u020d\3\2\2\2\u0210\u0211\3\2"+ - "\2\2\u0211\u0212\3\2\2\2\u0212\u022f\7N\2\2\u0213\u0214\5B\"\2\u0214\u0220"+ - "\7\3\2\2\u0215\u0217\5\34\17\2\u0216\u0215\3\2\2\2\u0216\u0217\3\2\2\2"+ - "\u0217\u0218\3\2\2\2\u0218\u021d\5*\26\2\u0219\u021a\7\5\2\2\u021a\u021c"+ - "\5*\26\2\u021b\u0219\3\2\2\2\u021c\u021f\3\2\2\2\u021d\u021b\3\2\2\2\u021d"+ - "\u021e\3\2\2\2\u021e\u0221\3\2\2\2\u021f\u021d\3\2\2\2\u0220\u0216\3\2"+ - "\2\2\u0220\u0221\3\2\2\2\u0221\u0222\3\2\2\2\u0222\u0223\7\4\2\2\u0223"+ - "\u022f\3\2\2\2\u0224\u0225\7\3\2\2\u0225\u0226\5\b\5\2\u0226\u0227\7\4"+ - "\2\2\u0227\u022f\3\2\2\2\u0228\u022f\5B\"\2\u0229\u022f\5@!\2\u022a\u022b"+ - "\7\3\2\2\u022b\u022c\5*\26\2\u022c\u022d\7\4\2\2\u022d\u022f\3\2\2\2\u022e"+ - "\u01fd\3\2\2\2\u022e\u0204\3\2\2\2\u022e\u020b\3\2\2\2\u022e\u020c\3\2"+ - "\2\2\u022e\u0210\3\2\2\2\u022e\u0213\3\2\2\2\u022e\u0224\3\2\2\2\u022e"+ - "\u0228\3\2\2\2\u022e\u0229\3\2\2\2\u022e\u022a\3\2\2\2\u022f\67\3\2\2"+ - "\2\u0230\u0239\7.\2\2\u0231\u0239\5J&\2\u0232\u0239\5<\37\2\u0233\u0235"+ - "\7S\2\2\u0234\u0233\3\2\2\2\u0235\u0236\3\2\2\2\u0236\u0234\3\2\2\2\u0236"+ - "\u0237\3\2\2\2\u0237\u0239\3\2\2\2\u0238\u0230\3\2\2\2\u0238\u0231\3\2"+ - "\2\2\u0238\u0232\3\2\2\2\u0238\u0234\3\2\2\2\u02399\3\2\2\2\u023a\u023b"+ - "\t\f\2\2\u023b;\3\2\2\2\u023c\u023d\t\r\2\2\u023d=\3\2\2\2\u023e\u023f"+ - "\5B\"\2\u023f?\3\2\2\2\u0240\u0241\5B\"\2\u0241\u0242\7R\2\2\u0242\u0244"+ - "\3\2\2\2\u0243\u0240\3\2\2\2\u0244\u0247\3\2\2\2\u0245\u0243\3\2\2\2\u0245"+ - "\u0246\3\2\2\2\u0246\u0248\3\2\2\2\u0247\u0245\3\2\2\2\u0248\u0249\5B"+ - "\"\2\u0249A\3\2\2\2\u024a\u024d\5F$\2\u024b\u024d\5H%\2\u024c\u024a\3"+ - "\2\2\2\u024c\u024b\3\2\2\2\u024dC\3\2\2\2\u024e\u024f\5B\"\2\u024f\u0250"+ - "\7\6\2\2\u0250\u0252\3\2\2\2\u0251\u024e\3\2\2\2\u0251\u0252\3\2\2\2\u0252"+ - "\u0253\3\2\2\2\u0253\u025b\7X\2\2\u0254\u0255\5B\"\2\u0255\u0256\7\6\2"+ - "\2\u0256\u0258\3\2\2\2\u0257\u0254\3\2\2\2\u0257\u0258\3\2\2\2\u0258\u0259"+ - "\3\2\2\2\u0259\u025b\5B\"\2\u025a\u0251\3\2\2\2\u025a\u0257\3\2\2\2\u025b"+ - "E\3\2\2\2\u025c\u025f\7Y\2\2\u025d\u025f\7Z\2\2\u025e\u025c\3\2\2\2\u025e"+ - "\u025d\3\2\2\2\u025fG\3\2\2\2\u0260\u0264\7V\2\2\u0261\u0264\5L\'\2\u0262"+ - "\u0264\7W\2\2\u0263\u0260\3\2\2\2\u0263\u0261\3\2\2\2\u0263\u0262\3\2"+ - "\2\2\u0264I\3\2\2\2\u0265\u0268\7U\2\2\u0266\u0268\7T\2\2\u0267\u0265"+ - "\3\2\2\2\u0267\u0266\3\2\2\2\u0268K\3\2\2\2\u0269\u026a\t\16\2\2\u026a"+ - "M\3\2\2\2[]_clnrx{\u0086\u0089\u0090\u0093\u0099\u009c\u009f\u00a2\u00a6"+ - "\u00ae\u00b1\u00bd\u00c0\u00c4\u00cb\u00cf\u00d3\u00da\u00de\u00e2\u00e7"+ - "\u00eb\u00f3\u00f7\u00fe\u0109\u010c\u0110\u011c\u011f\u0125\u012c\u0133"+ - "\u0136\u013a\u013e\u0142\u0144\u014f\u0154\u0158\u015b\u0161\u0164\u016a"+ - "\u016d\u016f\u0182\u018f\u019d\u01a2\u01aa\u01ac\u01b1\u01b4\u01bc\u01c5"+ - "\u01cb\u01d3\u01d8\u01de\u01e1\u01e6\u01ec\u01f8\u01fa\u0210\u0216\u021d"+ - "\u0220\u022e\u0236\u0238\u0245\u024c\u0251\u0257\u025a\u025e\u0263\u0267"; + "\2\2\2\u0089\u008a\3\2\2\2\u008a\u00ac\3\2\2\2\u008b\u008c\7=\2\2\u008c"+ + "\u00ac\7;\2\2\u008d\u008e\7>\2\2\u008e\u00ac\7\21\2\2\u008f\u0090\7>\2"+ + "\2\u0090\u0095\7@\2\2\u0091\u0093\7)\2\2\u0092\u0091\3\2\2\2\u0092\u0093"+ + "\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0096\5\62\32\2\u0095\u0092\3\2\2\2"+ + "\u0095\u0096\3\2\2\2\u0096\u00ac\3\2\2\2\u0097\u0098\7>\2\2\u0098\u009e"+ + "\7\22\2\2\u0099\u009b\7@\2\2\u009a\u009c\7)\2\2\u009b\u009a\3\2\2\2\u009b"+ + "\u009c\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u009f\5\62\32\2\u009e\u0099\3"+ + "\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a4\3\2\2\2\u00a0\u00a2\7)\2\2\u00a1"+ + "\u00a0\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a5\5\62"+ + "\32\2\u00a4\u00a1\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00ac\3\2\2\2\u00a6"+ + "\u00a7\7>\2\2\u00a7\u00ac\7C\2\2\u00a8\u00a9\7>\2\2\u00a9\u00aa\7?\2\2"+ + "\u00aa\u00ac\7C\2\2\u00abT\3\2\2\2\u00abU\3\2\2\2\u00abf\3\2\2\2\u00ab"+ + "u\3\2\2\2\u00ab}\3\2\2\2\u00ab\u0081\3\2\2\2\u00ab\u0083\3\2\2\2\u00ab"+ + "\u008b\3\2\2\2\u00ab\u008d\3\2\2\2\u00ab\u008f\3\2\2\2\u00ab\u0097\3\2"+ + "\2\2\u00ab\u00a6\3\2\2\2\u00ab\u00a8\3\2\2\2\u00ac\7\3\2\2\2\u00ad\u00ae"+ + "\7G\2\2\u00ae\u00b3\5\32\16\2\u00af\u00b0\7\5\2\2\u00b0\u00b2\5\32\16"+ + "\2\u00b1\u00af\3\2\2\2\u00b2\u00b5\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b3\u00b4"+ + "\3\2\2\2\u00b4\u00b7\3\2\2\2\u00b5\u00b3\3\2\2\2\u00b6\u00ad\3\2\2\2\u00b6"+ + "\u00b7\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00b9\5\n\6\2\u00b9\t\3\2\2\2"+ + "\u00ba\u00c5\5\f\7\2\u00bb\u00bc\7\63\2\2\u00bc\u00bd\7\17\2\2\u00bd\u00c2"+ + "\5\16\b\2\u00be\u00bf\7\5\2\2\u00bf\u00c1\5\16\b\2\u00c0\u00be\3\2\2\2"+ + "\u00c1\u00c4\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c6"+ + "\3\2\2\2\u00c4\u00c2\3\2\2\2\u00c5\u00bb\3\2\2\2\u00c5\u00c6\3\2\2\2\u00c6"+ + "\u00c9\3\2\2\2\u00c7\u00c8\7*\2\2\u00c8\u00ca\t\7\2\2\u00c9\u00c7\3\2"+ + "\2\2\u00c9\u00ca\3\2\2\2\u00ca\13\3\2\2\2\u00cb\u00d1\5\20\t\2\u00cc\u00cd"+ + "\7\3\2\2\u00cd\u00ce\5\n\6\2\u00ce\u00cf\7\4\2\2\u00cf\u00d1\3\2\2\2\u00d0"+ + "\u00cb\3\2\2\2\u00d0\u00cc\3\2\2\2\u00d1\r\3\2\2\2\u00d2\u00d4\5*\26\2"+ + "\u00d3\u00d5\t\b\2\2\u00d4\u00d3\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\17"+ + "\3\2\2\2\u00d6\u00d8\7<\2\2\u00d7\u00d9\5\34\17\2\u00d8\u00d7\3\2\2\2"+ + "\u00d8\u00d9\3\2\2\2\u00d9\u00da\3\2\2\2\u00da\u00df\5\36\20\2\u00db\u00dc"+ + "\7\5\2\2\u00dc\u00de\5\36\20\2\u00dd\u00db\3\2\2\2\u00de\u00e1\3\2\2\2"+ + "\u00df\u00dd\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0\u00e3\3\2\2\2\u00e1\u00df"+ + "\3\2\2\2\u00e2\u00e4\5\22\n\2\u00e3\u00e2\3\2\2\2\u00e3\u00e4\3\2\2\2"+ + "\u00e4\u00e7\3\2\2\2\u00e5\u00e6\7F\2\2\u00e6\u00e8\5,\27\2\u00e7\u00e5"+ + "\3\2\2\2\u00e7\u00e8\3\2\2\2\u00e8\u00ec\3\2\2\2\u00e9\u00ea\7\"\2\2\u00ea"+ + "\u00eb\7\17\2\2\u00eb\u00ed\5\24\13\2\u00ec\u00e9\3\2\2\2\u00ec\u00ed"+ + "\3\2\2\2\u00ed\u00f0\3\2\2\2\u00ee\u00ef\7#\2\2\u00ef\u00f1\5,\27\2\u00f0"+ + "\u00ee\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1\21\3\2\2\2\u00f2\u00f3\7\36\2"+ + "\2\u00f3\u00f8\5 \21\2\u00f4\u00f5\7\5\2\2\u00f5\u00f7\5 \21\2\u00f6\u00f4"+ + "\3\2\2\2\u00f7\u00fa\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9"+ + "\23\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fd\5\34\17\2\u00fc\u00fb\3\2"+ + "\2\2\u00fc\u00fd\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe\u0103\5\26\f\2\u00ff"+ + "\u0100\7\5\2\2\u0100\u0102\5\26\f\2\u0101\u00ff\3\2\2\2\u0102\u0105\3"+ + "\2\2\2\u0103\u0101\3\2\2\2\u0103\u0104\3\2\2\2\u0104\25\3\2\2\2\u0105"+ + "\u0103\3\2\2\2\u0106\u0107\5\30\r\2\u0107\27\3\2\2\2\u0108\u0111\7\3\2"+ + "\2\u0109\u010e\5*\26\2\u010a\u010b\7\5\2\2\u010b\u010d\5*\26\2\u010c\u010a"+ + "\3\2\2\2\u010d\u0110\3\2\2\2\u010e\u010c\3\2\2\2\u010e\u010f\3\2\2\2\u010f"+ + "\u0112\3\2\2\2\u0110\u010e\3\2\2\2\u0111\u0109\3\2\2\2\u0111\u0112\3\2"+ + "\2\2\u0112\u0113\3\2\2\2\u0113\u0116\7\4\2\2\u0114\u0116\5*\26\2\u0115"+ + "\u0108\3\2\2\2\u0115\u0114\3\2\2\2\u0116\31\3\2\2\2\u0117\u0118\5B\"\2"+ + "\u0118\u0119\7\f\2\2\u0119\u011a\7\3\2\2\u011a\u011b\5\n\6\2\u011b\u011c"+ + "\7\4\2\2\u011c\33\3\2\2\2\u011d\u011e\t\t\2\2\u011e\35\3\2\2\2\u011f\u0124"+ + "\5*\26\2\u0120\u0122\7\f\2\2\u0121\u0120\3\2\2\2\u0121\u0122\3\2\2\2\u0122"+ + "\u0123\3\2\2\2\u0123\u0125\5B\"\2\u0124\u0121\3\2\2\2\u0124\u0125\3\2"+ + "\2\2\u0125\37\3\2\2\2\u0126\u012a\5(\25\2\u0127\u0129\5\"\22\2\u0128\u0127"+ + "\3\2\2\2\u0129\u012c\3\2\2\2\u012a\u0128\3\2\2\2\u012a\u012b\3\2\2\2\u012b"+ + "!\3\2\2\2\u012c\u012a\3\2\2\2\u012d\u012e\5$\23\2\u012e\u012f\7\'\2\2"+ + "\u012f\u0131\5(\25\2\u0130\u0132\5&\24\2\u0131\u0130\3\2\2\2\u0131\u0132"+ + "\3\2\2\2\u0132\u0139\3\2\2\2\u0133\u0134\7-\2\2\u0134\u0135\5$\23\2\u0135"+ + "\u0136\7\'\2\2\u0136\u0137\5(\25\2\u0137\u0139\3\2\2\2\u0138\u012d\3\2"+ + "\2\2\u0138\u0133\3\2\2\2\u0139#\3\2\2\2\u013a\u013c\7%\2\2\u013b\u013a"+ + "\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u014a\3\2\2\2\u013d\u013f\7(\2\2\u013e"+ + "\u0140\7\64\2\2\u013f\u013e\3\2\2\2\u013f\u0140\3\2\2\2\u0140\u014a\3"+ + "\2\2\2\u0141\u0143\78\2\2\u0142\u0144\7\64\2\2\u0143\u0142\3\2\2\2\u0143"+ + "\u0144\3\2\2\2\u0144\u014a\3\2\2\2\u0145\u0147\7\37\2\2\u0146\u0148\7"+ + "\64\2\2\u0147\u0146\3\2\2\2\u0147\u0148\3\2\2\2\u0148\u014a\3\2\2\2\u0149"+ + "\u013b\3\2\2\2\u0149\u013d\3\2\2\2\u0149\u0141\3\2\2\2\u0149\u0145\3\2"+ + "\2\2\u014a%\3\2\2\2\u014b\u014c\7\60\2\2\u014c\u015a\5,\27\2\u014d\u014e"+ + "\7D\2\2\u014e\u014f\7\3\2\2\u014f\u0154\5B\"\2\u0150\u0151\7\5\2\2\u0151"+ + "\u0153\5B\"\2\u0152\u0150\3\2\2\2\u0153\u0156\3\2\2\2\u0154\u0152\3\2"+ + "\2\2\u0154\u0155\3\2\2\2\u0155\u0157\3\2\2\2\u0156\u0154\3\2\2\2\u0157"+ + "\u0158\7\4\2\2\u0158\u015a\3\2\2\2\u0159\u014b\3\2\2\2\u0159\u014d\3\2"+ + "\2\2\u015a\'\3\2\2\2\u015b\u0160\5D#\2\u015c\u015e\7\f\2\2\u015d\u015c"+ + "\3\2\2\2\u015d\u015e\3\2\2\2\u015e\u015f\3\2\2\2\u015f\u0161\5@!\2\u0160"+ + "\u015d\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u0175\3\2\2\2\u0162\u0163\7\3"+ + "\2\2\u0163\u0164\5\n\6\2\u0164\u0169\7\4\2\2\u0165\u0167\7\f\2\2\u0166"+ + "\u0165\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u016a\5@"+ + "!\2\u0169\u0166\3\2\2\2\u0169\u016a\3\2\2\2\u016a\u0175\3\2\2\2\u016b"+ + "\u016c\7\3\2\2\u016c\u016d\5 \21\2\u016d\u0172\7\4\2\2\u016e\u0170\7\f"+ + "\2\2\u016f\u016e\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u0171\3\2\2\2\u0171"+ + "\u0173\5@!\2\u0172\u016f\3\2\2\2\u0172\u0173\3\2\2\2\u0173\u0175\3\2\2"+ + "\2\u0174\u015b\3\2\2\2\u0174\u0162\3\2\2\2\u0174\u016b\3\2\2\2\u0175)"+ + "\3\2\2\2\u0176\u0177\5,\27\2\u0177+\3\2\2\2\u0178\u0179\b\27\1\2\u0179"+ + "\u017a\7.\2\2\u017a\u01a8\5,\27\n\u017b\u017c\7\31\2\2\u017c\u017d\7\3"+ + "\2\2\u017d\u017e\5\b\5\2\u017e\u017f\7\4\2\2\u017f\u01a8\3\2\2\2\u0180"+ + "\u0181\7:\2\2\u0181\u0182\7\3\2\2\u0182\u0187\7U\2\2\u0183\u0184\7\5\2"+ + "\2\u0184\u0186\7U\2\2\u0185\u0183\3\2\2\2\u0186\u0189\3\2\2\2\u0187\u0185"+ + "\3\2\2\2\u0187\u0188\3\2\2\2\u0188\u018a\3\2\2\2\u0189\u0187\3\2\2\2\u018a"+ + "\u01a8\7\4\2\2\u018b\u018c\7,\2\2\u018c\u018d\7\3\2\2\u018d\u018e\5@!"+ + "\2\u018e\u018f\7\5\2\2\u018f\u0194\7U\2\2\u0190\u0191\7\5\2\2\u0191\u0193"+ + "\7U\2\2\u0192\u0190\3\2\2\2\u0193\u0196\3\2\2\2\u0194\u0192\3\2\2\2\u0194"+ + "\u0195\3\2\2\2\u0195\u0197\3\2\2\2\u0196\u0194\3\2\2\2\u0197\u0198\7\4"+ + "\2\2\u0198\u01a8\3\2\2\2\u0199\u019a\7,\2\2\u019a\u019b\7\3\2\2\u019b"+ + "\u019c\7U\2\2\u019c\u019d\7\5\2\2\u019d\u01a2\7U\2\2\u019e\u019f\7\5\2"+ + "\2\u019f\u01a1\7U\2\2\u01a0\u019e\3\2\2\2\u01a1\u01a4\3\2\2\2\u01a2\u01a0"+ + "\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a5"+ + "\u01a8\7\4\2\2\u01a6\u01a8\5.\30\2\u01a7\u0178\3\2\2\2\u01a7\u017b\3\2"+ + "\2\2\u01a7\u0180\3\2\2\2\u01a7\u018b\3\2\2\2\u01a7\u0199\3\2\2\2\u01a7"+ + "\u01a6\3\2\2\2\u01a8\u01b1\3\2\2\2\u01a9\u01aa\f\4\2\2\u01aa\u01ab\7\n"+ + "\2\2\u01ab\u01b0\5,\27\5\u01ac\u01ad\f\3\2\2\u01ad\u01ae\7\62\2\2\u01ae"+ + "\u01b0\5,\27\4\u01af\u01a9\3\2\2\2\u01af\u01ac\3\2\2\2\u01b0\u01b3\3\2"+ + "\2\2\u01b1\u01af\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2-\3\2\2\2\u01b3\u01b1"+ + "\3\2\2\2\u01b4\u01b6\5\64\33\2\u01b5\u01b7\5\60\31\2\u01b6\u01b5\3\2\2"+ + "\2\u01b6\u01b7\3\2\2\2\u01b7/\3\2\2\2\u01b8\u01ba\7.\2\2\u01b9\u01b8\3"+ + "\2\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01bc\7\16\2\2\u01bc"+ + "\u01bd\5\64\33\2\u01bd\u01be\7\n\2\2\u01be\u01bf\5\64\33\2\u01bf\u01e7"+ + "\3\2\2\2\u01c0\u01c2\7.\2\2\u01c1\u01c0\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2"+ + "\u01c3\3\2\2\2\u01c3\u01c4\7$\2\2\u01c4\u01c5\7\3\2\2\u01c5\u01ca\5*\26"+ + "\2\u01c6\u01c7\7\5\2\2\u01c7\u01c9\5*\26\2\u01c8\u01c6\3\2\2\2\u01c9\u01cc"+ + "\3\2\2\2\u01ca\u01c8\3\2\2\2\u01ca\u01cb\3\2\2\2\u01cb\u01cd\3\2\2\2\u01cc"+ + "\u01ca\3\2\2\2\u01cd\u01ce\7\4\2\2\u01ce\u01e7\3\2\2\2\u01cf\u01d1\7."+ + "\2\2\u01d0\u01cf\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d2\3\2\2\2\u01d2"+ + "\u01d3\7$\2\2\u01d3\u01d4\7\3\2\2\u01d4\u01d5\5\b\5\2\u01d5\u01d6\7\4"+ + "\2\2\u01d6\u01e7\3\2\2\2\u01d7\u01d9\7.\2\2\u01d8\u01d7\3\2\2\2\u01d8"+ + "\u01d9\3\2\2\2\u01d9\u01da\3\2\2\2\u01da\u01db\7)\2\2\u01db\u01e7\5\62"+ + "\32\2\u01dc\u01de\7.\2\2\u01dd\u01dc\3\2\2\2\u01dd\u01de\3\2\2\2\u01de"+ + "\u01df\3\2\2\2\u01df\u01e0\79\2\2\u01e0\u01e7\7U\2\2\u01e1\u01e3\7&\2"+ + "\2\u01e2\u01e4\7.\2\2\u01e3\u01e2\3\2\2\2\u01e3\u01e4\3\2\2\2\u01e4\u01e5"+ + "\3\2\2\2\u01e5\u01e7\7/\2\2\u01e6\u01b9\3\2\2\2\u01e6\u01c1\3\2\2\2\u01e6"+ + "\u01d0\3\2\2\2\u01e6\u01d8\3\2\2\2\u01e6\u01dd\3\2\2\2\u01e6\u01e1\3\2"+ + "\2\2\u01e7\61\3\2\2\2\u01e8\u01eb\7U\2\2\u01e9\u01ea\7\27\2\2\u01ea\u01ec"+ + "\7U\2\2\u01eb\u01e9\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\63\3\2\2\2\u01ed"+ + "\u01ee\b\33\1\2\u01ee\u01f2\5\66\34\2\u01ef\u01f0\t\n\2\2\u01f0\u01f2"+ + "\5\64\33\6\u01f1\u01ed\3\2\2\2\u01f1\u01ef\3\2\2\2\u01f2\u01ff\3\2\2\2"+ + "\u01f3\u01f4\f\5\2\2\u01f4\u01f5\t\13\2\2\u01f5\u01fe\5\64\33\6\u01f6"+ + "\u01f7\f\4\2\2\u01f7\u01f8\t\n\2\2\u01f8\u01fe\5\64\33\5\u01f9\u01fa\f"+ + "\3\2\2\u01fa\u01fb\5:\36\2\u01fb\u01fc\5\64\33\4\u01fc\u01fe\3\2\2\2\u01fd"+ + "\u01f3\3\2\2\2\u01fd\u01f6\3\2\2\2\u01fd\u01f9\3\2\2\2\u01fe\u0201\3\2"+ + "\2\2\u01ff\u01fd\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\65\3\2\2\2\u0201\u01ff"+ + "\3\2\2\2\u0202\u0203\7\20\2\2\u0203\u0204\7\3\2\2\u0204\u0205\5*\26\2"+ + "\u0205\u0206\7\f\2\2\u0206\u0207\5> \2\u0207\u0208\7\4\2\2\u0208\u0234"+ + "\3\2\2\2\u0209\u020a\7\33\2\2\u020a\u020b\7\3\2\2\u020b\u020c\5B\"\2\u020c"+ + "\u020d\7\36\2\2\u020d\u020e\5\64\33\2\u020e\u020f\7\4\2\2\u020f\u0234"+ + "\3\2\2\2\u0210\u0234\58\35\2\u0211\u0234\7P\2\2\u0212\u0213\5@!\2\u0213"+ + "\u0214\7T\2\2\u0214\u0216\3\2\2\2\u0215\u0212\3\2\2\2\u0215\u0216\3\2"+ + "\2\2\u0216\u0217\3\2\2\2\u0217\u0234\7P\2\2\u0218\u0219\5B\"\2\u0219\u0225"+ + "\7\3\2\2\u021a\u021c\5\34\17\2\u021b\u021a\3\2\2\2\u021b\u021c\3\2\2\2"+ + "\u021c\u021d\3\2\2\2\u021d\u0222\5*\26\2\u021e\u021f\7\5\2\2\u021f\u0221"+ + "\5*\26\2\u0220\u021e\3\2\2\2\u0221\u0224\3\2\2\2\u0222\u0220\3\2\2\2\u0222"+ + "\u0223\3\2\2\2\u0223\u0226\3\2\2\2\u0224\u0222\3\2\2\2\u0225\u021b\3\2"+ + "\2\2\u0225\u0226\3\2\2\2\u0226\u0227\3\2\2\2\u0227\u0228\7\4\2\2\u0228"+ + "\u0234\3\2\2\2\u0229\u022a\7\3\2\2\u022a\u022b\5\b\5\2\u022b\u022c\7\4"+ + "\2\2\u022c\u0234\3\2\2\2\u022d\u0234\5B\"\2\u022e\u0234\5@!\2\u022f\u0230"+ + "\7\3\2\2\u0230\u0231\5*\26\2\u0231\u0232\7\4\2\2\u0232\u0234\3\2\2\2\u0233"+ + "\u0202\3\2\2\2\u0233\u0209\3\2\2\2\u0233\u0210\3\2\2\2\u0233\u0211\3\2"+ + "\2\2\u0233\u0215\3\2\2\2\u0233\u0218\3\2\2\2\u0233\u0229\3\2\2\2\u0233"+ + "\u022d\3\2\2\2\u0233\u022e\3\2\2\2\u0233\u022f\3\2\2\2\u0234\67\3\2\2"+ + "\2\u0235\u023e\7/\2\2\u0236\u023e\5J&\2\u0237\u023e\5<\37\2\u0238\u023a"+ + "\7U\2\2\u0239\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b\u0239\3\2\2\2\u023b"+ + "\u023c\3\2\2\2\u023c\u023e\3\2\2\2\u023d\u0235\3\2\2\2\u023d\u0236\3\2"+ + "\2\2\u023d\u0237\3\2\2\2\u023d\u0239\3\2\2\2\u023e9\3\2\2\2\u023f\u0240"+ + "\t\f\2\2\u0240;\3\2\2\2\u0241\u0242\t\r\2\2\u0242=\3\2\2\2\u0243\u0244"+ + "\5B\"\2\u0244?\3\2\2\2\u0245\u0246\5B\"\2\u0246\u0247\7T\2\2\u0247\u0249"+ + "\3\2\2\2\u0248\u0245\3\2\2\2\u0249\u024c\3\2\2\2\u024a\u0248\3\2\2\2\u024a"+ + "\u024b\3\2\2\2\u024b\u024d\3\2\2\2\u024c\u024a\3\2\2\2\u024d\u024e\5B"+ + "\"\2\u024eA\3\2\2\2\u024f\u0252\5F$\2\u0250\u0252\5H%\2\u0251\u024f\3"+ + "\2\2\2\u0251\u0250\3\2\2\2\u0252C\3\2\2\2\u0253\u0254\5B\"\2\u0254\u0255"+ + "\7\6\2\2\u0255\u0257\3\2\2\2\u0256\u0253\3\2\2\2\u0256\u0257\3\2\2\2\u0257"+ + "\u0258\3\2\2\2\u0258\u0260\7Z\2\2\u0259\u025a\5B\"\2\u025a\u025b\7\6\2"+ + "\2\u025b\u025d\3\2\2\2\u025c\u0259\3\2\2\2\u025c\u025d\3\2\2\2\u025d\u025e"+ + "\3\2\2\2\u025e\u0260\5B\"\2\u025f\u0256\3\2\2\2\u025f\u025c\3\2\2\2\u0260"+ + "E\3\2\2\2\u0261\u0264\7[\2\2\u0262\u0264\7\\\2\2\u0263\u0261\3\2\2\2\u0263"+ + "\u0262\3\2\2\2\u0264G\3\2\2\2\u0265\u0269\7X\2\2\u0266\u0269\5L\'\2\u0267"+ + "\u0269\7Y\2\2\u0268\u0265\3\2\2\2\u0268\u0266\3\2\2\2\u0268\u0267\3\2"+ + "\2\2\u0269I\3\2\2\2\u026a\u026d\7W\2\2\u026b\u026d\7V\2\2\u026c\u026a"+ + "\3\2\2\2\u026c\u026b\3\2\2\2\u026dK\3\2\2\2\u026e\u026f\t\16\2\2\u026f"+ + "M\3\2\2\2[]_clnrx{\u0086\u0089\u0092\u0095\u009b\u009e\u00a1\u00a4\u00ab"+ + "\u00b3\u00b6\u00c2\u00c5\u00c9\u00d0\u00d4\u00d8\u00df\u00e3\u00e7\u00ec"+ + "\u00f0\u00f8\u00fc\u0103\u010e\u0111\u0115\u0121\u0124\u012a\u0131\u0138"+ + "\u013b\u013f\u0143\u0147\u0149\u0154\u0159\u015d\u0160\u0166\u0169\u016f"+ + "\u0172\u0174\u0187\u0194\u01a2\u01a7\u01af\u01b1\u01b6\u01b9\u01c1\u01ca"+ + "\u01d0\u01d8\u01dd\u01e3\u01e6\u01eb\u01f1\u01fd\u01ff\u0215\u021b\u0222"+ + "\u0225\u0233\u023b\u023d\u024a\u0251\u0256\u025c\u025f\u0263\u0268\u026c"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java index 9f600e8f87e..04933d09c7c 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java @@ -76,6 +76,13 @@ interface SqlBaseVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitShowSchemas(SqlBaseParser.ShowSchemasContext ctx); + /** + * Visit a parse tree produced by the {@code sysCatalogs} + * labeled alternative in {@link SqlBaseParser#statement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSysCatalogs(SqlBaseParser.SysCatalogsContext ctx); /** * Visit a parse tree produced by the {@code sysTables} * labeled alternative in {@link SqlBaseParser#statement}. @@ -97,6 +104,13 @@ interface SqlBaseVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitSysTypes(SqlBaseParser.SysTypesContext ctx); + /** + * Visit a parse tree produced by the {@code sysTableTypes} + * labeled alternative in {@link SqlBaseParser#statement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSysTableTypes(SqlBaseParser.SysTableTypesContext ctx); /** * Visit a parse tree produced by {@link SqlBaseParser#query}. * @param ctx the parse tree diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysCatalogs.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysCatalogs.java new file mode 100644 index 00000000000..0aa2af9c202 --- /dev/null +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysCatalogs.java @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +package org.elasticsearch.xpack.sql.plan.logical.command.sys; + +import org.elasticsearch.action.ActionListener; +import org.elasticsearch.xpack.sql.expression.Attribute; +import org.elasticsearch.xpack.sql.plan.logical.command.Command; +import org.elasticsearch.xpack.sql.session.Rows; +import org.elasticsearch.xpack.sql.session.SchemaRowSet; +import org.elasticsearch.xpack.sql.session.SqlSession; +import org.elasticsearch.xpack.sql.tree.Location; +import org.elasticsearch.xpack.sql.tree.NodeInfo; + +import java.util.List; + +import static java.util.Collections.singletonList; + +/** + * System command returning the catalogs (clusters) available. + * Currently returns only the current cluster name. + */ +public class SysCatalogs extends Command { + + public SysCatalogs(Location location) { + super(location); + } + + @Override + protected NodeInfo info() { + return NodeInfo.create(this); + } + + @Override + public List output() { + return singletonList(keyword("TABLE_CAT")); + } + + @Override + public final void execute(SqlSession session, ActionListener listener) { + String cluster = session.indexResolver().clusterName(); + listener.onResponse(Rows.of(output(), singletonList(singletonList(cluster)))); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null || getClass() != obj.getClass()) { + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTableTypes.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTableTypes.java new file mode 100644 index 00000000000..6f395b3ef34 --- /dev/null +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTableTypes.java @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +package org.elasticsearch.xpack.sql.plan.logical.command.sys; + +import org.elasticsearch.action.ActionListener; +import org.elasticsearch.xpack.sql.analysis.index.IndexResolver.IndexType; +import org.elasticsearch.xpack.sql.expression.Attribute; +import org.elasticsearch.xpack.sql.plan.logical.command.Command; +import org.elasticsearch.xpack.sql.session.Rows; +import org.elasticsearch.xpack.sql.session.SchemaRowSet; +import org.elasticsearch.xpack.sql.session.SqlSession; +import org.elasticsearch.xpack.sql.tree.Location; +import org.elasticsearch.xpack.sql.tree.NodeInfo; + +import java.util.List; +import java.util.stream.Stream; + +import static java.util.Collections.singletonList; +import static java.util.stream.Collectors.toList; + +/** + * System command returning the types of tables supported, + * index and alias. + */ +public class SysTableTypes extends Command { + + public SysTableTypes(Location location) { + super(location); + } + + @Override + protected NodeInfo info() { + return NodeInfo.create(this); + } + + @Override + public List output() { + return singletonList(keyword("TABLE_TYPE")); + } + + @Override + public final void execute(SqlSession session, ActionListener listener) { + listener.onResponse(Rows.of(output(), Stream.of(IndexType.values()) + .map(t -> singletonList(t.toSql())) + .collect(toList()))); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null || getClass() != obj.getClass()) { + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/session/AbstractRowSet.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/session/AbstractRowSet.java index ed36871d3fc..6420953647d 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/session/AbstractRowSet.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/session/AbstractRowSet.java @@ -12,8 +12,8 @@ public abstract class AbstractRowSet implements RowSet { @Override public Object column(int index) { - Check.isTrue(index >= 0, "Invalid index %d; needs to be positive", index); - Check.isTrue(index < columnCount(), "Invalid index %d for row of size %d", index, columnCount()); + Check.isTrue(index >= 0, "Invalid index {}; needs to be positive", index); + Check.isTrue(index < columnCount(), "Invalid index {} for row of size {}", index, columnCount()); Check.isTrue(hasCurrentRow(), "RowSet contains no (more) entries; use hasCurrent() to check its status"); return getColumn(index); } diff --git a/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysCatalogTests.java b/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysCatalogTests.java new file mode 100644 index 00000000000..84d73337271 --- /dev/null +++ b/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysCatalogTests.java @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +package org.elasticsearch.xpack.sql.plan.logical.command.sys; + +import org.elasticsearch.action.ActionListener; +import org.elasticsearch.common.collect.Tuple; +import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.xpack.sql.analysis.analyzer.Analyzer; +import org.elasticsearch.xpack.sql.analysis.index.EsIndex; +import org.elasticsearch.xpack.sql.analysis.index.IndexResolution; +import org.elasticsearch.xpack.sql.analysis.index.IndexResolver; +import org.elasticsearch.xpack.sql.expression.function.FunctionRegistry; +import org.elasticsearch.xpack.sql.parser.SqlParser; +import org.elasticsearch.xpack.sql.plan.logical.command.Command; +import org.elasticsearch.xpack.sql.session.SqlSession; +import org.elasticsearch.xpack.sql.type.TypesTests; +import org.joda.time.DateTimeZone; + +import static org.mockito.Mockito.mock; + +public class SysCatalogTests extends ESTestCase { + + private final SqlParser parser = new SqlParser(DateTimeZone.UTC); + + private Tuple sql(String sql) { + EsIndex test = new EsIndex("test", TypesTests.loadMapping("mapping-multi-field-with-nested.json", true)); + Analyzer analyzer = new Analyzer(new FunctionRegistry(), IndexResolution.valid(test), DateTimeZone.UTC); + Command cmd = (Command) analyzer.analyze(parser.createStatement(sql), true); + + IndexResolver resolver = mock(IndexResolver.class); + SqlSession session = new SqlSession(null, null, null, resolver, null, null, null); + return new Tuple<>(cmd, session); + } + + public void testSysCatalogs() throws Exception { + Tuple sql = sql("SYS TABLE TYPES"); + + sql.v1().execute(sql.v2(), ActionListener.wrap(r -> { + assertEquals(2, r.size()); + assertEquals("BASE TABLE", r.column(0)); + r.advanceRow(); + assertEquals("ALIAS", r.column(0)); + }, ex -> fail(ex.getMessage()))); + } +} \ No newline at end of file diff --git a/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTableTypesTests.java b/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTableTypesTests.java new file mode 100644 index 00000000000..8568fed6867 --- /dev/null +++ b/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTableTypesTests.java @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +package org.elasticsearch.xpack.sql.plan.logical.command.sys; + +import org.elasticsearch.action.ActionListener; +import org.elasticsearch.common.collect.Tuple; +import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.xpack.sql.analysis.analyzer.Analyzer; +import org.elasticsearch.xpack.sql.analysis.index.EsIndex; +import org.elasticsearch.xpack.sql.analysis.index.IndexResolution; +import org.elasticsearch.xpack.sql.analysis.index.IndexResolver; +import org.elasticsearch.xpack.sql.expression.function.FunctionRegistry; +import org.elasticsearch.xpack.sql.parser.SqlParser; +import org.elasticsearch.xpack.sql.plan.logical.command.Command; +import org.elasticsearch.xpack.sql.session.SqlSession; +import org.elasticsearch.xpack.sql.type.TypesTests; +import org.joda.time.DateTimeZone; + +import static java.util.Collections.singletonList; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class SysTableTypesTests extends ESTestCase { + + private final SqlParser parser = new SqlParser(DateTimeZone.UTC); + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private Tuple sql(String sql) { + EsIndex test = new EsIndex("test", TypesTests.loadMapping("mapping-multi-field-with-nested.json", true)); + Analyzer analyzer = new Analyzer(new FunctionRegistry(), IndexResolution.valid(test), DateTimeZone.UTC); + Command cmd = (Command) analyzer.analyze(parser.createStatement(sql), true); + + IndexResolver resolver = mock(IndexResolver.class); + when(resolver.clusterName()).thenReturn("cluster"); + + doAnswer(invocation -> { + ((ActionListener) invocation.getArguments()[2]).onResponse(singletonList(test)); + return Void.TYPE; + }).when(resolver).resolveAsSeparateMappings(any(), any(), any()); + + SqlSession session = new SqlSession(null, null, null, resolver, null, null, null); + return new Tuple<>(cmd, session); + } + + public void testSysCatalogs() throws Exception { + Tuple sql = sql("SYS CATALOGS"); + + sql.v1().execute(sql.v2(), ActionListener.wrap(r -> { + assertEquals(1, r.size()); + assertEquals("cluster", r.column(0)); + }, ex -> fail(ex.getMessage()))); + } +} \ No newline at end of file diff --git a/qa/sql/src/main/resources/command-sys.csv-spec b/qa/sql/src/main/resources/command-sys.csv-spec new file mode 100644 index 00000000000..38f3772f76c --- /dev/null +++ b/qa/sql/src/main/resources/command-sys.csv-spec @@ -0,0 +1,11 @@ +// +// Sys Commands +// + +sysTableTypes +SYS TABLE TYPES; + + TABLE_TYPE:s +BASE TABLE +ALIAS +;